{"meta":{"title":"Uso de servidores MCP con el SDK de GitHub Copilot","intro":"El SDK de Copilot puede integrarse con servidores MCP (Protocolo de contexto de modelo) para ampliar las funcionalidades del asistente con herramientas externas. Los servidores MCP se ejecutan como procesos independientes y exponen herramientas (funciones) que Copilot pueden invocar durante las conversaciones.","product":"GitHub Copilot","breadcrumbs":[{"href":"/es/copilot","title":"GitHub Copilot"},{"href":"/es/copilot/how-tos","title":"Procedimientos"},{"href":"/es/copilot/how-tos/copilot-sdk","title":"SDK de Copilot"},{"href":"/es/copilot/how-tos/copilot-sdk/features","title":"Características"},{"href":"/es/copilot/how-tos/copilot-sdk/features/mcp","title":"MCP"}],"documentType":"article"},"body":"# Uso de servidores MCP con el SDK de GitHub Copilot\n\nEl SDK de Copilot puede integrarse con servidores MCP (Protocolo de contexto de modelo) para ampliar las funcionalidades del asistente con herramientas externas. Los servidores MCP se ejecutan como procesos independientes y exponen herramientas (funciones) que Copilot pueden invocar durante las conversaciones.\n\n<!-- markdownlint-disable GHD046 GHD005 -->\n\n<!-- Suppressed: GHD046 (outdated release terminology), GHD005 (hardcoded data variable) -->\n\n> \\[!NOTE]\n> Esta es una característica en evolución. Consulte [la issue n.º 36](https://github.com/github/copilot-sdk/issues/36) para seguir la discusión en curso.\n\n## ¿Qué es MCP?\n\n[El Protocolo de contexto de modelo (MCP)](https://modelcontextprotocol.io/) es un estándar abierto para conectar asistentes de IA a herramientas externas y orígenes de datos. Los servidores MCP pueden:\n\n* Ejecutar código o secuencias de comandos\n* Consulta de bases de datos\n* Acceso a sistemas de archivos\n* Llamar a las API externas\n* Y mucho más\n\n## Tipos de servidor\n\nEl SDK admite dos tipos de servidores MCP:\n\n| Tipo            | Description                                                          | Caso de uso                                                     |\n| --------------- | -------------------------------------------------------------------- | --------------------------------------------------------------- |\n| **Local/Stdio** | Se ejecuta como un subproceso, se comunica a través de stdin/stdout. | Herramientas locales, acceso a archivos, scripts personalizados |\n| **HTTP/SSE**    | Servidor remoto al que se accede a través de HTTP                    | Servicios compartidos, herramientas hospedadas en la nube       |\n\n## Configuración\n\n### Node.js/TypeScript\n\n```typescript\nimport { CopilotClient } from \"@github/copilot-sdk\";\n\nconst client = new CopilotClient();\nconst session = await client.createSession({\n    model: \"gpt-5\",\n    mcpServers: {\n        // Local MCP server (stdio)\n        \"my-local-server\": {\n            type: \"local\",\n            command: \"node\",\n            args: [\"./mcp-server.js\"],\n            env: { DEBUG: \"true\" },\n            cwd: \"./servers\",\n            tools: [\"*\"],  // \"*\" = all tools, [] = none, or list specific tools\n            timeout: 30000,\n        },\n        // Remote MCP server (HTTP)\n        \"github\": {\n            type: \"http\",\n            url: \"https://api.githubcopilot.com/mcp/\",\n            headers: { \"Authorization\": \"Bearer ${TOKEN}\" },\n            tools: [\"*\"],\n        },\n    },\n});\n```\n\n### Python\n\n```python\nimport asyncio\nfrom copilot import CopilotClient\nfrom copilot.session import PermissionHandler\n\nasync def main():\n    client = CopilotClient()\n    await client.start()\n\n    session = await client.create_session(on_permission_request=PermissionHandler.approve_all, model=\"gpt-5\", mcp_servers={\n        # Local MCP server (stdio)\n        \"my-local-server\": {\n            \"type\": \"local\",\n            \"command\": \"python\",\n            \"args\": [\"./mcp_server.py\"],\n            \"env\": {\"DEBUG\": \"true\"},\n            \"cwd\": \"./servers\",\n            \"tools\": [\"*\"],\n            \"timeout\": 30000,\n        },\n        # Remote MCP server (HTTP)\n        \"github\": {\n            \"type\": \"http\",\n            \"url\": \"https://api.githubcopilot.com/mcp/\",\n            \"headers\": {\"Authorization\": \"Bearer ${TOKEN}\"},\n            \"tools\": [\"*\"],\n        },\n    })\n\n    response = await session.send_and_wait(\"List my recent GitHub notifications\")\n    print(response.data.content)\n\n    await client.stop()\n\nasyncio.run(main())\n```\n\n### Go\n\n```golang\npackage main\n\nimport (\n    \"context\"\n    \"log\"\n    copilot \"github.com/github/copilot-sdk/go\"\n)\n\nfunc main() {\n    ctx := context.Background()\n    client := copilot.NewClient(nil)\n    if err := client.Start(ctx); err != nil {\n        log.Fatal(err)\n    }\n    defer client.Stop()\n\n    session, err := client.CreateSession(ctx, &copilot.SessionConfig{\n        Model: \"gpt-5\",\n        MCPServers: map[string]copilot.MCPServerConfig{\n            \"my-local-server\": copilot.MCPStdioServerConfig{\n                Command: \"node\",\n                Args:    []string{\"./mcp-server.js\"},\n                Tools:   []string{\"*\"},\n            },\n        },\n    })\n    if err != nil {\n        log.Fatal(err)\n    }\n    defer session.Disconnect()\n\n    // Use the session...\n}\n```\n\n### .NET\n\n```csharp\nusing GitHub.Copilot;\n\nawait using var client = new CopilotClient();\nawait using var session = await client.CreateSessionAsync(new SessionConfig\n{\n    Model = \"gpt-5\",\n    McpServers = new Dictionary<string, McpServerConfig>\n    {\n        [\"my-local-server\"] = new McpStdioServerConfig\n        {\n            Command = \"node\",\n            Args = new List<string> { \"./mcp-server.js\" },\n            Tools = new List<string> { \"*\" },\n        },\n    },\n});\n```\n\n## Deshabilitación de servidores configurados por sesión\n\nEstablece `disabledMcpServers` con los nombres exactos de los servidores MCP que no deben ejecutarse en una sesión.\nEl ámbito de la configuración es la solicitud individual de creación o reanudación; no modifica la configuración global de MCP ni la configuración del servidor.\n\n```typescript\nconst session = await client.createSession({\n    mcpServers: {\n        filesystem: { type: \"local\", command: \"npx\", args: [\"-y\", \"@modelcontextprotocol/server-filesystem\", \".\"] },\n        github: { type: \"http\", url: \"https://api.githubcopilot.com/mcp/\" },\n    },\n    disabledMcpServers: [\"github\"],\n});\n```\n\n| SDK     | Propiedad de configuración       |\n| ------- | -------------------------------- |\n| Node.js | `disabledMcpServers`             |\n| Python  | `disabled_mcp_servers`           |\n| Go      | `DisabledMCPServers`             |\n| .NET    | `DisabledMcpServers`             |\n| Java    | `setDisabledMcpServers(...)`     |\n| Óxido   | `with_disabled_mcp_servers(...)` |\n\nAl crear una sesión y al reanudarla en estado **frío**, los servidores desactivados no se inician y el tiempo de ejecución no inicia su autenticación. Una reanudación residente no puede deshacer un servidor que el tiempo de ejecución ya haya generado. Los nombres coinciden exactamente.\n\n## Herramienta de configuración\n\nPuede controlar qué herramientas están disponibles para un servidor MCP mediante el `tools` campo .\n\n### Permitir el acceso a todas las herramientas\n\nUse `\"*\"` para habilitar todas las herramientas proporcionadas por el servidor MCP:\n\n```typescript\ntools: [\"*\"]\n```\n\n### Permitir herramientas específicas\n\nProporcione una lista de nombres de herramientas para restringir el acceso:\n\n```typescript\ntools: [\"bash\", \"edit\"]\n```\n\nSolo las herramientas enumeradas estarán disponibles para el agente.\n\n### Deshabilitar todas las herramientas\n\nUse una matriz vacía para deshabilitar todas las herramientas:\n\n```typescript\ntools: []\n```\n\n### Notes\n\n* El `tools` campo define qué herramientas se permiten.\n* No existe una configuración independiente de `allow` o `disallow`; el acceso de las herramientas se controla directamente mediante esta lista.\n\n## Inicio rápido: servidor MCP del sistema de archivos\n\nEste es un ejemplo de trabajo completo mediante el servidor MCP oficial [`@modelcontextprotocol/server-filesystem`](https://www.npmjs.com/package/@modelcontextprotocol/server-filesystem) :\n\n```typescript\nimport { CopilotClient } from \"@github/copilot-sdk\";\n\nasync function main() {\n    const client = new CopilotClient();\n\n    // Create session with filesystem MCP server\n    const session = await client.createSession({\n        mcpServers: {\n            filesystem: {\n                type: \"local\",\n                command: \"npx\",\n                args: [\"-y\", \"@modelcontextprotocol/server-filesystem\", \"/tmp\"],\n                tools: [\"*\"],\n            },\n        },\n    });\n\n    console.log(\"Session created:\", session.sessionId);\n\n    // The model can now use filesystem tools\n    const result = await session.sendAndWait({\n        prompt: \"List the files in the allowed directory\",\n    });\n\n    console.log(\"Response:\", result?.data?.content);\n\n    await session.disconnect();\n    await client.stop();\n}\n\nmain();\n```\n\n**Output:**\n\n```text\nSession created: 18b3482b-bcba-40ba-9f02-ad2ac949a59a\nResponse: The allowed directory is `/tmp`, which contains various files\nand subdirectories including temporary system files, log files, and\ndirectories for different applications.\n```\n\n> \\[!TIP]\n> Puede usar cualquier servidor [MCP desde el directorio de servidores MCP](https://github.com/modelcontextprotocol/servers). Entre las opciones populares se incluyen `@modelcontextprotocol/server-github`, `@modelcontextprotocol/server-sqlite`y `@modelcontextprotocol/server-puppeteer`.\n\n## Opciones de configuración\n\n### Servidor local/stdio\n\n| Propiedad             | Tipo       | Obligatorio                                         | Description                                                         |\n| --------------------- | ---------- | --------------------------------------------------- | ------------------------------------------------------------------- |\n| `type`                |            |                                                     |                                                                     |\n| `\"local\"` o `\"stdio\"` | No         | Tipo de servidor (el valor predeterminado es local) |                                                                     |\n| `command`             | `string`   | Yes                                                 | Comando para ejecutar                                               |\n| `args`                | `string[]` | Yes                                                 | Argumentos de comandos                                              |\n| `env`                 | `object`   | No                                                  | Variables de entorno                                                |\n| `cwd`                 | `string`   | No                                                  | Directorio de trabajo                                               |\n| `tools`               | `string[]` | No                                                  | Herramientas para habilitar (`[\"*\"]` para todos, `[]` para ninguno) |\n| `timeout`             | `number`   | No                                                  | Tiempo de espera en milisegundos                                    |\n\n### Servidor remoto (HTTP/SSE)\n\n| Propiedad          | Tipo       | Obligatorio      | Description                                           |\n| ------------------ | ---------- | ---------------- | ----------------------------------------------------- |\n| `type`             |            |                  |                                                       |\n| `\"http\"` o `\"sse\"` | Yes        | Tipo de servidor |                                                       |\n| `url`              | `string`   | Yes              | Dirección URL del servidor                            |\n| `headers`          | `object`   | No               | Encabezados HTTP (por ejemplo, para la autenticación) |\n| `tools`            | `string[]` | No               | Herramientas para habilitar                           |\n| `timeout`          | `number`   | No               | Tiempo de espera en milisegundos                      |\n\n## Solución de problemas\n\n### Herramientas que no se muestran o no se invocan\n\n1. **Comprobación de que el servidor MCP se inicia correctamente**\n   * Compruebe que el comando y los argumentos son correctos\n   * Asegúrese de que el proceso del servidor no se bloquea al iniciarse\n   * Busca mensajes de error en stderr\n\n2. **Comprobación de la configuración de la herramienta**\n   * Asegúrese de que `tools` está establecido en `[\"*\"]` o enumera las herramientas específicas que necesita.\n   * Una matriz `[]` vacía significa que no hay ninguna herramienta habilitada\n\n3. **Comprobación de la conectividad para servidores remotos**\n   * Asegúrese de que la dirección URL es accesible\n   * Comprobación de que los encabezados de autenticación son correctos\n\n### Problemas comunes\n\n| Issue                                           | Solución                                                                            |\n| ----------------------------------------------- | ----------------------------------------------------------------------------------- |\n| \"No se encontró el servidor MCP\"                | Comprobación de que la ruta de acceso del comando es correcta y ejecutable          |\n| \"Conexión rechazada\" (HTTP)                     | Compruebe la dirección URL y asegúrese de que el servidor se está ejecutando        |\n| Errores de \"tiempo de espera\"                   | Aumenta el valor de `timeout` o comprueba el rendimiento del servidor               |\n| Las herramientas funcionan pero no son llamadas | Asegúrese de que el mensaje requiere claramente la funcionalidad de la herramienta. |\n\nPara obtener instrucciones detalladas sobre la depuración, consulte **[Guía de depuración del servidor MCP](/es/copilot/how-tos/copilot-sdk/troubleshooting/mcp-debugging)**.\n\n## Recursos relacionados\n\n* [Especificación del protocolo de contexto de modelo](https://modelcontextprotocol.io/)\n* [Directorio de servidores MCP](https://github.com/modelcontextprotocol/servers) : servidores MCP de la comunidad\n* [servidor MCP de GitHub: servidor MCP](https://github.com/github/github-mcp-server) oficial de GitHub\n* [Crea tu primera aplicación con tecnología Copilot](/es/copilot/how-tos/copilot-sdk/getting-started) : conceptos básicos del SDK y herramientas personalizadas\n* [Guía de depuración](/es/copilot/how-tos/copilot-sdk/troubleshooting/debugging) - depuración de todo el SDK\n\n## Consulte también\n\n* [Guía de depuración del servidor MCP](/es/copilot/how-tos/copilot-sdk/troubleshooting/mcp-debugging) : solución de problemas detallada de MCP\n* [Problema n.º 9](https://github.com/github/copilot-sdk/issues/9) : pregunta de uso de herramientas de MCP original\n* [Problema n.º 36](https://github.com/github/copilot-sdk/issues/36) : problema de seguimiento de documentación de MCP"}