Еще в конце июля вышла спецификация MCP 2026-07-28, в которой серьёзно поменяли механику работы с удалёнными MCP-серверами. И вот лишь на днях поддержку новой версии добавил LangChain.
Главное изменение в MCP — переход к stateless core.
Раньше клиент сначала инициализировал MCP-сессию с сервером через
initialize, получал session_id, и последующие запросы относились к этой же сессии. Для облачных серверов это создавало лишние сложности: за балансировщиком запросы одной сессии нужно было либо направлять на одну и ту же копию сервера, либо синхронизировать состояние между ними.В новой спецификации обязательные протокольные сессии убрали. Каждый запрос теперь сам содержит информацию о версии протокола, клиенте и его возможностях, поэтому один запрос может обработать одна копия сервера, а следующий — другая.
Прикладное состояние при этом никуда не делось. Сервер, например, может вернуть
workspace_id, который клиент явно передаст при следующем вызове.Поменялась и механика server-to-client запросов. Например, в MCP есть elicitation — сервер может запросить дополнительный ввод, в том числе подтверждение удаления или другой чувствительной операции.
Раньше такой запрос можно было отправить клиенту в рамках двустороннего взаимодействия. Теперь для этого используется общий механизм Multi Round-Trip Requests (MRTR):
вызов → input_required → получение ввода → повторный вызовMRTR нужен не только для elicitation: через него реализуются и другие ситуации, когда серверу требуется обратиться к возможностям клиента.
Ещё несколько изменений в MCP 2026-07-28:
— список инструментов можно кэшировать, сокращая число повторных
tools/list;— для Streamable HTTP метод MCP и имя инструмента дублируются в заголовках запроса, поэтому прокси и шлюзы могут маршрутизировать и контролировать вызовы без разбора JSON;
— появились формальные расширения протокола. Например, Tasks позволяют запускать долгие операции как отдельные задачи и позже получать их статус и результат.
А что поменял LangChain?
Раньше для MCP была отдельная библиотека `langchain-mcp-adapters`. Она работала поверх официального MCP Python SDK и предоставляла свою клиентскую обвязку, в том числе `MultiServerMCPClient`.
Теперь MCP встроили в основной LangChain:
from langchain.mcp import MCPAdapterОдновременно поменяли клиентский слой. Новый `MCPAdapter` работает поверх FastMCP: тот занимается соединениями, авторизацией, кэшированием и согласованием версии протокола, а LangChain преобразует MCP-инструменты в обычные LangChain tools.
То есть теперь примерно так:
LangChain → MCPAdapter → FastMCP → MCP serverЭто позволяет через один интерфейс подключать старые и новые MCP-серверы, а несколько серверов собирать через
ClientGroup.Наконец, elicitation связали с LangGraph interrupts (то есть с HITL): если MCP-серверу нужен дополнительный ввод, выполнение агента можно приостановить, получить ответ и затем продолжить.
Такие вот изменения.