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

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

設定

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

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

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

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

ARM テンプレートを使用して、MCP サーバーを有効にした Python セッション プールを作成します。

  1. 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
                    }
                }
            }
        ]
    }
    
  2. 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 に接続して、自然言語インターフェイスをコード実行環境に接続できます。

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

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

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

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

    • "Python 環境を起動し、最初の 20 フィボナッチ数を計算する"
    • " https://api.github.com をフェッチして応答ヘッダーを出力する Python スクリプトを実行する"

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

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

az group delete --resource-group $RESOURCE_GROUP