コンテンツへスキップ
Tutorial

MCP SSE は非推奨になりました: サーバーが壊れる前に Streamable HTTP に移行してください

| 8 min read

MCP SSE トランスポートは、2026 年 4 月 1 日にサポート終了となります。ステートレス ハンドラー、リクエストごとのフレッシュ インスタンス、およびセッション再開パスを備えた Streamable HTTP に移行します。 Node、Python、Cloudflare Workers のコード。

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

MCP Server-Sent Events トランスポートは、2026 年 4 月 1 日にサポートが終了しました。クライアント ライブラリはまだサポートされていません。 下位互換性のために SSE サポートを出荷しますが、基本プロトコルの次のマイナー バージョン はそれを削除し、パブリック MCP レジストリは新しい SSE のみのリストを拒否するようになりました。 MCP サーバーの場合 まだ答えています /sse そして /messages、移行期間はありますが、 永遠の窓。

SSE は、クライアントごとに 1 つの TCP 接続を開いたままにしていました。 負荷の背後にある MCP サーバーの 2 つのコピー バランサーはスプリット ブレイン セッションを生成しました。 水平スケーリングには、ほとんどの場合に必要なスティッキー ルーティングが必要です。 マネージド ロード バランサーはきれいに表現できません。 ストリーミング可能な HTTP は標準のリクエスト/レスポンスを使用します オプションの再開可能なストリームを使用してサイクルします。つまり、どのインスタンスもあらゆるリクエストに応答でき、 世界中のすべての CDN は、キャッシュとルーティングの方法をすでに知っています。

完全な移行パスは次のとおりです。前後のサーバー コード、データストア パターン ステートフル ツール、Cloudflare Workers 実装、FastAPI 相当物、および .well-known メタデータ ファイルを開くと、クライアントはメタデータ ファイルを開かずにサーバーを検出できるようになります。 まずは接続。

ステップ 1: SSE ハンドラーを削除する

古いコードは次のようになります。 2 つのルート、プロセス メモリに保持されるセッション マップ、およびトランスポート これにより、クライアントが切断されるまで応答がオープンされたままになります。

SSE に関するすべての問題は、そのスニペットに現れます。 の transports 地図はあくまで 1 つのプロセスに表示されます。 サーバーを再起動すると、開いているすべてのセッションが終了します。 水平方向にスケーリングし、 クライアントの半数は、それを聞いたことのないサーバーにアクセスします。 剥ぎ取ってください。

ステップ 2: ストリーミング可能な HTTP をインストールする

新しいハンドラーは小さくなりました。 1 つのルートは GET と POST の両方に応答します。 リクエストごとに新しいリクエストがスピンアップされます サーバーとトランスポートのペア。 ガベージ コレクターは応答が閉じるときにクリーンアップします。

3 つの鍵が重要です。 sessionIdGenerator: undefined セッション固定をオプトアウトするので、 トランスポートは完全にステートレスです。 enableJsonResponse: true 単一の JSON を返します 進行状況を出力しないツールの本体。これにより、パスが高速かつキャッシュ可能に保たれます。 の res.on("close") クリーンアップにより、クライアントの早期切断時のソケット リークが防止されます。

ステップ 3: セッション状態をプロセス メモリから移動する

ステートレス ハンドラーはステートレスな製品を意味するものではありません。 長時間実行されるツールは依然としてレポートする必要がある 複数のリクエストにわたって進行します。 その状態を Redis、Durable Object、DynamoDB、または ポストグル。 入口で読み取り、出口で書き込みます。

Mcp-Session-Id ヘッダーが存在する場合は、論理セッションを識別します。 ハンドラー それをデータストア キーとして使用します。 あ Last-Event-Id クライアントからのヘッダーにより、 トランスポートは、切断後にツール呼び出しを再開せずにストリームを再開します。 どちらのヘッダーも オプション。 ステートレス ツールはそれらを完全に無視できます。

ステップ 4: サーバーレスの展開

