Перейти к содержимому

Протокол MCP

Архитектура и спецификация Model Context Protocol — открытого стандарта для интеграции AI с внешними системами

Model Context Protocol (MCP) — это открытый стандарт для подключения AI-приложений к внешним источникам данных и инструментам. MCP можно представить как “USB-C порт для AI” — универсальный коннектор между любым AI-приложением и любым совместимым сервером.

MCP использует трёхуровневую архитектуру:

КомпонентРольПримеры
HostКонтейнер и координатор клиентовClaude Desktop, n8n, VS Code
ClientПоддерживает соединение с серверомВстроен в Host
ServerПредоставляет контекст и возможностиFilesystem, PostgreSQL, GitHub

Хост-процесс выполняет:

  • Создание и управление клиентами
  • Контроль разрешений и жизненного цикла
  • Применение политик безопасности
  • Координацию AI/LLM интеграции
  • Агрегацию контекста от клиентов

Каждый клиент:

  • Устанавливает изолированную сессию с сервером
  • Выполняет обмен capabilities
  • Маршрутизирует JSON-RPC сообщения
  • Управляет подписками и уведомлениями
  • Поддерживает границы безопасности между серверами

Серверы предоставляют:

  • Resources (ресурсы) — данные для контекста
  • Tools (инструменты) — действия для AI
  • Prompts (подсказки) — шаблоны взаимодействия

Tools

Model-controlled — LLM решает когда использовать

Resources

Application-controlled — приложение определяет использование

Prompts

User-controlled — требует явного вызова пользователем

Выполняемые функции, которые AI может вызывать:

{
"name": "get_weather",
"title": "Weather Information",
"description": "Get current weather for a location",
"inputSchema": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "City name or zip code"
}
},
"required": ["location"]
}
}

Протокольные операции:

МетодОписание
tools/listПолучить список доступных инструментов
tools/callВызвать инструмент с параметрами

Пассивные источники данных, предоставляющие контекст:

{
"uri": "file:///project/src/main.rs",
"name": "main.rs",
"title": "Application Main File",
"description": "Primary entry point",
"mimeType": "text/x-rust"
}

Протокольные операции:

МетодОписание
resources/listСписок доступных ресурсов
resources/templates/listШаблоны ресурсов (параметризованные URI)
resources/readПолучить содержимое ресурса
resources/subscribeПодписаться на изменения

URI схемы:

  • file:// — файловая система
  • https:// — веб-ресурсы
  • git:// — Git репозитории
  • Кастомные схемы по RFC3986

Переиспользуемые шаблоны для взаимодействия с LLM:

{
"name": "code_review",
"title": "Request Code Review",
"description": "Analyze code quality",
"arguments": [
{
"name": "code",
"description": "The code to review",
"required": true
}
]
}

Протокольные операции:

МетодОписание
prompts/listСписок доступных подсказок
prompts/getПолучить подсказку с аргументами

MCP поддерживает несколько транспортных протоколов:

Standard I/O — для локальных серверов

Client запускает Server как subprocess
Client ──stdin──> Server
Client <──stdout── Server
Client <──stderr── Server (logs)

Использование:

  • Локальные интеграции
  • CLI инструменты
  • Простое развёртывание
ХарактеристикаstdioStreamable HTTP
РазвёртываниеЛокальный subprocessУдалённый сервис
КлиентыОдинНесколько
АутентификацияEnv переменныеOAuth 2.1
StreamingN/ASSE (опционально)
СессииВремя жизни процессаЯвное управление

MCP использует JSON-RPC 2.0 для обмена сообщениями:

{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/list",
"params": {}
}
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"tools": [
{
"name": "search",
"description": "Search documents"
}
]
}
}
{
"jsonrpc": "2.0",
"id": 1,
"error": {
"code": -32602,
"message": "Invalid params"
}
}

Без id, не требует ответа:

{
"jsonrpc": "2.0",
"method": "notifications/tools/list_changed"
}
// Client → Server
{
"jsonrpc": "2.0",
"id": 1,
"method": "initialize",
"params": {
"protocolVersion": "2025-11-25",
"capabilities": { "sampling": {} },
"clientInfo": { "name": "MyClient", "version": "1.0" }
}
}
// Server → Client
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"protocolVersion": "2025-11-25",
"capabilities": { "tools": { "listChanged": true } },
"serverInfo": { "name": "MyServer", "version": "1.0" }
}
}
// Client → Server (подтверждение)
{
"jsonrpc": "2.0",
"method": "notifications/initialized"
}

После инициализации клиент и сервер обмениваются запросами согласно capabilities.

  • stdio: Закрытие stdin, SIGTERM, затем SIGKILL
  • HTTP: Закрытие соединений, DELETE сессии
CapabilityОписание
rootsМожет предоставлять filesystem roots
samplingПоддерживает запросы на LLM completion
elicitationПоддерживает запросы на ввод от пользователя
CapabilityОписание
promptsПредоставляет шаблоны подсказок
resourcesПредоставляет ресурсы
toolsПредоставляет инструменты
loggingОтправляет структурированные логи

Серверы могут запрашивать LLM completions через клиента:

{
"method": "sampling/createMessage",
"params": {
"messages": [
{ "role": "user", "content": { "type": "text", "text": "Analyze this..." } }
],
"maxTokens": 1000
}
}

Серверы могут запрашивать информацию от пользователя:

{
"method": "elicitation/create",
"params": {
"message": "Please confirm booking:",
"schema": {
"type": "object",
"properties": {
"confirm": { "type": "boolean" }
}
}
}
}

Уведомления о прогрессе длительных операций:

{
"method": "notifications/progress",
"params": {
"progressToken": "token-123",
"progress": 50,
"total": 100,
"message": "Processing..."
}
}

Для HTTP транспорта MCP использует OAuth 2.1:

  1. Discovery/.well-known/oauth-protected-resource
  2. Authorization — стандартный OAuth flow
  3. Token — Bearer токен в каждом запросе
Authorization: Bearer <access-token>
MCP-Protocol-Version: 2025-11-25
  1. Согласие пользователя — явное одобрение для доступа к данным
  2. Минимальные права — только необходимые разрешения
  3. Изоляция — серверы не видят друг друга
  4. Валидация — проверка всех входных данных

Для серверов:

  • Валидируйте все входы
  • Реализуйте access control
  • Ограничивайте rate limits
  • Санитизируйте выводы

Для клиентов:

  • Запрашивайте подтверждение пользователя
  • Показывайте параметры перед отправкой
  • Валидируйте результаты
  • Логируйте для аудита
ВерсияДатаКлючевые изменения
2025-11-25CurrentTasks, OAuth improvements, Icons
2025-06-18June 2025Elicitation, Security best practices
2025-03-26March 2025Authorization, Streamable HTTP
2024-11-05InitialCore protocol, stdio, HTTP+SSE