Tools
Model-controlled — LLM решает когда использовать
Архитектура и спецификация 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 |
Хост-процесс выполняет:
Каждый клиент:
Серверы предоставляют:
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 репозиторииПереиспользуемые шаблоны для взаимодействия с 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 как subprocessClient ──stdin──> ServerClient <──stdout── ServerClient <──stderr── Server (logs)Использование:
HTTP + SSE — для удалённых серверов (рекомендуемый)
Client ──POST──> Server (JSON-RPC request)Server ──SSE──> Client (streaming responses)Особенности:
MCP-Session-Id)Server-Sent Events — устаревший
Заменён на Streamable HTTP в версии 2025-03-26. Используйте только для совместимости с legacy системами.
| Характеристика | stdio | Streamable HTTP |
|---|---|---|
| Развёртывание | Локальный subprocess | Удалённый сервис |
| Клиенты | Один | Несколько |
| Аутентификация | Env переменные | OAuth 2.1 |
| Streaming | N/A | SSE (опционально) |
| Сессии | Время жизни процесса | Явное управление |
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.
| 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:
/.well-known/oauth-protected-resourceAuthorization: Bearer <access-token>MCP-Protocol-Version: 2025-11-25Для серверов:
Для клиентов:
| Версия | Дата | Ключевые изменения |
|---|---|---|
| 2025-11-25 | Current | Tasks, OAuth improvements, Icons |
| 2025-06-18 | June 2025 | Elicitation, Security best practices |
| 2025-03-26 | March 2025 | Authorization, Streamable HTTP |
| 2024-11-05 | Initial | Core protocol, stdio, HTTP+SSE |