ストリーミング可能な HTTP は、SSE がブロックしていたもののロックを解除します: Cloudflare Workers、AWS での MCP サーバーの実行 Lambda、Vercel Functions、または Fly Machines。 40 の完全な Cloudflare Workers サーバーは次のとおりです。 1 つのサンプル ツールとして Botoi の IP Lookup エンドポイントをヒットする行。

セッション マップ、バックグラウンド タイマー、キープアライブ ping はありません。 Worker はオンデマンドで起動し、応答します リクエストが送信され、シャットダウンします。 1 つのワーカーが任意の数の並列クライアントを処理します。 共有された可変状態はありません。 ワーカークロック上の MCP サーバーのコールド スタートは、ほとんどの場合 5 ミリ秒未満です 工具表面。 Lambda では 50 ~ 200 ミリ秒コールドになります。

ステップ 5: FastAPI を使用した Python の移行

Python サーバーも同じ形状になります。 FastAPI ハンドラーはリクエストごとに MCP サーバーを構築します。 そしてトランスポートにデリゲートします。

パターンはどの言語でも同じです。リクエストごとにサーバーを構築し、HTTP リクエストをサーバーに渡します。 トランスポート、トランスポートが生成したものを返します。 言語のランタイムは異なります。 アーキテクチャ しません。

ステップ 6: 検出用にサーバー カードを公開する

2026 年のロードマップで埋められるギャップの 1 つは、接続のない発見です。 レジストリと クローラーはサーバーが何をしたかを知るためにライブ ハンドシェイクを必要としていました。 JSON ドキュメントを次の場所に提供します /.well-known/mcp/server-card.json クライアントはトランスポート URL を学習できます。 認証スキームと接続前に設定される機能:

これは、エージェント プラットフォームがサーバーをプローブせずにインデックスを作成できるようにする部分です。 認証0 エージェント、Cloudflare Agent Cloud、および MCP パブリック レジストリはすべてこの形式を使用します。 追加してください 一度実行すると、サーバーが一覧表示可能になります。

移行を確認する

DNS を切り替える前に、新しいエンドポイントに対してインスペクターまたは Curll を実行します。 最初の表面は すべてのツールとリソースが公開された UI。 2 つ目は、ワイヤ形式が正しいことを確認します。

成功した tools/list 完全なツール カタログを含む応答は、サーバーが 生きる。 応答が次のように返された場合 text/event-stream JSON を期待する場合、 交通機関には enableJsonResponse 無効; 旗をひっくり返す。

カットオーバー後 1 週間は、両方のトランスポートを別のパスで実行し続けます。 /sse 昔のリスナーとして、 /mcp 新しいものとして。 ログ行を次の間隔で出力します クライアントが接続する時間 /sse ユーザーエージェントを使用します。 丸太が静かになると、あなたは 古いハンドラーを削除できます。 ほとんどのクライアント ライブラリは、次の期間にストリーミング可能な HTTP サポートを提供します。 2025年12月と2026年2月。 古い Cursor および Claude Desktop インストールのロングテールが予想されます。

変わらないもの、変わるもの

懸念 SSEトランスポート ストリーミング可能なHTTP
接続モデル クライアントごとに 1 つの長期存続期間 リクエスト/レスポンス、オプションのストリーム
負荷分散 スティッキーセッションが必要です どのインスタンスもどんなリクエストにも応えます
セッション状態 インプロセスメモリ セッション ID をキーとしたデータストア
サーバーレスフィット 接続期間制限によりブロックされています ネイティブ
進行状況のストリーミング デフォルト Accept ヘッダーによるオプトイン
発見 ライブ握手 /.well-known/mcp/server-card.json
ツールの呼び出し SSE フレーム上の JSON-RPC JSON-RPC over HTTP 本文

