Important
動的セッション用のプラットフォームで管理される MCP サーバーは プレビュー段階です。 API バージョンの 2025-02-02-preview プロパティと mcpServerSettings プロパティは変更される可能性があります。
このチュートリアルでは、プラットフォームで管理される MCP サーバーを有効にしてセッション プールを作成し、それに接続し、Python コードをリモートで実行する方法について説明します。
スタンドアロン MCP サーバーのチュートリアルとは異なり、MCP サーバー コードの記述やデプロイは行いません。 このプラットフォームには、Python セッション プール用の組み込みツールが用意されています。
| ツール | Description |
|---|---|
launchShell |
新しい環境を作成し、environmentIdを返します。 |
runPythonCodeInRemoteEnvironment |
既存の環境で Python コードを実行する |
runShellCommandInRemoteEnvironment |
既存の環境でシェル コマンドを実行する |
このチュートリアルでは、次の操作を行います。
- MCP サーバーを有効にして Python セッション プールを作成する
- MCP エンドポイントと API キーを取得する
- MCP 接続を初期化し、JSON-RPC を使用して Python コードを実行する
- VS Code で MCP サーバーを GitHub Copilot に接続する
[前提条件]
| Requirement | Description |
|---|---|
| Azure アカウント | アクティブなサブスクリプションを持つ Azure アカウント。 無料で作成できます。 |
| Azure CLI | Azure CLI のインストールを実行します。 |
| curl | curl (ほとんどの Linux および macOS システムにプレインストールされています)。 |
| jq | Jq API 応答の解析に使用される JSON プロセッサ。 |
| VS Code | GitHub Copilot 拡張機能を使用した Visual Studio Code (Copilot 統合セクションの場合)。 |
設定
Azure CLI を更新し、Container Apps 拡張機能をインストールします。
az upgrade az provider register --namespace Microsoft.App az extension add --name containerapp --allow-preview true --upgradeサインインしてサブスクリプションを設定します。
az login SUBSCRIPTION_ID=$(az account show --query id --output tsv) az account set -s $SUBSCRIPTION_IDこのチュートリアルの変数を設定します。 プレースホルダーを実際の値に置き換えます。
RESOURCE_GROUP=<RESOURCE_GROUP_NAME> SESSION_POOL_NAME=<SESSION_POOL_NAME> LOCATION=<LOCATION>リソース グループを作成します。
az group create --name $RESOURCE_GROUP --location $LOCATION
MCP サーバーを使用して Python セッション プールを作成する
MCP が有効な ARM テンプレートを使用してセッション プールをデプロイします。
deploy.jsonという名前のファイルを作成します。{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "name": { "type": "String" }, "location": { "type": "String" } }, "resources": [ { "type": "Microsoft.App/sessionPools", "apiVersion": "2025-02-02-preview", "name": "[parameters('name')]", "location": "[parameters('location')]", "properties": { "poolManagementType": "Dynamic", "containerType": "PythonLTS", "scaleConfiguration": { "maxConcurrentSessions": 5 }, "sessionNetworkConfiguration": { "status": "EgressEnabled" }, "dynamicPoolConfiguration": { "lifecycleConfiguration": { "lifecycleType": "Timed", "coolDownPeriodInSeconds": 300 } }, "mcpServerSettings": { "isMCPServerEnabled": true } } } ] }注
このテンプレートの主なプロパティ:
-
containerType: "PythonLTS": Python ランタイムを使用してセッションを作成します。 -
mcpServerSettings.isMCPServerEnabled: true: プラットフォームで管理される MCP エンドポイントを有効にします。 -
coolDownPeriodInSeconds: 300:セッションは、非アクティブ状態の 5 分後に破棄されます。
-
テンプレートをデプロイします。
ARM テンプレートを使用して、MCP サーバーを有効にした Python セッション プールを作成します。
deploy.jsonという名前のデプロイ テンプレート ファイルを作成します。{ "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "name": { "type": "String" }, "location": { "type": "String" } }, "resources": [ { "type": "Microsoft.App/sessionPools", "apiVersion": "2025-10-02-preview", "name": "[parameters('name')]", "location": "[parameters('location')]", "properties": { "poolManagementType": "Dynamic", "containerType": "PythonLTS", # Set the "containerType" property to "PythonLTS" "scaleConfiguration": { "maxConcurrentSessions": 5 }, "sessionNetworkConfiguration": { "status": "EgressEnabled" }, "dynamicPoolConfiguration": { "lifecycleConfiguration": { "lifecycleType": "Timed", "coolDownPeriodInSeconds": 300 } }, "mcpServerSettings": { "isMCPServerEnabled": true # Add the "mcpServerSettings" section to enable the MCP server } } } ] }ARM テンプレートをデプロイする。
az deployment group create \ --resource-group $RESOURCE_GROUP \ --template-file deploy.json \ --parameters name=$SESSION_POOL_NAME location=$LOCATION
MCP サーバー エンドポイントを取得する
デプロイ後、セッション プールの MCP エンドポイント URL を取得します。
MCP_ENDPOINT=$(az rest --method GET --uri "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.App/sessionPools/$SESSION_POOL_NAME" --uri-parameters api-version=2025-10-02-preview --query "properties.mcpServerSettings.mcpServerEndpoint" -o tsv)
MCP サーバーの資格情報を取得する
プラットフォームで管理される MCP サーバーは、 x-ms-apikey ヘッダーを介して API キー認証を使用します。 この認証方法は、標準セッション プール管理 API で使用されるベアラー トークン認証とは異なります。
API_KEY=$(az rest --method POST --uri "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.App/sessionPools/$SESSION_POOL_NAME/fetchMCPServerCredentials" --uri-parameters api-version=2025-10-02-preview --query "apiKey" -o tsv)
Warnung
API キーをシークレットとして扱います。 ソース管理にコミットしたり、パブリックに共有したりしないでください。 このキーは、セッション プールに対するすべての MCP ツール呼び出しを認証します。
MCP サーバーを初期化する
initialize JSON-RPC要求を送信して、MCP 接続を確立します。
curl -sS -X POST "$MCP_ENDPOINT" \
-H "Content-Type: application/json" \
-H "x-ms-apikey: $API_KEY" \
-d '{ "jsonrpc": "2.0", "id": "1", "method": "initialize" }'
次を含む応答が表示されます。
-
protocolVersion:2025-03-26 -
serverInfo.name:Microsoft Container Apps MCP Server -
capabilities.tools:{ "call": true, "list": true }
Python 環境を起動する
新しい Python 環境を作成します。
ENVIRONMENT_RESPONSE=$(curl -sS -X POST "$MCP_ENDPOINT" \
-H "Content-Type: application/json" \
-H "x-ms-apikey: $API_KEY" \
-d '{ "jsonrpc": "2.0", "id": "2", "method": "tools/call", "params": { "name": "launchShell", "arguments": {} } }')
echo $ENVIRONMENT_RESPONSE
応答の environmentId フィールドからstructuredContentを抽出します。 この ID は、後続のすべてのコマンドに必要です。
ENVIRONMENT_ID=$(echo $ENVIRONMENT_RESPONSE | jq -r '.result.structuredContent.environmentId')
echo $ENVIRONMENT_ID
注
launchShell ツールは、一意の環境識別子を生成します。 実際のセッションは「必要に応じて」配置されます。 最初のコマンドを実行すると、セッション プールによって Hyper-V 分離コンテナーが割り当てられ、そのコンテナーが処理されます。
Python コマンドを実行する
リモート環境で Python コードを実行するには、前の手順の $ENVIRONMENT_ID を使用します。
curl -sS -X POST "$MCP_ENDPOINT" \
-H "Content-Type: application/json" \
-H "x-ms-apikey: $API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": "3",
"method": "tools/call",
"params": {
"name": "runPythonCodeInRemoteEnvironment",
"arguments": {
"environmentId": "'"$ENVIRONMENT_ID"'",
"pythonCode": "import sys; print(f\"Python {sys.version}\")"
}
}
}'
応答には、stdout内の structuredContent フィールドにコマンドの結果が含まれます。
より複雑な例を試してみてください。
curl -sS -X POST "$MCP_ENDPOINT" \
-H "Content-Type: application/json" \
-H "x-ms-apikey: $API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": "4",
"method": "tools/call",
"params": {
"name": "runPythonCodeInRemoteEnvironment",
"arguments": {
"environmentId": "'"$ENVIRONMENT_ID"'",
"pythonCode": "import math\nresults = {n: math.factorial(n) for n in range(1, 11)}\nfor k, v in results.items():\n print(f\"{k}! = {v}\")"
}
}
}'
VS Code で GitHub Copilot に接続する
セッション プール MCP サーバーを GitHub Copilot に接続して、自然言語インターフェイスをコード実行環境に接続できます。
プロジェクトに
.vscode/mcp.jsonを作成します。{ "servers": { "aca-python-sessions": { "type": "http", "url": "<MCP_ENDPOINT>", "headers": { "x-ms-apikey": "<API_KEY>" } } } }<MCP_ENDPOINT>と<API_KEY>を前の手順の値に置き換えます。Warnung
MCP API キーをソース管理にコミットしないでください。 運用環境では、環境変数またはシークレット マネージャーを使用します。
.vscode/mcp.jsonに.gitignoreを追加します。VS Code を開き、エージェント モードで Copilot チャットを開きます。
aca-python-sessionsが [ツール] リストに表示されていることを確認します。次のようなプロンプトでテストします。
- "Python 環境を起動し、最初の 20 フィボナッチ数を計算する"
- " https://api.github.com をフェッチして応答ヘッダーを出力する Python スクリプトを実行する"
リソースをクリーンアップする
このチュートリアルを完了したら、料金が発生しないように、作成したリソースを削除します。
az group delete --resource-group $RESOURCE_GROUP