Настройка встроенной MCP службы приложений (предварительная версия)

Встроенная служба приложений MCP преобразует существующий REST API, размещенный на Служба приложений Azure, в >Медельный контекстный протокол (MCP) сервер без написания или развертывания кода MCP. Платформа считывает спецификацию OpenAPI, предоставляемую и генерирует средство MCP для каждой операции. Затем он предоставляет доступ к конечной точке MCP по потоковому HTTP по выбранному вами пути.

Important

Встроенная служба приложений MCP доступна в предварительной версии.

Когда следует использовать встроенный MCP

Используйте встроенный MCP, если:

  • У вас уже есть REST API, работающий в службе приложений, и вы хотите предоставить его клиенту ИИ, совместимого с MCP (GitHub Copilot Chat, Cursor, Windsurf, Claude Desktop), без изменений кода.
  • У вас есть спецификация OpenAPI 3.x (JSON или YAML), описывающая операции, которые необходимо предоставить.
  • Вы хотите, чтобы платформа обрабатывала согласование протокола MCP, обнаружение инструментов, горячую перезагрузку спецификации и отмену клиента.
  • Вы хотите, чтобы аутентификация App Service обеспечивала проверку удостоверения личности для запросов MCP точно так же, как для любых других маршрутов вашего приложения.

Используйте вместо этого пользовательский сервер MCP (созданный с помощью SDK MCP и развернутый как код вашего приложения) в следующих случаях:

  • Вам нужно поведение инструмента MCP, которое нельзя однозначно сопоставить с одной REST-операцией — например, многошаговые рабочие процессы, агрегация в памяти или инструменты, за которыми не стоит HTTP-эндпоинт.
  • Вы должны предоставлять ресурсы MCP или промпты в дополнение к инструментам.
  • На одном приложении необходимо разместить несколько серверов MCP.

Сравнение всех вариантов размещения MCP на Azure см. в разделе Выбор службы Azure для сервера MCP.

Необходимые условия

  • Приложение службы приложений на выделенной ценовой категории (базовый или более высокий). Встроенная поддержка MCP не поддерживается в планах Free, Shared, Consumption и Flex Consumption.
  • Спецификация OpenAPI 3.x (JSON или YAML), описывающая операции, которые необходимо предоставить в виде средств MCP. См. шаг 1. Укажите спецификацию OpenAPI для параметров создания.

Шаг 1. Предоставление спецификации OpenAPI

Для встроенного MCP требуется документ OpenAPI 3.x (JSON или YAML). Большинство веб-фреймворков могут создать его для вас:

  • ASP.NET Core минимальные API — используйте встроенный пакет Microsoft.AspNetCore.OpenApi (по умолчанию в .NET 9 и более поздних версий).
  • контроллеры ASP.NET Core— используйте Swashbuckle.
  • FastAPI — автогенерировано по /openapi.jsonадресу.
  • Express/NestJS — использование @nestjs/swagger или express-openapi.
  • Spring Boot — используйте springdoc-openapi.
  • Java/Quarkus — используйте SmallRye OpenAPI.

Если ваш API уже запущен и предоставляет конечную точку OpenAPI, вам не нужно добавлять новую библиотеку — скачайте спецификацию из этой конечной точки (например, с помощью curl) и сохраните её локально, чтобы затем загрузить её при включении встроенной поддержки MCP.

Минимальная спецификация, которая предоставляет одну операцию, выглядит следующим образом:

{
  "openapi": "3.0.3",
  "info": { "title": "Zava Orders", "version": "1.0.0" },
  "paths": {
    "/orders/{id}": {
      "get": {
        "operationId": "get_order",
        "summary": "Get an order by ID",
        "parameters": [
          { "name": "id", "in": "path", "required": true,
            "schema": { "type": "string" } }
        ],
        "responses": {
          "200": { "description": "OK" }
        }
      }
    }
  }
}

Используйте понятные, ориентированные на действие operationId значения (list_orders, create_order, cancel_order). Клиент ИИ использует их в качестве имен инструментов при выборе вызываемого средства. Дополнительные сведения о сопоставлении операций с инструментами MCP см. в статье "Как встроенные операции MCP сопоставляют операции REST с инструментами MCP?".

