Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Importante
O servidor MCP gerenciado pela plataforma para sessões dinâmicas está em versão prévia. A versão da API 2025-02-02-preview e as propriedades mcpServerSettings estão sujeitas a alterações.
Este tutorial mostra como criar um pool de sessões com o servidor MCP gerenciado pela plataforma habilitado, conectar-se a ele e executar o código Python remotamente.
Ao contrário dos tutoriais autônomos do servidor MCP, você não escreve nem implanta o código do servidor MCP. A plataforma fornece ferramentas integradas para pools de sessão de Python.
| Tool | Description |
|---|---|
launchShell |
Cria um novo ambiente e retorna um environmentId |
runPythonCodeInRemoteEnvironment |
Executa código Python em um ambiente existente |
runShellCommandInRemoteEnvironment |
Executa um comando shell em um ambiente existente |
Neste tutorial, você:
- Criar um pool de sessões do Python com o servidor MCP habilitado
- Recuperar o ponto de extremidade MCP e a chave de API
- Inicialize a conexão MCP e execute o código Python por meio de JSON-RPC
- Conectar o servidor MCP ao GitHub Copilot no VS Code
Pré-requisitos
| Requirement | Description |
|---|---|
| Conta do Azure | Uma conta do Azure com uma assinatura ativa. Crie um gratuitamente. |
| CLI do Azure | Instale a CLI do Azure. |
| curl | curl (pré-instalado na maioria dos sistemas Linux e macOS). |
| jq | jq Processador JSON, usado para analisar respostas de API. |
| VS Code | Visual Studio Code com a extensão GitHub Copilot (para a seção de integração do Copilot). |
Configuração
Atualize a CLI do Azure e instale a extensão Aplicativos de Contêiner:
az upgrade az provider register --namespace Microsoft.App az extension add --name containerapp --allow-preview true --upgradeEntre e defina sua assinatura:
az login SUBSCRIPTION_ID=$(az account show --query id --output tsv) az account set -s $SUBSCRIPTION_IDDefina variáveis para este tutorial. Substitua os espaços reservados pelos seus valores:
RESOURCE_GROUP=<RESOURCE_GROUP_NAME> SESSION_POOL_NAME=<SESSION_POOL_NAME> LOCATION=<LOCATION>Crie um grupo de recursos:
az group create --name $RESOURCE_GROUP --location $LOCATION
Criar um pool de sessões do Python com o servidor MCP
Implante um pool de sessões usando um modelo do ARM com o MCP habilitado.
Crie um arquivo chamado
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 } } } ] }Observação
Principais propriedades neste modelo:
-
containerType: "PythonLTS": cria sessões com um runtime do Python. -
mcpServerSettings.isMCPServerEnabled: true: habilita o endpoint MCP gerenciado pela plataforma. -
coolDownPeriodInSeconds: 300: as sessões são destruídas após 5 minutos de inatividade.
-
Implante o modelo:
Use um modelo do ARM para criar um pool de sessões do Python com o servidor MCP habilitado.
Crie um arquivo de modelo de implantação chamado
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-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 } } } ] }Implantar o modelo do ARM.
az deployment group create \ --resource-group $RESOURCE_GROUP \ --template-file deploy.json \ --parameters name=$SESSION_POOL_NAME location=$LOCATION
Obter o endpoint do servidor MCP
Após a implantação, recupere a URL do endpoint MCP para o pool de sessões.
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)
Obter credenciais do servidor MCP
O servidor MCP gerenciado pela plataforma usa a autenticação de chave de API por meio do x-ms-apikey cabeçalho. Esse método de autenticação difere da autenticação de token de portador que as APIs de gerenciamento do pool de sessão padrão usam.
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)
Aviso
Trate a chave de API como um segredo. Não faça commit no controle do código-fonte nem compartilhe-o publicamente. A chave autentica todas as invocações da ferramenta MCP no pool de sessões.
Inicializar o servidor MCP
Envie a solicitação initialize JSON-RPC para estabelecer a conexão 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" }'
Você deverá ver uma resposta que inclua:
-
protocolVersion:2025-03-26 -
serverInfo.name:Microsoft Container Apps MCP Server -
capabilities.tools:{ "call": true, "list": true }
Iniciar um ambiente do Python
Crie um novo ambiente do 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
Extraia o environmentId do campo structuredContent na resposta. Você precisa dessa ID para todos os comandos subsequentes.
ENVIRONMENT_ID=$(echo $ENVIRONMENT_RESPONSE | jq -r '.result.structuredContent.environmentId')
echo $ENVIRONMENT_ID
Observação
A launchShell ferramenta gera um identificador de ambiente exclusivo. A sessão real é alocada "lentamente". Quando você executa seu primeiro comando, o pool de sessão atribui um contêiner isolado do Hyper-V para lidar com ele.
Executar comandos do Python
Para executar o código Python no ambiente remoto, use o $ENVIRONMENT_ID do passo anterior.
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}\")"
}
}
}'
A resposta inclui resultados de comando no campo stdout dentro de structuredContent.
Experimente um exemplo mais complexo:
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}\")"
}
}
}'
Conectar-se ao GitHub Copilot no VS Code
Você pode conectar o servidor MCP do pool de sessões ao GitHub Copilot para ter uma interface de linguagem natural com o ambiente de execução de código.
Crie
.vscode/mcp.jsonem seu projeto:{ "servers": { "aca-python-sessions": { "type": "http", "url": "<MCP_ENDPOINT>", "headers": { "x-ms-apikey": "<API_KEY>" } } } }Substitua
<MCP_ENDPOINT>e<API_KEY>pelos valores das etapas anteriores.Aviso
Não faça commit das chaves de API do MCP no controle do código-fonte. Use variáveis de ambiente ou um gerenciador de segredos em produção. Adicione
.vscode/mcp.jsonao seu.gitignore.Abra o VS Code e, em seguida, abra o Copilot Chat no modo Agente .
Verifique se
aca-python-sessionsestá na lista de ferramentas.Teste com prompts como:
- "Inicie um ambiente python e calcule os primeiros 20 números fibonacci"
- "Executar um script python que busca https://api.github.com e imprime os cabeçalhos de resposta"
Limpar os recursos
Ao concluir este tutorial, remova os recursos criados para evitar incorrer em encargos.
az group delete --resource-group $RESOURCE_GROUP