Diese Seite behandelt die MCP-Konfiguration für das Agent SDK. Um MCP-Server zur Claude Code CLI hinzuzufügen, damit sie in jedem Projekt geladen werden, siehe MCP-Installationsbereiche.
Schnellstart
Dieses Beispiel verbindet sich mit dem Claude Code-Dokumentations-MCP-Server unter Verwendung von HTTP-Transport und verwendetallowedTools mit einem Platzhalter, um alle Tools vom Server zuzulassen.
MCP-Server hinzufügen
Sie können MCP-Server im Code beim Aufrufen vonquery() konfigurieren oder in einer .mcp.json-Datei, die über settingSources geladen wird.
Server im Code hinzufügen
Übergeben Sie MCP-Server direkt in der OptionmcpServers. Dieses Beispiel startet einen lokalen Dateisystem-MCP-Server für /Users/me/projects. Ersetzen Sie diesen Pfad durch ein Verzeichnis auf Ihrem Computer:
Server aus einer Konfigurationsdatei hinzufügen
Erstellen Sie eine.mcp.json-Datei im Stammverzeichnis Ihres Projekts. Die Datei wird geladen, wenn die project-Einstellungsquelle aktiviert ist, was sie standardmäßig für query()-Optionen ist. Wenn Sie settingSources explizit festlegen, fügen Sie "project" ein, damit diese Datei geladen wird. Ersetzen Sie /Users/me/projects durch ein Verzeichnis auf Ihrem Computer:
Verbindungszeitpunkt
Claude Code registriert die Server, die Sie inoptions.mcpServers übergeben, beim Start und sendet die Init-Nachricht, sobald die Wartezeit für die erste Runde, falls vorhanden, abgelaufen ist. Ob jeder options.mcpServers-Server die erste Runde verzögert und wann er sich verbindet, hängt von seinem Typ ab:
Server, die aus Konfigurationsdateien wie
.mcp.json oder aus Plugins geladen werden, zeigen häufig pending in der Init-Nachricht an. Wenn options.mcpServers einen Stdio-, HTTP- oder SSE-Server enthält, wartet die erste Runde auch auf diese ausstehenden Server, bis zu MCP_TIMEOUT. Wenn options.mcpServers leer ist oder nur SDK-Server enthält, wartet die erste Runde stattdessen bis zu 2 Sekunden:
- Mit Werkzeugsuche, der Standardeinstellung: Die Wartezeit umfasst noch ausstehende Server, die mit
alwaysLoad: truekonfiguriert sind, und nicht die übrigen. Die übrigen bleiben im Hintergrund verbunden. Werkzeugverfügbarkeit beschreibt, wie Claude auf ihre Werkzeuge zugreift, sobald sie verbunden sind. - Ohne Werkzeugsuche: Die Wartezeit umfasst jeden ausstehenden Server. Werkzeugsuche konfigurieren behandelt, wie die Werkzeugsuche deaktiviert wird. Wenn Sie das
ToolSearch-Werkzeug aus der Sitzung ausschließen, beispielsweise durchdisallowedTools, wird die Sitzung auch ohne Werkzeugsuche ausgeführt.
permissionPromptToolName setzen, wartet die erste Runde auch in jedem Fall auf den Server dieses Werkzeugs, bis zu MCP_TIMEOUT.
Um die Wartezeit für die erste Runde selbst zu setzen, fügen Sie CLAUDE_CODE_MCP_STARTUP_WAIT_MS zur env-Option hinzu, beispielsweise CLAUDE_CODE_MCP_STARTUP_WAIT_MS: "5000". Die erste Runde wartet dann bis zu dieser Anzahl von Millisekunden auf jeden ausstehenden Server, unabhängig davon, ob die Werkzeugsuche verfügbar ist. Diese Frist ersetzt auch die MCP_TIMEOUT-Wartezeit für die erste Runde für Stdio-, HTTP- und SSE-Server in options.mcpServers. CLAUDE_CODE_MCP_STARTUP_WAIT_MS erfordert Claude Code v2.1.274 oder später.
Server, die noch ausstehend sind, wenn die Wartezeit endet, bleiben im Hintergrund verbunden. Setzen Sie die Variable auf 0, um die Wartezeit zu überspringen. Ein permissionPromptToolName-Server behält seine eigene MCP_TIMEOUT-Wartezeit unabhängig vom Wert bei.
Um den Start selbst in einer separaten, früheren Phase als die Wartezeit für die erste Runde zu blockieren, bevor die Init-Nachricht gesendet wird:
- Setzen Sie
MCP_CONNECTION_NONBLOCKINGauf0, um den gesamten Verbindungsstapel zu blockieren. Claude Code begrenzt diese Wartezeit standardmäßig auf 5 Sekunden. Passen Sie die Obergrenze mit der UmgebungsvariablenMCP_CONNECT_TIMEOUT_MSin Millisekunden an. Server, die bei dieser Frist noch ausstehend sind, bleiben im Hintergrund verbunden. - Setzen Sie
alwaysLoad: truein der Konfiguration eines Servers, um seine Werkzeuge mit ihren vollständigen Schemas ab der ersten Runde verfügbar zu machen, ausgenommen von der Werkzeugsuche-Aufschubung. Claude Code wartet beim Start auf die Werkzeuge dieses Servers, begrenzt auf die gleiche Frist, während andere Server im Hintergrund verbunden bleiben; ein Remote-Server mit einer zwischengespeicherten Werkzeugliste stellt sie ohne Verbindung bereit, wie in der obigen Tabelle angegeben.
system-Nachricht mit dem Subtyp init meldet den Status jedes Servers zum Zeitpunkt ihrer Emission; siehe Fehlerbehandlung zum Lesen dieser Status.
MCP-Tools zulassen
MCP-Tools erfordern eine explizite Genehmigung, bevor Claude sie verwenden kann. Ohne Genehmigung sieht Claude, dass Tools verfügbar sind, kann sie aber nicht aufrufen.Benennungskonvention für Tools
MCP-Tools werden nach dem Mustermcp__<server-name>__<tool-name> benannt, wobei <server-name> der Name ist, unter dem Sie den Server registrieren, etwa sein Schlüssel in mcpServers.
Zeichen im Servernamen wie . und Leerzeichen werden durch _ ersetzt. Diese Tabelle zeigt den vollständigen Namen eines list_issues-Tools für zwei Serverschlüssel:
Verwenden Sie die vollständigen Tool-Namen in
allowedTools und in MCP-Berechtigungsregeln. Bei einem Server, den ein Plugin bereitstellt, hat <server-name> die Plugin-bezogene Form und beginnt mit plugin_.
Automatische Genehmigung mit allowedTools
Verwenden SieallowedTools, um bestimmte MCP-Tools automatisch zu genehmigen, damit Claude sie ohne Genehmigungsaufforderung verwenden kann:
*) ermöglichen es Ihnen, alle Tools von einem Server zuzulassen, ohne jedes einzeln aufzulisten.
Bevorzugen Sie
allowedTools gegenüber Berechtigungsmodi für MCP-Zugriff. permissionMode: "acceptEdits" genehmigt MCP-Tools nicht automatisch (nur Dateibearbeitungen und Dateisystem-Bash-Befehle). permissionMode: "bypassPermissions" genehmigt MCP-Tools automatisch, deaktiviert aber auch die meisten anderen Sicherheitsaufforderungen, was breiter ist als nötig; siehe Wie Berechtigungen ausgewertet werden für die verbleibenden Aufforderungen. Ein Platzhalter in allowedTools gewährt genau den MCP-Server, den Sie möchten, und nichts mehr. Siehe Berechtigungsmodi für einen vollständigen Vergleich.Verfügbare Tools entdecken
Um zu sehen, welche Tools ein MCP-Server bereitstellt, überprüfen Sie die Dokumentation des Servers oder inspizieren Sie dastools-Array in der system-Init-Nachricht. MCP-Tool-Namen beginnen mit mcp__.
Claude Code gibt die Init-Nachricht nach der Verbindungswartzeit beim ersten Durchgang für Server aus, die in options.mcpServers übergeben werden, sodass das tools-Array die mcp__-Tools jedes Servers auflistet, der bis dahin verbunden ist, plus die von Servern mit einer zwischengespeicherten Tool-Liste, die beim ersten Gebrauch verbunden werden. Tools von anderen Servern, die noch nicht verbunden sind, fehlen; siehe Fehlerbehandlung zum Lesen des Status jedes Servers.
Dieser Filter gibt die MCP-Tool-Namen aus:
Transporttypen
MCP-Server kommunizieren mit Ihrem Agenten über verschiedene Transportprotokolle. Überprüfen Sie die Dokumentation des Servers, um zu sehen, welcher Transport unterstützt wird:- Wenn die Dokumentation Ihnen einen Befehl zum Ausführen gibt (wie
npx @modelcontextprotocol/server-filesystem), verwenden Sie stdio - Wenn die Dokumentation Ihnen eine URL gibt, verwenden Sie HTTP oder SSE
- Wenn Sie Ihre eigenen Tools im Code erstellen, verwenden Sie einen SDK MCP-Server
stdio-Server
Lokale Prozesse, die über stdin/stdout kommunizieren. Verwenden Sie dies für MCP-Server, die Sie auf demselben Computer ausführen. Für das.mcp.json-Format verwenden Sie die gleichen Felder wie unter Server aus einer Konfigurationsdatei hinzufügen. Im Code übergeben Sie den Befehl und seine Argumente. Ersetzen Sie /Users/me/projects durch ein Verzeichnis auf Ihrem Computer:
HTTP/SSE-Server
Verwenden Sie HTTP oder SSE für Cloud-gehostete MCP-Server und Remote-APIs. Für das.mcp.json-Format verwenden Sie die gleichen Felder wie im Beispiel unter HTTP headers for remote servers, mit "type": "sse" für einen SSE-Server. Im Code übergeben Sie die URL des Servers:
"type": "http". In .mcp.json und anderen JSON-Konfigurationsdateien wird "streamable-http" als Alias für "http" akzeptiert. Der McpHttpServerConfig-Typ der SDKs deklariert nur "http", verwenden Sie also "http" für Server, die Sie im Code übergeben.
SDK MCP-Server
Definieren Sie benutzerdefinierte Tools direkt in Ihrem Anwendungscode, anstatt einen separaten Serverprozess auszuführen. Weitere Implementierungsdetails finden Sie im custom tools guide. Ein SDK MCP-Server, der von einerinitialize-Steueranforderung registriert wird, beginnt die Verbindung, sobald Claude Code die Anforderung verarbeitet.
MCP-Werkzeugsuche
Wenn Sie viele MCP-Werkzeuge konfiguriert haben, können Werkzeugdefinitionen einen erheblichen Teil Ihres Kontextfensters verbrauchen. Die Werkzeugsuche löst dieses Problem, indem sie Werkzeugdefinitionen aus dem Kontext vorenthält und nur die Werkzeuge lädt, die Claude für jeden Durchgang benötigt. Die Werkzeugsuche ist standardmäßig aktiviert. Weitere Informationen zu Konfigurationsoptionen, Best Practices und der Verwendung der Werkzeugsuche mit benutzerdefinierten SDK-Werkzeugen finden Sie unter Werkzeugsuche.Authentifizierung
Die meisten MCP-Server erfordern eine Authentifizierung für den Zugriff auf externe Dienste. Übergeben Sie Anmeldedaten über Umgebungsvariablen in der Serverkonfiguration.Anmeldedaten über Umgebungsvariablen übergeben
Verwenden Sie das Feldenv, um API-Schlüssel, Token und andere Anmeldedaten an den MCP-Server zu übergeben:
- Im Code
- .mcp.json
HTTP-Header für Remote-Server
Für HTTP- und SSE-Server übergeben Sie Authentifizierungs-Header direkt in der Serverkonfiguration:- Im Code
- .mcp.json
OAuth2-Authentifizierung
Die MCP-Spezifikation unterstützt OAuth 2.1 für die Autorisierung. Das SDK öffnet keinen Browser und führt keinen interaktiven OAuth-Flow aus. Wenn ein konfigurierter Server eine Autorisierungsanforderung zurückgibt und kein gespeichertes Token verfügbar ist, wird die Agent-Ausführung ohne die Tools dieses Servers fortgesetzt, und der Server meldet den Statusneeds-auth. Das Array mcp_servers der System-Init-Nachricht kann für diesen Server immer noch pending anzeigen, wenn es ausgegeben wird. Um zu bestätigen, ob ein Server Anmeldedaten benötigt, fragen Sie mcpServerStatus() im TypeScript SDK oder get_mcp_status() in Python ab.
Um Anmeldedaten bereitzustellen, führen Sie den OAuth-Flow in Ihrer eigenen Anwendung durch und übergeben Sie das resultierende Zugriffs-Token in den headers des Servers:
Beispiele
Probleme aus einem Repository auflisten
Dieses Beispiel verbindet sich mit dem Remote-GitHub MCP Server, um aktuelle Probleme aufzulisten. Das Beispiel enthält Debug-Protokollierung, um die MCP-Verbindung und Toolaufrufe zu überprüfen. Erstellen Sie vor der Ausführung ein GitHub Personal Access Token mit Lesezugriff auf die Repositories, die Sie abfragen möchten, und legen Sie es als Umgebungsvariable fest:MCP servers: bestätigt ein status von connected für github, dass das Token funktioniert. Wenn Claude Code eine zwischengespeicherte Toolliste für den Server hat, kann der Status stattdessen pending anzeigen und der Server verbindet sich beim ersten Toolaufruf. Wenn der Status failed oder needs-auth ist, siehe Fehlerbehandlung, bevor Sie dem Ergebnis vertrauen, da Claude auf integrierte Tools zurückgreifen kann, wenn der Server nicht verfügbar ist.
Eine Datenbank abfragen
Dieses Beispiel verwendet DBHub, um eine Postgres-Datenbank abzufragen. Der Agent erkennt das Datenbankschema automatisch, schreibt die SQL-Abfrage und gibt die Ergebnisse zurück. Dasexecute_sql-Tool von DBHub führt jede SQL aus, die der Agent ausgibt, einschließlich Schreibvorgänge, es sei denn, Sie beschränken es. Das Setzen von readonly = true in der DBHub-Konfigurationsdatei bewirkt, dass DBHub INSERT-, UPDATE-, DELETE- und DDL-Anweisungen ablehnt, sodass das Beispiel Ihre Daten nicht ändern kann, selbst wenn der Agent einen Schreibvorgang ausgibt. DBHub löst ${DATABASE_URL} aus der Prozessumgebung auf, wenn es die Konfiguration lädt, sodass die Verbindungszeichenfolge aus der Datei bleibt. Erstellen Sie diese dbhub.toml neben Ihrem Skript:
dbhub.toml
DATABASE_URL auf Ihre Verbindungszeichenfolge fest. Ersetzen Sie die Platzhalterwerte durch Ihre eigenen Datenbankdetails:
Fehlerbehandlung
MCP-Server können aus verschiedenen Gründen keine Verbindung herstellen: Der Server-Prozess ist möglicherweise nicht installiert, die Anmeldedaten könnten ungültig sein, oder ein Remote-Server könnte unerreichbar sein. Claude Code sendet einesystem-Nachricht mit dem Subtyp init am Anfang jeder Abfrage. Diese Nachricht enthält den Verbindungsstatus für jeden MCP-Server. Das Feld status kann "pending", "connected", "failed", "needs-auth" oder "disabled" sein. Claude Code sendet die Init-Nachricht nach dem Wartezeit für die Verbindung beim ersten Durchgang für Server, die in options.mcpServers übergeben werden, sodass ein solcher Server, der sich innerhalb der Wartezeit verbunden hat, "connected" anzeigt.
In der Init-Nachricht sollten Sie "pending" nicht als Fehler an sich behandeln. Es kann eines der folgenden bedeuten:
- Der Server hat sich noch nicht verbunden. Siehe wie lange Claude Code darauf wartet, bevor der erste Durchgang beginnt
- Die Werkzeugliste des Servers wurde aus dem Cache bereitgestellt, mit einer Verbindung bei der ersten Verwendung
- Die Verbindungsfrist ist abgelaufen. Ein solcher Server meldet
"pending"oder"failed"je nach Zeitpunkt
"failed" oder "needs-auth", um Server zu erkennen, die nicht verwendbar sind:
"connected" meldet. Wenn die Verbindung zu ihm während einer Sitzung unterbrochen wird, verschiebt Claude Code den Server zurück zu "pending", während Wiederverbindung stattfindet. Ein späterer mcpServerStatus()-Aufruf in TypeScript oder ClaudeSDKClient.get_mcp_status() in Python kann dann "pending" für einen Server melden, den Sie zuvor verbunden gesehen haben, ohne dass sich die Konfiguration auf Ihrer Seite ändert.
Nach fünf fehlgeschlagenen Wiederverbindungsversuchen meldet der Server "failed" oder "needs-auth", wenn er erneut autorisiert werden muss. Ein HTTP- oder SSE-Server mit dem Status "failed" kann auch ohne einen Aufruf Ihrerseits wieder zu "connected" zurückkehren, da Claude Code nach einem vorübergehenden Fehler im Hintergrund weiterhin Wiederholungsversuche unternimmt. Um manuell erneut zu versuchen, rufen Sie reconnectMcpServer() in TypeScript oder ClaudeSDKClient.reconnect_mcp_server() in Python auf.
Fehlerbehebung
Server zeigt Status „failed“ an
Überprüfen Sie dieinit-Nachricht, um zu sehen, welche Server keine Verbindung herstellen konnten:
"pending" bedeutet nicht, dass der Server fehlgeschlagen ist. Siehe Fehlerbehandlung für die Fälle, die er bei der Initialisierung abdeckt. Um später in der Sitzung aktualisierte Status zu erhalten, rufen Sie die Methode mcpServerStatus() der Abfrage im TypeScript SDK auf, oder ClaudeSDKClient.get_mcp_status() in Python.
Häufige Ursachen:
- Fehlende Umgebungsvariablen: Stellen Sie sicher, dass erforderliche Token und Anmeldedaten gesetzt sind. Überprüfen Sie bei stdio-Servern, dass das Feld
envdem entspricht, was der Server erwartet. - Server nicht installiert: Überprüfen Sie bei
npx-Befehlen, dass das Paket vorhanden ist und Node.js in Ihrem PATH liegt. - Ungültige Verbindungszeichenfolge: Überprüfen Sie bei Datenbankservern das Format der Verbindungszeichenfolge und dass die Datenbank erreichbar ist.
- Netzwerkprobleme: Überprüfen Sie bei Remote-HTTP/SSE-Servern, dass die URL erreichbar ist und dass Firewalls die Verbindung zulassen.
Tools werden nicht aufgerufen
Wenn Claude Tools sieht, sie aber nicht verwendet, überprüfen Sie, dass Sie die Berechtigung mitallowedTools erteilt haben:
Ein Tool fehlt in einem SDK-MCP-Server
Wenn sich im TypeScript SDK das Eingabe-Schema eines Tools nicht in JSON Schema konvertieren lässt, lässt der Server, den Sie mitcreateSdkMcpServer() erstellt haben, dieses Tool weg, wenn er seine Tools auflistet. Das SDK gibt an dieser Stelle eine Warnung aus. Unter Node.js ist die Warnung eine Prozesswarnung mit dem Code CLAUDE_SDK_MCP_TOOL_SCHEMA_UNCONVERTIBLE, und sie beginnt mit diesem Text:
Verbindungs-Timeouts
MCP-Serververbindungen werden standardmäßig nach 30 Sekunden unterbrochen. Um zu ändern, wie lange ein laufender Tool-Aufruf dauern darf, setzen SieMCP_TOOL_TIMEOUT. Wenn Ihr Server länger zum Starten braucht, schlägt die Verbindung fehl. Erhöhen Sie das Verbindungslimit mit der Umgebungsvariablen MCP_TIMEOUT in Millisekunden. Für Server, die mehr Startzeit benötigen, sollten Sie auch Folgendes in Betracht ziehen:
- Verwendung eines leichteren Servers, falls verfügbar
- Vorwärmung des Servers vor dem Starten Ihres Agenten
- Überprüfung der Serverprotokolle auf langsame Initialisierungsursachen
timeout an createSdkMcpServer() übergeben.
Tool-Ausgabe überschreitet maximale zulässige Token
Das SDK wendet dieselben MCP-Ausgabelimits wie Claude Code an. Wenn ein erfolgreiches Tool-Ergebnis ohne Bildinhalt größer als 25.000 Token ist, speichert Claude Code die Ausgabe in einer Datei und ersetzt das Tool-Ergebnis durch eine Fehlermeldung, die den Dateipfad benennt, damit der Agent die Ausgabe in Teilen zurücklesen kann. Um das Token-Limit zu ändern, setzen Sie die UmgebungsvariableMAX_MCP_OUTPUT_TOKENS. Sofern das Tool nicht anthropic/maxResultSizeChars deklariert, wird ein erfolgreiches Textergebnis mit mehr als 50.000 Zeichen unabhängig vom Token-Limit in einer Datei gespeichert. Siehe MCP-Ausgabelimits und Warnungen für das vollständige Verhalten, einschließlich der Frage, wie ein Server diese Anmerkung deklariert.
Verwandte Ressourcen
- Anleitung für benutzerdefinierte Tools: Erstellen Sie Ihren eigenen MCP-Server, der prozessintern mit Ihrer SDK-Anwendung ausgeführt wird
- Berechtigungen: Kontrollieren Sie, welche MCP-Tools Ihr Agent mit
allowedToolsunddisallowedToolsverwenden kann - TypeScript SDK-Referenz: Vollständige API-Referenz einschließlich MCP-Konfigurationsoptionen
- Python SDK-Referenz: Vollständige API-Referenz einschließlich MCP-Konfigurationsoptionen
- MCP-Serververzeichnis: Durchsuchen Sie verfügbare MCP-Server für Datenbanken, APIs und mehr