자습서: 동적 세션과 함께 MCP 사용(Python)

중요합니다

동적 세션용 플랫폼 관리 MCP 서버는 미리 보기로 제공됩니다. API 버전 2025-02-02-previewmcpServerSettings 속성은 변경될 수 있습니다.

이 자습서에서는 플랫폼 관리형 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 통합 섹션용).

설치 프로그램

  1. Azure CLI를 업데이트하고 Container Apps 확장을 설치합니다.

    az upgrade
    az provider register --namespace Microsoft.App
    az extension add --name containerapp --allow-preview true --upgrade
    
  2. 로그인하고 구독을 설정합니다.

    az login
    SUBSCRIPTION_ID=$(az account show --query id --output tsv)
    az account set -s $SUBSCRIPTION_ID
    
  3. 이 자습서의 변수를 설정합니다. 자리 표시자를 값으로 바꿉다.

    RESOURCE_GROUP=<RESOURCE_GROUP_NAME>
    SESSION_POOL_NAME=<SESSION_POOL_NAME>
    LOCATION=<LOCATION>
    
  4. 리소스 그룹을 만듭니다.

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

MCP 서버를 사용하여 Python 세션 풀 만들기

MCP를 사용하도록 설정된 ARM 템플릿을 사용하여 세션 풀을 배포합니다.

  1. 다음과 같은 파일을 만듭니다 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분 동안 비활성 상태이면 삭제됩니다.
  2. 템플릿을 배포합니다.

ARM 템플릿을 사용하여 MCP 서버를 사용하도록 설정된 Python 세션 풀을 만듭니다.

  1. 다음과 같은 배포 템플릿 파일을 만듭니다 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
                    }
                }
            }
        ]
    }
    
  2. 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에 연결하여 자연어 인터페이스를 코드 실행 환경에 연결할 수 있습니다.

  1. 프로젝트에서 .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에 추가합니다.

  2. VS Code를 연 다음 에이전트 모드에서 코필로트 채팅을 엽니다.

  3. aca-python-sessions이(가) 도구 목록에 표시되는지 확인합니다.

  4. 다음과 같은 프롬프트를 사용하여 테스트합니다.

    • "Python 환경을 시작하고 처음 20개의 피보나치 숫자를 계산합니다."
    • "응답 헤더를 https://api.github.com 가져오고 인쇄하는 Python 스크립트 실행"

자원을 정리하세요

이 자습서를 완료하면 요금이 발생하지 않도록 만든 리소스를 제거합니다.

az group delete --resource-group $RESOURCE_GROUP