MCPのStreamable HTTPが実現するリアルタイムAIツール連携
モデルコンテキストプロトコル(MCP)は、クライアントとして機能する人工知能モデルと、サーバーとして機能する外部ツールや多様なデータソースをシームレスに連携させるために設計されたオープンスタンダードです。ローカル統合ではシンプルな標準入出力メカニズムを利用できますが、ネットワークを介したリモートインタラクションは、洗練されたHTTPベースの通信レイヤーに依存します。ここでStreamable HTTPが重要な役割を果たします。これは2025年初頭に導入された最新のトランスポート技術で、以前のアプローチを進化させ、AIクライアントとリモートツール間のストリーミングインタラクションを管理するために特別に設計されています。本質的に、Streamable HTTPはMCPがインターネットを介してデータを連続的かつリアルタイムなフローで送受信することを可能にし、従来の単一リクエスト-レスポンスパラダイムを超越します。このイノベーションは、リモートMCPサーバーの動作方法の基盤であり、AIエージェントがウェブサービスと流動的かつ高度にインタラクティブな方法で連携することを可能にします。
Streamable HTTPの核となるのは、単一のHTTP接続を介してストリーミング応答と双方向通信を促進するHTTPベースの通信フレームワークです。クライアントの視点からは、通常HTTP POSTを介してリクエストを送信します。サーバーは、従来の単一JSONメッセージで応答するか、またはServer-Sent Events(SSE)を使用してライブイベントストリームを開始し、時間をかけて複数のメッセージを配信できます。主要な設計機能は、サーバーが単一の統合HTTPエンドポイント(例:https://example.com/mcp
)を使用することです。これは、コマンド送信用のPOSTリクエストと、持続的なリスニングストリーム確立用のGETリクエストの両方に対応します。この単一エンドポイントアーキテクチャは、古い複雑な複数エンドポイントスキームと比較して、実装を大幅に簡素化します。決定的に重要なのは、Streamable HTTPが標準HTTPプロトコル(POST、GET)とSSEに基づいて構築されており、同時に長寿命のデータストリームを可能にすることで、既存のウェブインフラストラクチャ(プロキシやロードバランサーなど)との互換性を維持している点です。本質的に、Streamable HTTPはMCPがHTTP経由でデータをストリーミングするための制御されたメカニズムを提供し、必要に応じてSSEを使用して連続的なサーバーメッセージを配信します。
Streamable HTTPのメカニズムを完全に理解するには、初期設定から終了までの典型的なクライアント-サーバーインタラクションのシーケンシャルなステップを追うことが役立ちます。プロセスは、クライアントがサーバーの指定されたMCPエンドポイントにHTTP POSTリクエストを送信してセッションを開始することから始まります。この基本的なリクエストには、クライアントの能力と希望するプロトコルバージョンに関する情報が含まれています。処理が成功すると、サーバーはHTTP 200 OKステータスで応答し、そのヘッダーに固有のMcp-Session-Id
を決定的に含めます。この識別子はセッションの状態を維持するための要石であり、クライアントはコンテキストを保持するためにすべての後続のリクエストにこれを含める必要があります。応答ボディは、セットアップの成功も確認し、利用可能なツールなど、サーバーの能力を詳述します。
セッション確立後、クライアントは通常、サーバーによって開始されるメッセージのための二次通信チャネル(アナウンスチャネルとして知られる)を開設します。これは、同じエンドポイントにHTTP GETリクエストを送信することで実現されます。ここでもMcp-Session-Id
を含め、Accept: text/event-stream
ヘッダーを介してイベントストリームを受信する意図を示します。サーバーはHTTP 200 OKとContent-Type: text/event-stream
ヘッダーで応答し、TCP接続を無期限に開いたままにします。この持続的な接続により、サーバーはクライアント自身のコマンドリクエストとは独立して、いつでもJSON-RPCリクエストや通知をクライアントにプッシュできます。
Streamable HTTPの真の力は、リアルタイムの更新を必要とする長時間実行タスクを処理する際に明らかになります。クライアントがそのようなタスク(例えば、データ分析スクリプトの実行)を実行する必要がある場合、関連するコマンドを含む別のHTTP POSTリクエストをMcp-Session-Id
とともに送信します。サーバーはこれを潜在的に長い操作であると認識し、直ちにHTTP 200 OKステータスとContent-Type: text/event-stream
ヘッダーで応答します。このアクションにより、この特定のPOSTリクエストの接続が開いたままになり、その応答ボディが専用のSSEストリームに変換されます。タスクが進行するにつれて、サーバーはこのストリーム上でSSEイベントとしてリアルタイムの更新を送信します。タスクが完了すると、最終結果が最後のSSEイベントとして送信され、この特定のストリームは閉じられ、すべての進行状況の更新と最終結果が開始リクエストにきれいにスコープされます。
重要なのは、2つのチャネルが独立して動作することです。長時間実行中のPOSTトランザクションが進行中でも、サーバーはクライアントと無関係な事項について引き続き通信できます。例えば、新しいツールがサーバーに追加された場合、サーバーは通知を構築し、アクティブなPOST応答ストリーム上ではなく、以前に確立された持続的なGET接続を介してSSEイベントとして送信できます。これはアナウンスチャネルの動作を示しており、クライアントが開始した特定のコマンドから切り離された、セッションスコープの一般的な通知を配信します。
このプロトコルは、ネットワーク障害に対する堅牢性も考慮して設計されています。クライアントの長寿命のGET接続(アナウンスチャネル)が切断された場合、クライアントのネットワークライブラリは切断を検出し、直ちに新しいHTTP GETリクエストを発行します。このリクエストには、Mcp-Session-Id
とLast-Event-ID
ヘッダーの両方が含まれ、最後に正常に処理されたイベントを示します。サーバーはこの情報を使用して、クライアントが見逃した可能性のあるそのイベント以降に送信されたメッセージを再実行し、データ損失なしにアナウンスチャネルをシームレスに復元します。このレイヤードな状態アプローチ — Mcp-Session-Id
が永続的なアプリケーション層セッションを作成し、開かれたHTTP接続が一時的なトランスポート層ストリーム状態を提供する — は、このような回復力を可能にし、中断が発生した場合にプロトコルが永続的なアプリケーション状態を使用して一時的なトランスポート状態を再構築することを可能にします。
最後に、クライアントがすべてのタスクを完了すると、/mcp
エンドポイントにMcp-Session-Id
を含むHTTP DELETEリクエストを送信して、セッションを明示的に終了します。サーバーはIDを検証し、関連するセッション状態をクリーンアップし、持続的なGET接続を閉じ、セッションIDを無効化し、HTTP 200 OKで応答して通信ライフサイクルを正式に終了します。
Streamable HTTPは、MCPがAIエージェントをインターネット上のツールと豊かでインタラクティブな方法で接続する能力の要石です。HTTPをストリームフレンドリーに拡張し、SSEを継続的な更新に活用することで、出力のストリーミング、長時間実行タスクの管理、リアルタイム同期の維持が必要なAIシステムにとって不可欠な柔軟性を提供します。従来のHTTPリクエスト-レスポンスモデルとは異なり、Streamable HTTPは会話を生かし続けます。AIエージェントはツールとタスクを開始し、すぐに進行状況の更新や結果を受け取り始めることができ、ツールも同じ持続的な通信回線でアラートを送信したり、説明を求めたりできます。このアプローチは、セッション再開機能を通じて信頼性を大幅に向上させ、不要な常時接続を回避することで効率を改善し、同時に確立されたウェブ標準と完全に互換性を保ちます。実際には、Streamable HTTPは、コーディングアシスタントがリモートビルドツールからライブログをストリーミングしたり、データ分析エージェントがデータベースを照会して結果を段階的に受け取ったりするようなシナリオを可能にします。これは、HTTPのシンプルさとストリーミングの力を効果的に結びつけ、AIと世界の間でコンテキストとデータをストリーミングするための統一された堅牢なインターフェースを提供することで、「AIツールのUSB-C」として機能するというMCPの約束を果たします。