Important
動的セッション用のプラットフォームで管理される MCP サーバーは プレビュー段階です。 API バージョンの 2025-02-02-preview プロパティと mcpServerSettings プロパティは変更される可能性があります。
このチュートリアルでは、プラットフォームで管理される MCP サーバーを有効にしてシェル セッション プールを作成し、それに接続し、シェル コマンドをリモートで実行する方法について説明します 。CLI と VS Code の GitHub Copilot Chat の両方から実行します。
スタンドアロン MCP サーバーのチュートリアルとは異なり、MCP サーバー コードの記述やデプロイは行いません。 このプラットフォームには、シェル セッション プール用の組み込みツールが用意されています。
| ツール | Description |
|---|---|
launchShell |
新しいシェル環境を作成し、environmentIdを返します。 |
runShellCommandInRemoteEnvironment |
既存の環境でシェル コマンドを実行する |
このチュートリアルでは、次の操作を行います。
- MCP サーバーを有効にしてシェル セッション プールを作成する
- MCP エンドポイントと API キーを取得する
- MCP 接続を初期化し、JSON-RPC を使用してシェル コマンドを実行する
- 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>プレースホルダー Description <RESOURCE_GROUP_NAME>Azure リソース グループの名前。 <SESSION_POOL_NAME>セッション プールの名前 (たとえば、 my-shell-sessions)。<LOCATION>動的セッション (たとえば、 westus2) をサポートする Azure リージョン。リソース グループを作成します。
az group create --name $RESOURCE_GROUP --location $LOCATION
MCP サーバーを使用してシェル セッション プールを作成する
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": "Shell", "scaleConfiguration": { "maxConcurrentSessions": 5 }, "sessionNetworkConfiguration": { "status": "EgressEnabled" }, "dynamicPoolConfiguration": { "lifecycleConfiguration": { "lifecycleType": "Timed", "coolDownPeriodInSeconds": 300 } }, "mcpServerSettings": { "isMCPServerEnabled": true } } } ] }注
このテンプレートの主なプロパティ:
-
containerType: "Shell"— Linux シェル環境でセッションを作成します。 -
mcpServerSettings.isMCPServerEnabled: true— プラットフォームで管理される MCP エンドポイントを有効にします。 -
coolDownPeriodInSeconds: 300— セッションは、非アクティブ状態の 5 分後に破棄されます。
-
テンプレートをデプロイします。
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 "/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.App/sessionPools/$SESSION_POOL_NAME?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 "/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.App/sessionPools/$SESSION_POOL_NAME/fetchMCPServerCredentials?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 }
シェル環境を起動する
コマンドを実行する新しいシェル環境を作成します。
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 を抽出し、後のコマンドで使用します。
ENVIRONMENT_ID=$(echo $ENVIRONMENT_RESPONSE | jq -r '.result.structuredContent.environmentId')
echo $ENVIRONMENT_ID
シェル コマンドの実行
前の手順の $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": "runShellCommandInRemoteEnvironment",
"arguments": {
"environmentId": "'"$ENVIRONMENT_ID"'",
"shellCommand": "echo Hello from Azure Container Apps Shell Session!"
}
}
}'
応答には、コマンドの結果が stdout フィールドに含まれます。
その他のコマンドを試す:
# Check the operating system
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": "runShellCommandInRemoteEnvironment",
"arguments": {
"environmentId": "'"$ENVIRONMENT_ID"'",
"shellCommand": "cat /etc/os-release && uname -a"
}
}
}'
注
runShellCommandInRemoteEnvironment ツールは、引数を持つコマンドのshellCommand文字列またはexecCommandAndArgs配列を受け取ります。
shellCommand は単純なコマンドに使用し、引数のエスケープを正確に制御する必要がある場合には execCommandAndArgs を使用します。
VS Code で GitHub Copilot に接続する
セッション プール MCP サーバーを GitHub Copilot に接続して、自然言語インターフェイスをシェル実行環境に接続できます。
プロジェクトに
.vscode/mcp.jsonを作成します。{ "servers": { "aca-shell-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-shell-sessionsが [ツール] リストに表示されていることを確認します。次のようなプロンプトでテストします。
- "シェルを起動してディスクの使用状況を表示する"
- "シェル コマンドを実行してすべての環境変数を一覧表示する"
- "シェル環境にインストールされているパッケージを確認する"
リソースをクリーンアップする
このチュートリアルが完了したら、作成したリソースを削除して料金が発生しないようにします。
az group delete --resource-group $RESOURCE_GROUP