Перейти к содержанию

mcp — MCP (Model Context Protocol)

Открытый стандарт «USB для инструментов модели». MCP-сервер — не слой LLM-стека и не вызывает LLM: он выдаёт тулы агенту, а сам ходит к обычным внешним системам.

Представьте, что у вас 10 разных агентов (Zed, Claude Desktop, Cursor) и 10 разных сервисов, к которым им надо подключаться (GitHub, Slack, ваша база данных, ваш Telegram-бот). Без стандарта вам пришлось бы писать 10 × 10 = 100 разных интеграций. MCP — это общий «язык разъёмов», чтобы каждый агент умел подключаться к любому сервису одинаковым способом.

flowchart LR
    subgraph before["Без MCP: каждый с каждым"]
        direction LR
        A1["Zed"] --- S1["GitHub"]
        A1 --- S2["Postgres"]
        A1 --- S3["наш бот"]
        A2["Claude Desktop"] --- S1
        A2 --- S2
        A2 --- S3
        A3["Cursor"] --- S1
        A3 --- S2
        A3 --- S3
    end
flowchart LR
    subgraph after["С MCP: один разъём на всех"]
        direction LR
        B1["Zed"] --> P(["🔌 MCP"])
        B2["Claude Desktop"] --> P
        B3["Cursor"] --> P
        P --> M1["MCP-сервер GitHub"] --> T1["GitHub"]
        P --> M2["MCP-сервер Postgres"] --> T2["Postgres"]
        P --> M3["MCP-сервер бота"] --> T3["наш бот"]
    end

Примерно как USB: раньше у каждого устройства был свой штекер, а теперь один разъём на всё.

Важный нюанс, который легко забыть: MCP-сервер сам не вызывает LLM. Он выдаёт тулы, а вызывает их — агент (MCP-клиент). И под капотом MCP-сервер ходит не к ИИ, а к обычным внешним системам: GitHub, Postgres, файловой системе, вашему боту. То есть MCP — это мост «агент → реальный мир», а не «агент → ещё одна LLM».

Когда вы слышите «у нас есть MCP-сервер» — это значит «мы сделали сервис, к которому любой ИИ-агент может подключиться по стандартному протоколу и получить наши инструменты». Для нашего kotlin-aiband-bot это значит: поднимаем MCP-сервер с тулами «прочитать логи», «отправить сообщение», «включить фичу» — и любой агент (Zed, Claude Desktop) сразу ими пользуется, без отдельной интеграции.

Когда у каждого агента свои 10 инструментов, прописанных хардкодом, возникает та же боль, что была с драйверами до USB: каждый вендор пишет свой протокол.

MCP (Model Context Protocol, открытый стандарт от Anthropic, 2024) — «USB для инструментов модели». Его место в архитектуре:

flowchart LR
    LLMAPI["LLM-сервер (слой 2)<br/>Anthropic / OpenAI API"]

    subgraph Client["Клиент / Агент (слой 3)"]
        Agent["Цикл рассуждений"]
        MCPClient["MCP-клиент"]
    end

    MCPServer["MCP-сервер<br/>Tools · Resources · Prompts"]

    subgraph Services["Внешние системы (вне LLM-стека)"]
        GitHub["GitHub"]
        Postgres["Postgres"]
        Bot["наш бот"]
    end

    Agent -->|"Chat Completions"| LLMAPI
    Agent -.-|"координирует"| MCPClient
    MCPClient -->|"JSON-RPC"| MCPServer
    MCPServer -->|"HTTP / SQL / FS"| Services

MCP-сервер живёт сбоку от LLM-стека, на стороне внешних систем: LLM может вообще не знать, что он существует — она просто видит в контексте список доступных тулов и решает, какой вызвать.

Ключевые понятия:

  • MCP-сервер — отдельный процесс, который предоставляет три вещи по MCP:
  • Tools — функции, которые агент может попросить вызвать (create_issue, run_query, upload_file);
  • Resources — данные, к которым агент может обратиться по URI (file:///..., postgres://...);
  • Prompts — шаблоны промптов, которые хост может показать пользователю.
  • MCP-клиент — обычно встроен в агент/IDE (Zed, Claude Desktop, Cursor). Он живёт внутри слоя 3, рядом с циклом агента.
  • Транспортstdio (сервер запускается как подпроцесс и общается через stdin/stdout) или http (HTTP + SSE, для удалённых серверов).
  • Протокол — JSON-RPC 2.0 поверх транспорта. Язык — любой: официальные SDK для TypeScript, Python, Go, Rust, Kotlin, Java.

Главное, что часто путают: MCP-сервер — это не «ещё одна LLM». Под капотом он обычно ходит к GitHub, Postgres, файлам, вашему боту, Jira — к чему угодно обычному.

Чем MCP отличается от «просто API-вызовов из кода агента»:

Без MCP С MCP
Инструменты прописаны в коде агента, жёстко Любой MCP-сервер подключается к любому MCP-клиенту
Перенос инструмента = переписать интеграцию Перенос = поменять конфиг
Агент знает схему тулов заранее Агент на лету получает JSON Schema от сервера
Вендор-лок Экосистема: mcp-server-git, mcp-server-postgres, ...

Для нас MCP-сервер — это в первую очередь точка интеграции нашего продукта с ИИ-агентами пользователей. Например, для kotlin-aiband-bot имеет смысл поднять MCP-сервер, который отдаёт тулы «прочитать лог бота», «отправить сообщение в канал», «включить/выключить фичу» — и тогда любой агент, поддерживающий MCP (Zed, Claude Desktop), сможет ими пользоваться без своей интеграции.

Связанные страницы