Skip to main content

Verwenden von MCP-Servern mit dem GitHub Copilot SDK

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.

Hinweis

Dies ist ein sich entwickelndes Feature. Siehe Problem Nr. 36 zur laufenden Diskussion.

Was ist MCP?

Model Context Protocol (MCP) ist ein offener Standard zum Verbinden von KI-Assistenten mit externen Tools und Datenquellen. MCP-Server können:

  • Ausführen von Code oder Skripts
  • Abfragedatenbanken
  • Auf Dateisysteme zugreifen
  • Aufrufen externer APIs
  • Und vieles mehr

Servertypen

Das SDK unterstützt zwei Arten von MCP-Servern:

TypDescriptionAnwendungsfall
Local/StdioWird als Teilprozess ausgeführt, kommuniziert über stdin/stdoutLokale Tools, Dateizugriff, benutzerdefinierte Skripts
HTTP/SSERemoteserver, auf den über HTTP zugegriffen wirdGemeinsame Dienste, in der Cloud gehostete Tools

Configuration

Node.js / TypeScript

import { CopilotClient } from "@github/copilot-sdk";

const client = new CopilotClient();
const session = await client.createSession({
    model: "gpt-5",
    mcpServers: {
        // Local MCP server (stdio)
        "my-local-server": {
            type: "local",
            command: "node",
            args: ["./mcp-server.js"],
            env: { DEBUG: "true" },
            cwd: "./servers",
            tools: ["*"],  // "*" = all tools, [] = none, or list specific tools
            timeout: 30000,
        },
        // Remote MCP server (HTTP)
        "github": {
            type: "http",
            url: "https://api.githubcopilot.com/mcp/",
            headers: { "Authorization": "Bearer ${TOKEN}" },
            tools: ["*"],
        },
    },
});

Python

import asyncio
from copilot import CopilotClient
from copilot.session import PermissionHandler

async def main():
    client = CopilotClient()
    await client.start()

    session = await client.create_session(on_permission_request=PermissionHandler.approve_all, model="gpt-5", mcp_servers={
        # Local MCP server (stdio)
        "my-local-server": {
            "type": "local",
            "command": "python",
            "args": ["./mcp_server.py"],
            "env": {"DEBUG": "true"},
            "cwd": "./servers",
            "tools": ["*"],
            "timeout": 30000,
        },
        # Remote MCP server (HTTP)
        "github": {
            "type": "http",
            "url": "https://api.githubcopilot.com/mcp/",
            "headers": {"Authorization": "Bearer ${TOKEN}"},
            "tools": ["*"],
        },
    })

    response = await session.send_and_wait("List my recent GitHub notifications")
    print(response.data.content)

    await client.stop()

asyncio.run(main())

Go

package main

import (
    "context"
    "log"
    copilot "github.com/github/copilot-sdk/go"
)

func main() {
    ctx := context.Background()
    client := copilot.NewClient(nil)
    if err := client.Start(ctx); err != nil {
        log.Fatal(err)
    }
    defer client.Stop()

    session, err := client.CreateSession(ctx, &copilot.SessionConfig{
        Model: "gpt-5",
        MCPServers: map[string]copilot.MCPServerConfig{
            "my-local-server": copilot.MCPStdioServerConfig{
                Command: "node",
                Args:    []string{"./mcp-server.js"},
                Tools:   []string{"*"},
            },
        },
    })
    if err != nil {
        log.Fatal(err)
    }
    defer session.Disconnect()

    // Use the session...
}

.NET

using GitHub.Copilot;

await using var client = new CopilotClient();
await using var session = await client.CreateSessionAsync(new SessionConfig
{
    Model = "gpt-5",
    McpServers = new Dictionary<string, McpServerConfig>
    {
        ["my-local-server"] = new McpStdioServerConfig
        {
            Command = "node",
            Args = new List<string> { "./mcp-server.js" },
            Tools = new List<string> { "*" },
        },
    },
});

Werkzeugkonfiguration

Mithilfe des tools Felds können Sie steuern, welche Tools für einen MCP-Server verfügbar sind.

Alle Werkzeuge zulassen

Verwenden Sie "*", um alle vom MCP-Server bereitgestellten Tools zu aktivieren:

tools: ["*"]

Bestimmte Tools zulassen