重要なポイント

  • SSE は廃止されましたが、削除されませんでした。 クライアントは 2026 年まで引き続き受け入れますが、新たな サーバーとレジストリのリストにはストリーミング可能な HTTP が必要です。
  • リクエストごとに新しくビルドします。 インプロセスセッションマップはありません。 サーバーオブジェクトを持たせる RPC にかかる時間だけ存続します。
  • 状態をデータストアにプッシュします。 Redis、Durable Objects、または Postgres をキーとして Mcp-Session-Id ヘッダ。
  • サーバーレスが再びテーブルに登場します。 Cloudflare ワーカー、Lambda、Vercel 機能; どれも長寿命の SSE を十分にサポートしていませんでした。
  • サーバーカードを発行します。 /.well-known/mcp/server-card.json 作る サーバーは接続なしでも検出可能です。

Botoi の MCP サーバーは、Streamable HTTP で出荷されます。 api.botoi.com/mcp IP ルックアップ、電子メール検証、DNS、ハッシュ、JWT 署名、QR にわたる 49 の厳選されたツールを備えています 世代。 ソースは MIT ライセンスを取得しており、上記のパターンを反映しています。 を読んでください セットアップドキュメント のために クロード デスクトップ、クロード コード、カーソル、VS コード、および Windsurf 構成。

FAQ

MCP SSE は削除されましたか、それとも非推奨になっただけですか?
2026 年 4 月 1 日をもって廃止されました。 下位互換性のためにクライアント ライブラリにはランタイム サポートがまだ存在しますが、新しい MCP サーバーとレジストリ リストには Streamable HTTP が必要です。 2026 年のロードマップでは、次のマイナー バージョンで基本プロトコルから SSE が完全に削除されます。 削除時ではなく、今すぐ移行を開始してください。
MCP が SSE を削除したのはなぜですか?
SSE はクライアントごとに 1 つの TCP 接続を開いたままにしており、水平スケーリングを困難にしていました。 ラウンドロビン ロード バランサーの背後にある 2 台の同一の SSE サーバーは、スプリット ブレイン セッションを生成しました。サーバー A に保存されているツールの状態は、サーバー B には見えませんでした。ストリーミング可能な HTTP は、オプションの再開可能なストリームを備えた短いリクエスト/レスポンス サイクルを使用するため、ロード バランサーと CDN は、クライアントをインスタンスに固定することなく、すべてのリクエストをルーティングします。
リクエストごとのフレッシュインスタンスとは何ですか?
受信リクエストごとに、新しい MCP サーバー オブジェクトが構築され、RPC が処理され、インスタンスが破棄されます。 リクエスト間のメモリ内状態はありません。 永続化する必要がある状態 (プログレス トークン、ツール セッション) は、ハンドラーが開始時に読み取り、終了時に書き込むデータストア内に存在します。 これにより、15 分間の接続時間制限に引っかかることなく、Cloudflare Workers や AWS Lambda などのサーバーレス プラットフォーム上で同じサーバーを実行できます。
ストリーミング ツールの出力には WebSocket がまだ必要ですか?
いいえ。ストリーミング可能な HTTP には、部分的な結果を出力するツールの標準 POST 応答内にオプションの SSE スタイルのストリームが含まれています。 古い SSE との違いは、ストリームが 1 つの HTTP リクエスト内に存在し、ツール呼び出しで終了することです。 ツール呼び出しの間にソケットを開いたままにしません。
ストリーミング可能な HTTP サーバーをローカルでテストするにはどうすればよいですか?
公式の MCP インスペクター (npx @modelcontextprotocol/inspector) を使用してください。このインスペクターは両方のトランスポートを認識できるようになりました。 または、JSON-RPC 本文と Accept: text/event-stream ヘッダーを使用してエンドポイントをカールします。 ツールが進行状況を出力するかどうかに応じて、単一の JSON 応答またはイベント ストリームが表示されます。 セッションの再開は、Mcp-Session-Id ヘッダーと Last-Event-Id ヘッダーを使用してテストできます。

botoiで開発を始めよう

150以上のAPIエンドポイント。検索、テキスト処理、画像生成、開発者ユーティリティに対応。無料プラン、クレジットカード不要。