MCP anpassen: Datenbank und lokale APIs mit dem KI-Agent verbinden
Warum MCP für Power-User wichtig ist
Vor MCP hatte jede IDE ihr eigenes Plugin-Format. Anthropics Model Context Protocol standardisiert, wie ein KI-Client Fähigkeiten entdeckt: Tools auflisten → Tool mit JSON-Args aufrufen → strukturierte Ergebnisse zurückgeben. Das bedeutet: Ein Postgres-Read-only-Server kann Claude Desktop, Cursor und andere MCP-Hosts bedienen, ohne Integrationen neu zu schreiben.
Hardcore-Entwickler interessieren sich dafür, weil:
- Datenbanken abfragbarer Kontext werden, ohne Schema-Dumps in jeden Chat zu kopieren
- Interne APIs (Billing, Feature Flags, Deploy-Status) als typisierte Tools erscheinen statt als fragiles Copy-Paste
- IDE- und Agent-Stacks dieselbe Toolchain teilen, wenn Sie auch Claude-Code-Alternativen oder OpenClaw auf einem Remote-Mac betreiben
Offizielle Referenz: Model Context Protocol specification und Anthropic MCP documentation.
MCP-Architektur in 60 Sekunden
┌─────────────┐ JSON-RPC ┌──────────────────┐ │ MCP Host │ ◄──────────────► │ MCP Server │ │ (Claude / │ tools/resources │ (your custom code)│ │ Cursor) │ │ → DB / API / CLI │ └─────────────┘ └──────────────────┘
| Rolle | Beispiele | Verantwortung |
|---|---|---|
| Host | Claude Desktop, Cursor, Claude Code | Startet Server, sendet tools/call, rendert Ergebnisse |
| Server | Ihr Node-/Python-Binary | Implementiert list_tools, call_tool, optional resources/read |
| Transport | stdio, SSE | Überträgt JSON-RPC-Nachrichten zwischen Host und Server |
Tiefen-Faustregel: Ein Server pro Vertrauensgrenze. Legen Sie keinen Produktions-Schreibzugriff und experimentelle Shell-Tools in dieselbe Server-Binary — Prozesse trennen, damit Sie einen Config-Block widerrufen können, ohne den anderen anzufassen.
Transport-Entscheidungsmatrix
| Transport | Latenz | Am besten für | Config-Datei (typisch) |
|---|---|---|---|
| stdio | Niedrigste | Lokale DB auf Laptop, Einzelnutzer | claude_desktop_config.json, Cursor mcp.json |
| SSE (HTTP) | +1 Hop | Server auf NAS, Remote-Mac, Docker-Sidecar | Host-URL http://host:port/sse |
| Streamable HTTP (neuere Hosts) | Ähnlich wie SSE | Wie SSE; Host-Version prüfen | Je nach Host-Docs |
| Szenario | Empfohlener Transport |
|---|---|
| SQLite-Datei auf derselben Maschine wie Claude Desktop | stdio |
| PostgreSQL im Büro-LAN | SSE-Server auf Jump-Host ODER stdio via SSH-Wrapper |
| 5 interne REST-Microservices | Ein Gateway-MCP-Server mit namespaced Tools |
| Team-weiter Tool-Katalog | Zentraler MCP-Server auf always-on Host (siehe Remote-Mac-Setup) |
Muster 1 — Datenbank-MCP-Server
Ziel: Dem Modell read-only SQL (oder vordefinierte Queries) gegen PostgreSQL, MySQL oder SQLite ausführen lassen.
Design-Constraints:
- Benannte Tools (
query_sales_summary,list_tables) statt rohem beliebigem SQL bereitstellen, wenn möglich - Zeilenlimits (z. B. max. 200 Zeilen) und Statement-Timeouts (z. B. 5 s) erzwingen
- Connection Strings niemals durch das Modell leiten — aus
DATABASE_URLin der Server-Umgebung laden
Beispiel-Tool-Oberfläche:
| Tool-Name | Input | Output |
|---|---|---|
postgres_query_readonly |
{ "sql": "SELECT ..." } |
JSON-Zeilen + Spaltennamen |
describe_table |
{ "table": "orders" } |
Spaltentypen aus information_schema |
Read-only-DB-Rolle verwenden: GRANT SELECT ON ALL TABLES IN SCHEMA public TO mcp_reader;
Muster 2 — Lokales REST-API-Gateway
Ziel: Bestehende HTTP-Endpunkte als MCP-Tools kapseln, damit Claude keine langlebigen API-Keys im Chat-Fenster hält.
Gateway-Muster:
Claude → MCP tool "deploy_status" → your server → GET https://internal/api/v1/deployments
Implementierungstipps:
- Jedes Tool auf eine HTTP-Methode + Pfad-Template mappen
- Inputs mit Schema (Zod, Pydantic) validieren, bevor fetch aufgerufen wird
- Abgeschnittenes JSON (erste 8 KB) plus
truncated: true-Flag zurückgeben, wenn Antworten riesig sind - Correlation IDs serverseitig loggen; keine Secrets in Tool-Ergebnissen ausgeben
Das passt gut zu Multi-Agent-Orchestrierung, wenn OpenClaw-Worker dieselben internen APIs via MCP statt ad-hoc curl aufrufen.
Muster 3 — IDE- und Repo-Brücke
Cursor und Claude Code bringen bereits MCP-Client-Support mit. Ihr Custom Server kann bereitstellen:
- Repo-Tools:
git_diff_summary,run_linter(sandboxed) - Doc-Resources:
file://oderresources/readfürAGENTS.md, OpenAPI-Specs - ECC-/Plugin-Hooks: nach ECC-Installation MCP-Tools hinzufügen, die die
ecc-Skripte Ihres Teams kapseln
IDE-Brücken stdio-lokal halten, es sei denn, das ganze Team teilt eine Remote-Dev-Box.
Acht-Schritte-Runbook
Schritt 1 — Offizielles SDK installieren
Node (für die meisten Hosts empfohlen):
mkdir mcp-company-gateway && cd mcp-company-gateway npm init -y npm install @modelcontextprotocol/sdk zod pg
Python-Alternative: pip install mcp (siehe MCP Python SDK).
Schritt 2 — Minimalen Server scaffolden
src/index.ts erstellen:
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
const server = new McpServer({ name: "company-gateway", version: "1.0.0" });
server.tool("ping", {}, async () => ({
content: [{ type: "text", text: "pong" }],
}));
const transport = new StdioServerTransport();
await server.connect(transport);
Einmal ausführen: npx tsx src/index.ts — sollte blockieren und auf stdio warten (keine Ausgabe ist normal).
Schritt 3 — Read-only-Postgres-Tool hinzufügen
export DATABASE_URL="postgresql://mcp_reader:****@127.0.0.1:5432/app"
postgres_query_readonly registrieren mit Zod-validiertem SQL, das mit SELECT beginnen muss (; und DDL-Keywords serverseitig ablehnen).
Schritt 4 — In Claude Desktop registrieren
~/Library/Application Support/Claude/claude_desktop_config.json bearbeiten (macOS):
{
"mcpServers": {
"company-gateway": {
"command": "npx",
"args": ["tsx", "/absolute/path/mcp-company-gateway/src/index.ts"],
"env": { "DATABASE_URL": "postgresql://mcp_reader@127.0.0.1:5432/app" }
}
}
}
Claude Desktop neu starten. In neuem Chat prüfen, ob das Hammer-/Tools-Icon ping und postgres_query_readonly listet.
Schritt 5 — In Cursor registrieren
Projekt- oder globale .cursor/mcp.json:
{
"mcpServers": {
"company-gateway": {
"command": "npx",
"args": ["tsx", "/absolute/path/mcp-company-gateway/src/index.ts"]
}
}
}
Cursor-Fenster neu laden. Dasselbe ping-Tool aus dem Agent-Panel testen.
Schritt 6 — SSE für Remote-Host freigeben (optional)
Wenn der MCP-Server auf einem Remote-Mac läuft (Team-Bastion oder gemieteter M4):
# Example: SDK HTTP/SSE transport on port 8787 — bind localhost only unless behind VPN node dist/sse-server.js --port 8787 --host 127.0.0.1
Host-Config auf url: "http://127.0.0.1:8787/sse" via SSH-Tunnel zeigen:
ssh -L 8787:127.0.0.1:8787 user@remote-mac
Einen unauthentifizierten MCP-SSE-Port niemals ins öffentliche Internet stellen.
Schritt 7 — Secrets und Sandboxing
| Regel | Warum |
|---|---|
Secrets nur in Server-env, nie in Tool-Argumenten |
Verhindert Prompt-Injection-Exfiltration |
| Separate Server für Prod vs. Staging | Stoppt versehentliche Cross-Environment-Queries |
Subprocess-Tools mit timeout und Allowlists begrenzen |
Blockiert rm -rf-Klasse Fehler |
Schritt 8 — Mit MCP Inspector verifizieren
npx @modelcontextprotocol/inspector npx tsx src/index.ts
tools/list und tools/call manuell aufrufen, bevor Sie der Host-UI vertrauen. Jeden Tool-Aufruf mit Timestamp + OS-User loggen (nicht Chat-Inhalt) für Audit.
Sicherheits- und Sandbox-Checkliste
- Read-only-DB-Rollen für Analytics-Tools; zweiten Server mit Schreib-Tools nur auf Dev-Maschinen
- Input-Validierung bei jedem Tool; verschachtelte Objekte über 32 KB ablehnen
- Network-Egress-Allowlist vom Server-Prozess (iptables oder macOS-Firewall), wenn interne APIs gekapselt werden
- OAuth für SaaS — Token-Refresh im Server implementieren; dem Modell nur opakes
tool_okbereitstellen
Wann MCP auf einem dedizierten Mac betreiben
Ruhezustand auf dem Laptop beendet stdio-Server. Teams, die gemeinsame MCP-Kataloge wollen (dieselben Postgres-Tools für 8 Entwickler), betreiben den Server oft auf einem dauerhaft laufenden Apple-Silicon-Mac — lokal am Schreibtisch oder auf einem kleinen Remote-Knoten — und greifen per SSH-Tunnel oder VPN darauf zu. Für gemietete M4-Macs als always-on Host siehe Preise und Hilfe.
Das ist eine Infrastruktur-Entscheidung, kein MCP-Zwang. Ein 16-GB-M4 führt 3–5 leichte MCP-Server-Prozesse (~80–150 MB je) plus Node-Tooling komfortabel; mehr RAM, wenn auf derselben Maschine auch Docker-Datenbanken laufen. Details zu gemieteten Knoten finden Sie unter Preise ansehen und Hilfe.
Fehlerbehebung
Fehler: Connection closed direkt nach Spawn
Muster: Claude-Desktop-Log zeigt Server-Exit-Code 1.
Fix: Denselben command + args im Terminal ausführen; fehlendes tsx, falschen absoluten Pfad oder Startup-Exception beheben. MCP-Hosts zeigen stderr nicht in der UI.
Fehler: Tool not found / leere Tool-Liste
Muster: Config-JSON-Tippfehler im Server-Namen oder Host hat nicht neu geladen.
Fix: JSON mit jq . claude_desktop_config.json validieren; Host-App vollständig beenden und neu öffnen (nicht nur Fenster schließen).
Fehler: SSE 404 oder CORS-Fehler
Muster: Remote-URL falscher Pfad (/sse vs. /mcp).
Fix: Pfad an SDK-HTTP-Transport-Docs anpassen; mit ssh -L tunneln und 127.0.0.1 in Config verwenden.
Empfohlener Weg
| Ihre Situation | Empfehlung |
|---|---|
| Solo-Dev, DB auf Laptop | stdio + Claude Desktop + Cursor mcp.json |
| Team-interne APIs | Ein Gateway-MCP-Server mit namespaced Tools |
| DB im LAN, Laptop woanders | MCP-Server auf Jump-Host + SSH-Tunnel zu SSE/stdio |
| Schwere Agents + MCP auf einer Box | 24 GB RAM, wenn Docker-DB + OpenClaw-Fan-Out denselben Host teilen |
| Greenfield | Mit Inspector + ping tool starten, bevor produktives SQL |
Wenn X → Y: Liegen die Daten auf einer anderen Maschine, MCP-Server neben die Daten legen und zum Host tunneln — Claude keinen rohen Datenbank-Port ins öffentliche Internet geben.
FAQ
Was ist der Unterschied zwischen MCP und ChatGPT-Plugins?
MCP ist ein offenes, host-agnostisches JSON-RPC-Protokoll mit SDKs in mehreren Sprachen. Plugins waren plattformspezifisch. MCP-Server laufen als lokale oder Remote-Prozesse unter Ihrer Kontrolle; der Host startet sie nur oder verbindet sich mit ihnen.
Kann ich MySQL oder SQLite genauso wie PostgreSQL anbinden?
Ja. Die Server-Implementierung ändert sich (Treiber + SQL-Dialekt); die MCP-Oberfläche (list_tools, call_tool) bleibt identisch. Read-only-Verbindungen und dialektspezifische Guards (SELECT only) verwenden.
Unterstützt Claude Code MCP-Custom-Server?
Stand 2026 unterstützen Claude Code und Cursor MCP-Client-Konfiguration ähnlich wie Claude Desktop. Pfade unterscheiden sich je nach Produkt — aktuelle Anthropic- und Cursor-Docs für mcpServers-Speicherort prüfen. Der Server-Code ist hostübergreifend wiederverwendbar.
Wie viele Tools sollte ein Server bereitstellen?
Unter ~20 Tools pro Server bleiben für zuverlässiges Modell-Routing. Bei wachsenden Katalogen in billing-gateway, data-gateway, ops-gateway aufteilen. Jeder erscheint als separater Block in der Host-Konfiguration.
Ist es sicher, Schreib-Tools (DELETE, Deploy) freizugeben?
Nur auf Nicht-Produktions-Servern mit expliziten menschlichen Bestätigungsflows. Read-Tools in gemeinsamen Configs bevorzugen; Schreibzugriff hinter einen zweiten MCP-Server legen, den nur Senior-Entwickler in der persönlichen Config aktivieren.
MCP-Server auf Apple Silicon betreiben
Mieten Sie einen KuzCloud-M4-Mac für dauerhaft laufende MCP-Gateways, Postgres-Read-only-Tools und SSE-Tunnel über SSH — ohne Hardwarekauf, nur genutzte Zeit zahlen.