StreamableHTTP изнутри

Урок 12 из 18 курса «MCP: продвинутые темы»: официальный курс Anthropic Academy (Антропик) на русском языке. Урок входит в платный доступ; первые уроки курса бесплатно.

Кадр из видеоурока

О чём урок

Добро пожаловать в углубленное изучение Model Context Protocol (MCP) — ключевого компонента для взаимодействия с продвинутыми моделями AI, такими как Claude. MCP обеспечивает гибкую и мощную коммуникацию между клиентом и сервером. Однако некоторые функции MCP, такие как семплирование, уведомления о прогрессе и логирование, требуют, чтобы сервер мог инициировать запросы к клиенту. Это представляет собой фундаментальную проблему для HTTP, который по своей природе ориентирован на запросы, инициируемые клиентом. Именно здесь на сцену выходит StreamableHTTP — элегантное решение MCP, которое обходит это ограничение, используя технологию Server-Sent Events (SSE). Традиционно, протокол HTTP работает по принципу "запрос-ответ": клиент отправляет запрос, а сервер отвечает. Сервер не может самостоятельно инициировать отправку данных клиенту, если клиент предварительно не сделал запрос. Для многих веб-приложений это не проблема, но для сложных систем, таких как MCP, где серверу необходимо активно информировать клиента о событиях (например, о ходе выполнения задачи, новых данных для семплирования или важных логах), это становится серьезным препятствием. Как же обеспечить двустороннюю связь, когда HTTP изначально предназначен для одностороннего потока, инициируемого клиентом? StreamableHTTP решает эту проблему с помощью хитроумного обходного пути, используя технологию Server-Sent Events (SSE). SSE позволяет серверу отправлять обновления данных клиенту по одному HTTP-соединению. Это создает долгоживущий HTTP-ответ, через который сервер может непрерывно "стримить" сообщения клиенту в любое время, без необходимости постоянных запросов со стороны клиента. Эта "магия" происходит в несколько этапов, которые устанавливают постоянные соединения между клиентом и сервером. Процесс установления соединения StreamableHTTP начинается так же, как и любое другое соединение MCP: Клиент отправляет Initialize Request. Сервер отвечает сообщением Initialize Result. В составе Initialize Result сервер включает специальное уведомление Initialized Notification, которое содержит уникальный session ID. Этот session ID имеет решающее значение. Он однозначно идентифицирует клиентскую сессию и должен быть включен во все последующие запросы от клиента к серверу, чтобы поддерживать контекст и маршрутизацию сообщений.

План урока

  1. Model Context Protocol: Продвинутые темы
  2. Основная проблема: Ограничения HTTP
  3. Как работает StreamableHTTP: Обходной путь с использованием SSE
  4. Начальная настройка соединения
  5. Установление SSE-соединения
  6. Вызовы инструментов и двойные SSE-соединения
  7. Маршрутизация сообщений
  8. Флаги конфигурации, которые могут нарушить обходной путь

Урок входит в полный доступ. Полный текст и видео открываются после оплаты. Первые уроки каждого курса бесплатны.

Полезные гиды