Перейти к содержимому
Tutorial

MCP SSE устарел: перейдите на Streamable HTTP, прежде чем ваш сервер выйдет из строя.

| 8 min read

Транспорт MCP SSE завершился 1 апреля 2026 года. Перейдите на потоковый HTTP с обработчиком без сохранения состояния, новым экземпляром на запрос и путем возобновления сеанса; код для Node, Python и Cloudflare Workers.

Data center with network switches representing stateless MCP transport
Photo by Taylor Vick on Unsplash

Транспорт событий, отправленных сервером MCP, завершился 1 апреля 2026 года. Клиентские библиотеки все еще добавить поддержку SSE для обратной совместимости, но следующую второстепенную версию базового протокола удаляет его, и публичный реестр MCP теперь отклоняет новые списки только для SSE. Если ваш сервер MCP все еще отвечает на /sse и /messages, у вас есть окно миграции, а не вечное окно.

SSE держал открытым одно TCP-соединение для каждого клиента. Две копии вашего сервера MCP под нагрузкой балансировщик создавал сеансы разделенного мозга; горизонтальное масштабирование требовало липкой маршрутизации, что большинство управляемые балансировщики нагрузки не могут выражать чисто. Streamable HTTP использует стандартный запрос-ответ. циклы с дополнительными возобновляемыми потоками, что означает, что любой экземпляр может ответить на любой запрос и каждая CDN в мире уже знает, как кэшировать и маршрутизировать данные.

Вот полный путь миграции: код сервера «до» и «после», шаблон хранилища данных для инструменты с отслеживанием состояния, реализация Cloudflare Workers, эквивалент FastAPI и .well-known метаданных, чтобы клиенты могли обнаружить ваш сервер, не открывая подключение в первую очередь.

Шаг 1. Удалите обработчик SSE.

Старый код выглядит так. Два маршрута, карта сеансов, хранящаяся в памяти процесса, и транспортный маршрут. который сохраняет ответ открытым до тех пор, пока клиент не отключится:

В этом фрагменте отображаются все проблемы с SSE. transports Карта только видимый для одного процесса; перезапустите сервер, и каждый открытый сеанс завершится; масштабировать по горизонтали и половина ваших клиентов попадает на сервер, который никогда о них не слышал. Вырвите это.

Шаг 2. Установите потоковый HTTP

Новый обработчик стал меньше. Один маршрут отвечает как GET, так и POST; каждый запрос запускает новый серверно-транспортная пара; сборщик мусора очищает, когда ответ закрывается:

Три ключа имеют значение. sessionIdGenerator: undefined отказывается от закрепления сеанса, поэтому транспорт полностью без гражданства. enableJsonResponse: true возвращает один JSON тело для инструментов, которые не выдают информацию о ходе выполнения, что обеспечивает быстрый и кэшируемый путь. res.on("close") очистка предотвращает утечку сокетов при раннем отключении клиента.

Шаг 3. Переместите состояние сеанса из памяти процесса.

Обработчик без сохранения состояния не означает продукт без сохранения состояния. Долго работающим инструментам все еще нужно сообщать прогресс по нескольким запросам. Поместите это состояние в Redis, Durable Object, DynamoDB или Постгрес; прочитайте его при входе, напишите при выходе:

The Mcp-Session-Id заголовок, если он присутствует, идентифицирует логический сеанс; обработчик использует его как ключ хранилища данных. А Last-Event-Id заголовок от клиента позволяет транспорт возобновляет поток после отключения без перезапуска вызова инструмента. Оба заголовка необязательно; инструменты без сохранения состояния могут полностью их игнорировать.

Шаг 4. Развертывание бессерверной системы

Streamable HTTP разблокирует то, что заблокировано SSE: запуск сервера MCP на Cloudflare Workers, AWS Лямбда, функции Верселя или летающие машины. Вот полный сервер Cloudflare Workers за 40 строк, используя конечную точку поиска IP-адресов Botoi в качестве примера инструмента:

Никакой карты сеансов, никаких фоновых таймеров, никаких сигналов проверки активности. Рабочий раскручивается по требованию, отвечает запрос и выключается. Один Worker обслуживает любое количество параллельных клиентов, поскольку существует нет общего изменяемого состояния. Холодный запуск серверов MCP на рабочих частотах для большинства составляет менее 5 мс. поверхности инструментов; на Лямбде они холодные от 50 до 200 мс.

Шаг 5. Миграция Python с помощью FastAPI

Серверы Python приобретают такую ​​же форму. Обработчик FastAPI создает сервер MCP для каждого запроса. и делегаты на транспорте:

Схема одинакова для всех языков: создание сервера для каждого запроса, передача HTTP-запроса транспорт, возвращайте все, что производит транспорт. Языковые среды выполнения различаются; архитектура нет.

Шаг 6. Публикация карты сервера для обнаружения

Один из пробелов, который закрывает дорожная карта на 2026 год, — это открытия без связи. Реестры и Раньше сканерам требовалось живое рукопожатие, чтобы узнать, что делает ваш сервер. Отправьте документ JSON по адресу /.well-known/mcp/server-card.json и клиенты могут узнать URL-адрес транспорта, схема аутентификации и набор возможностей перед подключением:

Это часть, которая позволяет платформам агентов индексировать ваш сервер, не проверяя его. Auth0 для Агенты, Cloudflare Agent Cloud и публичный реестр MCP используют этот формат; добавить это один раз, и ваш сервер станет доступен для просмотра.

