Туториал
Что такое MCP? Полное руководство 2026: Model Context Protocol, JSON-RPC, AI-агенты и вызов инструментов
Cursor, Claude Desktop и свои агенты все говорят MCP. Протокол не болтает и не рассуждает. Он задаёт, как находят список инструментов, как JSON одного вызова едет по JSON-RPC и как результат возвращается в контекст модели.
В 2026 почти любой редактор с агентом показывает MCP в настройках. Кто-то видит следующий магазин плагинов, кто-то обязательный ИИ-протокол, кто-то смешивает его с tool calling, function calling и A2A. Статья сжимает инженерное определение: Model Context Protocol (MCP) — открытый протокол, которым ИИ-клиент находит инструменты, ресурсы и промпты на сервере и подключает их к контексту модели. Транспортный конверт — JSON-RPC 2.0; бизнес-методы — tools/list, tools/call и родственники. Он не заменяет модель и не является агентом — агент это цикл; MCP — слой внутри цикла, который говорит, как видят и вызывают удалённые инструменты. В конце вы разделяете четыре вещи: протокол, конверт, runtime, выбор инструмента моделью. На сайте уже есть сопоставление Schema, stateless remote MCP, слои A2A и определение агента. Здесь вход, не те погружения.
Что такое MCP: не модель — протокол для инструментов
Минимум — три стороны: Host (редактор или процесс агента), Client (сторона в Host, которая говорит с серверами), Server (процесс или HTTPS-эндпоинт с инструментами, ресурсами и промптами). Client запрашивает каталог, вставляет name, description и inputSchema в контекст и после решения модели шлёт tools/call. MCP правит обнаружением и формой вызова. Не тем, как модель думает.
«ИИ-плагин» верно лишь наполовину. Плагин браузера висит на одном хозяине; MCP Server могут переиспользовать много клиентов — один поиск счетов отдаёт Cursor, Claude Desktop или вашему оркестратору. Разница не в «можно ли вызвать функцию», а в том, стандартизированы ли каталог и конверт вызова. Самодельный адаптер OpenAPI уже бьёт HTTP; второй Client значит писать адаптер снова. MCP складывает этот слой в протокол. Официальные понятия и спецификация:документация Model Context Protocol.
На линии времени: Anthropic открыл MCP в 2024; к концу 2025 протокол оказался под Agentic AI Foundation (AAIF) Linux Foundation. В 2026 хосты держат его как канал удалённых инструментов по умолчанию, не как демо. Версия протокола живёт в _meta запроса — 2026-07-28 значит «стороны согласны с этой семантикой», не «модель стала умнее». Чем это не чат-бот и не cron-workflow — вЧто такое AI Agent: нет цикла и нет проверяемой формы arguments — это просто чат; цикл по локальным функциям всё ещё может быть агентом — просто без стандартного удалённого каталога.
JSON-RPC 2.0: зачем этот конверт
MCP не изобрёл новый RPC. Каждое действие протокола сидит в конверте JSON-RPC 2.0: jsonrpc, id, method, params или error. Запрос и ответ делят id; уведомления могут его не нести. Шлюзам и логам так проще резать, чем свой потоковый кадр: сначала method, потом бизнес. Поля — вспецификации JSON-RPC 2.0.
method — глагол протокола, не имя вашей бизнес-функции. tools/list перечисляет, tools/call вызывает, resources/read читает. Бизнес-имя живёт в params.name, аргументы — в params.arguments. Писать searchInvoices как method — частая ошибка чтения: это ваш JSON-RPC-сервис, не MCP. Стандартный запрос каталога выглядит так:
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/list",
"params": {}
}
Конверт решает три вещи: мультиплекс (несколько id в полёте), классифицируемые ошибки (parse, нет метода, отказ бизнеса) и сменный транспорт (stdio-потомок или Streamable HTTP несут один и тот же JSON). Он не решает, верны ли arguments. Законный конверт JSON-RPC всё равно может отдать Server объект arguments без полей. Server сам парсит и проверяет по inputSchema.
Как AI-агент использует MCP: найти → выбрать → вызвать
Снимите демо-видео: цикл агента на MCP по-прежнему из пяти шагов. Меняется то, что шаги 2 и 4 больше не приклеены к локальным функциям:
- Цель пользователя попадает в контекст (естественный язык + опциональные системные ограничения).
- Client шлёт tools/list каждому подключённому MCP Server и превращает каталог в tools / functions, которые модель умеет читать.
- Модель возвращает tool_calls (функция + arguments) или финальный текст / Structured Output.
- Runtime делает JSON.parse arguments, шлёт MCP tools/call и пишет result в сообщения.
- Модель читает результат и выбирает следующий инструмент или стоп. maxSteps, отмена или провал Schema тоже останавливают.
Запрос MCP на шаге 4 выглядит так. params.arguments уже объект, не строка. Версию протокола можно повесить на _meta, чтобы stateless-маршрутизация могла читать:
{
"jsonrpc": "2.0",
"id": 42,
"method": "tools/call",
"params": {
"name": "searchInvoices",
"arguments": {
"startDate": "2026-01-01",
"endDate": "2026-01-31",
"status": "paid"
},
"_meta": {
"io.modelcontextprotocol/protocolVersion": "2026-07-28"
}
}
}
Агент не зависит от MCP. Локальные функции, OpenAPI и свой HTTP годятся как инструменты. Ценность MCP: один Server находят многие Hosts, с тем же каталогом и формой вызова удалённо. Критерий внедрения — «второй Client переиспользует этот набор», не «похоже на 2026». Инженерное определение цикла — вкак работает AI Agent.
Вызов инструментов модели: tool_calls и tools/call
Инженерно tool calling и function calling — один механизм: модель не трогает базу; она шлёт структурированную просьбу «вызовите эту функцию с этими arguments». MCP — следующий hop: runtime переводит это в JSON-RPC tools/call. Имена полей двух hops постоянно смешивают:
| Этот hop | Кто шлёт | Как выглядят arguments |
|---|---|---|
| Tool calling модели | API моделей OpenAI / Anthropic / Gemini (и близкие) | Часто JSON-строка внутри tool_calls или tool_use |
| MCP tools/call | MCP Client внутри Host | params.arguments — JSON-объект |
| Downstream бизнес-API | MCP Server или ваш адаптер | HTTP JSON body / SQL-параметры — тот же origin Schema |
| Финальный Structured Output | Последний hop модели | Ответ пользователю или вниз по потоку — не входы инструмента |
Когда модель вызывает, типичный tool_calls выглядит так. arguments всё ещё строка. Runtime сначала парсит, потом кладёт объект в MCP params.arguments. Не пихайте строку сырьём в JSON-RPC — получится «строковое поле с именем arguments», и Schema Server упадёт сразу.
{
"id": "call_8f3a",
"type": "function",
"function": {
"name": "searchInvoices",
"arguments": "{\"startDate\":\"2026-01-01\",\"endDate\":\"2026-01-31\",\"status\":\"paid\"}"
}
}
Оболочки вендоров разные: OpenAI tools[].function.parameters, Anthropic input_schema, Gemini function_declarations. MCP — Tool.inputSchema. Имена разные; каноническая Schema должна быть одним файлом. Как поля стыкуются и почему в strict каждое property должно быть в required — вMCP и JSON Schema. Финальный ответ идёт через Structured Output — не делите этот файл с входами инструмента.
Карта 2026: локально, удалённо, без состояния, A2A
Два главных транспорта. Локальный stdio: Host поднимает дочерний процесс, JSON-RPC едет по stdin/stdout — локальная ФС или локальная БД. Удалённый Streamable HTTP: Client POSTит тот же конверт на HTTPS-эндпоинт — общие счета, тикеты, внутренние API. Удалённость больше не значит «рукопожатие, потом Session ID». Около 2026-07-28 запросы стараются быть самоописываемыми, чтобы шлюз лимитировал по method.
Без состояния — слой протокола: любой инстанс берёт любой запрос. У приложения по-прежнему БД, ключи идемпотентности и личность. Читать «протокол без состояния» как «инструменты не надо проверять» — наоборот: без кэша сессии нельзя считать живым tools/list прошлого хода. Протухший каталог пишет неверную форму в tools/call. Детали:stateless MCP и JSON-RPC.
MCP также не протокол нескольких агентов. Планировщик, который отдаёт ценообразованию, комплаенсу и логистике, идёт через A2A message/send, не tools/call. Каждый специалист внутри может по-прежнему звать MCP к своей базе. «Война протоколов» обычно неверный кадр: один слой к инструментам, другой к агентам. СравнениеA2A vs MCP. Спека и реализации — вMCP GitHub; версии смотрите в репозитории спецификации, не в блоге одного Host.
Проверка на земле и JSONVue
Каждый hop: parse → Schema → бизнес-правила. Законный конверт MCP не делает arguments законными. Умная модель эти три шага не заменяет.
- Строка arguments модели: JSON.parse; при провале записать raw + tool_call id и вернуть retryable конверт — downstream ещё не бить.
- Проверить по inputSchema / parameters (Draft 2020-12); выдать path и keyword.
- Бизнес-ворота: диапазон дат, enum vs права, внешние ключи. Только потом Server бьёт downstream API.
Поставьте рядом три JSON: arguments модели, params.arguments в MCP, объект, который Server реально использовал. Расхождение почти всегда в адаптере. В браузере:форматтер JSON для parse;Валидатор JSON Schema для arguments vs файла Schema;JSON Diff для arguments модели vs body MCP / HTTP. Фикстуры valid / missing-field / wrong-enum — общие для CI и ручной отладки.
Дальше: Что такое AI Agent, MCP и JSON Schema, Stateless MCP, A2A vs MCP.
FAQ
MCP и tool calling — одно и то же?
Нет. Tool calling / function calling — hop API модели: модель выбирает имя функции и arguments. MCP — следующий hop runtime: Client находит и вызывает удалённый инструмент по JSON-RPC. Tool calling можно без MCP; MCP Server можно без модели. Слить hops в одно слово — и логи не скажут, какой слой сломался.
Можно ли сделать AI-агента без MCP?
Да. Агент — модель, которая в цикле выбирает действия, а runtime исполняет инструменты. Локальные функции, OpenAPI и свой HTTP годятся, если arguments и result проверяемы. Ценность MCP — стандартный каталог и транспорт, особенно удалённо и с несколькими клиентами. Не добавляйте слой, чтобы «выглядеть как 2026».
JSON-RPC старый — почему MCP его держит?
Потому что он старый, маленький и парсится везде. MCP нужны маршрутизируемый method, стыкуемый id и стабильный error — не ещё один формат кадра. Streamable HTTP меняет транспорт, не конверт. Назвать JSON-RPC «несовременным» обычно не чинит неверные arguments.
MCP Server сам проверяет аргументы инструмента?
Нет. inputSchema — декларация; протокол не гоняет валидатор. И Client, и Server должны парсить + Schema локально. Верить только модели или только пиру — и отсутствующие поля уходят в бизнес. Таксономия: гид ошибок JSON ИИ.
Итог и следующие шаги
MCP в 2026: находить и вызывать инструменты по JSON-RPC, писать результаты обратно в контекст модели. Это не модель, не агент и не A2A. Tool calling правит выбором функции; MCP — поиском и удалённым вызовом; JSON Schema — формой каждого hop.
Дальше: перечислите три JSON (arguments модели, MCP params.arguments, downstream body) и проверьте общую Schema; прогоните valid / нет поля / неверный enum в JSONVue. Протокол — в статье stateless MCP; поля — в статье Schema; несколько агентов — в сравнении A2A.