MCPサーバー・トランスポート
MCPは、BobとMCPサーバー間の通信のためのトランスポート・メカニズムをサポートしています。
概要
MCPは3つのトランスポート・オプションを提供し、それぞれ異なるデプロイメント・シナリオに適しています:
- STDIOトランスポート(ローカル・サーバー)
- Streamable HTTPトランスポート(リモート・サーバーの最新標準)
- SSEトランスポート(レガシー・リモート・オプション)
各トランスポートには異なる特性、利点、使用例があります。
STDIOトランスポート
STDIOトランスポートはコンピューター上でローカルに実行され、標準入出力ストリームを介して通信します。
STDIOトランスポートの仕組み
- Bobは子プロセスとしてMCPサーバーを起動します
- 通信はプロセス・ストリームを介して行われます:BobはサーバーのSTDINに書き込み、サーバーはSTDOUTで応答します
- 各メッセージは改行文字で区切られます
- メッセージはJSON-RPC 2.0としてフォーマットされます
Client Server
| |
|---- JSONメッセージ ---->| (STDIN経由)
| | (リクエストを処理)
|<---- JSONメッセージ ----| (STDOUT経由)
| |STDIOの特性
- ローカル性: Bobと同じマシン上で実行
- パフォーマンス: 非常に低いレイテンシとオーバーヘッド(ネットワーク・スタックが関与しない)
- シンプルさ: ネットワーク設定なしの直接プロセス通信
- 関係: クライアントとサーバー間の1対1の関係
- セキュリティー: ネットワーク露出がないため本質的に安全
STDIOを使用する場合
STDIOトランスポートは以下に最適です:
- 同じマシン上で実行されるローカル統合とツール
- セキュリティー・クリティカルな操作
- 低レイテンシ要件
- 単一クライアント・シナリオ(サーバーごとに1つのBobインスタンス)
- コマンド・ライン・ツールまたはIDE拡張機能
STDIO実装例
const server = new Server({name: 'local-server', version: '1.0.0'});
// ツールを登録...
// STDIOトランスポートを使用
const transport = new StdioServerTransport(server);
transport.listen();Streamable HTTPトランスポート
Streamable HTTPトランスポートは、リモートMCPサーバー通信の最新標準であり、古いHTTP+SSEトランスポートに代わるものです。HTTP/HTTPS上で動作し、より柔軟なサーバー実装を可能にします。
Streamable HTTPトランスポートの仕組み
- サーバーはPOSTとGETメソッドの両方をサポートする単一のHTTPエンドポイント(MCPエンドポイント)を提供します
- BobはHTTP POSTでこのMCPエンドポイントにリクエストを送信します
- サーバーはリクエストを処理し、レスポンスを返します
- オプションで、サーバーは同じ接続を介してServer-Sent Events(SSE)を使用して、複数のメッセージや通知をBobにストリーミングできます
これにより、基本的なリクエスト-レスポンス相互作用と、より高度なストリーミングおよびサーバー開始通信の両方が可能になります。
Client Server
| |
|---- HTTP POST /mcp_endpoint ---->| (クライアント・リクエスト)
| | (リクエストを処理)
|<--- HTTP Response / SSE Stream --| (サーバー・レスポンス / ストリーム)
| |Streamable HTTPの特性
- 最新標準: 新しいリモートMCPサーバー実装の推奨方法
- リモート・アクセス: Bobとは異なるマシンでホスト可能
- スケーラビリティ: 複数のクライアント接続を同時に処理可能
- プロトコル: 標準HTTP/HTTPS上で動作
- 柔軟性: シンプルなリクエスト-レスポンスと高度なストリーミングをサポート
- 単一エンドポイント: すべてのMCP通信に単一のURLパスを使用
- 認証: 標準HTTP認証メカニズムを使用可能
- 後方互換性: サーバーは古いHTTP+SSEクライアントとの互換性を維持可能
Streamable HTTPを使用する場合
Streamable HTTPトランスポートは以下に最適です:
- すべての新しいリモートMCPサーバー開発
- 堅牢でスケーラブルで柔軟な通信を必要とするサーバー
- ストリーミング・データやサーバー送信通知を含む可能性のある統合
- パブリック・サービスまたは集中ツール
- レガシーSSEトランスポート実装の置き換え
Streamable HTTP実装例
settings.jsonでの設定:
{
"mcpServers": {
"StreamableHTTPMCPName": {
"type": "streamable-http",
"url": "http://localhost:8080/mcp"
}
}
}サーバー側の実装については、StreamableHTTPClientTransportのMCP SDKドキュメントを参照してください。
HTTP+SSEとの後方互換性
クライアントとサーバーは、廃止されたHTTP+SSEトランスポートとの後方互換性を維持できます。
古いクライアントをサポートしたいサーバーは、Streamable HTTPトランスポート用に定義された新しいMCPエンドポイントに加えて、古いトランスポートのSSE(/events)とPOSTエンドポイント(/message)の両方を引き続きホストする必要があります。
SSEトランスポート(レガシー)
Server-Sent Events(SSE)トランスポートはリモート・サーバー上で実行され、HTTP/HTTPS経由で通信します。新しいリモート・サーバーには、代わりにStreamable HTTPトランスポートを使用してください。
SSEトランスポートの仕組み
- BobはHTTP GETリクエストを介してサーバーのSSEエンドポイントに接続します
- これにより、サーバーがBobにイベントを送信できる永続的な接続が確立されます
- クライアントからサーバーへの通信では、Bobは別のエンドポイントにHTTP POSTリクエストを送信します
- 通信は2つのチャネルを介して行われます:
- イベント・ストリーム(GET):サーバーからクライアントへの更新
- メッセージ・エンドポイント(POST):クライアントからサーバーへのリクエスト
Client Server
| |
|---- HTTP GET /events ----------->| (SSE接続を確立)
|<---- SSEイベント・ストリーム -------| (永続的な接続)
| |
|---- HTTP POST /message --------->| (クライアント・リクエスト)
|<---- レスポンス付きSSEイベント ---| (サーバー・レスポンス)
| |SSEの特性
- リモート・アクセス: Bobとは異なるマシンでホスト可能
- スケーラビリティ: 複数のクライアント接続を同時に処理可能
- プロトコル: 標準HTTP上で動作(特別なプロトコル不要)
- 永続性: サーバーからクライアントへのメッセージ用の永続的な接続を維持
- 認証: 標準HTTP認証メカニズムを使用可能
SSEを使用する場合
SSEトランスポートは以下に適しています:
- ネットワーク経由のリモート・アクセス
- マルチ・クライアント・シナリオ
- パブリック・サービス
- 多くのユーザーがアクセスする必要がある集中ツール
- Webサービスとの統合
SSE実装例
import express from 'express';
const app = express();
const server = new Server({name: 'remote-server', version: '1.0.0'});
// ツールを登録...
// SSEトランスポートを使用
const transport = new SSEServerTransport(server);
app.use('/mcp', transport.requestHandler());
app.listen(3000, () => {
console.log('MCPサーバーがポート3000でリッスンしています');
});デプロイメントの考慮事項
STDIOとリモート・トランスポート(Streamable HTTPまたはSSE)の選択は、MCPサーバーのデプロイと管理方法に直接影響します。
STDIO:ローカル・デプロイメント
STDIOサーバーはBobと同じマシン上でローカルに実行されます:
- インストール: サーバー実行可能ファイルを各ユーザーのコンピューターにインストールする必要があります
- 配布: さまざまなオペレーティング・システム用のインストール・パッケージを提供する必要があります
- 更新: 各インスタンスを個別に更新する必要があります
- リソース: ローカル・マシンのCPU、メモリー、ディスクを使用します
- アクセス制御: ローカル・マシンのファイル・システム権限に依存します
- 統合: ローカル・システム・リソース(ファイル、プロセス)との簡単な統合
- 実行: Bobと共に起動および停止(子プロセス・ライフサイクル)
- 依存関係: すべての依存関係をユーザーのコンピューターにインストールする必要があります
使用例:
STDIOを使用するローカル・ファイル検索ツールは:
- ユーザーのコンピューター上で実行されます
- ローカル・ファイル・システムへの直接アクセスを持ちます
- 必要に応じてBobによって起動されます
- ネットワーク設定を必要としません
- Bobと一緒にインストールするか、パッケージ・マネージャー経由でインストールする必要があります
リモート:ホスト・デプロイメント
リモート・サーバー(Streamable HTTPまたはSSE)はリモート・サーバーにデプロイされ、ネットワーク経由で呼び出されます:
- インストール: サーバーに一度インストールされ、多くのユーザーによって呼び出されます
- 配布: 単一のデプロイメントが複数のクライアントにサービスを提供します
- 更新: 集中更新がすべてのユーザーに即座に影響します
- リソース: ローカル・マシン・リソースではなく、サーバー・リソースを使用します
- アクセス制御: 認証および承認システムによって管理されます
- 統合: ユーザー固有のリソースとのより複雑な統合
- 実行: 独立したサービスとして実行(多くの場合継続的)
- 依存関係: ユーザー・マシンではなく、サーバー上で管理されます
使用例:
リモート・トランスポートを使用するデータベース・クエリー・ツールは:
- 中央サーバー上で実行されます
- サーバー側の認証情報でデータベースに接続します
- 複数のユーザーに対して継続的に利用可能です
- 適切なネットワーク・セキュリティー設定が必要です
- コンテナまたはクラウド・テクノロジーでデプロイされます
ハイブリッド・アプローチ
一部のシナリオはハイブリッド・アプローチから利益を得ます:
- ネットワーク・アクセスを持つSTDIO: リモート・サービスのプロキシーとして機能するローカルSTDIOサーバー
- ローカル・コマンドを持つリモート: コールバックを介してクライアント・マシン上の操作をトリガーできるリモート・サーバー
- ゲートウェイ・パターン: ローカル操作用のSTDIOサーバーが、特殊機能のためにリモート・サーバーに接続
トランスポート比較
| 考慮事項 | STDIO | Streamable HTTP / SSE |
|---|---|---|
| 場所 | ローカル・マシンのみ | ローカルまたはリモート |
| クライアント | 単一クライアント | 複数クライアント |
| パフォーマンス | 低レイテンシ | 高レイテンシ(ネットワーク・オーバーヘッド) |
| セットアップの複雑さ | より簡単 | より複雑(HTTPサーバーが必要) |
| セキュリティー | 本質的に安全 | 明示的なセキュリティー対策が必要 |
| ネットワーク・アクセス | 不要 | 必要 |
| スケーラビリティ | ローカル・マシンに制限 | ネットワーク全体に分散可能 |
| デプロイメント | ユーザーごとのインストール | 集中インストール |
| 更新 | 分散更新 | 集中更新 |
| リソース使用 | クライアント・リソースを使用 | サーバー・リソースを使用 |
| 依存関係 | クライアント側の依存関係 | サーバー側の依存関係 |
Bobでトランスポートを設定する
例の設定を含む、Bobでのトランスポート設定の詳細については、BobでのMCPを参照してください。