Partager via


Tutoriel : Utiliser un serveur MCP avec des sessions shell dans Azure Container Apps (préversion)

Ce tutoriel montre comment déployer et interagir avec un environnement shell dans des sessions dynamiques Azure Container Apps à l’aide du serveur MCP (Model Context Protocol).

Dans ce tutoriel, vous allez :

  • Créer un pool de sessions shell avec le serveur MCP activé
  • Configurer le point de terminaison et les informations d’identification du serveur MCP
  • Exécuter des commandes shell à distance à l’aide de JSON-RPC

Prerequisites

Avant de commencer ce tutoriel, vous avez besoin des ressources suivantes.

Requirement Descriptif
Compte Azure Vous devez avoir un compte Azure avec un abonnement actif. Si vous n’en avez pas, vous pouvez en créer un gratuitement.
Azure CLI Installez Azure CLI.

Configuration

Commencez par préparer Azure CLI avec les dernières mises à jour et la connexion à Azure.

  1. Mettez à jour Azure CLI vers la dernière version.

    az upgrade
    
  2. Inscrivez le fournisseur de ressources Microsoft.App.

    az provider register --namespace Microsoft.App
    
  3. Installez la dernière version de l’extension CLI Azure Container Apps.

    az extension add --name containerapp --allow-preview true --upgrade
    
  4. Connectez-vous à Azure.

    az login
    
  5. Recherchez votre ID d’abonnement Azure et placez sa valeur dans une variable.

    SUBSCRIPTION_ID=$(az account show --query id --output tsv)
    
  6. Définissez les variables utilisées dans cette procédure.

    Avant d’exécuter la commande suivante, veillez à remplacer les espaces réservés entre des <> par vos propres valeurs.

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

    Vous utilisez ces variables pour créer les ressources dans les étapes suivantes.

  7. Définissez l’abonnement que vous souhaitez utiliser pour créer le groupe de ressources.

    az account set -s $SUBSCRIPTION_ID
    
  8. Créez un groupe de ressources.

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

Créer un pool de sessions shell avec le serveur MCP

Utilisez un modèle ARM pour créer un pool de sessions shell avec le serveur MCP activé.

  1. Créez un fichier de modèle de déploiement nommé 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-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. Déployer le modèle ARM.

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

Obtenir le point de terminaison du serveur MCP

Récupérez le point de terminaison du serveur MCP à partir du pool de sessions déployé.

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)

Obtenir les informations d’identification du serveur MCP

Demandez des informations d’identification d’API pour le serveur MCP.

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)

Initialiser le serveur MCP

Initialisez la connexion du serveur MCP à l’aide de JSON-RPC.

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

Vous devriez voir une réponse qui inclut protocolVersion et serverInfo.

Lancer un environnement shell

Créez un nouvel environnement de shell dans le pool de sessions.

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

Extrayez l’ID d’environnement de la réponse à utiliser dans les commandes suivantes.

Exécuter des commandes shell

Exécutez des commandes dans votre environnement shell distant. Remplacez <ENVIRONMENT_ID> par l’ID retourné à l’étape précédente.

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

Vous devriez voir une sortie qui inclut les résultats de la commande dans le champ stdout.

Nettoyer les ressources

Les ressources créées dans ce tutoriel ont un effet sur votre facture Azure. Si vous n’allez pas utiliser ces services à long terme, exécutez la commande suivante pour supprimer tout ce qui a été créé dans ce didacticiel.

az group delete --resource-group $RESOURCE_GROUP

Étapes suivantes