Skip to main content

Использование MCP-серверов с SDK GitHub Copilot

Copilot SDK может интегрироваться с серверами MCP (протокол контекста модели) для расширения возможностей помощника с помощью внешних инструментов. MCP-серверы работают как отдельные процессы и предоставляют инструменты (функции), которые Copilot может вызывать во время разговоров.

Примечание.

Это развивающаяся функция. См. выпуск #36 для дальнейшего обсуждения.

Что такое MCP?

Протокол контекста модели (MCP) — это открытый стандарт для подключения ассистентов ИИ к внешним инструментам и источникам данных. MCP-серверы могут:

  • Выполните код или скрипты
  • Базы данных запросов
  • Файловые системы доступа
  • Вызов внешних API
  • И многое другое

Типы серверов

SDK поддерживает два типа MCP-серверов:

TypeОписаниеВариант использования
Local/StdioРаботает как подпроцесс, общается через stdin/stdoutЛокальные инструменты, доступ к файлам, пользовательские скрипты
HTTP/SSEУдалённый сервер с доступом через HTTPОбщие сервисы, облачные инструменты

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> { "*" },
        },
    },
});

Настройка средства

Вы можете управлять, какие инструменты доступны MCP-серверу, используя поле tools .

Разрешить все инструменты

Используйте "*" для включения всех инструментов, предоставляемых сервером MCP:

tools: ["*"]

Разрешите определённые инструменты

Предоставьте список имён инструментов для ограничения доступа:

tools: ["bash", "edit"]

Агенту будут доступны только указанные инструменты.

Отключите все инструменты

Используйте пустой массив для отключения всех инструментов:

tools: []

Notes

  • Это tools поле определяет, какие инструменты разрешены.
  • Отдельного allow или disallow конфигурационного устройства нет — доступ к инструменту контролируется напрямую через этот список.

Быстрый старт: сервер файловой системы MCP

Вот полный рабочий пример с использованием официального @modelcontextprotocol/server-filesystem сервера MCP:

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();

Output:

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.

Совет

Вы можете использовать любой MCP-сервер из каталога MCP Servers. Популярные варианты включают @modelcontextprotocol/server-github, @modelcontextprotocol/server-sqliteи @modelcontextprotocol/server-puppeteer.

Параметры конфигурации

Локальный/stdio сервер

PropertyTypeОбязательныйОписание
type
"local" или "stdio"НетТип сервера (по умолчанию локальный)
commandstringДаКоманда для выполнения
argsstring[]ДаАргументы команд
envobjectНетПеременные среды
cwdstringНетРабочий каталог
toolsstring[]НетИнструменты для включения (["*"] для всех, [] для никого)
timeoutnumberНетТайм-аут в миллисекундах

Удалённый сервер (HTTP/SSE)

PropertyTypeОбязательныйОписание
type
"http" или "sse"ДаТип сервера
urlstringДаURL-адрес сервера
headersobjectНетHTTP-заголовки (например, для аутентификации)
toolsstring[]НетИнструменты для включения
timeoutnumberНетТайм-аут в миллисекундах

Troubleshooting

Инструменты не отображаются или не вызываются

  1. Проверьте, что сервер MCP запускается правильно

    • Проверьте, правильны ли команды и args
    • Убедитесь, что серверный процесс не вылетает при запуске
    • Ищите ошибку в stderr
  2. Конфигурация инструментов проверки

    • Убедитесь, tools что он настроен или ["*"] перечисляет конкретные инструменты, которые вам нужны
    • Пустой массив [] означает, что инструменты не включены
  3. Проверьте подключение для удалённых серверов

    • Убедитесь, что URL доступен
    • Проверьте, правильны ли заголовки аутентификации

Распространенные проблемы

IssueSolution
"MCP-сервер не найден"Убедитесь, что путь команды правильный и выполнимый
"Соединение отказано" (HTTP)Проверьте URL и убедитесь, что сервер работает
Ошибки «Тайм-аут»Увеличьте timeout значение или проверьте производительность сервера
Инструменты работают, но не называютсяУбедитесь, что ваш запрос явно требует функциональности инструмента

Подробные рекомендации по отладке смотрите Руководство по отладке серверов MCP.

См. также