Сделать спецификацию доступной для платформы

Платформа считывает спецификацию из файла в файловой системе приложения. Путь по умолчанию — /home/data/.ai/apispec.json, его можно настроить с помощью ApiSpecPath. Способ получения файла зависит от пути конфигурации, используемого на шаге 2.

  • Портал— отправка JSON-файла или YAML при создании сервера MCP. Портал записывает содержимое в ApiSpecPath за вас.
  • Azure CLI — разверните спецификацию вместе с приложением (например, включите ее в артефакт развертывания) или загрузите ее позже с помощью az webapp deploy или az webapp ssh.
  • Bicep — указывает путь, в который при развертывании помещается приложение.

Шаг 2. Включение встроенного MCP

Встроенный MCP настраивается с помощью свойства aiIntegration в ресурсе Microsoft.Web/sites. Предварительная версия поддерживает портал, Azure CLI (с помощью az rest) и Bicep в качестве поддерживаемых способов настройки.

В следующих примерах показана минимальная полезная нагрузка, необходимая, чтобы сделать доступной каждую операцию в вашей спецификации. Чтобы отфильтровать операции, настроить аутентификацию без Аутентификации App Service или изменить расположение спецификации, см. Настройка встроенного MCP.

  1. На портале Azure перейдите к приложению службы приложений.

  2. В меню слева в разделе "Параметры" выберите ИИ (предварительная версия).

  3. Выберите вкладку MCP servers.

  4. Выберите и создайте сервер MCP, а затем заполните:

    • Отображаемое имя — идентификатор сервера, отображаемый клиентам.

    • Путь к конечной точке — относительный URL-адрес, по которому обслуживается сервер MCP (по умолчанию /mcp). Полный предварительный просмотр URL-адреса появляется под полем.

    • Описание — необязательное, отображаемое клиентам MCP.

    • Путь спецификации API — путь к файловой системе приложения, в которой хранится файл спецификации. По умолчанию используется /home/data/.ai/apispec.json; измените это, если хотите, чтобы спецификация сохранялась в другом месте.

    • Спецификация OpenAPI › файл JSON или YAML — выберите Обзор и загрузите файл OpenAPI в формате JSON или YAML. Портал записывает содержимое в место, которое вы указали в пути к спецификации API. Файлы размером более 15 КБ могут быть усечены, если доступ к сайту Kudu не включен в приложении.

    • Проверка подлинности — необязательно. Если проверка подлинности службы приложений не включена в приложении, используйте этот раздел для предоставления метаданных поставщика удостоверений, чтобы клиенты MCP могли завершить OAuth. Портал предоставляет три поля:

      • Источник — разделенный запятыми список областей действия OAuth, которые должен запрашивать клиент MCP (соответствует SiteAuth.Scopes).
      • Стандартный URL-адрес конфигурации OpenID — URL-адрес обнаружения OpenID Connect для вашего поставщика удостоверений (соответствует SiteAuth.WellKnownOpenIdConfiguration).
      • Издатель — URL-адрес издателя токена (сопоставляется с SiteAuth.Issuer).

      Укажите источник и известный URL-адрес конфигурации OpenID или издатель. Чтобы задать JwksUri или Audience, используйте вместо этого вкладку Azure CLI или Bicep. Дополнительные сведения см. в разделе "Настройка проверки подлинности без проверки подлинности службы приложений".

  5. Выберите "Создать MCP".

    Снимок экрана раздела AI (предварительная версия) на портале Azure, показывающий вкладку «Серверы MCP» с открытой панелью «Добавление сервера MCP».

    После сохранения на вкладке СЕРВЕРОВ MCP отображается настроенный сервер со своей конечной точкой, счетчиком инструментов и переключателем включения или отключения. Вы также можете включить или отключить отдельные средства.

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

Шаг 3. Подключение клиента MCP

После сохранения конфигурации конечная точка MCP доступна по адресу:

https://<app-name>.azurewebsites.net/<endpoint path you provided>

Настройте клиент MCP с помощью этого URL-адреса. Например, в GitHub Copilot Chat в Visual Studio Code добавьте его в .vscode/mcp.json:

