用語集 最終更新 2026.08.08

Streamable HTTP

Streamable HTTP は、HTTP ベースで MCP のやり取りを行うための公式トランスポートです。 クライアントからの送信は HTTP POST を使い、サーバーからの複数メッセージ配信には必要に応じて SSE を使います。

stdio との使い分け

MCP が定める標準トランスポートは stdio と Streamable HTTP の2つです。公式仕様は 可能な限り stdio を使うことを推奨しています。stdio はクライアントがサーバーをサブプロセスとして起動する方式で、ネットワークに出ないぶん設計も安全面も軽く済みます。 Streamable HTTP を選ぶのは、リモートで公開したい、複数クライアントから同時に使いたい、認証つきのサービスとして提供したい、といった事情があるときです。

HTTP+SSE から置き換わった経緯

以前の MCP には HTTP+SSE という別のトランスポートがありました(プロトコル版 2024-11-05)。Streamable HTTP はこれを置き換えたもので、POSTGET の両方を受ける単一エンドポイントにまとまったのが大きな違いです。 古い記事やサンプルには2つのエンドポイントを立てる前提のものが残っています。MCP の実装情報を読むときは、その記事がどのプロトコル版を前提にしているかを先に確認してください。

セキュリティ要件は「推奨」ではない

仕様では、Streamable HTTP を実装するサーバーに次を求めています。

  1. すべての接続で Origin ヘッダーを検証すること(MUST
  2. ローカル実行時は 0.0.0.0 ではなく 127.0.0.1 にバインドすること(SHOULD)
  3. すべての接続に適切な認証を実装すること(SHOULD)

1つ目が必須なのは DNS リバインディング攻撃を防ぐためです。これを省くと、利用者が開いた外部のWebサイトから、手元で動いている MCP サーバーを操作されうる状態になります。Origin の考え方を理解しておくと、この検証が何を見ているのか分かりやすくなります。 (出典:MCP 仕様 / Transports

実務で見るポイント

  • セッションMcp-Session-Id ヘッダーで維持される。404 が返ったら再初期化する
  • 切断からの再開は SSELast-Event-ID を使う設計になっている
  • ローカル用途なら無理に HTTP にせず stdio のままの方が事故が少ない