Aracılığıyla paylaş


Öğretici: Azure Container Apps'te kabuk oturumlarıyla MCP sunucusu kullanma (önizleme)

Bu öğreticide, Model Bağlam Protokolü (MCP) sunucusunu kullanarak Azure Container Apps dinamik oturumlarında bir kabuk ortamının nasıl dağıtılacağı ve bunlarla nasıl etkileşim kurulduğunu gösterilmektedir.

Bu öğreticide siz:

  • MCP sunucusu etkinleştirilmiş bir kabuk oturumu havuzu oluşturun.
  • MCP sunucu uç noktasını ve kimlik bilgilerini ayarlama
  • JSON-RPC kullanarak kabuk komutlarını uzaktan yürütme

Önkoşullar

Bu öğreticiye başlamadan önce aşağıdaki kaynaklara ihtiyacınız vardır.

Gereksinim Description
Azure hesabı Etkin aboneliği olan bir Azure hesabına ihtiyacınız vardır. Eğer bir hesabınız yoksa ücretsiz olarak bir tane oluşturabilirsiniz.
Azure Komut Satırı Arayüzü (Azure CLI) Azure CLI'yi yükleyin.

Kurulum

En son güncelleştirmelerle Azure CLI'yi hazırlayarak ve Azure'da oturum açarak başlayın.

  1. Azure CLI'yi en son sürüme güncelleştirin.

    az upgrade
    
  2. Kaynak sağlayıcısını Microsoft.App kaydedin.

    az provider register --namespace Microsoft.App
    
  3. Azure Container Apps CLI uzantısının en son sürümünü yükleyin.

    az extension add --name containerapp --allow-preview true --upgrade
    
  4. Azure'da oturum açın.

    az login
    
  5. Azure abonelik kimliğinizi sorgulayıp değeri bir değişken olarak ayarlayın.

    SUBSCRIPTION_ID=$(az account show --query id --output tsv)
    
  6. Bu yordamda kullanılan değişkenleri ayarlayın.

    Aşağıdaki komutu çalıştırmadan önce, ile çevrelenen <> yer tutucuları kendi değerlerinizle değiştirdiğinizden emin olun.

    RESOURCE_GROUP=<RESOURCE_GROUP_NAME>
    SESSION_POOL_NAME=<SESSION_POOL_NAME>
    LOCATION=<LOCATION>
    

    Aşağıdaki adımlarda kaynakları oluşturmak için bu değişkenleri kullanırsınız.

  7. Kaynak grubunu oluşturmak için kullanmak istediğiniz aboneliği ayarlayın.

    az account set -s $SUBSCRIPTION_ID
    
  8. Bir kaynak grubu oluşturun.

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

MCP sunucusuyla kabuk oturumu havuzu oluşturma

MCP sunucusunun etkin olduğu bir kabuk oturumu havuzu oluşturmak için ARM şablonunu 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-02-02-preview",
                "name": "[parameters('name')]",
                "location": "[parameters('location')]",
                "properties": {
                    "poolManagementType": "Dynamic",
                    "containerType": "Shell", # Set the "containerType" property to "Shell"
                    "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ılan oturum havuzundan MCP sunucu uç noktasını 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-02-02-preview" --query "properties.mcpServerSettings.mcpServerEndpoint" -o tsv)

MCP sunucusu kimlik bilgilerini alma

MCP sunucusu için API kimlik bilgilerini isteme.

API_KEY=$(az rest --method POST --uri "/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.App/sessionPools/$SESSION_POOL_NAME/fetchMCPServerCredentials?api-version=2025-02-02-preview" --query "apiKey" -o tsv)

MCP sunucusunu başlatma

JSON-RPC kullanarak MCP sunucu bağlantısını başlatın.

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 ve serverInfo içeren bir yanıt görmelisiniz.

Kabuk ortamını başlatma

Oturum havuzunda 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

Sonraki komutlarda kullanmak üzere yanıttan ortam kimliğini ayıklayın.

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

Komutları uzak kabuk ortamınızda çalıştırın. <ENVIRONMENT_ID> ifadesini önceki adımdan döndürülen kimlikle değiştirin.

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

Komut sonuçlarını stdout bölümünde içeren bir çıktı görmeniz gerekir.

Kaynakları temizle

Bu öğreticide oluşturulan kaynakların Azure faturanız üzerinde etkisi vardır. Bu hizmetleri uzun süreli kullanmayacaksanız, bu öğreticide oluşturulan her şeyi kaldırmak için aşağıdaki komutu çalıştırın.

az group delete --resource-group $RESOURCE_GROUP

Sonraki Adımlar