モデル コンテキスト プロトコル (MCP) は、AI アプリケーションを外部のデータ ソースとツールに接続するオープン標準です。 MCP を使用することで、GitHub Copilot などの AI クライアントは、公開した機能を検出して呼び出し、API、データベース、ビジネス ロジックを AI エージェントが自然言語で使用できるツールに変換できます。
Azure Container Apps では、MCP サーバー用に次の 2 つのホスティング モデルがサポートされています。
| ホスティング モデル | [説明] |
|---|---|
| スタンドアロン コンテナー アプリ | HTTP イングレスを使用してコンテナーとして構築するすべての MCP サーバーをデプロイします。 |
| 動的セッション | セキュリティで保護されたコードを実行するために、組み込みの MCP ツールでプラットフォーム管理セッション プールを使用します。 |
モデル コンテキスト プロトコル (MCP) とは
MCP サーバーは、次の 3 種類の機能をクライアントに公開します。
| 能力 | [説明] | 例 |
|---|---|---|
| ツール | AI モデルが呼び出すことができる関数 (ユーザー承認あり) |
createTask、listTasks、deleteTask |
| リソース | クライアントがフェッチできる読み取り専用のデータ | 構成ファイル、データベース スキーマ |
| プロンプト | 一般的なタスク用の事前書き込みテンプレート | 開いているすべてのタスクを要約する |
クライアントは 、ストリーミング可能な HTTP トランスポートを使用して HTTP 経由で MCP サーバーと通信します。 クライアントは JSON-RPC 2.0 要求を送信します。 サーバーは、ツールの結果、リソース コンテンツ、またはプロンプト テンプレートで応答します。
要求フローは、次のパターンに従います。
MCP クライアント (GitHub Copilot、Claude、またはカスタム クライアント) は、JSON-RPC 2.0 メッセージを含む HTTPS 要求をサーバーに送信します。
MCP サーバー (コンテナー アプリ) は要求を処理し、必要なバックエンド サービス (データベースや API など) を呼び出します。
サーバーは、ツールの結果、リソース コンテンツ、またはプロンプト テンプレートを含む 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 メッセージを処理して結果を返します。
- MCP クライアントは、コンテナー アプリの FQDN に HTTPS 要求を送信します。
- Container Apps イングレスは TLS を終了し、構成されたターゲット ポート (8080 など) でコンテナーに要求を転送します。
- Web フレームワーク (ASP.NET、FastAPI、Express、Spring Boot) は、要求を MCP エンドポイント (通常は
/mcp) にルーティングします。 - 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 エンドポイントを提供します。
- MCP クライアントは、認証用の
/mcpヘッダーを使用して、セッション プールのx-ms-apikeyエンドポイントに HTTPS 要求を送信します。 - プラットフォームリバースプロキシは、API キーを検証し、適切な Hyper-V サンドボックス セッションに要求をルーティングします。
- セッションは、サンドボックス内で要求されたシェル コマンドまたは Python コードを実行します。
- プラットフォームは、実行結果を含む 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 |
| サポートされているメソッド |
initialize、tools/list、tools/call |
Important
動的セッション用のプラットフォームで管理される MCP 機能は プレビュー段階です。 API バージョンの 2025-02-02-preview と Azure Resource Manager (ARM) プロパティ mcpServerSettings は変更される可能性があります。
イングレスとネットワーキング
Container Apps のイングレス transport フィールドでは、auto、http、http2、およびtcp がサポートされています。 MCP のストリーミング可能な HTTP トランスポートは、標準の HTTP 経由でコンテナー内で実行されるため、 transport を auto または 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 サービスの選択」を参照してください。