{
  "servers": {
    "my-mcp-server": {
      "type": "http",
      "url": "https://<app-name>.azurewebsites.net/<endpoint path you provided>"
    }
  }
}

Когда клиент подключается, он вызывает initialize, затем tools/list, чтобы определить, какие операции предоставляет ваша спецификация OpenAPI, а затем tools/call для каждого вызова.

Authentication

Встроенный MCP не выдает токены и не реализует сервер авторизации. App Service Authentication обеспечивает проверку удостоверения в рамках того же приложения и работает с любым поставщиком удостоверений, который поддерживается App Service Authentication (Microsoft Entra и любым другим настроенным поставщиком OpenID Connect (OIDC)). Поддерживаются две конфигурации:

  • Проверка подлинности службы приложений включена (рекомендуется). Запросы MCP проходят те же проверки удостоверений, что и любой другой маршрут, и платформа публикует защищенные метаданные ресурсов , /.well-known/oauth-protected-resource чтобы клиенты MCP могли автоматически завершить OAuth. Требуемые дальнейшие действия: выполните действия, описанные в разделе Настройка встроенной авторизации сервера MCP, чтобы зарегистрировать аудиторию и области MCP у поставщика удостоверений.
  • Проверка подлинности службы приложений не включена. Укажите метаданные поставщика удостоверений в блоке SiteAuthaiIntegration. Этот параметр подходит для случаев, когда вы уже проверяете маркеры в коде приложения и не хотите, чтобы проверка подлинности службы приложений обрабатывала поток OAuth от имени приложения. См . статью "Настройка проверки подлинности без проверки подлинности службы приложений".

В обоих случаях код вашего приложения по-прежнему отвечает за проверку токена Bearer при каждом запросе. Встроенный MCP не обеспечивает авторизацию для базовых HTTP-маршрутов.

Предостережение

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

Настройка встроенного MCP

Минимальный набор данных в Шаге 2 использует все значения по умолчанию. Добавьте только нужные поля. Каждый фрагмент показывает поле, добавленное к минимальной полезной нагрузке.

Изменение расположения спецификации

По умолчанию платформа считывает спецификацию из /home/data/.ai/apispec.json. Установите ApiSpecPath для чтения его из другого места:

"aiIntegration": {
  "ApiSpecPath": "/home/site/wwwroot/openapi/orders.yaml",
  "Mcp": { "Servers": [ { "Name": "orders", "Endpoint": "/mcp/orders" } ] }
}

Отфильтруйте, какие операции доступны

ToolList на каждом сервере определяет, какие операции OpenAPI предоставляет сервер MCP. Значение по умолчанию — ["*"] (каждая операция в спецификации).

  • ["*"]— предоставляет доступ ко всем операциям в спецификации.
  • []— не предоставляет никаких операций. Полезно для временного отключения обнаружения инструментов без удаления сервера.
  • ["get_order", "list_orders"]— предоставляют только перечисленные operationId значения.
"Mcp": {
  "Servers": [
    {
      "Name": "orders",
      "Endpoint": "/mcp/orders",
      "ToolList": ["get_order", "list_orders"]
    }
  ]
}

Используйте этот фильтр, чтобы скрыть потенциально опасные или доступные только администраторам операции из интерфейса MCP, сохранив к ним доступ для ваших существующих HTTP-клиентов.

ToolList взаимодействует с обновлениями спецификаций следующим образом:

  • ToolList = ["*"]— при обновлении спецификации новые операции автоматически становятся доступными.
  • ToolList = ["op1", "op2"]— при обновлении спецификации доступны только op1 и op2. Новые операции в спецификации игнорируются, пока не добавите их в ToolList.
  • Идентификаторы операций, которые не существуют в ToolList спецификации, автоматически удаляются.

Если требуется только фильтрация на основе спецификаций (без списка разрешений на стороне ARM), сохраните ToolList = ["*"] и удалите операции из самой спецификации.

Отключение сервера без его удаления

Установите Enabled в значение false, чтобы перевести конечную точку MCP в автономный режим, не удаляя конфигурацию:

"Mcp": {
  "Servers": [
    { "Name": "orders", "Endpoint": "/mcp/orders", "Enabled": false }
  ]
}

Настройка аутентификации без аутентификации в службе приложений

