Model Context Protocol (MCP) サーバーのシナリオでは、コンテキストの一貫性を維持するために、同じ MCP セッションからのリクエストを同じ関数インスタンスにルーティングする必要があります。MCP Server-Sent Events (SSE) アフィニティ機能は、MCP SSE プロトコルを使用して、最初の SSE 応答からセッション ID をインターセプトします。その後、システムは同じセッション ID を持つ後続のリクエストを、バインドされたインスタンスにルーティングします。この機能は、MCP サーバーをホストする場合に最適です。
コア設定
関数の設定ページで、[高度な設定] > [分離とアフィニティ] セクションの [セッション保持] スイッチをオンにします。次に、[MCP SSE アフィニティ] を選択し、[SSE パス] (デフォルトは /sse) と [インスタンスあたりの同時セッション数] を設定し、[デプロイ] をクリックして機能を有効にします。
公式の MCP クライアントで SSE 接続を確立すると、システムは自動的にセッション ID を抽出し、アフィニティベースのルーティングを有効にします。
適用範囲
一般的な制限事項:詳細については、「セッション保持の一般的な制限事項と原則」をご参照ください。
ランタイムの制限事項:
ビルトインランタイム:MCP SSE アフィニティはサポートされていません。
MCP ランタイム:MCP アフィニティ (SSE を含む) のみがサポートされています。
その他のランタイムにはこの制限はありません。
クライアント要件:公式の MCP クライアントまたはソフトウェア開発キット (SDK) を使用してリクエストを開始する必要があります。そうしないと、有効なアフィニティ接続を確立できません。
セッションのライフサイクル:セッションの最大ライフサイクルは、関数の最大タイムアウト期間と同じです。タイムアウト期間を超えると、サーバーは接続を切断します。再接続すると新しいセッション ID が生成され、元のインスタンスにルーティングされる保証はありません。
アクセス方法の制限事項:HTTP トリガーまたはカスタムドメイン名でのみアクセスできます。
リクエストの制限事項:
最初の SSE リクエストでは、クエリパラメーターはサポートされていません。
1 つのインスタンスで複数のセッションを同時に処理できます (デフォルト:20、最大:200)。1 つのインスタンスにバインドされたセッション数がこの制限に達すると、システムは自動的に新しいインスタンスを作成します。
永続的な SSE 接続は 1 つの同時実行ユニットを使用し、メッセージリクエストは N 個の同時実行ユニットを使用します。これらは合わせて 200 の同時実行クォータを共有します。
SessionAPI 管理はサポートされていません。
MCP SSE アフィニティの設定手順
概要
MCP SSE アフィニティの設定には、セッション保持の有効化、MCP SSE タイプの選択、SSE パスとパラメーターの設定の 3 つのステップが含まれます。設定後、関数をデプロイする必要があります。関数コードが MCP プロトコルの仕様を実装していることを確認してください。
セッション保持の有効化
Function Compute (FC) コンソールにログインします。
関数リストで、関数を選択するか、関数を作成します。
関数を作成する際、[高度な設定] セクションで [分離とアフィニティ] を見つけ、以下の手順に従って設定を完了してから、関数を作成します。
関数の詳細ページで、[設定] タブをクリックします。
[高度な設定] セクションで、[分離とアフィニティ] を見つけます。
[分離とアフィニティ] をクリックして設定パネルを展開します。
[セッション保持] スイッチをオンにします。
MCP SSE アフィニティタイプの選択
セッション保持の設定セクションで、[MCP SSE アフィニティ] ラジオボタンを選択します。
システムは自動的に MCP SSE アフィニティの設定オプションを表示します。
SSE パスの設定
目的:SSE 接続を確立するために使用されるリクエストパスを設定します。
操作手順:
[SSE パス] テキストボックスに、SSE 接続リクエストのパスを入力します。
デフォルト値:
/sse。必要に応じてパスをカスタマイズできます。
注意:SSE パスが関数コード内のパスと一致していることを確認してください。
セッションパラメーターの設定
目的:1 つのインスタンスが同時に処理できるセッション数を設定します。
操作手順:
[インスタンスあたりの同時セッション数]:1 つのインスタンスが同時に処理できるセッションの最大数を指定します。
デフォルト値:20。
有効値の範囲:1~200。
推奨:テストシナリオでは、10 などの小さい値を設定します。本番環境では必要に応じて値を調整してください。
[デプロイ] ボタンをクリックして設定を保存します。
重要:
最初の SSE リクエストでは、クエリパラメーターはサポートされていません。
セッション保持を有効にすると、システムは自動的に [インスタンスあたりの同時実行数] を 200 に設定します。これはシステムのデフォルト値であり、変更できません。
MCP SSE アフィニティでは、関数コードが MCP プロトコルの仕様を実装している必要があります。公式の MCP クライアントまたは SDK を使用する必要があります。
MCP SSE アフィニティ機能の検証
詳細については、公式 MCP ドキュメント「Build an MCP client」をご参照ください。アフィニティ設定を検証するには、FC が提供するデフォルトの HTTP トリガードメイン名またはカスタムドメイン名を使用して、標準の MCP クライアント経由で関数にリクエストを送信します。
よくある質問
MCP SSE アフィニティが機能しないのはなぜですか?
考えられる原因:
公式の MCP クライアントまたは SDK が使用されていない。
関数コードが MCP プロトコルの仕様を正しく実装していない。
設定された SSE パスが関数コード内のパスと一致していない。
トラブルシューティング:
公式の MCP クライアントまたは SDK を使用していることを確認します。
関数コードが MCP プロトコルの仕様を正しく実装しているかどうかを確認します。
最初のリクエストパスと関数に設定されたカスタムパスが一致しているかどうかを確認します。
SSE パスはどのように選択すればよいですか?
推奨事項:
デフォルトパス
/sseを使用します。これは MCP プロトコルの標準パスです。パスをカスタマイズする場合は、関数コード内のパスと一致していることを確認してください。
付録:プロトコル分析 (MCP SSE)
イベントフォーマット
フィールド | 説明 |
| イベントタイプを指定します。例: |
| JSON やテキストなど、実際のコンテンツを含むデータ本文です。 |
| イベントを一意に識別します。接続切断後の回復に使用されます。 |
| 接続切断後の再接続間隔 (ミリ秒単位)。 |
例:
event: endpoint
data: {"sessionId": "abc123", "version": "2025-06-18"}MCP での SSE の利用方法
MCP は SSE を使用して、クライアントとサーバー間の双方向通信チャネルを実装します。重要なポイントは以下の通りです:
最初の SSE 接続が確立されたときにセッション ID を生成して返す。
後続のすべてのリクエストでこのセッション ID を使用してアフィニティを実現する。
元の SSE 接続を介してクライアントに応答結果をプッシュする。
キーポイント:SSE は「メッセージチャネル」であり、HTTP POST は「リクエストチャネル」です。
典型的な MCP SSE リクエストの時系列グラフ
クライアントは GET /sse リクエストを開始して、永続的な SSE 接続 (Connection1) を確立します。
サーバーは event: endpoint, data: { "sessionId": "abc123" } を返します。
クライアントはセッション ID を使用して POST /message?sessionId=abc123 リクエスト (Connection2) を開始します。
サーバーはリクエストが受信されたことを示す 202 Accepted (コンテンツなし) を返します。
サーバーは Connection1 を介して実際の応答メッセージをプッシュします。
クライアントは POST /initialized?sessionId=abc123 リクエスト (Connection3) を開始します。
サーバーは 202 Accepted (コンテンツなし) を返します。
クライアントは POST /list tools?sessionId=abc123 リクエスト (Connection4) を開始します。
サーバーは空の応答本文を持つ 202 状態コードを返します。
サーバーは Connection1 を介してツールリストをプッシュします。
クライアントは POST /call tool?sessionId=abc123 リクエスト (Connection5) を開始します。
サーバーはコンテンツなしの 202 応答を返します。
サーバーは Connection1 を介して呼び出し結果をプッシュします。
凡例:
Connection1:プッシュを受信するために使用される永続的な SSE 接続。
Connection2~5:命令を送信するために使用される HTTP POST リクエスト。
すべての応答は元の SSE 接続を介して返されます。