MCP
Model Context Protocol — открытый протокол Anthropic, через который языковые модели подключаются к внешним данным и инструментам.
Что такое MCP
MCP расшифровывается как Model Context Protocol — «протокол модельного контекста». Это открытый стандарт, представленный Anthropic в ноябре 2024 года: он описывает единый способ подключать LLM к внешним данным и инструментам — файлам, базам, GitHub, трекерам задач, внутренним API.
Простыми словами: MCP — это USB-C для ИИ-приложений. Раньше каждую интеграцию писали заново под конкретную связку «модель + сервис». Теперь сервис один раз реализует MCP-сервер, а любое приложение с MCP-клиентом его подключает.
Так снимается комбинаторная проблема: для M приложений и N сервисов раньше требовалось M × N интеграций, с общим протоколом — M + N.
Не путать. Аббревиатура MCP занята и в других областях: Microsoft Certified Professional (сертификация), Multi-Chip Package (упаковка микросхем). В контексте ИИ речь всегда о Model Context Protocol.
Архитектура
┌─ Host (Claude Desktop, IDE, свой агент) ─────────┐
│ │
│ LLM ←→ MCP-клиент 1 ←──stdio──→ Сервер: файлы
│ MCP-клиент 2 ←──HTTP──→ Сервер: GitHub
│ MCP-клиент 3 ←──HTTP──→ Сервер: PostgreSQL
└──────────────────────────────────────────────────┘
- Host — приложение, в котором работает модель.
- Клиент — компонент внутри host, по одному на каждое подключение; держит соединение с сервером.
- Сервер — отдельная программа, отдающая наружу свои возможности. Может быть локальной или удалённой.
Обмен идёт по JSON-RPC 2.0. Ключевой момент: сервер не знает, какая модель к нему подключена, а модель не знает, как сервер устроен внутри — в этом и смысл протокола.
Что сервер отдаёт наружу
| Примитив | Кто управляет | Назначение |
|---|---|---|
| Tools | Модель | Действия, которые модель вызывает сама: выполнить запрос, создать issue |
| Resources | Приложение | Данные для контекста: файлы, записи БД, документы |
| Prompts | Пользователь | Готовые шаблоны сценариев, вызываемые явно |
Разделение по субъекту управления неслучайно. Tools модель вызывает по своему решению — поэтому именно они несут риск. Resources подаются в контекст приложением, Prompts запускает человек.
Есть и обратное направление — возможности, которые сервер запрашивает у клиента: sampling (попросить модель сгенерировать текст), roots (границы файловой системы), elicitation (запросить у пользователя недостающие данные).
Транспорты
| Транспорт | Где используется | Как работает |
|---|---|---|
| stdio | Локальные серверы | Host запускает сервер процессом, общение через stdin/stdout |
| Streamable HTTP | Удалённые серверы | HTTP-запросы, ответ потоком при необходимости |
stdio — самый частый случай: сервер живёт на той же машине, никакой сети и портов. Streamable HTTP пришёл на смену старой связке HTTP+SSE и используется для сетевых серверов; для них же актуальна авторизация через OAuth.
Подключение сервера
Конфигурация host — список серверов, которые нужно запустить:
{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/home/user/docs"]
},
"postgres": {
"command": "uvx",
"args": ["mcp-server-postgres", "postgresql://localhost/app"]
}
}
}
Свой сервер на Python — это функции с декоратором; схему параметров SDK соберёт из аннотаций типов, а описание для модели возьмёт из docstring:
from mcp.server.fastmcp import FastMCP
mcp = FastMCP("orders")
@mcp.tool()
def get_order_status(order_id: str) -> str:
"""Вернуть статус заказа по его номеру."""
return db.fetch_status(order_id)
if __name__ == "__main__":
mcp.run()
Качество docstring напрямую влияет на поведение: по нему модель решает, вызывать инструмент или нет. Это ровно та же логика, что и в промптинге — описание должно говорить не только что делает инструмент, но и когда его применять.
Безопасность
MCP-сервер — это код, который получает доступ к вашим данным и выполняется с правами запустившего процесса. Отсюда практические правила:
- Запускайте только доверенные серверы. Установка MCP-сервера из непроверенного источника равносильна запуску чужого скрипта.
- Помните про prompt injection. Если сервер отдаёт в контекст внешний текст (письмо, тикет, страницу), в нём могут оказаться инструкции для модели. Всё, что приходит из внешнего мира, — данные, а не команды.
- Выдавайте минимальные права.Токен только на нужный репозиторий, доступ к БД только на чтение, файловый сервер — на конкретный каталог.
- Разделяйте чтение и запись. Необратимые действия (удаление, отправка, оплата) стоит закрывать подтверждением пользователя.
Связанные термины
- LLM — модель, которую MCP подключает к внешнему миру
- ИИ — общий контекст, в котором появился протокол
- Промпты и GPT — описания инструментов работают по тем же правилам
- structured outputs — гарантия формата ответа модели
- API — то, что MCP-сервер оборачивает для модели
- REST API — привычная альтернатива для интеграций между сервисами
Готовы запустить GPU-задачу?
Запустить GPU-сервер