Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Important
Le serveur MCP géré par la plateforme pour les sessions dynamiques est en préversion. La version 2025-02-02-preview et les propriétés mcpServerSettings de l’API sont sujettes à modification.
Ce tutoriel montre comment créer un pool de sessions avec le serveur MCP géré par la plateforme activé, se connecter à celui-ci et exécuter du code Python à distance.
Contrairement aux didacticiels de serveur MCP autonomes, vous n’écrivez pas ou ne déployez pas de code de serveur MCP. La plateforme fournit des outils intégrés pour les pools de sessions Python :
| Outil | Descriptif |
|---|---|
launchShell |
Crée un nouvel environnement et retourne un environmentId |
runPythonCodeInRemoteEnvironment |
Exécute du code Python dans un environnement existant |
runShellCommandInRemoteEnvironment |
Exécute une commande shell dans un environnement existant |
Dans ce tutoriel, vous allez :
- Créer un pool de sessions Python avec le serveur MCP activé
- Récupérer le point de terminaison MCP et la clé API
- Initialisez la connexion MCP et exécutez du code Python via JSON-RPC
- Connecter le serveur MCP à GitHub Copilot dans VS Code
Prerequisites
| Requirement | Descriptif |
|---|---|
| Compte Azure | Un compte Azure avec un abonnement actif. Créez-en un gratuitement. |
| Azure CLI | Installez Azure CLI. |
| curl | curl (préinstallé sur la plupart des systèmes Linux et macOS). |
| jq | jq Processeur JSON, utilisé pour analyser les réponses d’API. |
| VS Code | Visual Studio Code avec l’extension GitHub Copilot (pour la section intégration de Copilot). |
Configuration
Mettez à jour Azure CLI et installez l’extension Container Apps :
az upgrade az provider register --namespace Microsoft.App az extension add --name containerapp --allow-preview true --upgradeConnectez-vous et définissez votre abonnement :
az login SUBSCRIPTION_ID=$(az account show --query id --output tsv) az account set -s $SUBSCRIPTION_IDDéfinissez des variables pour ce didacticiel. Remplacez les espaces réservés par vos valeurs :
RESOURCE_GROUP=<RESOURCE_GROUP_NAME> SESSION_POOL_NAME=<SESSION_POOL_NAME> LOCATION=<LOCATION>Créez un groupe de ressources :
az group create --name $RESOURCE_GROUP --location $LOCATION
Créer un pool de sessions Python avec le serveur MCP
Déployez un pool de sessions à l’aide d’un modèle ARM avec MCP activé.
Créez un fichier nommé
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 } } } ] }Note
Propriétés clés dans ce modèle :
-
containerType: "PythonLTS": crée des sessions avec un runtime Python. -
mcpServerSettings.isMCPServerEnabled: true: active le point de terminaison MCP géré par la plateforme. -
coolDownPeriodInSeconds: 300: les sessions sont détruites après 5 minutes d’inactivité.
-
Déployez le modèle :
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
Après le déploiement, récupérez l’URL du point de terminaison MCP de votre pool de sessions.
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-02-02-preview \
--query "properties.mcpServerSettings.mcpServerEndpoint" -o tsv)
Obtenir les informations d’identification du serveur MCP
Le serveur MCP géré par la plateforme utilise l’authentification par clé API via l’en-tête x-ms-apikey . Cette méthode d’authentification diffère de l’authentification par jeton du porteur que les API de gestion de pool de sessions standard utilisent.
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-02-02-preview \
--query "apiKey" -o tsv)
Avertissement
Traitez la clé API comme un secret. Ne l’enregistrez pas dans le contrôle de version et ne le partagez pas publiquement. La clé authentifie tous les appels d’outils MCP sur votre pool de sessions.
Initialiser le serveur MCP
Envoyez la initialize requête JSON-RPC pour établir la connexion 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" }'
Vous devez voir une réponse qui inclut :
-
protocolVersion:2025-03-26 -
serverInfo.name:Microsoft Container Apps MCP Server -
capabilities.tools:{ "call": true, "list": true }
Lancer un environnement Python
Créez un environnement Python :
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 le environmentId du champ structuredContent dans la réponse. Vous avez besoin de cet ID pour toutes les commandes suivantes.
ENVIRONMENT_ID=$(echo $ENVIRONMENT_RESPONSE | jq -r '.result.structuredContent.environmentId')
echo $ENVIRONMENT_ID
Note
L’outil launchShell génère un identificateur d’environnement unique. La session en cours est allouée de manière dite différée. Lorsque vous exécutez votre première commande, le pool de sessions affecte un conteneur isolé Hyper-V pour le gérer.
Exécuter des commandes Python
Pour exécuter du code Python dans l’environnement distant, utilisez l’étape $ENVIRONMENT_ID 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": "runPythonCodeInRemoteEnvironment",
"arguments": {
"environmentId": "'"$ENVIRONMENT_ID"'",
"pythonCode": "import sys; print(f\"Python {sys.version}\")"
}
}
}'
La réponse inclut des résultats de commande dans le champ stdout à l'intérieur de structuredContent.
Essayez un exemple plus complexe :
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}\")"
}
}
}'
Se connecter à GitHub Copilot dans VS Code
Vous pouvez connecter le serveur MCP du pool de sessions à GitHub Copilot pour une interface en langage naturel à l’environnement d’exécution du code.
Créez
.vscode/mcp.jsondans votre projet :{ "servers": { "aca-python-sessions": { "type": "http", "url": "<MCP_ENDPOINT>", "headers": { "x-ms-apikey": "<API_KEY>" } } } }Remplacez
<MCP_ENDPOINT>et<API_KEY>par les valeurs des étapes précédentes.Avertissement
Ne stockez pas les clés API MCP dans la gestion du code source. Utilisez des variables d’environnement ou un gestionnaire de secrets en production. Ajouter
.vscode/mcp.jsonà votre.gitignore.Ouvrez VS Code, puis ouvrez Copilot Chat en mode Agent .
Vérifiez que
aca-python-sessionsapparaît dans la liste des outils.Testez avec des invites telles que :
- « Lancer un environnement Python et calculer les 20 premiers nombres Fibonacci »
- « Exécuter un script Python qui extrait https://api.GitHub.com et imprime les en-têtes de réponse »
Nettoyer les ressources
Lorsque vous avez terminé ce didacticiel, supprimez les ressources que vous avez créées pour éviter les frais.
az group delete --resource-group $RESOURCE_GROUP