チュートリアル: 動的セッションで MCP を使用する (シェル)

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 統合セクションの場合)。

設定

  1. Azure CLI を更新し、Container Apps 拡張機能をインストールします。

    az upgrade
    az provider register --namespace Microsoft.App
    az extension add --name containerapp --allow-preview true --upgrade
    
  2. サインインしてサブスクリプションを設定します。

    az login
    SUBSCRIPTION_ID=$(az account show --query id --output tsv)
    az account set -s $SUBSCRIPTION_ID
    
  3. このチュートリアルの変数を設定します。 プレースホルダーを実際の値に置き換えます。

    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 リージョン。
  4. リソース グループを作成します。

    az group create --name $RESOURCE_GROUP --location $LOCATION
    

MCP サーバーを使用してシェル セッション プールを作成する

MCP サーバーが有効になっている ARM テンプレートを使用してセッション プールをデプロイします。

  1. 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 分後に破棄されます。
  2. テンプレートをデプロイします。

    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 に接続して、自然言語インターフェイスをシェル実行環境に接続できます。

  1. プロジェクトに .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を追加します。

  2. VS Code を開き、エージェント モードで Copilot チャットを開きます。

  3. aca-shell-sessionsが [ツール] リストに表示されていることを確認します。

  4. 次のようなプロンプトでテストします。

    • "シェルを起動してディスクの使用状況を表示する"
    • "シェル コマンドを実行してすべての環境変数を一覧表示する"
    • "シェル環境にインストールされているパッケージを確認する"

リソースをクリーンアップする

このチュートリアルが完了したら、作成したリソースを削除して料金が発生しないようにします。

az group delete --resource-group $RESOURCE_GROUP