次の方法で共有


Azure Container Apps で MCP サーバーをホストする

モデル コンテキスト プロトコル (MCP) は、AI アプリケーションを外部のデータ ソースとツールに接続するオープン標準です。 MCP を使用することで、GitHub Copilot などの AI クライアントは、公開した機能を検出して呼び出し、API、データベース、ビジネス ロジックを AI エージェントが自然言語で使用できるツールに変換できます。

Azure Container Apps では、MCP サーバー用に次の 2 つのホスティング モデルがサポートされています。

ホスティング モデル [説明]
スタンドアロン コンテナー アプリ HTTP イングレスを使用してコンテナーとして構築するすべての MCP サーバーをデプロイします。
動的セッション セキュリティで保護されたコードを実行するために、組み込みの MCP ツールでプラットフォーム管理セッション プールを使用します。

モデル コンテキスト プロトコル (MCP) とは

MCP サーバーは、次の 3 種類の機能をクライアントに公開します。

能力 [説明]
ツール AI モデルが呼び出すことができる関数 (ユーザー承認あり) createTasklistTasksdeleteTask
リソース クライアントがフェッチできる読み取り専用のデータ 構成ファイル、データベース スキーマ
プロンプト 一般的なタスク用の事前書き込みテンプレート 開いているすべてのタスクを要約する

クライアントは 、ストリーミング可能な HTTP トランスポートを使用して HTTP 経由で MCP サーバーと通信します。 クライアントは JSON-RPC 2.0 要求を送信します。 サーバーは、ツールの結果、リソース コンテンツ、またはプロンプト テンプレートで応答します。

要求フローは、次のパターンに従います。

  1. MCP クライアント (GitHub Copilot、Claude、またはカスタム クライアント) は、JSON-RPC 2.0 メッセージを含む HTTPS 要求をサーバーに送信します。

  2. MCP サーバー (コンテナー アプリ) は要求を処理し、必要なバックエンド サービス (データベースや API など) を呼び出します。

  3. サーバーは、ツールの結果、リソース コンテンツ、またはプロンプト テンプレートを含む JSON-RPC 2.0 応答を返します。

スタンドアロン コンテナー アプリ

公式の MCP SDK (.NET、Python、TypeScript、Java、Go、Kotlin など) を使用して MCP サーバーを構築し、コンテナー化して Azure Container Apps にデプロイします。

このモデルでは、Container Apps には MCP 固有の認識がありません。 プラットフォームには次のものが用意されています。

  • 自動 TLS 終端が適用される HTTPS イングレス
  • オートスケーリング (ゼロスケールを含む、対話型 MCP の使用には少なくとも 1 つのレプリカが推奨されます)
  • VS Code およびブラウザー ベースのクライアントからのクロスオリジン要求を許可する CORS ポリシー
  • Microsoft Entra ID を使用した組み込み認証 (省略可能)
  • カスタム ドメイン、トラフィック分割、Dapr、サービス間ネットワーク、マネージド ID、その他すべての標準 Container Apps 機能

要求フロー

MCP サーバーをスタンドアロン コンテナー アプリとしてデプロイすると、クライアントは Container Apps イングレスを介してコンテナーにフローし、MCP エンドポイントが JSON-RPC メッセージを処理して結果を返します。

  1. MCP クライアントは、コンテナー アプリの FQDN に HTTPS 要求を送信します。
  2. Container Apps イングレスは TLS を終了し、構成されたターゲット ポート (8080 など) でコンテナーに要求を転送します。
  3. Web フレームワーク (ASP.NET、FastAPI、Express、Spring Boot) は、要求を MCP エンドポイント (通常は /mcp) にルーティングします。
  4. MCP サーバーは要求を処理し、バックエンド サービスを呼び出して、JSON-RPC 2.0 応答を返します。

いつ使用するか

任意の言語でカスタム MCP ツールを構築し、バックエンド サービスと統合し、標準の Container Apps 機能を使用する場合は、スタンドアロン コンテナー アプリを使用します。

  • ツール定義、ミドルウェア、ビジネス ロジックを完全に制御する必要があります。
  • MCP サーバーは、MCP SDK を使用して任意の言語で記述されます。
  • バックエンド データベース、API、または Azure サービスに接続する必要があります。
  • Dapr、サービス間ネットワーク、マネージド ID などの Container Apps 機能を使用する必要があります。

動的セッション (プラットフォームで管理される MCP)

Azure Container Apps の動的セッション では、分離してコードを実行するためのサンドボックス環境が提供されます。 セッション プールで MCP を有効にすると、クライアントがシェルまたは Python 環境を起動し、リモートでコマンドを実行するために使用できる JSON-RPC エンドポイントがプラットフォームによって公開されます。

