Спецификация MCP
modelcontextprotocol.io — официальная документация
Техническая спецификация Model Context Protocol — транспорты, примитивы, жизненный цикл
Model Context Protocol (MCP) — открытый протокол для интеграции AI-приложений с внешними источниками данных и инструментами. Создан Anthropic в ноябре 2024 года.
| Компонент | Описание | Примеры |
|---|---|---|
| Host | Приложение, запускающее клиент | Claude Desktop, IDE |
| Client | Поддерживает соединение с сервером | Встроен в Host |
| Server | Предоставляет capabilities | Ваш MCP сервер |
MCP поддерживает два типа транспорта для коммуникации.
Клиент запускает сервер как subprocess и общается через stdin/stdout.
Когда использовать:
Пример запуска:
# Клиент запускает серверpython server.py# stdin → JSON-RPC запросы# stdout → JSON-RPC ответы# stderr → логи (не протокол!)HTTP-транспорт для удалённых серверов (спецификация 2025).
Когда использовать:
Требования (2025):
MCP определяет три основных примитива для взаимодействия.
Функции, которые AI может вызывать для выполнения действий.
@mcp.tool()def send_email(to: str, subject: str, body: str) -> str: """Отправить email""" # Реализация... return "Email отправлен"Характеристики:
JSON-RPC:
// Запрос: tools/call{ "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "send_email", "arguments": { "to": "user@example.com", "subject": "Hello", "body": "Message" } }}
// Ответ{ "jsonrpc": "2.0", "id": 1, "result": { "content": [ {"type": "text", "text": "Email отправлен"} ] }}Данные, доступные для чтения по URI.
@mcp.resource("config://settings")def get_settings() -> str: """Настройки приложения""" return json.dumps({"theme": "dark", "lang": "ru"})Характеристики:
Схемы URI:
| Схема | Пример | Назначение |
|---|---|---|
file:// | file:///path/to/file.txt | Файлы |
http:// | http://api.example.com/data | HTTP ресурсы |
db:// | db://users/123 | База данных |
memory:// | memory://cache | Память |
config:// | config://settings | Конфигурация |
Шаблоны для типовых запросов к AI.
@mcp.prompt()def code_review(language: str, code: str) -> str: """Шаблон для code review""" return f""" Проведи code review для следующего {language} кода:
```{language} {code}Проверь:
**Характеристики:**- Генерируют текст для AI- Принимают аргументы- Упрощают типовые задачи
---
## JSON-RPC 2.0
MCP использует JSON-RPC 2.0 для всей коммуникации.
### Формат запроса
```json{ "jsonrpc": "2.0", "id": 1, "method": "method_name", "params": { ... }}{ "jsonrpc": "2.0", "id": 1, "result": { ... }}{ "jsonrpc": "2.0", "id": 1, "error": { "code": -32600, "message": "Invalid Request", "data": { ... } }}{ "jsonrpc": "2.0", "method": "notifications/progress", "params": { "progress": 50, "total": 100 }}// Запрос{ "jsonrpc": "2.0", "id": 1, "method": "initialize", "params": { "protocolVersion": "2024-11-05", "capabilities": { "roots": { "listChanged": true } }, "clientInfo": { "name": "Claude Desktop", "version": "1.0.0" } }}
// Ответ{ "jsonrpc": "2.0", "id": 1, "result": { "protocolVersion": "2024-11-05", "capabilities": { "tools": {}, "resources": { "subscribe": true }, "prompts": {} }, "serverInfo": { "name": "my-server", "version": "1.0.0" } }}{ "jsonrpc": "2.0", "method": "notifications/initialized"}| Метод | Направление | Описание |
|---|---|---|
initialize | Client → Server | Инициализация соединения |
initialized | Client → Server | Подтверждение инициализации |
shutdown | Client → Server | Завершение работы |
| Метод | Описание |
|---|---|
tools/list | Получить список инструментов |
tools/call | Вызвать инструмент |
| Метод | Описание |
|---|---|
resources/list | Получить список ресурсов |
resources/read | Прочитать ресурс |
resources/subscribe | Подписаться на обновления |
resources/unsubscribe | Отписаться от обновлений |
| Метод | Описание |
|---|---|
prompts/list | Получить список промптов |
prompts/get | Получить содержимое промпта |
| Метод | Направление | Описание |
|---|---|---|
notifications/progress | Server → Client | Прогресс операции |
notifications/resources/updated | Server → Client | Ресурс обновился |
notifications/tools/list_changed | Server → Client | Список tools изменился |
MCP поддерживает несколько типов контента в ответах.
{ "type": "text", "text": "Результат операции"}{ "type": "image", "data": "base64_encoded_image_data", "mimeType": "image/png"}{ "type": "resource", "resource": { "uri": "file:///path/to/file.txt", "mimeType": "text/plain", "text": "Содержимое файла" }}| Код | Название | Описание |
|---|---|---|
-32700 | Parse error | Невалидный JSON |
-32600 | Invalid Request | Неверная структура запроса |
-32601 | Method not found | Метод не существует |
-32602 | Invalid params | Неверные параметры |
-32603 | Internal error | Внутренняя ошибка сервера |
| Код | Название | Описание |
|---|---|---|
-32000 | Connection closed | Соединение закрыто |
-32001 | Request timeout | Таймаут запроса |
-32002 | Resource not found | Ресурс не найден |
-32003 | Tool not found | Инструмент не найден |
-32004 | Prompt not found | Промпт не найден |
При инициализации клиент и сервер обмениваются своими capabilities.
{ "capabilities": { "tools": {}, "resources": { "subscribe": true, "listChanged": true }, "prompts": { "listChanged": true }, "logging": {} }}{ "capabilities": { "roots": { "listChanged": true }, "sampling": {} }}| Версия | Дата | Основные изменения |
|---|---|---|
2024-11-05 | Nov 2024 | Первая публичная версия |
2025-03-xx | Mar 2025 | OAuth 2.1 обязателен для HTTP |
2025-06-xx | Jun 2025 | Streamable HTTP вместо SSE |
Спецификация MCP
modelcontextprotocol.io — официальная документация
JSON-RPC 2.0
jsonrpc.org — спецификация протокола
Быстрый старт
5 минут — создайте первый сервер
Примеры кода
25+ примеров — готовый код