Model Context Protocol (MCP)

Материал из llmdocs — справочник разработчика
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)
SDKPython, 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: файл даёт оглавление, а сервер — поиск и выдачу нужных фрагментов, экономя контекстное окно.

См. также

Источники

  1. Introducing the Model Context Protocol — Anthropic
  2. Model Context Protocol — Specification
  3. MCP Architecture overview
  4. MCP Transports — Streamable HTTP
  5. JSON-RPC 2.0 Specification
  6. MCP Security Best Practices