Поделиться через


Руководство: Использование MCP с динамическими сеансами (Python)

Это важно

Сервер MCP под управлением платформы для динамических сеансов находится в предварительной версии. Версия API 2025-02-02-preview и свойства mcpServerSettings могут быть изменены.

В этом руководстве показано, как создать пул сеансов с включенным сервером MCP на платформе, подключиться к нему и удаленно выполнить код Python.

В отличие от автономных руководств по серверу MCP, вы не записываете или развертываете код сервера MCP. Платформа предоставляет встроенные средства для пулов сеансов Python:

Инструмент Description
launchShell Создает новую среду и возвращает environmentId
runPythonCodeInRemoteEnvironment Выполняет код Python в существующей среде
runShellCommandInRemoteEnvironment Выполняет команду оболочки в существующей среде

Изучив это руководство, вы:

  • Создание пула сеансов Python с включенным сервером MCP
  • Получение конечной точки и ключа API MCP
  • Инициализация подключения MCP и выполнение кода Python с помощью JSON-RPC
  • Подключение сервера MCP к GitHub Copilot в VS Code

Предпосылки

Требование Description
Учетная запись Azure Учетная запись Azure с активной подпиской. Создайте его бесплатно.
Azure CLI (Интерфейс командной строки для Azure) Установите Azure CLI.
завиток curl (предустановлено в большинстве систем Linux и macOS).
jq Jq Обработчик JSON, используемый для анализа ответов API.
VS Code Visual Studio Code с расширением GitHub Copilot (для раздела интеграции Copilot).

Настройка

  1. Обновите Azure CLI и установите расширение "Приложения контейнеров":

    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
    

Создание пула сеансов Python с сервером MCP

Развертывание пула сеансов с помощью шаблона ARM с включенной функцией MCP.

  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. Разверните шаблон:

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

Получение конечной точки сервера MCP

После развертывания получите URL-адрес конечной точки MCP для пула сеансов.

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)

Получение учетных данных сервера MCP

Сервер MCP, управляемый платформой, использует проверку подлинности ключа API через x-ms-apikey заголовок. Этот метод проверки подлинности отличается от аутентификации с использованием токена носителя, которые используют стандартные 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-02-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 в ответе. Этот идентификатор необходим для всех последующих команд.

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

Подключение к GitHub Copilot в VS Code

Сервер управления пулом сеансов 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> на значения из предыдущих шагов.

    Предупреждение

    Не добавляйте ключи API MCP в систему управления исходным кодом. Используйте переменные среды или диспетчер секретов в рабочей среде. Добавьте .vscode/mcp.json в свой .gitignore.

  2. Откройте VS Code, а затем откройте чат Copilot в режиме агента .

  3. Убедитесь, что aca-python-sessions отображается в списке инструментов.

  4. Тестирование с помощью запросов, таких как:

    • Запуск среды Python и вычисление первых 20 чисел Fibonacci
    • Запуск скрипта Python, который извлекает https://api.github.com и выводит заголовки ответа.

Очистите ресурсы

После завершения работы с этим руководством удалите созданные ресурсы, чтобы избежать возникновения расходов.

az group delete --resource-group $RESOURCE_GROUP