Примечание.
Это развивающаяся функция. См. выпуск #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 сервер
| Property | Type | Обязательный | Описание |
|---|---|---|---|
type | |||
"local" или "stdio" | Нет | Тип сервера (по умолчанию локальный) | |
command | string | Да | Команда для выполнения |
args | string[] | Да | Аргументы команд |
env | object | Нет | Переменные среды |
cwd | string | Нет | Рабочий каталог |
tools | string[] | Нет | Инструменты для включения (["*"] для всех, [] для никого) |
timeout | number | Нет | Тайм-аут в миллисекундах |
Удалённый сервер (HTTP/SSE)
| Property | Type | Обязательный | Описание |
|---|---|---|---|
type | |||
"http" или "sse" | Да | Тип сервера | |
url | string | Да | URL-адрес сервера |
headers | object | Нет | HTTP-заголовки (например, для аутентификации) |
tools | string[] | Нет | Инструменты для включения |
timeout | number | Нет | Тайм-аут в миллисекундах |
Troubleshooting
Инструменты не отображаются или не вызываются
-
Проверьте, что сервер MCP запускается правильно
- Проверьте, правильны ли команды и args
- Убедитесь, что серверный процесс не вылетает при запуске
- Ищите ошибку в stderr
-
Конфигурация инструментов проверки
- Убедитесь,
toolsчто он настроен или["*"]перечисляет конкретные инструменты, которые вам нужны - Пустой массив
[]означает, что инструменты не включены
- Убедитесь,
-
Проверьте подключение для удалённых серверов
- Убедитесь, что URL доступен
- Проверьте, правильны ли заголовки аутентификации
Распространенные проблемы
| Issue | Solution |
|---|---|
| "MCP-сервер не найден" | Убедитесь, что путь команды правильный и выполнимый |
| "Соединение отказано" (HTTP) | Проверьте URL и убедитесь, что сервер работает |
| Ошибки «Тайм-аут» | Увеличьте timeout значение или проверьте производительность сервера |
| Инструменты работают, но не называются | Убедитесь, что ваш запрос явно требует функциональности инструмента |
Подробные рекомендации по отладке смотрите Руководство по отладке серверов MCP.
Связанные ресурсы
- Спецификация протокола контекста модели
- Каталог серверов MCP — серверы сообщества MCP
- GitHub MCP сервер — официальный сервер GitHub MCP
- Создайте своё первое приложение на базе Copilot — основы SDK и пользовательские инструменты
- Руководство по отладке — отладка по всему SDK
См. также
- Руководство по отладке серверов MCP — подробное устранение неполадок MCP
- Выпуск #9 - Вопрос об использовании оригинальных инструментов MCP
- Проблема #36 — Проблема с отслеживанием документации MCP