設定MCP

MCPサーバー・トランスポート

MCPは、BobとMCPサーバー間の通信のためのトランスポート・メカニズムをサポートしています。

概要

MCPは3つのトランスポート・オプションを提供し、それぞれ異なるデプロイメント・シナリオに適しています:

各トランスポートには異なる特性、利点、使用例があります。

STDIOトランスポート

STDIOトランスポートはコンピューター上でローカルに実行され、標準入出力ストリームを介して通信します。

STDIOトランスポートの仕組み

  1. Bobは子プロセスとしてMCPサーバーを起動します
  2. 通信はプロセス・ストリームを介して行われます:BobはサーバーのSTDINに書き込み、サーバーはSTDOUTで応答します
  3. 各メッセージは改行文字で区切られます
  4. メッセージは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トランスポートの仕組み

  1. サーバーはPOSTとGETメソッドの両方をサポートする単一のHTTPエンドポイント(MCPエンドポイント)を提供します
  2. BobはHTTP POSTでこのMCPエンドポイントにリクエストを送信します
  3. サーバーはリクエストを処理し、レスポンスを返します
  4. オプションで、サーバーは同じ接続を介して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トランスポートの仕組み

  1. BobはHTTP GETリクエストを介してサーバーのSSEエンドポイントに接続します
  2. これにより、サーバーがBobにイベントを送信できる永続的な接続が確立されます
  3. クライアントからサーバーへの通信では、Bobは別のエンドポイントにHTTP POSTリクエストを送信します
  4. 通信は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)はリモート・サーバーにデプロイされ、ネットワーク経由で呼び出されます:

  • インストール: サーバーに一度インストールされ、多くのユーザーによって呼び出されます
  • 配布: 単一のデプロイメントが複数のクライアントにサービスを提供します
  • 更新: 集中更新がすべてのユーザーに即座に影響します
  • リソース: ローカル・マシン・リソースではなく、サーバー・リソースを使用します
  • アクセス制御: 認証および承認システムによって管理されます
  • 統合: ユーザー固有のリソースとのより複雑な統合
  • 実行: 独立したサービスとして実行(多くの場合継続的)
  • 依存関係: ユーザー・マシンではなく、サーバー上で管理されます

使用例:

リモート・トランスポートを使用するデータベース・クエリー・ツールは:

  • 中央サーバー上で実行されます
  • サーバー側の認証情報でデータベースに接続します
  • 複数のユーザーに対して継続的に利用可能です
  • 適切なネットワーク・セキュリティー設定が必要です
  • コンテナまたはクラウド・テクノロジーでデプロイされます

ハイブリッド・アプローチ

一部のシナリオはハイブリッド・アプローチから利益を得ます:

  1. ネットワーク・アクセスを持つSTDIO: リモート・サービスのプロキシーとして機能するローカルSTDIOサーバー
  2. ローカル・コマンドを持つリモート: コールバックを介してクライアント・マシン上の操作をトリガーできるリモート・サーバー
  3. ゲートウェイ・パターン: ローカル操作用のSTDIOサーバーが、特殊機能のためにリモート・サーバーに接続

トランスポート比較

考慮事項STDIOStreamable HTTP / SSE
場所ローカル・マシンのみローカルまたはリモート
クライアント単一クライアント複数クライアント
パフォーマンス低レイテンシ高レイテンシ(ネットワーク・オーバーヘッド)
セットアップの複雑さより簡単より複雑(HTTPサーバーが必要)
セキュリティー本質的に安全明示的なセキュリティー対策が必要
ネットワーク・アクセス不要必要
スケーラビリティローカル・マシンに制限ネットワーク全体に分散可能
デプロイメントユーザーごとのインストール集中インストール
更新分散更新集中更新
リソース使用クライアント・リソースを使用サーバー・リソースを使用
依存関係クライアント側の依存関係サーバー側の依存関係

Bobでトランスポートを設定する

例の設定を含む、Bobでのトランスポート設定の詳細については、BobでのMCPを参照してください。

このトピックはいかがですか?