Aracılığıyla paylaş


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

Ö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 öğretici, hem CLI'dan hem de VS Code'da GitHub Copilot Chat'ten platform tarafından yönetilen MCP sunucusunun etkin olduğu bir shell oturumu havuzu oluşturmayı, buna bağlanmayı ve kabuk komutlarını uzaktan yürütmeyi göstermektedir.

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

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

Bu eğitimde, siz:

  • MCP sunucusu etkinleştirilmiş bir kabuk oturumu havuzu oluşturun.
  • MCP uç noktasını ve API anahtarını alma
  • MCP bağlantısını başlatın ve JSON-RPC aracılığıyla kabuk komutlarını çalıştırın
  • 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>
    
    Yer tutucu Description
    <RESOURCE_GROUP_NAME> Azure kaynak grubunun adı.
    <SESSION_POOL_NAME> Oturum havuzunuzun adı (örneğin, my-shell-sessions).
    <LOCATION> Dinamik oturumları destekleyen bir Azure bölgesi (örneğin, westus2).
  4. Kaynak grubu oluşturma:

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

MCP sunucusuyla kabuk oturumu havuzu oluşturma

MCP sunucusu etkin 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": "Shell",
                    "scaleConfiguration": {
                        "maxConcurrentSessions": 5
                    },
                    "sessionNetworkConfiguration": {
                        "status": "EgressEnabled"
                    },
                    "dynamicPoolConfiguration": {
                        "lifecycleConfiguration": {
                            "lifecycleType": "Timed",
                            "coolDownPeriodInSeconds": 300
                        }
                    },
                    "mcpServerSettings": {
                        "isMCPServerEnabled": true
                    }
                }
            }
        ]
    }
    

    Uyarı

    Bu şablondaki önemli özellikler:

    • containerType: "Shell" — Linux kabuk ortamıyla 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:

    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 "/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 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 yaklaşım, 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 "/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.App/sessionPools/$SESSION_POOL_NAME/fetchMCPServerCredentials?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 }

Kabuk ortamını başlatma

Komutları çalıştırmak için yeni bir kabuk 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

Yanıttan environmentId öğesini sonraki komutlarda kullanmak üzere ayıklayın.

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

Shell komutlarını çalıştır

Uzak kabuk ortamında komutları çalıştırmak için önceki adımdan $ENVIRONMENT_ID'yi 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": "runShellCommandInRemoteEnvironment",
            "arguments": {
                "environmentId": "'"$ENVIRONMENT_ID"'",
                "shellCommand": "echo Hello from Azure Container Apps Shell Session!"
            }
        }
    }'

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

Ek komutları deneyin:

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

Uyarı

Araç, bağımsız değişkenlere sahip komutlar için shellCommand dize veya execCommandAndArgs dizi kabul eder. Basit komutlar için shellCommand kullanın ve bağımsız değişken kaçışı üzerinde hassas denetime ihtiyacınız olduğunda execCommandAndArgs kullanın.

VS Code'da GitHub Copilot'a bağlanma

GitHub Copilot ile doğal dil arabirimi sağlayarak oturum havuzu MCP sunucusunu kabuk yürütme ortamına bağlayabilirsiniz.

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

    {
        "servers": {
            "aca-shell-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-shell-sessions , Araçlar listesinde görünür.

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

    • "Bir terminal başlat ve disk kullanımını göster"
    • "Tüm ortam değişkenlerini listelemek için bir kabuk komutu çalıştırın"
    • "Kabuk ortamında hangi paketlerin yüklü olduğunu denetleyin"

Kaynakları temizle

Bu öğreticiyi tamamladığınızda, masraflardan kaçınmak için oluşturduğunuz kaynakları kaldırın.

az group delete --resource-group $RESOURCE_GROUP