중요합니다
동적 세션용 플랫폼 관리 MCP 서버는 미리 보기로 제공됩니다. API 버전 2025-02-02-preview 및 mcpServerSettings 속성은 변경될 수 있습니다.
이 자습서에서는 플랫폼 관리형 MCP 서버를 사용하도록 설정된 세션 풀을 만들고, 연결하고, Python 코드를 원격으로 실행하는 방법을 보여 줍니다.
독립 실행형 MCP 서버 자습서와 달리 MCP 서버 코드를 작성하거나 배포하지 않습니다. 이 플랫폼은 Python 세션 풀에 대한 기본 제공 도구를 제공합니다.
| 도구 | Description |
|---|---|
launchShell |
새로운 환경을 만들고 environmentId를 반환합니다. |
runPythonCodeInRemoteEnvironment |
기존 환경에서 Python 코드를 실행합니다. |
runShellCommandInRemoteEnvironment |
기존 환경에서 셸 명령을 실행합니다. |
이 자습서에서는 다음을 수행합니다.
- MCP 서버를 사용하도록 설정된 Python 세션 풀 만들기
- MCP 엔드포인트 및 API 키 검색
- MCP 연결을 초기화하고 JSON-RPC 통해 Python 코드를 실행합니다.
- VS Code에서 GItHub Copilot에 MCP 서버 연결
필수 조건
| 요구 사항 | Description |
|---|---|
| Azure 계정 | 활성 구독이 있는 Azure 계정. 체험 계정 만들기 |
| Azure 커맨드 라인 인터페이스 (CLI) | Azure CLI를 설치합니다. |
| curl | curl (대부분의 Linux 및 macOS 시스템에 사전 설치됨). |
| jq | Jq API 응답을 구문 분석하는 데 사용되는 JSON 프로세서입니다. |
| VS 코드 | GitHub Copilot 확장이 있는 Visual Studio Code(Copilot 통합 섹션용). |
설치 프로그램
Azure CLI를 업데이트하고 Container Apps 확장을 설치합니다.
az upgrade az provider register --namespace Microsoft.App az extension add --name containerapp --allow-preview true --upgrade로그인하고 구독을 설정합니다.
az login SUBSCRIPTION_ID=$(az account show --query id --output tsv) az account set -s $SUBSCRIPTION_ID이 자습서의 변수를 설정합니다. 자리 표시자를 값으로 바꿉다.
RESOURCE_GROUP=<RESOURCE_GROUP_NAME> SESSION_POOL_NAME=<SESSION_POOL_NAME> LOCATION=<LOCATION>리소스 그룹을 만듭니다.
az group create --name $RESOURCE_GROUP --location $LOCATION
MCP 서버를 사용하여 Python 세션 풀 만들기
MCP를 사용하도록 설정된 ARM 템플릿을 사용하여 세션 풀을 배포합니다.
다음과 같은 파일을 만듭니다
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 } } } ] }비고
이 템플릿의 주요 속성:
-
containerType: "PythonLTS": Python 런타임을 사용하여 세션을 만듭니다. -
mcpServerSettings.isMCPServerEnabled: true: 플랫폼 관리형 MCP 엔드포인트를 사용하도록 설정합니다. -
coolDownPeriodInSeconds: 300: 세션이 5분 동안 비활성 상태이면 삭제됩니다.
-
템플릿을 배포합니다.
ARM 템플릿을 사용하여 MCP 서버를 사용하도록 설정된 Python 세션 풀을 만듭니다.
다음과 같은 배포 템플릿 파일을 만듭니다
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 } } } ] }ARM 템플릿을 배포합니다.
az deployment group create \ --resource-group $RESOURCE_GROUP \ --template-file deploy.json \ --parameters name=$SESSION_POOL_NAME location=$LOCATION
MCP 서버 엔드포인트 가져오기
배포 후 세션 풀에 대한 MCP 엔드포인트 URL을 검색합니다.
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)
MCP 서버 자격 증명 가져오기
플랫폼 관리형 MCP 서버는 x-ms-apikey 헤더를 통해 API 키 인증을 사용합니다. 이 인증 방법은 표준 세션 풀 관리 API에서 사용하는 전달자 토큰 인증과 다릅니다.
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)
경고
API 키를 비밀로 처리합니다. 소스 제어에 커밋하거나 공개적으로 공유하지 마세요. 키는 세션 풀에 대한 모든 MCP 도구 호출을 인증합니다.
MCP 서버 초기화
initialize JSON-RPC 요청을 보내 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" }'
다음을 포함하는 응답이 표시됩니다.
-
protocolVersion:2025-03-26 -
serverInfo.name:Microsoft Container Apps MCP Server -
capabilities.tools:{ "call": true, "list": true }
Python 환경 시작
새 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
응답의 environmentId 필드에서 structuredContent를 추출합니다. 모든 후속 명령에 이 ID가 필요합니다.
ENVIRONMENT_ID=$(echo $ENVIRONMENT_RESPONSE | jq -r '.result.structuredContent.environmentId')
echo $ENVIRONMENT_ID
비고
이 도구는 launchShell 고유한 환경 식별자를 생성합니다. 실제 세션은 "지연 할당" 방식으로 배정됩니다. 첫 번째 명령을 실행하면 세션 풀에서 Hyper-V 격리 컨테이너를 할당하여 처리합니다.
Python 명령 실행
원격 환경에서 Python 코드를 실행하려면 이전 단계의 코드를 $ENVIRONMENT_ID 사용합니다.
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}\")"
}
}
}'
응답에는 내의 stdout 필드에 structuredContent명령 결과가 포함됩니다.
더 복잡한 예제를 사용해 보세요.
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}\")"
}
}
}'
VS Code에서 GitHub Copilot에 연결
세션 풀 MCP 서버를 GitHub Copilot에 연결하여 자연어 인터페이스를 코드 실행 환경에 연결할 수 있습니다.
프로젝트에서
.vscode/mcp.json을(를) 만드십시오.{ "servers": { "aca-python-sessions": { "type": "http", "url": "<MCP_ENDPOINT>", "headers": { "x-ms-apikey": "<API_KEY>" } } } }이전 단계의 값으로
<MCP_ENDPOINT>및<API_KEY>를 대체하십시오.경고
MCP API 키를 소스 제어에 커밋하지 마세요. 프로덕션 환경에서 환경 변수 또는 비밀 관리자를 사용합니다.
.vscode/mcp.json을/를.gitignore에 추가합니다.VS Code를 연 다음 에이전트 모드에서 코필로트 채팅을 엽니다.
aca-python-sessions이(가) 도구 목록에 표시되는지 확인합니다.다음과 같은 프롬프트를 사용하여 테스트합니다.
- "Python 환경을 시작하고 처음 20개의 피보나치 숫자를 계산합니다."
- "응답 헤더를 https://api.github.com 가져오고 인쇄하는 Python 스크립트 실행"
자원을 정리하세요
이 자습서를 완료하면 요금이 발생하지 않도록 만든 리소스를 제거합니다.
az group delete --resource-group $RESOURCE_GROUP