Проверьте миграцию

Прежде чем перевернуть DNS, запустите инспектор или сверьтесь с новой конечной точкой. Первые поверхности a Пользовательский интерфейс со всеми доступными инструментами и ресурсами; второй подтверждает, что формат провода правильный:

Успешный tools/list ответ с полным каталогом инструментов означает, что сервер жить. Если ответ возвращается как text/event-stream когда вы ожидаете JSON, транспорт имеет enableJsonResponse неполноценный; перевернуть флаг.

Обеспечьте движение обоих транспортов по разным путям в течение недели после переключения: /sse как старый слушатель, /mcp как новый. Выдавать строку журнала каждые время, когда клиент подключается к /sse с его пользовательским агентом. Когда журнал замолкает, вы можно удалить старый обработчик. Большинство клиентских библиотек поставляли поддержку Streamable HTTP между декабрь 2025 г. и февраль 2026 г.; ожидайте длинного хвоста старых установок Cursor и Claude Desktop.

Что остается прежним, что меняется

Беспокойство SSE транспорт Потоковый HTTP
Модель подключения Один долгоживущий на каждого клиента Запрос-ответ, дополнительный поток
Балансировка нагрузки Требуются закрепленные сеансы Любой экземпляр отвечает на любой запрос
Состояние сеанса Внутрипроцессная память Хранилище данных привязано к идентификатору сеанса
Бессерверная совместимость Заблокировано из-за ограничения продолжительности соединения Родной
Трансляция прогресса По умолчанию Подписаться через заголовок Accept
Открытие Живое рукопожатие /.well-known/mcp/server-card.json
Вызов инструмента JSON-RPC через кадры SSE JSON-RPC через тело HTTP

Ключевые выводы

  • SSE устарел и не удален. Клиенты по-прежнему принимают его до 2026 года, но новый серверы и списки реестра требуют Streamable HTTP.
  • Сборка новых по запросу. Никаких карт сеансов в процессе; пусть сервер возражает жить ровно столько, сколько потребуется RPC.
  • Отправить состояние в хранилище данных. Redis, Durable Objects или Postgres с ключами на Mcp-Session-Id заголовок.
  • Бессерверные технологии снова на столе. Работники Cloudflare, Lambda, Vercel Функции; ни один из них не поддержал долгосрочную SSE.
  • Опубликуйте карточку сервера. /.well-known/mcp/server-card.json делает ваш сервер доступен для обнаружения без подключения.

Сервер MCP Botoi поставляется на Streamable HTTP по адресу api.botoi.com/mcp с 49 тщательно подобранными инструментами для поиска IP, проверки электронной почты, DNS, хеширования, подписи JWT и QR. поколение. Источник имеет лицензию MIT и отражает приведенную выше схему; прочитать документация по настройке для Конфигурации Claude Desktop, Claude Code, Cursor, VS Code и Windsurf.

FAQ

MCP SSE удален или просто устарел?
Устарело с 1 апреля 2026 г.; поддержка времени выполнения все еще существует в клиентских библиотеках для обратной совместимости, но новые серверы MCP и списки реестра требуют Streamable HTTP. Дорожная карта 2026 года полностью удаляет SSE из базового протокола в следующей второстепенной версии; начните миграцию сейчас, а не при удалении.
Почему MCP отказалась от SSE?
SSE держал открытым одно TCP-соединение для каждого клиента, что делало горизонтальное масштабирование затруднительным. Два идентичных сервера SSE за балансировщиком нагрузки с циклическим перебором создавали сеансы с разделенным мозгом: состояние инструмента, хранящееся на сервере A, было невидимым для сервера B. Streamable HTTP использует короткие циклы запрос-ответ с дополнительными возобновляемыми потоками, поэтому балансировщики нагрузки и CDN маршрутизируют каждый запрос без привязки клиента к экземпляру.
Что такое «свежий экземпляр на запрос»?
Каждый входящий запрос создает новый объект сервера MCP, обрабатывает RPC и удаляет экземпляр. Нет состояния в памяти между запросами. Состояние, которое необходимо сохранить (токены прогресса, сеансы инструментов), находится в хранилище данных, которое обработчик считывает при входе и записывает при выходе. Это позволяет вам запускать тот же сервер на бессерверной платформе, такой как Cloudflare Workers или AWS Lambda, без ограничения продолжительности соединения в 15 минут.
Нужны ли мне еще WebSockets для потоковой передачи результатов инструмента?
Нет. Streamable HTTP включает дополнительный поток в стиле SSE внутри стандартного ответа POST для инструментов, которые выдают частичные результаты. Отличие от старого SSE заключается в том, что поток живет внутри одного HTTP-запроса и заканчивается вызовом инструмента. Вы не держите сокет открытым между вызовами инструмента.
Как протестировать HTTP-сервер Streamable локально?
Используйте официальный инспектор MCP (npx @modelcontextprotocol/inspector), который теперь поддерживает оба транспорта. Или сверните конечную точку с телом JSON-RPC и заголовком Accept: text/event-stream; вы увидите либо один ответ JSON, либо поток событий в зависимости от того, отображает ли инструмент прогресс. Возобновление сеанса можно проверить с помощью заголовков Mcp-Session-Id и Last-Event-Id.

Начните разработку с botoi

150+ API-эндпоинтов для поиска, обработки текста, генерации изображений и утилит для разработчиков. Бесплатный тариф, без банковской карты.