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との後方互換性
BobのMCPクライアントはHTTP+SSEトランスポートへのフォールバックを行いません。以下のガイダンスは、Streamable HTTPをまだサポートしていない古いクライアントからも引き続きアクセスできるようにしたいサーバー作成者向けです。
古いクライアントをサポートする必要があるサーバーは、Streamable HTTPトランスポート用に定義された新しいMCPエンドポイントとともに、古いトランスポートのSSE(/events)およびPOST(/message)エンドポイントの両方を引き続きホストする必要があります。
SSEトランスポート(削除済み)
BobのMCPクライアントは、スタンドアロンのHTTP+SSEトランスポート(MCP仕様 2024-11-05)をサポートしなくなりました。HTTP+SSEトランスポートのみを使用するサーバーはBobに接続できません。
Streamable HTTP接続内のレスポンス・チャネルとしてのSSEは引き続きサポートされています。BobはStreamable HTTPサーバーからSSEストリームを受信できます。スタンドアロンのHTTP+SSEトランスポート(別個の/eventsおよび/messageエンドポイントを持つもの)のみが削除されました。
SSEトランスポートからの移行
HTTP+SSEトランスポートを使用する既存のサーバーがある場合は、Streamable HTTPトランスポートまたはSTDIOトランスポートに移行してください。
- Streamable HTTP: HTTP POSTリクエストを受け付ける単一のMCPエンドポイントを公開します。これはリモート・サーバー推奨の方法です。Streamable HTTPトランスポートを参照してください。
- STDIO: サーバーがBobと同じマシン上でローカルに実行されている場合は、STDIOサーバーに変換します。STDIOトランスポートを参照してください。
デプロイメントの考慮事項
STDIOとStreamable HTTPトランスポートの選択は、MCPサーバーのデプロイと管理方法に直接影響します。
STDIO:ローカル・デプロイメント
STDIOサーバーはBobと同じマシン上でローカルに実行されます:
- インストール: サーバー実行可能ファイルを各ユーザーのコンピューターにインストールする必要があります
- 配布: さまざまなオペレーティング・システム用のインストール・パッケージを提供する必要があります
- 更新: 各インスタンスを個別に更新する必要があります
- リソース: ローカル・マシンのCPU、メモリー、ディスクを使用します
- アクセス制御: ローカル・マシンのファイル・システム権限に依存します
- 統合: ローカル・システム・リソース(ファイル、プロセス)との簡単な統合
- 実行: Bobと共に起動および停止(子プロセス・ライフサイクル)
- 依存関係: すべての依存関係をユーザーのコンピューターにインストールする必要があります
使用例:
STDIOを使用するローカル・ファイル検索ツールは:
- ユーザーのコンピューター上で実行されます
- ローカル・ファイル・システムへの直接アクセスを持ちます
- 必要に応じてBobによって起動されます
- ネットワーク設定を必要としません
- Bobと一緒にインストールするか、パッケージ・マネージャー経由でインストールする必要があります
リモート:ホスト・デプロイメント
リモート・サーバー(Streamable HTTP)はリモート・サーバーにデプロイされ、ネットワーク経由で呼び出されます:
- インストール: サーバーに一度インストールされ、多くのユーザーによって呼び出されます
- 配布: 単一のデプロイメントが複数のクライアントにサービスを提供します
- 更新: 集中更新がすべてのユーザーに即座に影響します
- リソース: ローカル・マシン・リソースではなく、サーバー・リソースを使用します
- アクセス制御: 認証および承認システムによって管理されます
- 統合: ユーザー固有のリソースとのより複雑な統合
- 実行: 独立したサービスとして実行(多くの場合継続的)
- 依存関係: ユーザー・マシンではなく、サーバー上で管理されます
使用例:
リモート・トランスポートを使用するデータベース・クエリー・ツールは:
- 中央サーバー上で実行されます
- サーバー側の認証情報でデータベースに接続します
- 複数のユーザーに対して継続的に利用可能です
- 適切なネットワーク・セキュリティー設定が必要です
- コンテナまたはクラウド・テクノロジーでデプロイされます
ハイブリッド・アプローチ
一部のシナリオはハイブリッド・アプローチから利益を得ます:
- ネットワーク・アクセスを持つSTDIO: リモート・サービスのプロキシーとして機能するローカルSTDIOサーバー
- ローカル・コマンドを持つリモート: コールバックを介してクライアント・マシン上の操作をトリガーできるリモート・サーバー
- ゲートウェイ・パターン: ローカル操作用のSTDIOサーバーが、特殊機能のためにリモート・サーバーに接続
トランスポート比較
| 考慮事項 | STDIO | Streamable HTTP |
|---|---|---|
| 場所 | ローカル・マシンのみ | ローカルまたはリモート |
| クライアント | 単一クライアント | 複数クライアント |
| パフォーマンス | 低レイテンシ | 高レイテンシ(ネットワーク・オーバーヘッド) |
| セットアップの複雑さ | より簡単 | より複雑(HTTPサーバーが必要) |
| セキュリティー | 本質的に安全 | 明示的なセキュリティー対策が必要 |
| ネットワーク・アクセス | 不要 | 必要 |
| スケーラビリティ | ローカル・マシンに制限 | ネットワーク全体に分散可能 |
| デプロイメント | ユーザーごとのインストール | 集中インストール |
| 更新 | 分散更新 | 集中更新 |
| リソース使用 | クライアント・リソースを使用 | サーバー・リソースを使用 |
| 依存関係 | クライアント側の依存関係 | サーバー側の依存関係 |
Bobでトランスポートを設定する
例の設定を含む、Bobでのトランスポート設定の詳細については、BobでのMCPを参照してください。