Масштабное обновление Model Context Protocol (MCP) 👀
На днях вышло обновление спецификации MCP и оно уже признано самом значительным изменением протокола со времен его запуска 🍿
Раньше MCP был stateful, то есть серверу приходилось держать активную сессию, а процесс подключения состоял из 2-х шагов: сначала POST с инициализацией, потом получение Mcp-Session-Id, и только после этого отправляется второй POST с реальным вызовом инструмента. При такой архитектуре, если у вас за балансировщиком был с десяток инстансов, всегда вставал вопрос: «какому из них отправлять второй запрос?» Из-за чего приходилось городить разделяемое хранилище сессий, что для кровавого энтерпрайза – трешь, боль, угар и содомия, так как состояние «прилипает» к конкретному серверу 🫠
Новый Stateless MCP (по сути – MCP 2.0) делает все куда проще и реально позволяет масштабировать набор MCP-серверов без той боли, которую приходилось испытывать при использовании первой версии протокола. По факту, у нас больше нет сессий и каждый запрос сам несет версию протокола, идентичность клиента и его capabilities. Все это прокидывается в HTTP-заголовках, а данные клиента живут внутри JSON в поле _meta. То есть от танцев с бубном мы переходим к формату «один POST и все на мази» (вот насколько – это еще предстоит проверить).
Другими словами, теперь запрос может обработать любой инстанс за балансировщиком, так как состояние теперь не привязано к конкретному инстансу MCP-сервера 😎
Дополнительно к этому в спецификацию довили еще несколько обновлений:
1️⃣ вместо постоянно открытых потоков для взаимодействия «сервер → клиент» появился Multi Round-Trip Requests (MRTR). Сервер сам может приостановить вызов и дозапросить данные у пользователя, прежде чем продолжить свою работу;
2️⃣ списки возможностей MCP-серверов (tools, resources и prompts) теперь возвращаются в строго заданном порядке и доп. подсказками, позволяющие клиенту эффективно кэшировать каталог инструментов;
3️⃣ устаревший и небезопасный способ авторизации с помощью Dynamic Client Registration заменен на Client ID Metadata Documents (CIMD) с более усиленной защитой от подмены сервера авторизации.
Выпиливанию подверглись Roots, Sampling и старый транспорт HTTP+SSE. У разработчиков есть 12 месяцев, чтобы от них избавиться в своем коде 🥸
Почему это вообще важно? Давать агенту свободный доступ к shell/bash – не всегда безопасно. В тоже время, работу MCP-инструментов гораздо проще анализировать с точки зрения «что здесь может пойти не так». То есть протокол – более безопасная альтернатива открытому выполнению команд. А вот насколько хорошо эти инструменты будут вызываться самим агентом через MCP – все еще вопрос. У него и так уже история с «душком» из-за чего большинство разработчиков перешли на связку «агентский навык + cli-инструмент» 😇
А вы что думаете о переходе с дуплексного протокола с поддержкой состояния к простому формату «запрос/ответ», без его сохранения? Дадите MCP еще одну возможность или окончательно и бесповоротно останетесь на связке «агентский навык + cli-инструмент»?
Post #43
1.55K