ML Fundamentals

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-сервер