Aracılığıyla paylaş


Öğretici: MCP'i dinamik oturumlarla kullanma (Python)

Önemli

Dinamik oturumlar için platform tarafından yönetilen MCP sunucusu önizleme aşamasındadır. API sürümü 2025-02-02-preview ve mcpServerSettings özellikleri değiştirilebilir.

Bu öğreticide, platform tarafından yönetilen MCP sunucusu etkin bir oturum havuzu oluşturma, buna bağlanma ve Python kodunu uzaktan yürütme gösterilmektedir.

Tek başına MCP sunucu öğreticilerinden farklı olarak, MCP sunucu kodu yazmaz veya dağıtmazsınız. Platform, Python oturum havuzları için yerleşik araçlar sağlar:

Tool Description
launchShell Yeni bir ortam oluşturur ve bir environmentId döndürür.
runPythonCodeInRemoteEnvironment Python kodunu mevcut bir ortamda yürütür
runShellCommandInRemoteEnvironment Mevcut bir ortamda bir kabuk komutu yürütür.

Bu eğitimde, siz:

  • MCP sunucusu etkin bir Python oturum havuzu oluşturma
  • MCP uç noktasını ve API anahtarını alma
  • MCP bağlantısını başlatma ve JSON-RPC aracılığıyla Python kodu yürütme
  • MCP sunucusunu VS Code'da GitHub Copilot'a bağlama

Önkoşullar

Gereksinim Description
Azure hesabı Aktif bir aboneliğe sahip bir Azure hesabı. Ücretsiz bir tane oluşturun.
Azure Komut Satırı Arayüzü (Azure CLI) Azure CLI'yi yükleyin.
Kıvrım curl (çoğu Linux ve macOS sisteminde önceden yüklenmiştir).
jq Jq API yanıtlarını ayrıştırmak için kullanılan JSON işlemcisi.
VS Code GitHub Copilot uzantısına sahip Visual Studio Code (Copilot tümleştirme bölümü için).

Kurulum

  1. Azure CLI'yi güncelleştirin ve Container Apps uzantısını yükleyin:

    az upgrade
    az provider register --namespace Microsoft.App
    az extension add --name containerapp --allow-preview true --upgrade
    
  2. Oturum açın ve aboneliğinizi ayarlayın:

    az login
    SUBSCRIPTION_ID=$(az account show --query id --output tsv)
    az account set -s $SUBSCRIPTION_ID
    
  3. Bu öğretici için değişkenleri ayarlayın. Yer tutucuları değerlerinizle değiştirin:

    RESOURCE_GROUP=<RESOURCE_GROUP_NAME>
    SESSION_POOL_NAME=<SESSION_POOL_NAME>
    LOCATION=<LOCATION>
    
  4. Kaynak grubu oluşturma:

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

MCP sunucusuyla Python oturum havuzu oluşturma

MCP'nin etkin olduğu bir ARM şablonu kullanarak oturum havuzu dağıtın.

  1. adlı deploy.jsonbir dosya oluşturun:

    {
        "$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
                    }
                }
            }
        ]
    }
    

    Uyarı

    Bu şablondaki önemli özellikler:

    • containerType: "PythonLTS": Python çalışma zamanı ile oturumlar oluşturur.
    • mcpServerSettings.isMCPServerEnabled: true: Platform tarafından yönetilen MCP uç noktasını etkinleştirir.
    • coolDownPeriodInSeconds: 300: Oturumlar 5 dakika etkinlik dışı kalma süresinden sonra yok edilir.
  2. Şablonu dağıtın:

MCP sunucusunun etkin olduğu bir Python oturum havuzu oluşturmak için ARM şablonu kullanın.

  1. adlı deploy.jsonbir dağıtım şablonu dosyası oluşturun:

    {
        "$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 şablonunu dağıtma.

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

MCP sunucu uç noktasını alma

Dağıtımdan sonra oturum havuzunuzun MCP uç nokta URL'sini alın.

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 sunucusu kimlik bilgilerini alma

Platform tarafından yönetilen MCP sunucusu, API anahtarı doğrulama başlık içinde x-ms-apikey yoluyla yapar. Bu kimlik doğrulama yöntemi, standart oturum havuzu yönetim API'lerinin kullandığı taşıyıcı belirteç kimlik doğrulamasından farklıdır.

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)

Uyarı

API anahtarını gizli tutun. Bunu kaynak denetimine işlemeyin veya herkese açık olarak paylaşmayın. Anahtar, oturum havuzunuzda tüm MCP aracı çağrılarının kimliğini doğrular.

MCP sunucusunu başlatma

initialize MCP bağlantısını kurmak için JSON-RPC isteğini gönderin:

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

Şunları içeren bir yanıt görmeniz gerekir:

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

Python ortamı başlatma

Yeni bir Python ortamı oluşturun:

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 öğesini, yanıttaki structuredContent alanından ayıklayın. Sonraki tüm komutlar için bu kimlik gereklidir.

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

Uyarı

Araç launchShell benzersiz bir ortam tanımlayıcısı oluşturur. Gerçek oturum "tembel" bir şekilde tahsis edilir. İlk komutunuzu yürüttüğünüzde, oturum havuzu bunu işlemek için Hyper-V yalıtılmış bir kapsayıcı atar.

Python komutlarını yürütme

Python kodunu uzak ortamda çalıştırmak için önceki adımdaki öğesini $ENVIRONMENT_ID kullanın.

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

Yanıt, stdout içindeki structuredContent alanında komut sonuçlarını içerir.

Daha karmaşık bir örnek deneyin:

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'da GitHub Copilot'a bağlanma

Kod yürütme ortamına doğal dil arabirimi için oturum havuzu MCP sunucusunu GitHub Copilot'a bağlayabilirsiniz.

  1. Projenizde oluşturun .vscode/mcp.json :

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

    Değiştir <MCP_ENDPOINT> ve <API_KEY> değerleriyle önceki adımlarda belirlediğiniz değerleri.

    Uyarı

    MCP API anahtarlarını kaynak denetimine işlemeyin. Üretim ortamında ortam değişkenlerini veya gizli dizi yöneticisini kullanın. .vscode/mcp.json öğesini .gitignore ekleyin.

  2. VS Code'ı açın, ardından Aracı modunda Copilot Sohbet'i açın.

  3. Doğrula aca-python-sessions , Araçlar listesinde görünür.

  4. Aşağıdaki gibi istemlerle test edin:

    • "Python ortamını başlatın ve ilk 20 Fibonacci sayısını hesaplayın"
    • "Yanıt üst bilgilerini getiren https://api.github.com ve yazdıran bir Python betiği çalıştırın"

Kaynakları temizle

Bu öğreticiyi tamamladığınızda ücret yansıtılmaması için oluşturduğunuz kaynakları kaldırın.

az group delete --resource-group $RESOURCE_GROUP