Если аутентификация App Service не включена для приложения, добавьте блок SiteAuth, чтобы платформа могла публиковать метаданные защищённого ресурса по адресу /.well-known/oauth-protected-resource. Клиенты MCP (например, VS Code) используют заголовок WWW-Authenticate, возвращённый при первом запросе, чтобы обнаружить сервер авторизации и завершить поток OAuth.

"aiIntegration": {
  "Mcp": { "Servers": [ { "Name": "orders", "Endpoint": "/mcp/orders" } ] },
  "SiteAuth": {
    "Scopes": ["api://my-app/user_impersonation"],
    "WellKnownOpenIdConfiguration": "https://login.microsoftonline.com/{tenant}/v2.0/.well-known/openid-configuration",
    "Audience": "api://my-app-client-id"
  }
}

Обязательные поля: Scopesплюс WellKnownOpenIdConfiguration или Issuer. JwksUri и Audience являются необязательными. См. Справочник: схема aiIntegration для полного списка полей.

Код вашего приложения по-прежнему отвечает за проверку токена Bearer при каждом запросе.

Регистрация сервера MCP в Центре API Azure

Вы можете зарегистрировать свой встроенный сервер MCP как ресурс в Azure API Center, чтобы отслеживать все свои API в одном централизованном месте для их обнаружения, повторного использования и управления ими. Регистрация необязательна— встроенная MCP работает без нее, но рекомендуется сохранить серверы MCP видимыми вместе с остальной частью вашего пространства API.

Портал создает процесс регистрации одного выбора:

  1. На вкладке Серверы MCP раскройте свой сервер.

  2. Рядом с Azure API Center выберите + Подключить.

    Снимок экрана сведений о сервере MCP с кнопкой Azure API Center Connect.

  3. На панели Connect API Center выберите Подписка и существующий API Center или выберите Создать новый, чтобы создать новый. Служба приложений заполняет значения по умолчанию (тип, этап жизненного цикла, среда, развертывание) от вашего имени, чтобы их не нужно настраивать вручную.

  4. Нажмите Подключиться. Теперь сведения о сервере содержат ссылку на ресурс в Центре API.

Чтобы изменить метаданные ресурса (тип, этап жизненного цикла, версия, настраиваемые свойства, определения, развертывания), измените ресурс непосредственно в Центре API. Чтобы зарегистрировать сервер MCP в Центре API, не используя App Service, или зарегистрировать сервер, который не был создан встроенным MCP в App Service, см. статью Регистрация и обнаружение удалённых серверов MCP в инвентаре API.

Чтобы отключить сервер MCP из Центра API, удалите соответствующий ресурс сервера MCP в Центре API. Ссылка на вкладке службы App Service MCP servers исчезает после удаления ресурса.

Troubleshooting

Клиент MCP получает 404 в настроенной конечной точке.

  • Убедитесь, что значение Endpoint начинается с / и не конфликтует с существующим маршрутом в вашем приложении.
  • Убедитесь, что поле сервера Enabled имеет значение true.

Клиент MCP подключается, но tools/list возвращает пустой массив.

  • Убедитесь, что спецификация настроена: либо загружена через портал, либо доступна по пути, указанному в ApiSpecPath.
  • Убедитесь, что для ToolList не задано значение [].
  • Проверьте спецификацию с помощью линтера OpenAPI 3.x — операции, в которых отсутствуют обязательные поля (например, схема ответа), пропускаются.

Клиент MCP получает 401 с WWW-Authenticate проблемой.

  • Эта ошибка является ожидаемой, если включена аутентификация App Service и у клиента нет допустимого токена. Запрос проверки подлинности направляет клиента к конечной точке метаданных защищённого ресурса, которая, в свою очередь, указывает на вашего поставщика удостоверяющих данных. См . раздел "Настройка встроенной авторизации сервера MCP".

Клиент MCP получает ошибку 403 при вызове инструмента, но tools/list выполняется успешно.

  • Токен OAuth действителен для обнаружения MCP, но у него нет области действия или роли, которые требуются вашему приложению для соответствующего HTTP-маршрута. Проверьте HTTP-статус вышестоящего сервера, отображаемый в CallToolResult.

Часто задаваемые вопросы