このモデルでは、プラットフォームが MCP サーバーを管理します。 MCP サーバー コードを記述またはデプロイしません。 プラットフォームには、次の定義済みツールが用意されています。

ツール [説明]
launchShell 新しい環境を作成し、environmentIdを返します。
runShellCommandInRemoteEnvironment 既存の環境でシェル コマンドを実行する
runPythonCodeInRemoteEnvironment 既存の環境で Python コードを実行する

プラットフォームで管理される MCP サーバーは、セッション プールの containerTypeに関係なく、3 つのツールすべてを公開します。 launchShellを使用して、シェル プールと Python プールの両方の環境を作成します。

要求フロー

動的セッションを使用して MCP サーバーをデプロイすると、プラットフォームはサーバーを管理し、クライアントがサンドボックス環境でシェルまたは Python コードを実行するために使用する JSON-RPC エンドポイントを提供します。

  1. MCP クライアントは、認証用の /mcp ヘッダーを使用して、セッション プールのx-ms-apikey エンドポイントに HTTPS 要求を送信します。
  2. プラットフォームリバースプロキシは、API キーを検証し、適切な Hyper-V サンドボックス セッションに要求をルーティングします。
  3. セッションは、サンドボックス内で要求されたシェル コマンドまたは Python コードを実行します。
  4. プラットフォームは、実行結果を含む JSON-RPC 2.0 応答を返します。

いつ使用するか

  • 信頼されていないコードまたは LLM で生成されたコードに対して、セキュリティで保護されたコードを実行する必要があります。
  • ユース ケースは Python またはシェル スクリプトであり、カスタム ツールは必要ありません。
  • セキュリティのためにセッション間 Hyper-V 分離する必要があります。
  • MCP サーバー アプリケーションをビルドまたは保守する必要はありません。

認証

動的セッション MCP は、 x-ms-apikey ヘッダーを介して API キー認証を使用します。 このメカニズムは、標準セッション プール API で使用されるベアラー トークン認証とは異なります。

Azure CLI を使用して API キーを取得します。

az rest --method POST \
    --uri "https://management.azure.com/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP_NAME>/providers/Microsoft.App/sessionPools/<POOL_NAME>/fetchMCPServerCredentials" \
    --uri-parameters api-version=2025-02-02-preview \
    --query "apiKey" -o tsv

プロトコルの詳細

動的セッション用のプラットフォームで管理される MCP サーバーは、次のプロトコル仕様を実装します。

プロパティ 価値
MCP プロトコルのバージョン 2025-03-26
サーバー名 Microsoft Container Apps MCP Server
トランスポート HTTP 経由で JSON-RPC 2.0 を実行する
API バージョン 2025-02-02-preview
サポートされているメソッド initializetools/listtools/call

Important

動的セッション用のプラットフォームで管理される MCP 機能は プレビュー段階です。 API バージョンの 2025-02-02-preview と Azure Resource Manager (ARM) プロパティ mcpServerSettings は変更される可能性があります。

イングレスとネットワーキング

Container Apps のイングレス transport フィールドでは、autohttphttp2、およびtcp がサポートされています。 MCP のストリーミング可能な HTTP トランスポートは、標準の HTTP 経由でコンテナー内で実行されるため、 transportauto または http (既定値) に設定します。 特別な MCP トランスポート値はありません。

VS Code またはブラウザー ベースのクライアントが MCP サーバーにアクセスする場合は、 CORS ポリシー を構成する必要があります。 少なくとも、MCP クライアントに必要な配信元、メソッド、ヘッダーを許可します。

ホスティング オプションを比較する

次の表は、2 つのホスティング モデルを比較したものです。

考慮事項 スタンドアロン コンテナー アプリ 動的セッション (マネージド MCP)
カスタム ツール はい。必要なツールを定義します いいえ。プラットフォーム定義ツールのみ
言語 MCP SDK を使用する任意の言語 Python とシェルの実行のみ
MCP トランスポート ストリーミング可能な HTTP (コンテナー内) HTTP 経由の JSON-RPC (プラットフォームで管理)
認証 組み込みの認証 (Microsoft Entra ID) API キー (x-ms-apikey)
隔離 コンテナー レベル セッションごとのハイパーV
Scaling リビジョンに基づく自動スケーリング セッション単位で、プールによる管理
利用シーン 汎用 MCP サーバー サンドボックス コードの実行

App Service と Azure Functions を含むより広範な比較については、「 MCP サーバーの Azure サービスの選択」を参照してください

次のステップ