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


Размещение серверов MCP в приложениях контейнеров Azure

Протокол контекста модели (MCP) — это открытый стандарт, который подключает приложения ИИ к внешним источникам данных и средствам. С помощью MCP клиенты ИИ, такие как GitHub Copilot, могут обнаруживать и вызывать возможности, которые вы предоставляете, превращая API, базы данных и бизнес-логику в средства, которые агент ИИ может использовать с помощью естественного языка.

Приложения контейнеров Azure поддерживают две модели размещения для серверов MCP:

Модель размещения Description
Автономное контейнерное приложение Разверните любой создаваемый вами сервер MCP в виде контейнера с входом через HTTP.
Динамические сеансы Используйте пулы сеансов, управляемые платформой, с встроенными средствами MCP для изолированного выполнения кода.

Что такое протокол контекста модели (MCP)?

Сервер MCP предоставляет три типа возможностей клиентам:

Capability Description Пример
Инструменты Функции, которые модель ИИ может вызывать (с разрешением пользователя) createTask, listTasks, deleteTask
Ресурсы Данные только для чтения, которые клиент может получить Файлы конфигурации, схемы базы данных
запросы Предзаписанные шаблоны для распространенных задач Суммировать все открытые задачи

Клиенты взаимодействуют с серверами MCP по протоколу HTTP с помощью потокового транспорта HTTP. Клиент отправляет запросы JSON-RPC версии 2.0. Сервер отвечает результатами работы инструмента, содержимым ресурсов или шаблонами подсказок.

Поток запросов следует этому шаблону:

  1. Клиент MCP (GitHub Copilot, Claude или пользовательский клиент) отправляет HTTPS-запрос, содержащий сообщение JSON-RPC 2.0 на сервер.

  2. Сервер MCP (приложение контейнера) обрабатывает запрос и вызывает все необходимые серверные службы, например базу данных или API.

  3. Сервер возвращает ответ JSON-RPC 2.0 с результатами инструментов, содержимым ресурсов или шаблонами запросов.

Независимое контейнерное приложение

Вы создаете сервер MCP с помощью официального пакета SDK MCP (доступно для .NET, Python, TypeScript, Java, Go, Kotlin и других), а затем контейнеризируйте и разверните его в приложениях контейнеров Azure.

В этой модели контейнерные приложения не имеют специфической осведомленности о MCP. Платформа предоставляет следующие возможности:

  • HTTPS-вход с автоматическим завершением TLS
  • Автоматическое масштабирование, включая масштабирование до нуля (для интерактивного использования MCP рекомендуется не менее одной реплики).
  • Политика CORS для разрешения кросс-доменных запросов от клиентов VS Code и веб-клиентов
  • Встроенная проверка подлинности с помощью идентификатора Microsoft Entra (необязательно)
  • Пользовательские домены, разделение трафика, Dapr, сеть между службами, управляемое удостоверение и все остальные стандартные функции контейнерных приложений

Поток запросов

При развертывании сервера MCP в качестве автономного приложения контейнера клиентские запросы передаются через входящий трафик приложений-контейнеров в контейнер, где конечная точка MCP обрабатывает сообщение JSON-RPC и возвращает результаты.

  1. Клиент MCP отправляет HTTPS-запрос к полному доменному имени (FQDN) приложения контейнера.
  2. Входящий трафик в Container Apps выполняет завершение TLS и перенаправляет запрос в ваш контейнер на указанный порт назначения (например, 8080).
  3. Веб-платформа (ASP.NET, FastAPI, Express, Spring Boot) направляет запрос к конечной точке MCP (обычно /mcp).
  4. Сервер MCP обрабатывает запрос, вызывает все внутренние службы и возвращает ответ JSON-RPC 2.0.

Когда следует использовать

Используйте автономное приложение контейнера, если вы хотите создавать пользовательские средства MCP на любом языке, интегрироваться с внутренними службами и использовать стандартные функции контейнерных приложений.

  • Требуется полный контроль над определениями инструментов, бизнес-логикой и промежуточным слоем.
  • Сервер MCP написан на любом языке с помощью пакета SDK ДЛЯ MCP.
  • Необходимо подключиться к серверным базам данных, API или службам Azure.
  • Вы хотите использовать такие функции контейнерных приложений, как Dapr, сеть между службами или управляемое удостоверение.

Динамические сеансы (управляемые платформой MCP)

