Model Context Protocol (MCP)
| Тип | открытый протокол |
|---|---|
| Автор | Anthropic |
| Представлен | 25 ноября 2024 |
| Основа | JSON-RPC 2.0 |
| Транспорт | stdio, Streamable HTTP |
| Примитивы сервера | инструменты, ресурсы, промпты |
| Версии спецификации | по датам (2024-11-05, 2025-03-26, 2025-06-18, 2025-11-25) |
| SDK | Python, TypeScript, Java, Kotlin, C#, Go, Rust и др. |
| Лицензия | MIT (спецификация и SDK) |
| Сайт | modelcontextprotocol.io |
Model Context Protocol (MCP, «протокол контекста модели») — открытый протокол, который стандартизирует подключение ИИ-приложений к внешним источникам данных и инструментам. Вместо того чтобы для каждой пары «приложение — сервис» писать отдельную интеграцию, сервис один раз реализует MCP-сервер, и им могут пользоваться любые совместимые клиенты: чат-ассистенты, среды разработки, агенты для кода. Протокол часто сравнивают с USB-C для языковых моделей.
История
MCP представила компания Anthropic 25 ноября 2024 года вместе со спецификацией, SDK для Python и TypeScript и набором эталонных серверов (файловая система, Git, GitHub, базы данных).[1] В 2025 году протокол поддержали другие крупные разработчики моделей и инструментов, и он стал фактическим стандартом подключения инструментов к ИИ-агентам. В декабре 2025 года Anthropic передала MCP в Agentic AI Foundation под эгидой Linux Foundation.
Спецификация версионируется датами. Редакция 2025-03-26 заменила прежний транспорт HTTP+SSE на Streamable HTTP и добавила авторизацию на основе OAuth 2.1; последующие редакции развивали структурированный вывод инструментов, запросы уточнений у пользователя и безопасность.[2]
Архитектура
В MCP три роли:[3]
- хост — приложение, с которым работает пользователь (чат, IDE, агент);
- клиент — компонент внутри хоста, который держит соединение с одним сервером;
- сервер — программа, предоставляющая возможности: доступ к файлам, базе данных, API сервиса.
Сообщения передаются в формате JSON-RPC 2.0[5] одним из двух транспортов:[4]
- stdio — хост запускает сервер как локальный процесс и общается через стандартные ввод и вывод;
- Streamable HTTP — сервер работает удалённо, клиент отправляет запросы POST, а сервер может отвечать потоком событий.
Соединение начинается с рукопожатия initialize, в котором стороны сообщают версию протокола и поддерживаемые возможности.
Примитивы
| Сторона | Примитив | Кто управляет | Пример |
|---|---|---|---|
| сервер | инструменты (tools) | модель решает вызвать | «найти в документации», «создать задачу» |
| сервер | ресурсы (resources) | приложение выбирает | содержимое файла, схема БД |
| сервер | промпты (prompts) | пользователь выбирает | шаблон «сделай ревью кода» |
| клиент | сэмплинг (sampling) | сервер просит модель хоста | сгенерировать текст без собственного ключа API |
| клиент | корни (roots) | хост сообщает границы | разрешённые каталоги |
| клиент | уточнение (elicitation) | сервер запрашивает у пользователя | подтвердить параметр |
Инструменты — самый используемый примитив и прямое развитие механизма вызова функций: сервер описывает каждый инструмент названием, описанием и JSON-схемой аргументов, а модель сама решает, когда его вызвать.
Пример обмена
Клиент запрашивает список инструментов, затем вызывает один из них:
{"jsonrpc": "2.0", "id": 2, "method": "tools/call",
"params": {"name": "search_docs", "arguments": {"query": "asyncio TaskGroup"}}}
{"jsonrpc": "2.0", "id": 2,
"result": {"content": [{"type": "text", "text": "TaskGroup — асинхронный контекстный менеджер..."}]}}
Минимальный сервер на официальном Python SDK:
from mcp.server.fastmcp import FastMCP
mcp = FastMCP("docs")
@mcp.tool()
def search_docs(query: str) -> str:
"""Поиск по документации, возвращает фрагменты текста."""
return find_fragments(query)
if __name__ == "__main__":
mcp.run() # по умолчанию транспорт stdio
Хост подключает такой сервер строкой конфигурации с командой запуска; удалённые серверы подключаются по URL.
Безопасность
MCP-сервер получает реальные права — читать файлы, писать в базы, действовать от имени пользователя, — поэтому спецификация уделяет внимание рискам:[6]
- внедрение инструкций — текст из документа, страницы или ответа инструмента может содержать команды для модели (см. Безопасность LLM: prompt injection);
- отравление описаний инструментов — недобросовестный сервер прячет инструкции в описаниях;
- избыточные права — серверу стоит выдавать минимум доступа (Принцип наименьших привилегий), а опасные действия подтверждать у пользователя.
Применение
Типичные MCP-серверы: доступ к репозиториям и задачам, базам данных, браузеру, поиску по внутренней документации, облачным сервисам. Для документации MCP дополняет llms.txt: файл даёт оглавление, а сервер — поиск и выдачу нужных фрагментов, экономя контекстное окно.