Hinweis
Copilot SDK ist zurzeit in öffentliche Vorschau. Funktionalität und Verfügbarkeit können geändert werden.
Schnelle Diagnose
Prüfliste
Bevor Sie tief tauchen, überprüfen Sie diese Grundlagen:
- Die ausführbare Datei des MCP-Servers ist vorhanden und kann ausgeführt werden.
- Befehlspfad ist richtig (verwenden Sie absolute Pfade, wenn sie zweifelsfrei sind)
- Tools sind aktiviert (
tools: ["*"]oder bestimmte Toolnamen) - Server implementiert das MCP-Protokoll korrekt (antwortet auf
initialize) - Keine Firewall oder Antivirensoftware blockiert den Prozess (Windows)
Aktivieren der MCP-Debugprotokollierung
Hinzufügen von Umgebungsvariablen zur MCP-Serverkonfiguration:
mcpServers: {
"my-server": {
type: "local",
command: "/path/to/server",
args: [],
env: {
MCP_DEBUG: "1",
DEBUG: "*",
NODE_DEBUG: "mcp", // For Node.js MCP servers
},
},
}
mcpServers: {
"my-server": {
type: "local",
command: "/path/to/server",
args: [],
env: {
MCP_DEBUG: "1",
DEBUG: "*",
NODE_DEBUG: "mcp", // For Node.js MCP servers
},
},
}
Unabhängiges Testen von MCP-Servern
Testen Sie ihren MCP-Server immer außerhalb des SDK zuerst.
Manueller Protokolltest
Senden Sie eine initialize Anfrage über „stdin”:
# Unix/macOS
echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}}}' | /path/to/your/mcp-server
# Unix/macOS
echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}}}' | /path/to/your/mcp-server
**Erwartete Antwort:**
{"jsonrpc":"2.0","id":1,"result":{"protocolVersion":"2024-11-05","capabilities":{"tools":{}},"serverInfo":{"name":"your-server","version":"1.0"}}}
Ein Windows PowerShell-Beispiel finden Sie im McP-Serverdebugginghandbuch im github/copilot-sdk Repository.
Liste der Test-Tools
Fordern Sie nach der Initialisierung die Toolsliste an:
echo '{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}' | /path/to/your/mcp-server
echo '{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}' | /path/to/your/mcp-server
**Erwartete Antwort:**
{"jsonrpc":"2.0","id":2,"result":{"tools":[{"name":"my_tool","description":"Does something","inputSchema":{...}}]}}
Interaktives Testskript
Erstellen Sie ein Testskript, um Ihren MCP-Server interaktiv zu debuggen:
#!/bin/bash
# test-mcp.sh
SERVER="$1"
# Initialize
echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}}}'
# Send initialized notification
echo '{"jsonrpc":"2.0","method":"notifications/initialized"}'
# List tools
echo '{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}'
# Keep stdin open
cat
#!/bin/bash
# test-mcp.sh
SERVER="$1"
# Initialize
echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}}}'
# Send initialized notification
echo '{"jsonrpc":"2.0","method":"notifications/initialized"}'
# List tools
echo '{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}'
# Keep stdin open
cat
Verwendung:
./test-mcp.sh | /path/to/mcp-server
./test-mcp.sh | /path/to/mcp-server
Häufig auftretende Probleme
Server wird nicht gestartet
**Symptome:** Es werden keine Tools angezeigt, keine Fehler in Protokollen.
| Ursache | Lösung |
|---|---|
| Falscher Befehlspfad | Absoluter Pfad verwenden: /usr/local/bin/server |
| Fehlende Ausführungsberechtigung | Führen Sie chmod +x /path/to/server aus. |
| Fehlende Abhängigkeiten | Mit ldd überprüfen (Linux) oder manuell ausführen |
| Arbeitsverzeichnisprobleme |
`cwd` in der Konfiguration festlegen |
Debugging manuell ausführen:
# Run exactly what the SDK would run cd /expected/working/dir /path/to/command arg1 arg2
# Run exactly what the SDK would run
cd /expected/working/dir
/path/to/command arg1 arg2
Der Server startet, aber die Werkzeuge werden nicht angezeigt.
**Symptome:** Der Serverprozess wird ausgeführt, aber es sind keine Tools verfügbar.
1. In der Konfiguration nicht aktivierte Tools:
mcpServers: {
"server": {
// ...
tools: ["*"], // Must be "*" or list of tool names
},
}
mcpServers: {
"server": {
// ...
tools: ["*"], // Must be "*" or list of tool names
},
}
-
**Der Server macht keine Tools verfügbar:** Testen Sie manuell mit einer `tools/list` Anforderung. Überprüfen Sie, ob der Server die `tools/list` Methode implementiert. -
**Initialisierungs-Handshake schlägt fehl:** Der Server muss korrekt auf `initialize` reagieren und `notifications/initialized` handhaben.
Aufgeführte, aber nie aufgerufene Tools
**Symptome:** Tools werden in Debugprotokollen angezeigt, aber das Modell verwendet sie nicht.
-
**Prompt benötigt das Tool nicht eindeutig:**TypeScript // Too vague await session.sendAndWait({ prompt: "What's the weather?" }); // Better—explicitly mentions capability await session.sendAndWait({ prompt: "Use the weather tool to get the current temperature in Seattle" });// Too vague await session.sendAndWait({ prompt: "What's the weather?" }); // Better—explicitly mentions capability await session.sendAndWait({ prompt: "Use the weather tool to get the current temperature in Seattle" }); -
**Beschreibung des Tools unklar:**TypeScript // Bad—model doesn't know when to use it { name: "do_thing", description: "Does a thing" } // Good—clear purpose { name: "get_weather", description: "Get current weather conditions for a city. Returns temperature, humidity, and conditions." }// Bad—model doesn't know when to use it { name: "do_thing", description: "Does a thing" } // Good—clear purpose { name: "get_weather", description: "Get current weather conditions for a city. Returns temperature, humidity, and conditions." } -
**Toolschemaprobleme:** Stellen Sie sicher, dass es sich um `inputSchema` ein gültiges JSON-Schema handelt. Erforderliche Felder müssen im `required` Array aufgelistet werden.
Timeoutfehler
**Symptome:**`MCP tool call timed out` Fehler.
-
Erhöhen Sie das Timeout:
TypeScript mcpServers: { "slow-server": { // ... timeout: 300000, // 5 minutes }, }mcpServers: { "slow-server": { // ... timeout: 300000, // 5 minutes }, } -
Optimieren Sie die Serverleistung, indem Sie die Fortschrittprotokollierung hinzufügen, um den Engpass zu identifizieren, asynchrone Vorgänge zu berücksichtigen und auf blockierende E/A zu überprüfen.
-
Bei langandauernden Werkzeugen sollten Sie Streaming-Antworten erwägen, wenn diese unterstützt werden.
JSON-RPC Fehler
**Symptome:** Analysefehler, ungültige Anforderungsfehler.
Häufige Ursachen:
-
**Server schreibt fälschlicherweise in „stdout”:** Debug-Ausgabe geht zu „stdout” anstelle von „stderr”, oder es gibt zusätzliche neue Zeilen oder Leerzeichen:TypeScript // Wrong—pollutes stdout console.log("Debug info"); // Correct—use stderr for debug console.error("Debug info");// Wrong—pollutes stdout console.log("Debug info"); // Correct—use stderr for debug console.error("Debug info"); -
**Codierungsprobleme:** Stellen Sie die UTF-8-Codierung ohne BOM (Byte Order Mark) sicher. -
**Nachrichtenrahmen:** Jede Nachricht muss ein vollständiges JSON-Objekt sein, mit Zeilentrennzeichen (eine Nachricht pro Zeile).
Plattformspezifische Probleme
Windows
Unter Windows können Antivirensoftware oder Firewallsoftware neue ausführbare Dateien oder Prozesse blockieren, die über stdin/stdout kommunizieren. Fügen Sie Ausschlüsse für die ausführbare Datei des MCP-Servers hinzu, falls erforderlich.
Windows-spezifische Konfigurationsbeispiele für .NET-Konsolen-Apps und NPX-Befehle finden Sie im McP Server Debugging Guide im github/copilot-sdk Repository.
**Pfadprobleme:**
- Verwenden Sie unformatierte Zeichenfolgen (
@"C:\path") oder Schrägstriche ("C:/path"). - Vermeiden Sie nach Möglichkeit Leerzeichen in Pfaden.
- Wenn Leerzeichen erforderlich sind, stellen Sie eine ordnungsgemäße Quotierung sicher.
macOS
-
**Gatekeeper-Blockierung:** Wenn der Server blockiert ist:Bash xattr -d com.apple.quarantine /path/to/mcp-server
xattr -d com.apple.quarantine /path/to/mcp-server -
**Homebrew-Pfade:** GUI-Apps sind möglicherweise nicht in PATH enthalten `/opt/homebrew` . Verwenden Sie den vollständigen Pfad:TypeScript mcpServers: { "my-server": { command: "/opt/homebrew/bin/node", // Full path args: ["/path/to/server.js"], }, }mcpServers: { "my-server": { command: "/opt/homebrew/bin/node", // Full path args: ["/path/to/server.js"], }, }
Linux
-
**Berechtigungsprobleme:**Bash chmod +x /path/to/mcp-server
chmod +x /path/to/mcp-server -
**Fehlende freigegebene Bibliotheken:**Bash # Check dependencies ldd /path/to/mcp-server # Install missing libraries apt install libfoo # Debian/Ubuntu yum install libfoo # RHEL/CentOS
# Check dependencies ldd /path/to/mcp-server # Install missing libraries apt install libfoo # Debian/Ubuntu yum install libfoo # RHEL/CentOS
Erweitertes Debuggen
Gesamten MCP-Datenverkehr erfassen
Erstellen Sie ein Wrapperskript, um die gesamte Kommunikation zu protokollieren:
#!/bin/bash # mcp-debug-wrapper.sh LOG="/tmp/mcp-debug-$(date +%s).log" ACTUAL_SERVER="$1" shift echo "=== MCP Debug Session ===" >> "$LOG" echo "Server: $ACTUAL_SERVER" >> "$LOG" echo "Args: $@" >> "$LOG" echo "=========================" >> "$LOG" # Tee stdin/stdout to log file tee -a "$LOG" | "$ACTUAL_SERVER" "$@" 2>> "$LOG" | tee -a "$LOG"
#!/bin/bash
# mcp-debug-wrapper.sh
LOG="/tmp/mcp-debug-$(date +%s).log"
ACTUAL_SERVER="$1"
shift
echo "=== MCP Debug Session ===" >> "$LOG"
echo "Server: $ACTUAL_SERVER" >> "$LOG"
echo "Args: $@" >> "$LOG"
echo "=========================" >> "$LOG"
# Tee stdin/stdout to log file
tee -a "$LOG" | "$ACTUAL_SERVER" "$@" 2>> "$LOG" | tee -a "$LOG"
Verwenden Sie sie:
mcpServers: {
"debug-server": {
command: "/path/to/mcp-debug-wrapper.sh",
args: ["/actual/server/path", "arg1", "arg2"],
},
}
mcpServers: {
"debug-server": {
command: "/path/to/mcp-debug-wrapper.sh",
args: ["/actual/server/path", "arg1", "arg2"],
},
}
Prüfen mit MCP Inspector
Verwenden Sie das offizielle MCP Inspector-Tool:
npx @modelcontextprotocol/inspector /path/to/your/mcp-server
npx @modelcontextprotocol/inspector /path/to/your/mcp-server
Dies bietet eine Web-UI zum Senden von Testanforderungen, Anzeigen von Antworten und Überprüfen von Toolschemas.
Protokollversionskonflikten
Überprüfen Sie, ob ihr Server die Protokollversion unterstützt, die das SDK verwendet:
// In initialize response, check protocolVersion
{"result":{"protocolVersion":"2024-11-05",...}}
Wenn versionen nicht übereinstimmen, aktualisieren Sie Ihre MCP-Serverbibliothek.
Checkliste zum Debuggen
Sammeln Sie beim Öffnen eines Problems oder beim Anfordern von Hilfe zu GitHub-Problemen Folgendes:
- SDK-Sprache und -Version
- CLI-Version (
copilot --version) - MCP-Servertyp (Node.js, Python, .NET, Go usw.)
- Vollständige MCP-Serverkonfiguration (redact secrets)
- Ergebnis des manuellen
initializeTests - Ergebnis des manuellen
tools/listTests - Debugprotokolle aus DEM SDK
- Fehlermeldungen