Динамические сеансы приложений контейнеров Azure предоставляют изолированные среды для выполнения кода в изоляции. При включении MCP в пуле сеансов платформа предоставляет конечную точку JSON-RPC, которую клиенты могут использовать для запуска оболочки или сред Python и удаленного выполнения команд.

В этой модели платформа управляет сервером MCP. Вы не записываете или развертываете код сервера MCP. Платформа предоставляет следующие предопределенные средства:

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

Замечание

Сервер MCP, управляемый платформой, предоставляет все три средства независимо от пула сеансов containerType. Используйте launchShell для создания среды как для оболочных, так и для Python-пулов.

Поток запросов

При развертывании сервера MCP с помощью динамических сеансов платформа управляет сервером и предоставляет конечную точку JSON-RPC, которую клиенты используют для выполнения оболочки или кода Python в изолированных средах.

  1. Клиент MCP отправляет HTTPS-запрос в конечную точку пула /mcp сеансов с заголовком x-ms-apikey для проверки подлинности.
  2. Обратный прокси-сервер платформы проверяет ключ API и направляет запрос на соответствующий Hyper-V изолированный сеанс.
  3. Сеанс выполняет запрошенную команду оболочки или код Python в песочнице.
  4. Платформа возвращает ответ JSON-RPC 2.0, содержащий результаты выполнения.

Когда следует использовать

  • Требуется изолированное выполнение кода для ненадежного или созданного LLM кода.
  • Ваше использование — это скрипты Python или командной оболочки, а пользовательские средства не требуются.
  • Вы хотите Hyper-V изоляцию между сеансами для обеспечения безопасности.
  • Вы не хотите создавать или поддерживать серверное приложение MCP.

Authentication

Динамические сеансы MCP используют проверку подлинности ключа API через x-ms-apikey заголовок. Этот механизм отличается от аутентификации с использованием токенов носителя, применяемой API-интерфейсами стандартного пула сеансов.

Получите ключ API с помощью Azure CLI:

az rest --method POST \
    --uri "https://management.azure.com/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP_NAME>/providers/Microsoft.App/sessionPools/<POOL_NAME>/fetchMCPServerCredentials" \
    --uri-parameters api-version=2025-02-02-preview \
    --query "apiKey" -o tsv

Сведения о протоколе

Сервер MCP, управляемый платформой для динамических сеансов, реализует следующие спецификации протокола:

Недвижимость Ценность
Версия протокола MCP 2025-03-26
Имя сервера Microsoft Container Apps MCP Server
Транспорт JSON-RPC 2.0 по протоколу HTTP
Версия API 2025-02-02-preview
Поддерживаемые методы initialize, tools/list, tools/call

Это важно

Функция MCP под управлением платформы для динамических сеансов доступна в предварительной версии. Версия 2025-02-02-preview API и mcpServerSettings свойства Azure Resource Manager (ARM) могут изменяться.

Вход в сеть и сетевые соединения

Поле "Входящий трафик приложений контейнеров" transport поддерживает auto, http, http2 и tcp. Потоковый HTTP-транспорт MCP выполняется внутри вашего контейнера по стандартному HTTP, поэтому установите transport в auto или http (по умолчанию). Нет специального значения транспорта MCP.

Необходимо настроить политику CORS , если клиенты VS Code или браузеры обращаются к серверу MCP. Как минимум, разрешайте источники, методы и заголовки, необходимые клиенту MCP.

Сравнение параметров размещения

В следующей таблице сравниваются две модели размещения.

Рассмотрение Независимое контейнерное приложение Динамические сеансы (управляемые MCP)
Пользовательские инструменты Да, определите все необходимые инструменты Нет, только инструменты, определяемые платформой
Languages Любой язык с пакетом SDK MCP Выполнение только для Python и командной строки
Транспорт MCP Потоковая передача HTTP (внутри контейнера) JSON-RPC по протоколу HTTP (управляемый платформой)
Authentication Встроенная аутентификация (Microsoft Entra ID) Ключ API (x-ms-apikey)
Изоляция Уровень контейнера Hyper-V на сеанс
Масштабирование Автомасштабирование на основе изменений Для каждого сеанса, управляемого с использованием пула
Сценарий использования Серверы MCP общего назначения Изолированное выполнение кода

Более широкое сравнение, включающее службу приложений и функции Azure, см. в статье "Выбор службы Azure для сервера MCP".

Следующий шаг