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 はこれを置き換えたもので、POST と GET の両方を受ける単一エンドポイントにまとまったのが大きな違いです。 古い記事やサンプルには2つのエンドポイントを立てる前提のものが残っています。MCP の実装情報を読むときは、その記事がどのプロトコル版を前提にしているかを先に確認してください。
セキュリティ要件は「推奨」ではない
仕様では、Streamable HTTP を実装するサーバーに次を求めています。
- すべての接続で
Originヘッダーを検証すること(MUST) - ローカル実行時は
0.0.0.0ではなく127.0.0.1にバインドすること(SHOULD) - すべての接続に適切な認証を実装すること(SHOULD)
1つ目が必須なのは DNS リバインディング攻撃を防ぐためです。これを省くと、利用者が開いた外部のWebサイトから、手元で動いている MCP サーバーを操作されうる状態になります。Origin の考え方を理解しておくと、この検証が何を見ているのか分かりやすくなります。 (出典:MCP 仕様 / Transports)