Как встроенные операции MCP сопоставляют операции REST с инструментами MCP?

Каждая операция OpenAPI становится одним средством MCP:

  • Имя средства— производное от операции operationId. Если operationId отсутствует, платформа возвращается обратно {method}_{path} (например, get__orders__id_). Используйте явные, ориентированные operationId на действия значения, чтобы дать клиенту ИИ более четкие имена инструментов.

  • Описание инструмента — сначала операции summary, затем description, если summary отсутствует.

  • Аннотации инструментов — встроенный MCP сопоставляет HTTP-метод с аннотациями инструментов:

    Метод HTTP readOnlyHint idempotentHint destructiveHint
    GET, HEAD true true false
    PUT, PATCH false true false
    DELETE false true true
    POST false false false

Как платформа обрабатывает обновления спецификаций?

Когда спецификация в ApiSpecPath изменяется — либо потому, что вы повторно развернули файл, либо потому, что вы загрузили новую версию через портал, — платформа:

  1. Обнаруживает изменение.
  2. Повторно разбирает спецификацию и пересчитывает список инструментов.
  3. Хэширует новый список инструментов (SHA-256) и сравнивает его с предыдущим хэшом.
  4. Если хэш изменился, отправляет notifications/tools/list_changed событие каждому подключенного клиента MCP.

Вам не нужно перезапустить приложение или обновить aiIntegration конфигурацию для получения изменений спецификаций. О том, как ToolList взаимодействует с обновлениями спецификации, см. в разделе Фильтрация отображаемых операций.

Для чего служит платформа /.well-known/oauth-protected-resource?

Платформа публикует защищенные метаданные ресурсов (PRM), чтобы клиенты MCP могли узнать, где получить маркер доступа. Содержимое исходит от:

Если ни один из них не настроен, платформа не публикует конечную точку, и клиентам не предлагается пройти аутентификацию OAuth.

Каковы ограничения?

Ограничение Ценность
Серверы MCP для каждого приложения 1 (предварительная версия)
Длина описания 256 символов
Длина имени инструмента 1–128 символов (на спецификацию MCP)
Поддерживаемый транспорт HTTP со способностью потоковой передачи

Справочник: схема aiIntegration

Поле Тип Description
ApiSpecPath string Абсолютный путь к файловой системе приложения, в которой находится спецификация OpenAPI. По умолчанию — /home/data/.ai/apispec.json.
Mcp.Servers[] массив (максимум одна запись в предварительной версии) Серверы MCP, определенные в приложении.
Mcp.Servers[].Name string Идентификатор сервера. Должен быть уникальным в приложении.
Mcp.Servers[].Description string Краткое описание (256 символов или меньше).
Mcp.Servers[].Enabled bool Если false, сервер не зарегистрирован. По умолчанию — true.
Mcp.Servers[].Endpoint string Относительный URL-адрес, в котором обслуживается конечная точка MCP.
Mcp.Servers[].ToolList массив строк ["*"] предоставляет доступ ко всем операциям, указанным в спецификации, [] не предоставляет ни одной, или перечислите конкретные имена инструментов для фильтрации.
SiteAuth object Optional. Метаданные поставщика удостоверений, используемые для публикации метаданных защищённого ресурса, если проверка подлинности в App Service не включена. См . статью "Настройка проверки подлинности без проверки подлинности службы приложений".
SiteAuth.Scopes массив строк Required. Области действия OAuth, которые клиент MCP должен запрашивать, — например, ["api://my-app/user_impersonation"].
SiteAuth.WellKnownOpenIdConfiguration string (URL-адрес) Обязательный параметр, если Issuer он не задан. URL-адрес документа обнаружения OpenID Connect, например https://login.microsoftonline.com/{tenant}/v2.0/.well-known/openid-configuration.
SiteAuth.Issuer string Обязательный параметр, если WellKnownOpenIdConfiguration он не задан. URL-адрес издателя токенов, например https://login.microsoftonline.com/{tenant}/v2.0.
SiteAuth.JwksUri string (URL-адрес) Optional. Конечная точка JWKS для проверки подписи токена.
SiteAuth.Audience string Optional. Ожидаемое значение aud утверждения — например, api://my-app-client-id.

Дальнейшие действия