Tutorial: Menggunakan MCP dengan sesi dinamis (Python)

Penting

Server MCP yang dikelola platform untuk sesi dinamis sedang dalam tahap pratinjau. Versi 2025-02-02-preview API dan mcpServerSettings properti dapat berubah.

Tutorial ini menunjukkan cara membuat kumpulan sesi dengan server MCP yang dikelola platform diaktifkan, menyambungkannya, dan menjalankan kode Python dari jarak jauh.

Tidak seperti tutorial server MCP mandiri, Anda tidak menulis atau menyebarkan kode server MCP. Platform ini menyediakan alat bawaan untuk kumpulan sesi Python:

Alat Description
launchShell Menciptakan lingkungan baru dan mengembalikan environmentId
runPythonCodeInRemoteEnvironment Menjalankan kode Python di lingkungan yang ada
runShellCommandInRemoteEnvironment Menjalankan perintah shell di lingkungan yang ada

Di tutorial ini, Anda akan:

  • Membuat kumpulan sesi Python dengan server MCP diaktifkan
  • Mengambil titik akhir MCP dan kunci API
  • Inisialisasi koneksi MCP dan jalankan kode Python melalui JSON-RPC
  • Menyambungkan server MCP ke GitHub Copilot di Visual Studio Code

Prasyarat

Persyaratan Description
Akun Azure Sebuah akun Azure dengan langganan aktif. Buat akun gratis.
Azure CLI (antarmuka baris perintah Azure) Instal Azure CLI.
melengkung curl (telah diinstal sebelumnya pada sebagian besar sistem Linux dan macOS).
jq jq Prosesor JSON, digunakan untuk mengurai respons API.
Visual Studio Code Visual Studio Code dengan ekstensi GitHub Copilot (untuk bagian integrasi Copilot).

Pengaturan

  1. Perbarui Azure CLI dan instal ekstensi Container Apps:

    az upgrade
    az provider register --namespace Microsoft.App
    az extension add --name containerapp --allow-preview true --upgrade
    
  2. Masuk dan atur langganan Anda:

    az login
    SUBSCRIPTION_ID=$(az account show --query id --output tsv)
    az account set -s $SUBSCRIPTION_ID
    
  3. Atur variabel untuk tutorial ini. Ganti placeholder dengan nilai Anda

    RESOURCE_GROUP=<RESOURCE_GROUP_NAME>
    SESSION_POOL_NAME=<SESSION_POOL_NAME>
    LOCATION=<LOCATION>
    
  4. Buat grup sumber daya:

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

Membuat kumpulan sesi Python dengan server MCP

Sebarkan kumpulan sesi dengan menggunakan templat ARM dengan MCP diaktifkan.

  1. Buat file bernama 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
                    }
                }
            }
        ]
    }
    

    Nota

    Properti kunci dalam templat ini:

    • containerType: "PythonLTS": Membuat sesi dengan runtime Python.
    • mcpServerSettings.isMCPServerEnabled: true: Mengaktifkan titik akhir MCP yang dikelola platform.
    • coolDownPeriodInSeconds: 300: Sesi dihancurkan setelah 5 menit tidak aktif.
  2. Sebarkan templat:

Gunakan templat ARM untuk membuat kumpulan sesi Python dengan server MCP diaktifkan.

  1. Buat file templat penyebaran bernama 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. Sebarkan templat ARM.

    az deployment group create \
      --resource-group $RESOURCE_GROUP \
      --template-file deploy.json \
      --parameters name=$SESSION_POOL_NAME location=$LOCATION
    

Dapatkan titik akhir server MCP

Setelah penyebaran, ambil URL titik akhir MCP untuk kumpulan sesi Anda.

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)

Mendapatkan kredensial server MCP

Server MCP yang dikelola platform menggunakan autentikasi kunci API melalui x-ms-apikey header. Metode autentikasi ini berbeda dari autentikasi token pembawa yang digunakan API manajemen kumpulan sesi standar.

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)

Peringatan

Perlakukan kunci API sebagai rahasia. Jangan menerapkannya ke kontrol sumber atau membagikannya secara publik. Kunci mengautentikasi semua pemanggilan alat MCP terhadap kumpulan sesi Anda.

Menginisialisasi server MCP

initialize Kirim permintaan JSON-RPC untuk membuat koneksi 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" }'

Anda akan melihat respons yang mencakup:

  • protocolVersion: 2025-03-26
  • serverInfo.name: Microsoft Container Apps MCP Server
  • capabilities.tools: { "call": true, "list": true }

Meluncurkan lingkungan Python

Buat lingkungan Python baru:

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

Ekstrak environmentId dari bidang structuredContent dalam respons. Anda memerlukan ID ini untuk semua perintah berikutnya.

ENVIRONMENT_ID=$(echo $ENVIRONMENT_RESPONSE | jq -r '.result.structuredContent.environmentId')
echo $ENVIRONMENT_ID

Nota

Alat ini launchShell menghasilkan pengidentifikasi lingkungan yang unik. Sesi aktual dialokasikan "malas". Saat Anda menjalankan perintah pertama Anda, kumpulan sesi menetapkan kontainer yang terisolasi Hyper-V untuk menanganinya.

Menjalankan perintah Python

Untuk menjalankan kode Python di lingkungan jarak jauh, gunakan $ENVIRONMENT_ID dari langkah sebelumnya.

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}\")"
            }
        }
    }'

Respons mencakup hasil perintah di bidang stdout yang berada dalam structuredContent.

Coba contoh yang lebih kompleks:

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}\")"
            }
        }
    }'

Hubungkan ke GitHub Copilot di Visual Studio Code

Anda dapat menghubungkan server MCP kumpulan sesi ke GitHub Copilot untuk antarmuka bahasa alami ke lingkungan eksekusi kode.

  1. Buat .vscode/mcp.json di proyek Anda:

    {
        "servers": {
            "aca-python-sessions": {
                "type": "http",
                "url": "<MCP_ENDPOINT>",
                "headers": {
                    "x-ms-apikey": "<API_KEY>"
                }
            }
        }
    }
    

    Ganti <MCP_ENDPOINT> dan <API_KEY> dengan nilai dari langkah-langkah sebelumnya.

    Peringatan

    Jangan menerapkan kunci MCP API ke kontrol sumber. Gunakan variabel lingkungan atau manajer rahasia dalam produksi. Tambahkan .vscode/mcp.json ke .gitignore.

  2. Buka Visual Studio Code, lalu buka Obrolan Copilot dalam mode Agen .

  3. Verifikasi aca-python-sessions muncul di daftar Alat.

  4. Uji dengan perintah seperti:

    • "Luncurkan lingkungan Python dan hitung 20 angka Fibonacci pertama"
    • "Jalankan skrip Python yang mengambil https://api.github.com dan mencetak header respons"

Membersihkan sumber daya

Ketika Anda menyelesaikan tutorial ini, hapus sumber daya yang Anda buat untuk menghindari dikenakan biaya.

az group delete --resource-group $RESOURCE_GROUP