Table des matières
- Diagnostics rapides
- Test des serveurs MCP indépendamment
- Problèmes courants
- Problèmes spécifiques à la plateforme
- Débogage avancé
Diagnostics rapides
Liste de vérification
Avant de plonger en profondeur, vérifiez ces principes de base :
- Le fichier exécutable du serveur MCP existe et peut être exécuté
- Chemin de commande correct (utilisez des chemins absolus en cas de doute)
- Les outils sont activés (
tools: ["*"]ou noms d’outils spécifiques) - Le serveur implémente correctement le protocole MCP (répond à
initialize) - Aucun pare-feu/antivirus bloquant le processus (Windows)
Activer la journalisation du débogage MCP
Ajoutez des variables d’environnement à votre configuration de serveur MCP :
mcpServers: {
"my-server": {
type: "local",
command: "/path/to/server",
args: [],
env: {
MCP_DEBUG: "1",
DEBUG: "*",
NODE_DEBUG: "mcp", // For Node.js MCP servers
},
},
}
Test des serveurs MCP indépendamment
Testez toujours votre serveur MCP en dehors du Kit de développement logiciel (SDK) en premier.
Test manuel du protocole
Envoyez une initialize demande via 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
# Windows (PowerShell)
'{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}}}' | C:\path\to\your\mcp-server.exe
Réponse attendue :
{"jsonrpc":"2.0","id":1,"result":{"protocolVersion":"2024-11-05","capabilities":{"tools":{}},"serverInfo":{"name":"your-server","version":"1.0"}}}
Liste des outils de test
Après l’initialisation, demandez la liste des outils :
echo '{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}' | /path/to/your/mcp-server
Réponse attendue :
{"jsonrpc":"2.0","id":2,"result":{"tools":[{"name":"my_tool","description":"Does something","inputSchema":{...}}]}}
Script de test interactif
Créez un script de test pour déboguer de manière interactive votre serveur MCP :
#!/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
Utilisation :
./test-mcp.sh | /path/to/mcp-server
Problèmes courants
Le serveur ne démarre pas
Symptômes: Aucun outil n’apparaît, aucune erreur n'est consignée.
Causes & Solutions :
| Cause | Solution |
|---|---|
| Chemin d’accès de commande incorrect | Utilisez le chemin absolu : /usr/local/bin/server |
| Autorisation exécutable manquante | Exécutez chmod +x /path/to/server |
| Dépendances manquantes | Vérifier avec ldd (Linux) ou exécuter manuellement |
| Problèmes de répertoire de travail | Définir cwd dans la configuration |
Déboguer en exécutant manuellement :
# Run exactly what the SDK would run
cd /expected/working/dir
/path/to/command arg1 arg2
Le serveur démarre, mais les outils n’apparaissent pas
Symptômes: Le processus serveur s’exécute, mais aucun outil n’est disponible.
Causes & Solutions :
-
Outils non activés dans la configuration :
mcpServers: { "server": { // ... tools: ["*"], // Must be "*" or list of tool names }, } -
Le serveur n’expose pas les outils :
- Tester la requête manuellement avec
tools/list - Check Server implémente la
tools/listméthode
- Tester la requête manuellement avec
-
Échec de la négociation d’initialisation :
- Le serveur doit répondre à
initializecorrectement - Le serveur doit gérer
notifications/initialized
- Le serveur doit répondre à
Outils répertoriés mais jamais appelés
Symptômes: Les outils apparaissent dans les journaux de débogage, mais le modèle ne les utilise pas.
Causes & Solutions :
-
L’invite n’a pas besoin clairement de l’outil :
// 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" }); -
La description de l’outil n’est pas claire :
// 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." } -
Problèmes de schéma d’outil :
- Vérifier qu’il s’agit
inputSchemad’un schéma JSON valide - Les champs obligatoires doivent être dans le
requiredtableau
- Vérifier qu’il s’agit
Erreurs de délai d’expiration
Symptômes:MCP tool call timed out Erreurs.
Solutions :
-
Augmentez le délai d’expiration :
mcpServers: { "slow-server": { // ... timeout: 300000, // 5 minutes }, } -
Optimiser les performances du serveur :
- Ajouter une journalisation de l’avancement pour identifier un goulot d’étranglement
- Envisager des opérations asynchrones
- Vérifier les E/S bloquantes
-
Pour les outils de longue durée, envisagez de diffuser des réponses en continu si elles sont prises en charge.
erreurs de JSON-RPC
Symptômes: Erreurs d’analyse, erreurs de requête non valides.
Causes courantes :
-
Les écritures du serveur dans stdout sont incorrectes :
- Sortie de débogage redirigée vers stdout au lieu de stderr
- Nouvelles lignes ou espaces blancs supplémentaires
// Wrong - pollutes stdout console.log("Debug info"); // Correct - use stderr for debug console.error("Debug info"); -
Problèmes d’encodage :
- Vérifier l’encodage UTF-8
- Sans BOM (indicateur d’ordre des octets)
-
Trame de message :
- Chaque message doit être un objet JSON complet
- Délimité par nouvelle ligne (un message par ligne)
Problèmes spécifiques à la plateforme
Windows
Applications console / outils .NET
using GitHub.Copilot;
public static class McpDotnetConfigExample
{
public static void Main()
{
var servers = new Dictionary<string, McpServerConfig>
{
["my-dotnet-server"] = new McpStdioServerConfig
{
Command = @"C:\Tools\MyServer\MyServer.exe",
Args = new List<string>(),
WorkingDirectory = @"C:\Tools\MyServer",
Tools = new List<string> { "*" },
},
["my-dotnet-tool"] = new McpStdioServerConfig
{
Command = "dotnet",
Args = new List<string> { @"C:\Tools\MyTool\MyTool.dll" },
WorkingDirectory = @"C:\Tools\MyTool",
Tools = new List<string> { "*" },
}
};
}
}
// Correct configuration for .NET exe
["my-dotnet-server"] = new McpStdioServerConfig
{
Command = @"C:\Tools\MyServer\MyServer.exe", // Full path with .exe
Args = new List<string>(),
WorkingDirectory = @"C:\Tools\MyServer", // Set working directory
Tools = new List<string> { "*" },
}
// For dotnet tool (DLL)
["my-dotnet-tool"] = new McpStdioServerConfig
{
Command = "dotnet",
Args = new List<string> { @"C:\Tools\MyTool\MyTool.dll" },
WorkingDirectory = @"C:\Tools\MyTool",
Tools = new List<string> { "*" },
}
commandes npx
using GitHub.Copilot;
public static class McpNpxConfigExample
{
public static void Main()
{
var servers = new Dictionary<string, McpServerConfig>
{
["filesystem"] = new McpStdioServerConfig
{
Command = "cmd",
Args = new List<string> { "/c", "npx", "-y", "@modelcontextprotocol/server-filesystem", "C:\\allowed\\path" },
Tools = new List<string> { "*" },
}
};
}
}
// Windows needs cmd /c for npx
["filesystem"] = new McpStdioServerConfig
{
Command = "cmd",
Args = new List<string> { "/c", "npx", "-y", "@modelcontextprotocol/server-filesystem", "C:\\allowed\\path" },
Tools = new List<string> { "*" },
}
Problèmes de chemin d’accès
- Utiliser des chaînes brutes (
@"C:\path") ou des barres obliques ("C:/path") - Éviter les espaces dans les chemins lorsque cela est possible
- Si des espaces sont requis, assurez-vous d’utiliser correctement les guillemets
Antivirus/pare-feu
Windows Defender ou d’autres AV peuvent bloquer :
- Nouveaux exécutables
- Processus de communication via stdin/stdout
Solution: Ajoutez des exclusions pour votre exécutable de serveur MCP.
macOS
Blocage par Gatekeeper
# If the server is blocked
xattr -d com.apple.quarantine /path/to/mcp-server
Chemins d’accès Homebrew
import { MCPStdioServerConfig } from "@github/copilot-sdk";
const mcpServers: Record<string, MCPStdioServerConfig> = {
"my-server": {
command: "/opt/homebrew/bin/node",
args: ["/path/to/server.js"],
tools: ["*"],
},
};
// GUI apps may not have /opt/homebrew in PATH
mcpServers: {
"my-server": {
command: "/opt/homebrew/bin/node", // Full path
args: ["/path/to/server.js"],
},
}
Linux
Problèmes d’autorisation
chmod +x /path/to/mcp-server
Bibliothèques partagées manquantes
# Check dependencies
ldd /path/to/mcp-server
# Install missing libraries
apt install libfoo # Debian/Ubuntu
yum install libfoo # RHEL/CentOS
Débogage avancé
Capturer tout le trafic MCP
Créez un script wrapper pour journaliser toutes les communications :
#!/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"
Utilisez-le :
mcpServers: {
"debug-server": {
command: "/path/to/mcp-debug-wrapper.sh",
args: ["/actual/server/path", "arg1", "arg2"],
},
}
Inspecter avec l’inspecteur MCP
Utilisez l’outil d’inspecteur MCP officiel :
npx @modelcontextprotocol/inspector /path/to/your/mcp-server
Cela fournit une interface utilisateur web pour :
- Envoyer des demandes de test
- Afficher les réponses
- Inspecter les schémas d’outil
Incompatibilités de version du protocole
Vérifiez que votre serveur prend en charge la version du protocole utilisée par le Kit de développement logiciel (SDK) :
// In initialize response, check protocolVersion
{"result":{"protocolVersion":"2024-11-05",...}}
Si les versions ne correspondent pas, mettez à jour votre bibliothèque de serveurs MCP.
Liste de vérification du débogage
Lors de l’ouverture d’un problème ou de la demande d’aide, collectez :
- Langue et version du Kit de développement logiciel (SDK)
- Version de l’interface CLI (
copilot --version) - Type de serveur MCP (Node.js, Python, .NET, Go, Rust, etc.)
- Configuration complète du serveur MCP (secrets rédigés)
- Résultat du test manuel
initialize - Résultat du test manuel
tools/list - Journaux de débogage du Kit de développement logiciel (SDK)
- Messages d’erreur
Voir aussi
- Using MCP servers with the GitHub Copilot SDK - Configuration et installation
- Guide de débogage - Débogage à l’échelle du Kit de développement logiciel (SDK)
- Spécification MCP - Documents de protocole officiels