{"meta":{"title":"Verwenden von MCP-Servern mit dem GitHub Copilot SDK","intro":"Das Copilot SDK kann in MCP-Server (Model Context Protocol) integriert werden, um die Funktionen des Assistenten mit externen Tools zu erweitern. MCP-Server werden als separate Prozesse ausgeführt und machen Tools (Funktionen) verfügbar, die Copilot während Unterhaltungen aufrufen können.","product":"GitHub Copilot","breadcrumbs":[{"href":"/de/copilot","title":"GitHub Copilot"},{"href":"/de/copilot/how-tos","title":"Vorgehensweisen"},{"href":"/de/copilot/how-tos/copilot-sdk","title":"Copilot SDK"},{"href":"/de/copilot/how-tos/copilot-sdk/features","title":"Funktionen"},{"href":"/de/copilot/how-tos/copilot-sdk/features/mcp","title":"MCP"}],"documentType":"article"},"body":"# Verwenden von MCP-Servern mit dem GitHub Copilot SDK\n\nDas Copilot SDK kann in MCP-Server (Model Context Protocol) integriert werden, um die Funktionen des Assistenten mit externen Tools zu erweitern. MCP-Server werden als separate Prozesse ausgeführt und machen Tools (Funktionen) verfügbar, die Copilot während Unterhaltungen aufrufen können.\n\n<!-- markdownlint-disable GHD046 GHD005 -->\n\n<!-- Suppressed: GHD046 (outdated release terminology), GHD005 (hardcoded data variable) -->\n\n> \\[!NOTE]\n> Dies ist ein sich entwickelndes Feature. Siehe [Problem Nr. 36](https://github.com/github/copilot-sdk/issues/36) zur laufenden Diskussion.\n\n## Was ist MCP?\n\n[Model Context Protocol (MCP)](https://modelcontextprotocol.io/) ist ein offener Standard zum Verbinden von KI-Assistenten mit externen Tools und Datenquellen. MCP-Server können:\n\n* Ausführen von Code oder Skripts\n* Abfragedatenbanken\n* Auf Dateisysteme zugreifen\n* Aufrufen externer APIs\n* Und vieles mehr\n\n## Servertypen\n\nDas SDK unterstützt zwei Arten von MCP-Servern:\n\n| Typ             | Description                                                     | Anwendungsfall                                         |\n| --------------- | --------------------------------------------------------------- | ------------------------------------------------------ |\n| **Local/Stdio** | Wird als Teilprozess ausgeführt, kommuniziert über stdin/stdout | Lokale Tools, Dateizugriff, benutzerdefinierte Skripts |\n| **HTTP/SSE**    | Remoteserver, auf den über HTTP zugegriffen wird                | Gemeinsame Dienste, in der Cloud gehostete Tools       |\n\n## Configuration\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## Deaktivieren konfigurierter Server pro Sitzung\n\nLegen Sie `disabledMcpServers` auf genaue MCP-Servernamen fest, die nicht in einer Sitzung ausgeführt werden dürfen.\nDie Einstellung ist auf die individuelle Erstellungs- oder Fortsetzungsanforderung festgelegt; es ändert keine globalen MCP-Einstellungen oder die Serverkonfiguration.\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     | Konfigurationseigenschaft        |\n| ------- | -------------------------------- |\n| Node.js | `disabledMcpServers`             |\n| Python  | `disabled_mcp_servers`           |\n| Go      | `DisabledMCPServers`             |\n| .NET    | `DisabledMcpServers`             |\n| Java    | `setDisabledMcpServers(...)`     |\n| Rust    | `with_disabled_mcp_servers(...)` |\n\nBei der Sitzungserstellung und beim Fortsetzen nach einem **Kaltstart** werden deaktivierte Server nicht gestartet, und die Laufzeitumgebung stößt deren Authentifizierung nicht an. Ein Fortsetzen im residenten Modus kann einen Server, den die Laufzeitumgebung bereits gestartet hat, nicht rückgängig machen. Namen werden exakt abgeglichen.\n\n## Werkzeugkonfiguration\n\nMithilfe des `tools` Felds können Sie steuern, welche Tools für einen MCP-Server verfügbar sind.\n\n### Alle Werkzeuge zulassen\n\nVerwenden Sie `\"*\"`, um alle vom MCP-Server bereitgestellten Tools zu aktivieren:\n\n```typescript\ntools: [\"*\"]\n```\n\n### Bestimmte Tools zulassen\n\nStellen Sie eine Liste der Toolnamen bereit, um den Zugriff einzuschränken:\n\n```typescript\ntools: [\"bash\", \"edit\"]\n```\n\nNur die aufgeführten Tools sind für den Agent verfügbar.\n\n### Alle Tools deaktivieren\n\nVerwenden Sie ein leeres Array, um alle Tools zu deaktivieren:\n\n```typescript\ntools: []\n```\n\n### Notes\n\n* Das `tools` Feld definiert, welche Tools zulässig sind.\n* Es gibt keine separate `allow` Konfiguration oder `disallow` Konfiguration– der Toolzugriff wird direkt über diese Liste gesteuert.\n\n## Schnellstart: Dateisystem-MCP-Server\n\nHier ist ein vollständiges Arbeitsbeispiel mit dem offiziellen [`@modelcontextprotocol/server-filesystem`](https://www.npmjs.com/package/@modelcontextprotocol/server-filesystem) MCP-Server:\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**Ausgabe:**\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> Sie können jeden MCP-Server aus dem [MCP-Serververzeichnis](https://github.com/modelcontextprotocol/servers) verwenden. Zu den beliebten Optionen gehören `@modelcontextprotocol/server-github`, `@modelcontextprotocol/server-sqlite`und `@modelcontextprotocol/server-puppeteer`.\n\n## Konfigurationsoptionen\n\n### Lokaler/stdio-Server\n\n| Eigentum                 | Typ        | Erforderlich                    | Description                                              |\n| ------------------------ | ---------- | ------------------------------- | -------------------------------------------------------- |\n| `type`                   |            |                                 |                                                          |\n| `\"local\"` oder `\"stdio\"` | No         | Servertyp (Standardmäßig lokal) |                                                          |\n| `command`                | `string`   | Yes                             | Auszuführende Befehl                                     |\n| `args`                   | `string[]` | Yes                             | Befehlsargumente                                         |\n| `env`                    | `object`   | No                              | Umgebungsvariablen                                       |\n| `cwd`                    | `string`   | No                              | Arbeitsverzeichnis                                       |\n| `tools`                  | `string[]` | No                              | Zu aktivierende Tools (`[\"*\"]` für alle, `[]` für keine) |\n| `timeout`                | `number`   | No                              | Timeout in Millisekunden                                 |\n\n### Remoteserver (HTTP/SSE)\n\n| Eigentum              | Typ        | Erforderlich | Description                               |\n| --------------------- | ---------- | ------------ | ----------------------------------------- |\n| `type`                |            |              |                                           |\n| `\"http\"` oder `\"sse\"` | Yes        | Servertyp    |                                           |\n| `url`                 | `string`   | Yes          | Server-URL                                |\n| `headers`             | `object`   | No           | HTTP-Header (z. B. für Authentifizierung) |\n| `tools`               | `string[]` | No           | Zu aktivierende Tools                     |\n| `timeout`             | `number`   | No           | Timeout in Millisekunden                  |\n\n## Problembehandlung\n\n### Tools werden nicht angezeigt oder nicht aufgerufen\n\n1. **Überprüfen, ob der MCP-Server ordnungsgemäß gestartet wird**\n   * Überprüfen Sie, ob der Befehl und die Argumente korrekt sind.\n   * Sicherstellen, dass der Serverprozess beim Start nicht abstürzt\n   * Suchen Sie in stderr nach der Fehlerausgabe\n\n2. **Überprüfen der Toolkonfiguration**\n   * Stellen Sie sicher, dass `tools` auf `[\"*\"]` festgelegt ist oder die spezifischen Tools auflistet, die Sie benötigen.\n   * Ein leeres Array `[]` bedeutet, dass keine Tools aktiviert sind.\n\n3. **Überprüfen der Konnektivität für Remoteserver**\n   * Sicherstellen, dass auf die URL zugegriffen werden kann\n   * Überprüfen, ob Authentifizierungsheader korrekt sind\n\n### Häufig auftretende Probleme\n\n| Issue                                             | Lösung                                                                                              |\n| ------------------------------------------------- | --------------------------------------------------------------------------------------------------- |\n| \"MCP-Server nicht gefunden\"                       | Überprüfen, ob der Befehlspfad korrekt und ausführbar ist                                           |\n| \"Verbindung verweigert\" (HTTP)                    | Überprüfen Sie die URL, und stellen Sie sicher, dass der Server ausgeführt wird.                    |\n| Timeout-Fehler                                    | Erhöhen Sie den `timeout` Wert oder überprüfen Sie die Serverleistung.                              |\n| Tools funktionieren, werden aber nicht aufgerufen | Stellen Sie sicher, dass Ihre Eingabeaufforderung die Funktionalität des Tools eindeutig erfordert. |\n\nAusführliche Anleitungen zum Debuggen finden Sie unter **[MCP-Serverdebugginghandbuch](/de/copilot/how-tos/copilot-sdk/troubleshooting/mcp-debugging)**.\n\n## Zugehörige Ressourcen\n\n* [Model Context Protocol - Spezifikation](https://modelcontextprotocol.io/)\n* [MCP-Serververzeichnis](https://github.com/modelcontextprotocol/servers) – MCP-Server der Community\n* [GitHub MCP Server](https://github.com/github/github-mcp-server) - Offizieller GitHub MCP-Server\n* [Erstellen Sie Ihre erste Copilot-gestützte App](/de/copilot/how-tos/copilot-sdk/getting-started) – SDK-Grundlagen und benutzerdefinierte Tools\n* [Debughandbuch](/de/copilot/how-tos/copilot-sdk/troubleshooting/debugging) – SDK-weites Debuggen\n\n## Siehe auch\n\n* [MCP-Serverdebugginghandbuch](/de/copilot/how-tos/copilot-sdk/troubleshooting/mcp-debugging) – Detaillierte MCP-Problembehandlung\n* [Problem Nr. 9](https://github.com/github/copilot-sdk/issues/9) – Ursprüngliche MCP-Tools– Verwendungsfrage\n* ```\n            [Problem Nr. 36](https://github.com/github/copilot-sdk/issues/36) – Problem mit der Nachverfolgung der MCP-Dokumentation\n  ```"}