{"meta":{"title":"Использование MCP-серверов с SDK GitHub Copilot","intro":"Copilot SDK может интегрироваться с серверами MCP (протокол контекста модели) для расширения возможностей помощника с помощью внешних инструментов. MCP-серверы работают как отдельные процессы и предоставляют инструменты (функции), которые Copilot может вызывать во время разговоров.","product":"GitHub Copilot","breadcrumbs":[{"href":"/ru/enterprise-cloud@latest/copilot","title":"GitHub Copilot"},{"href":"/ru/enterprise-cloud@latest/copilot/how-tos","title":"Инструкции"},{"href":"/ru/enterprise-cloud@latest/copilot/how-tos/copilot-sdk","title":"Второй пилот SDK"},{"href":"/ru/enterprise-cloud@latest/copilot/how-tos/copilot-sdk/features","title":"Возможности"},{"href":"/ru/enterprise-cloud@latest/copilot/how-tos/copilot-sdk/features/mcp","title":"MCP"}],"documentType":"article"},"body":"# Использование MCP-серверов с SDK GitHub Copilot\n\nCopilot SDK может интегрироваться с серверами MCP (протокол контекста модели) для расширения возможностей помощника с помощью внешних инструментов. MCP-серверы работают как отдельные процессы и предоставляют инструменты (функции), которые Copilot может вызывать во время разговоров.\n\n<!-- markdownlint-disable GHD046 GHD005 -->\n\n<!-- Suppressed: GHD046 (outdated release terminology), GHD005 (hardcoded data variable) -->\n\n> \\[!NOTE]\n> Это развивающаяся функция. См. [выпуск #36](https://github.com/github/copilot-sdk/issues/36) для дальнейшего обсуждения.\n\n## Что такое MCP?\n\n[Протокол контекста модели (MCP)](https://modelcontextprotocol.io/) — это открытый стандарт для подключения ассистентов ИИ к внешним инструментам и источникам данных. MCP-серверы могут:\n\n* Выполните код или скрипты\n* Базы данных запросов\n* Файловые системы доступа\n* Вызов внешних API\n* И многое другое\n\n## Типы серверов\n\nSDK поддерживает два типа MCP-серверов:\n\n| Type            | Описание                                             | Вариант использования                                            |\n| --------------- | ---------------------------------------------------- | ---------------------------------------------------------------- |\n| **Local/Stdio** | Работает как подпроцесс, общается через stdin/stdout | Локальные инструменты, доступ к файлам, пользовательские скрипты |\n| **HTTP/SSE**    | Удалённый сервер с доступом через HTTP               | Общие сервисы, облачные инструменты                              |\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## Отключение настроенных серверов на сеанс\n\nЗадайте `disabledMcpServers` точные имена серверов MCP, которые не должны выполняться в сеансе.\nПараметр ограничен отдельным запросом на создание или возобновление работы; Он не изменяет глобальные параметры MCP или конфигурацию сервера.\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     | Свойство конфигурации            |\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\nПри создании сеанса и **холодном** возобновлении отключенные серверы не запускаются, и среда выполнения не инициирует их проверку подлинности. Резидентное резюме не может отменить сервер, который среда выполнения уже породила. Имена совпадают точно.\n\n## Настройка средства\n\nВы можете управлять, какие инструменты доступны MCP-серверу, используя поле `tools` .\n\n### Разрешить все инструменты\n\nИспользуйте `\"*\"` для включения всех инструментов, предоставляемых сервером MCP:\n\n```typescript\ntools: [\"*\"]\n```\n\n### Разрешите определённые инструменты\n\nПредоставьте список имён инструментов для ограничения доступа:\n\n```typescript\ntools: [\"bash\", \"edit\"]\n```\n\nАгенту будут доступны только указанные инструменты.\n\n### Отключите все инструменты\n\nИспользуйте пустой массив для отключения всех инструментов:\n\n```typescript\ntools: []\n```\n\n### Notes\n\n* Это `tools` поле определяет, какие инструменты разрешены.\n* Отдельного `allow` или `disallow` конфигурационного устройства нет — доступ к инструменту контролируется напрямую через этот список.\n\n## Быстрый старт: сервер файловой системы MCP\n\nВот полный рабочий пример с использованием официального [`@modelcontextprotocol/server-filesystem`](https://www.npmjs.com/package/@modelcontextprotocol/server-filesystem) сервера MCP:\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> Вы можете использовать любой MCP-сервер из [каталога MCP Servers](https://github.com/modelcontextprotocol/servers). Популярные варианты включают `@modelcontextprotocol/server-github`, `@modelcontextprotocol/server-sqlite`и `@modelcontextprotocol/server-puppeteer`.\n\n## Параметры конфигурации\n\n### Локальный/stdio сервер\n\n| Property                | Type       | Обязательный                         | Описание                                                      |\n| ----------------------- | ---------- | ------------------------------------ | ------------------------------------------------------------- |\n| `type`                  |            |                                      |                                                               |\n| `\"local\"` или `\"stdio\"` | Нет        | Тип сервера (по умолчанию локальный) |                                                               |\n| `command`               | `string`   | Да                                   | Команда для выполнения                                        |\n| `args`                  | `string[]` | Да                                   | Аргументы команд                                              |\n| `env`                   | `object`   | Нет                                  | Переменные среды                                              |\n| `cwd`                   | `string`   | Нет                                  | Рабочий каталог                                               |\n| `tools`                 | `string[]` | Нет                                  | Инструменты для включения (`[\"*\"]` для всех, `[]` для никого) |\n| `timeout`               | `number`   | Нет                                  | Тайм-аут в миллисекундах                                      |\n\n### Удалённый сервер (HTTP/SSE)\n\n| Property             | Type       | Обязательный | Описание                                      |\n| -------------------- | ---------- | ------------ | --------------------------------------------- |\n| `type`               |            |              |                                               |\n| `\"http\"` или `\"sse\"` | Да         | Тип сервера  |                                               |\n| `url`                | `string`   | Да           | URL-адрес сервера                             |\n| `headers`            | `object`   | Нет          | HTTP-заголовки (например, для аутентификации) |\n| `tools`              | `string[]` | Нет          | Инструменты для включения                     |\n| `timeout`            | `number`   | Нет          | Тайм-аут в миллисекундах                      |\n\n## Troubleshooting\n\n### Инструменты не отображаются или не вызываются\n\n1. **Проверьте, что сервер MCP запускается правильно**\n   * Проверьте, правильны ли команды и args\n   * Убедитесь, что серверный процесс не вылетает при запуске\n   * Ищите ошибку в stderr\n\n2. **Конфигурация инструментов проверки**\n   * Убедитесь, `tools` что он настроен или `[\"*\"]` перечисляет конкретные инструменты, которые вам нужны\n   * Пустой массив `[]` означает, что инструменты не включены\n\n3. **Проверьте подключение для удалённых серверов**\n   * Убедитесь, что URL доступен\n   * Проверьте, правильны ли заголовки аутентификации\n\n### Распространенные проблемы\n\n| Issue                                  | Solution                                                              |\n| -------------------------------------- | --------------------------------------------------------------------- |\n| \"MCP-сервер не найден\"                 | Убедитесь, что путь команды правильный и выполнимый                   |\n| \"Соединение отказано\" (HTTP)           | Проверьте URL и убедитесь, что сервер работает                        |\n| Ошибки «Тайм-аут»                      | Увеличьте `timeout` значение или проверьте производительность сервера |\n| Инструменты работают, но не называются | Убедитесь, что ваш запрос явно требует функциональности инструмента   |\n\nПодробные рекомендации по отладке смотрите **[Руководство по отладке серверов MCP](/ru/enterprise-cloud@latest/copilot/how-tos/copilot-sdk/troubleshooting/mcp-debugging)**.\n\n## Связанные ресурсы\n\n* [Спецификация протокола контекста модели](https://modelcontextprotocol.io/)\n* [Каталог серверов MCP](https://github.com/modelcontextprotocol/servers) — серверы сообщества MCP\n* [GitHub MCP сервер](https://github.com/github/github-mcp-server) — официальный сервер GitHub MCP\n* [Создайте своё первое приложение на базе Copilot](/ru/enterprise-cloud@latest/copilot/how-tos/copilot-sdk/getting-started) — основы SDK и пользовательские инструменты\n* [Руководство по отладке](/ru/enterprise-cloud@latest/copilot/how-tos/copilot-sdk/troubleshooting/debugging) — отладка по всему SDK\n\n## См. также\n\n* [Руководство по отладке серверов MCP](/ru/enterprise-cloud@latest/copilot/how-tos/copilot-sdk/troubleshooting/mcp-debugging) — подробное устранение неполадок MCP\n* [Выпуск #9](https://github.com/github/copilot-sdk/issues/9) - Вопрос об использовании оригинальных инструментов MCP\n* [Проблема #36](https://github.com/github/copilot-sdk/issues/36) — Проблема с отслеживанием документации MCP"}