Tabla de contenido
- Diagnóstico rápido
- Probar servidores MCP de forma independiente
- Problemas comunes
- Problemas específicos de la plataforma
- Depuración avanzada
Diagnóstico rápido
Checklist
Antes de profundizar, compruebe estos aspectos básicos:
- El ejecutable del servidor MCP existe y se puede ejecutar.
- La ruta de acceso del comando es correcta (use rutas de acceso absolutas cuando tenga dudas)
- Las herramientas están habilitadas (
tools: ["*"]o nombres de herramientas específicos) - El servidor implementa correctamente el protocolo MCP (responde a
initialize) - No hay firewall o antivirus que bloquee el proceso (Windows)
Habilite el registro de depuración MCP
Agregue variables de entorno a la configuración del servidor MCP:
mcpServers: {
"my-server": {
type: "local",
command: "/path/to/server",
args: [],
env: {
MCP_DEBUG: "1",
DEBUG: "*",
NODE_DEBUG: "mcp", // For Node.js MCP servers
},
},
}
Prueba de servidores MCP de forma independiente
Pruebe siempre el servidor MCP fuera del SDK en primer lugar.
Prueba manual del protocolo
Envíe una initialize solicitud a través de 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
Respuesta esperada:
{"jsonrpc":"2.0","id":1,"result":{"protocolVersion":"2024-11-05","capabilities":{"tools":{}},"serverInfo":{"name":"your-server","version":"1.0"}}}
Lista de herramientas de prueba
Después de la inicialización, solicite la lista de herramientas:
echo '{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}' | /path/to/your/mcp-server
Respuesta esperada:
{"jsonrpc":"2.0","id":2,"result":{"tools":[{"name":"my_tool","description":"Does something","inputSchema":{...}}]}}
Script de prueba interactiva
Cree un script de prueba para depurar interactivamente el servidor 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
Uso:
./test-mcp.sh | /path/to/mcp-server
Problemas comunes
El servidor no se inicia
Síntomas: No aparece ninguna herramienta, no hay errores en los registros.
Causas y soluciones:
| Causa | Solución |
|---|---|
| Ruta de comando incorrecta | Utilice la ruta de acceso absoluta: /usr/local/bin/server |
| Falta el permiso ejecutable | Ejecute chmod +x /path/to/server: |
| Dependencias faltantes | Comprobación con ldd (Linux) o ejecución manual |
| Problemas del directorio de trabajo | Establecer cwd en la configuración |
Para depurar, ejecute manualmente:
# Run exactly what the SDK would run
cd /expected/working/dir
/path/to/command arg1 arg2
El servidor se inicia, pero las herramientas no aparecen
Síntomas: El proceso de servidor se ejecuta, pero no hay herramientas disponibles.
Causas y soluciones:
-
Herramientas no habilitadas en la configuración:
mcpServers: { "server": { // ... tools: ["*"], // Must be "*" or list of tool names }, } -
El servidor no expone herramientas:
- Prueba manualmente con la solicitud
tools/list - Comprobar que el servidor implementa el método
tools/list
- Prueba manualmente con la solicitud
-
**Error en el protocolo de enlace de inicialización:**- El servidor debe responder correctamente a
initialize - El servidor debe gestionar
notifications/initialized
- El servidor debe responder correctamente a
Herramientas enumeradas pero nunca llamadas
Síntomas: Las herramientas aparecen en los registros de depuración, pero el modelo no los usa.
Causas y soluciones:
-
**Prompt no necesita claramente la herramienta:**// 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" }); -
Descripción de la herramienta no clara:
// 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." } -
Problemas de esquema de herramientas:
- Asegúrese de que
inputSchemaes un esquema JSON válido - Los campos obligatorios deben estar en el array
required
- Asegúrese de que
Errores de tiempo de espera
Síntomas:MCP tool call timed out errores.
Soluciones:
-
Aumento del tiempo de espera:
mcpServers: { "slow-server": { // ... timeout: 300000, // 5 minutes }, } -
Optimizar el rendimiento del servidor:
- Agregar el registro del progreso para identificar el cuello de botella
- Tener en cuenta las operaciones asíncronas
- Compruebe si hay operaciones de E/S que bloquean el sistema
-
Para herramientas de ejecución prolongada, considere transmitir respuestas en streaming si es compatible.
errores de JSON-RPC
Síntomas: Errores de análisis, errores de solicitud no válidos.
Causas comunes:
-
El servidor escribe en stdout incorrectamente:
- Salida de depuración dirigida a stdout en lugar de stderr
- Nuevas líneas adicionales o espacios en blanco
// Wrong - pollutes stdout console.log("Debug info"); // Correct - use stderr for debug console.error("Debug info"); -
Problemas de codificación:
- Asegurar la codificación UTF-8
- Sin BOM (marca de orden de bytes)
-
Trama de mensajes:
- Cada mensaje debe ser un objeto JSON completo.
- Delimitado por nueva línea (un mensaje por línea)
Problemas específicos de la plataforma
Windows
aplicaciones o herramientas de consola de .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> { "*" },
}
Comandos 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> { "*" },
}
Problemas de ruta
- Usar cadenas sin formato (
@"C:\path") o barras diagonales ("C:/path") - Evitar espacios en rutas siempre que sea posible
- Si se requieren espacios, asegúrese de que las comillas sean adecuadas
Antivirus o firewall
Windows Defender u otro antivirus pueden bloquear:
- Nuevos ejecutables
- Procesos que se comunican a través de stdin/stdout
Solución: Agregue exclusiones para el ejecutable del servidor MCP.
macOS
Bloqueo del controlador de acceso
# If the server is blocked
xattr -d com.apple.quarantine /path/to/mcp-server
Rutas de acceso de 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
Problemas de permisos
chmod +x /path/to/mcp-server
Faltan bibliotecas compartidas
# Check dependencies
ldd /path/to/mcp-server
# Install missing libraries
apt install libfoo # Debian/Ubuntu
yum install libfoo # RHEL/CentOS
Depuración avanzada
Captura todo el tráfico MCP
Cree un script contenedor para registrar toda la comunicación:
#!/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"
Usa esto:
mcpServers: {
"debug-server": {
command: "/path/to/mcp-debug-wrapper.sh",
args: ["/actual/server/path", "arg1", "arg2"],
},
}
Inspección con el inspector de MCP
Use la herramienta oficial MCP Inspector:
npx @modelcontextprotocol/inspector /path/to/your/mcp-server
Esto proporciona una interfaz de usuario web para:
- Envío de solicitudes de prueba
- Ver respuestas
- Inspección de esquemas de herramientas
Errores de coincidencia de versiones del protocolo
Compruebe que el servidor admite la versión del protocolo que usa el SDK:
// In initialize response, check protocolVersion
{"result":{"protocolVersion":"2024-11-05",...}}
Si las versiones no coinciden, actualice la biblioteca del servidor MCP.
Lista de comprobación de depuración
Al abrir un problema o pedir ayuda, recopile:
- Lenguaje y versión del SDK
- Versión de la CLI (
copilot --version) - Tipo de servidor MCP (Node.js, Python, .NET, Go, Rust, etc.)
- Configuración completa del servidor MCP (ocultar secretos)
- Resultado de la prueba manual
initialize - Resultado de la prueba manual
tools/list - Depurar registros del SDK
- Cualquier mensaje de error
Consulte también
- Using MCP servers with the GitHub Copilot SDK - Configuración y puesta en marcha
- Guía de depuración - depuración de todo el SDK
- Especificación de MCP : documentos de protocolo oficiales