# Model Context Protocol (MCP)

> Открытый протокол на основе JSON-RPC, по которому ИИ-приложения подключаются к внешним инструментам, данным и сервисам.

Источник: https://llmdocs.ru/wiki/mcp/ · обновлено 2026-11-09 · лицензия CC BY-SA 4.0

- **Тип**: открытый протокол
- **Автор**: 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](https://modelcontextprotocol.io/)
**Model Context Protocol** (**MCP**, «протокол контекста модели») — открытый протокол, который стандартизирует подключение ИИ-приложений к внешним источникам данных и инструментам. Вместо того чтобы для каждой пары «приложение — сервис» писать отдельную интеграцию, сервис один раз реализует MCP-сервер, и им могут пользоваться любые совместимые клиенты: чат-ассистенты, среды разработки, [агенты для кода](https://llmdocs.ru/wiki/coding-agents.md). Протокол часто сравнивают с USB-C для языковых моделей.

## История

MCP представила компания Anthropic 25 ноября 2024 года вместе со спецификацией, SDK для Python и TypeScript и набором эталонных серверов (файловая система, Git, GitHub, базы данных).[1] В 2025 году протокол поддержали другие крупные разработчики моделей и инструментов, и он стал фактическим стандартом подключения инструментов к [ИИ-агентам](https://llmdocs.ru/wiki/ai-agent.md). В декабре 2025 года Anthropic передала MCP в Agentic AI Foundation под эгидой Linux Foundation.

Спецификация версионируется датами. Редакция 2025-03-26 заменила прежний транспорт HTTP+SSE на Streamable HTTP и добавила авторизацию на основе [OAuth 2.1](https://llmdocs.ru/wiki/oauth-oidc.md); последующие редакции развивали структурированный вывод инструментов, запросы уточнений у пользователя и безопасность.[2]

## Архитектура

В MCP три роли:[3]

- **хост** — приложение, с которым работает пользователь (чат, IDE, агент);
- **клиент** — компонент внутри хоста, который держит соединение с одним сервером;
- **сервер** — программа, предоставляющая возможности: доступ к файлам, базе данных, API сервиса.

Сообщения передаются в формате JSON-RPC 2.0[5] одним из двух транспортов:[4]

- **stdio** — хост запускает сервер как локальный процесс и общается через стандартные ввод и вывод;
- **Streamable HTTP** — сервер работает удалённо, клиент отправляет запросы POST, а сервер может отвечать потоком событий.

Соединение начинается с рукопожатия `initialize`, в котором стороны сообщают версию протокола и поддерживаемые возможности.

## Примитивы

| Сторона | Примитив | Кто управляет | Пример |
|---|---|---|---|
| сервер | **инструменты** (tools) | модель решает вызвать | «найти в документации», «создать задачу» |
| сервер | **ресурсы** (resources) | приложение выбирает | содержимое файла, схема БД |
| сервер | **промпты** (prompts) | пользователь выбирает | шаблон «сделай ревью кода» |
| клиент | **сэмплинг** (sampling) | сервер просит модель хоста | сгенерировать текст без собственного ключа API |
| клиент | **корни** (roots) | хост сообщает границы | разрешённые каталоги |
| клиент | **уточнение** (elicitation) | сервер запрашивает у пользователя | подтвердить параметр |

Инструменты — самый используемый примитив и прямое развитие механизма [вызова функций](https://llmdocs.ru/wiki/tool-use.md): сервер описывает каждый инструмент названием, описанием и JSON-схемой аргументов, а модель сама решает, когда его вызвать.

## Пример обмена

Клиент запрашивает список инструментов, затем вызывает один из них:

```json
{"jsonrpc": "2.0", "id": 2, "method": "tools/call",
 "params": {"name": "search_docs", "arguments": {"query": "asyncio TaskGroup"}}}
```

```json
{"jsonrpc": "2.0", "id": 2,
 "result": {"content": [{"type": "text", "text": "TaskGroup — асинхронный контекстный менеджер..."}]}}
```

Минимальный сервер на официальном Python SDK:

```python
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](https://llmdocs.ru/wiki/prompt-injection.md));
- **отравление описаний инструментов** — недобросовестный сервер прячет инструкции в описаниях;
- **избыточные права** — серверу стоит выдавать минимум доступа ([Принцип наименьших привилегий](https://llmdocs.ru/wiki/least-privilege.md)), а опасные действия подтверждать у пользователя.

## Применение

Типичные MCP-серверы: доступ к репозиториям и задачам, базам данных, браузеру, поиску по внутренней документации, облачным сервисам. Для документации MCP дополняет [llms.txt](https://llmdocs.ru/wiki/llms-txt.md): файл даёт оглавление, а сервер — поиск и выдачу нужных фрагментов, экономя [контекстное окно](https://llmdocs.ru/wiki/context-window.md).

## См. также

- [ИИ-агент](https://llmdocs.ru/wiki/ai-agent.md)
- [Tool use / function calling](https://llmdocs.ru/wiki/tool-use.md)
- [llms.txt](https://llmdocs.ru/wiki/llms-txt.md)
- [RAG (генерация с дополнением поиском)](https://llmdocs.ru/wiki/rag.md)

## Источники

1. [Introducing the Model Context Protocol — Anthropic](https://www.anthropic.com/news/model-context-protocol)
2. [Model Context Protocol — Specification](https://modelcontextprotocol.io/specification/latest)
3. [MCP Architecture overview](https://modelcontextprotocol.io/docs/learn/architecture)
4. [MCP Transports — Streamable HTTP](https://modelcontextprotocol.io/specification/latest/basic/transports)
5. [JSON-RPC 2.0 Specification](https://www.jsonrpc.org/specification)
6. [MCP Security Best Practices](https://modelcontextprotocol.io/specification/latest/basic/security_best_practices)