Stellen Sie eine Liste der Toolnamen bereit, um den Zugriff einzuschränken:

tools: ["bash", "edit"]

Nur die aufgeführten Tools sind für den Agent verfügbar.

Alle Tools deaktivieren

Verwenden Sie ein leeres Array, um alle Tools zu deaktivieren:

tools: []

Notes

  • Das tools Feld definiert, welche Tools zulässig sind.
  • Es gibt keine separate allow Konfiguration oder disallow Konfiguration– der Toolzugriff wird direkt über diese Liste gesteuert.

Schnellstart: Dateisystem-MCP-Server

Hier ist ein vollständiges Arbeitsbeispiel mit dem offiziellen @modelcontextprotocol/server-filesystem MCP-Server:

import { CopilotClient } from "@github/copilot-sdk";

async function main() {
    const client = new CopilotClient();

    // Create session with filesystem MCP server
    const session = await client.createSession({
        mcpServers: {
            filesystem: {
                type: "local",
                command: "npx",
                args: ["-y", "@modelcontextprotocol/server-filesystem", "/tmp"],
                tools: ["*"],
            },
        },
    });

    console.log("Session created:", session.sessionId);

    // The model can now use filesystem tools
    const result = await session.sendAndWait({
        prompt: "List the files in the allowed directory",
    });

    console.log("Response:", result?.data?.content);

    await session.disconnect();
    await client.stop();
}

main();

Ausgabe:

Session created: 18b3482b-bcba-40ba-9f02-ad2ac949a59a
Response: The allowed directory is `/tmp`, which contains various files
and subdirectories including temporary system files, log files, and
directories for different applications.

Tipp

Sie können jeden MCP-Server aus dem MCP-Serververzeichnis verwenden. Zu den beliebten Optionen gehören @modelcontextprotocol/server-github, @modelcontextprotocol/server-sqliteund @modelcontextprotocol/server-puppeteer.

Konfigurationsoptionen

Lokaler/stdio-Server

EigentumTypErforderlichDescription
type
"local" oder "stdio"NoServertyp (Standardmäßig lokal)
commandstringYesAuszuführende Befehl
argsstring[]YesBefehlsargumente
envobjectNoUmgebungsvariablen
cwdstringNoArbeitsverzeichnis
toolsstring[]NoZu aktivierende Tools (["*"] für alle, [] für keine)
timeoutnumberNoTimeout in Millisekunden

Remoteserver (HTTP/SSE)

EigentumTypErforderlichDescription
type
"http" oder "sse"YesServertyp
urlstringYesServer-URL
headersobjectNoHTTP-Header (z. B. für Authentifizierung)
toolsstring[]NoZu aktivierende Tools
timeoutnumberNoTimeout in Millisekunden

Problembehandlung

Tools werden nicht angezeigt oder nicht aufgerufen

  1. Überprüfen, ob der MCP-Server ordnungsgemäß gestartet wird

    • Überprüfen Sie, ob der Befehl und die Argumente korrekt sind.
    • Sicherstellen, dass der Serverprozess beim Start nicht abstürzt
    • Suchen Sie in stderr nach Fehlerausgaben
  2. Überprüfen der Toolkonfiguration

    • Stellen Sie sicher, dass tools auf ["*"] festgelegt ist oder die spezifischen Tools auflistet, die Sie benötigen.
    • Ein leeres Array [] bedeutet, dass keine Tools aktiviert sind.
  3. Überprüfen der Konnektivität für Remoteserver

    • Sicherstellen, dass auf die URL zugegriffen werden kann
    • Überprüfen, ob Authentifizierungsheader korrekt sind

Häufig auftretende Probleme

IssueLösung
"MCP-Server nicht gefunden"Überprüfen, ob der Befehlspfad korrekt und ausführbar ist
"Verbindung verweigert" (HTTP)Überprüfen Sie die URL, und stellen Sie sicher, dass der Server ausgeführt wird.
Timeout-FehlerErhöhen Sie den timeout Wert oder überprüfen Sie die Serverleistung.
Tools funktionieren, werden aber nicht aufgerufenStellen Sie sicher, dass Ihre Eingabeaufforderung die Funktionalität des Tools eindeutig erfordert.

Ausführliche Anleitungen zum Debuggen finden Sie unter MCP-Serverdebugginghandbuch.

Siehe auch