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


Локальный удаленный сервер MCP в Функциях Azure (общедоступная предварительная версия)

Функции Azure предоставляют два способа размещения удаленных серверов MCP:

  • Серверы MCP, созданные с расширением Functions MCP
  • Серверы MCP, созданные с использованием официальных SDK для MCP

При первом подходе можно использовать модель программирования Функций Azure с триггерами и привязками для создания сервера MCP. Затем вы можете удаленно разместить сервер, разместив его в приложении типа Function.

Если у вас уже есть сервер MCP, созданный с помощью официальных пакетов SDK MCP и просто хотите разместить его удаленно, второй подход, скорее всего, соответствует вашим потребностям. Вам не нужно вносить изменения кода на сервер, чтобы разместить его в Функциях Azure. Вместо этого можно добавить необходимые функциональные артефакты, а сервер будет готов к развертыванию. Таким образом, эти серверы называются локальными серверами MCP.

Схема размещения функционального приложения и приложений с пользовательским обработчиком.

В этой статье представлен обзор локальных серверов MCP и ссылки на соответствующие статьи и примеры.

Пользовательские обработчики

Локальные серверы MCP развертываются на платформе Функций Azure в качестве пользовательских обработчиков. Пользовательские обработчики — это упрощенные веб-серверы, получающие события от узла функций. Они предоставляют способ запуска на платформе Functions приложений, созданных с использованием фреймворков, отличных от модели программирования Functions, или на языках, не поддерживаемых по умолчанию. Дополнительные сведения см. в статье Пользовательские обработчики Функций Azure.

При развертывании сервера на основе пакета SDK MCP в Функции Azure необходимо включить в проект host.json . Минимальный host.json выглядит следующим образом:

{
   "version": "2.0",
    "configurationProfile": "mcp-custom-handler",
    "customHandler": {
        "description": {
            "defaultExecutablePath": "python",
            "arguments": ["Path to main script file, e.g. hello_world.py"] 
        },
        "port": "<MCP server port>"
    }
}
{
   "version": "2.0",
    "configurationProfile": "mcp-custom-handler",
    "customHandler": {
        "description": {
            "defaultExecutablePath": "npm",
            "arguments": ["run", "start"] 
        },
        "port": "<MCP server port>"
    }
}
{
   "version": "2.0",
    "configurationProfile": "mcp-custom-handler",
    "customHandler": {
        "description": {
            "defaultExecutablePath": "dotnet",
            "arguments": ["Path to the compiled DLL, e.g. HelloWorld.dll"] 
        },
        "port": "<MCP server port>"
    }
}

Замечание

Так как полезная нагрузка, размещенная в Azure Functions, — это содержимое каталога bin/output, путь к скомпилированной библиотеке DLL отсчитывается относительно этого каталога, а не от корневого каталога проекта.

Пример еще недоступен.

configuration Profile При использовании значения mcp-custom-handler автоматически настраиваются следующие параметры узла функций, необходимые для запуска сервера MCP в Функциях Azure:

  • http.enableProxying до true
  • http.routes до [{ "route": "{*route}" }]
  • extensions.http.routePrefix до ""

В этом примере показан файл host.json с дополнительными свойствами настраиваемых обработчиков, эквивалентными использованию mcp-custom-handler профиля:

{
    "version": "2.0",
    "extensions": {
        "http": {
            "routePrefix": ""
        }
    },
    "customHandler": {
        "description": {
            "defaultExecutablePath": "",
            "arguments": [""]
        },
        "http": {
            "enableProxying": true, 
            "defaultAuthorizationLevel": "anonymous", 
            "routes": [ 
                {
                    "route": "{*route}",
                    // Default authorization level is `defaultAuthorizationLevel`
                },
                {
                    "route": "admin/{*route}",
                    "authorizationLevel": "admin"
                }
            ]
        }
    }
}

В этой таблице описываются свойства customHandler.http, а также значения по умолчанию:

Недвижимость Что он делает Значение по умолчанию
enableProxying Управляет тем, как среда выполнения Azure Functions обрабатывает HTTP-запросы к пользовательским обработчикам. Если enableProxying задано значение true, хост функций работает в качестве обратного прокси и пересылает весь HTTP-запрос (включая заголовки, тело, параметры запроса) непосредственно в пользовательский обработчик. Этот параметр предоставляет пользовательскому обработчику полный доступ к исходным сведениям HTTP-запроса.

Когда enableProxying это false, то хост функций сначала обрабатывает запрос и преобразует его в формат запроса/ответа функций Azure перед передачей в пользовательский обработчик.
false
defaultAuthorizationLevel Управляет требованием проверки подлинности для доступа к конечным точкам пользовательского обработчика. Например, function для доступа требуется ключ API для конкретной функции. Дополнительные сведения см. в разделе "Уровни авторизации". function
route Указывает шаблон URL-пути, на который отвечает индивидуальный обработчик. {*route} соответствует любому URL-пути (например, /, /mcp, /api/tools или /anything/nested/path) и перенаправляет запрос в пользовательский обработчик. {*route}

Встроенная проверка подлинности сервера

Проверка подлинности и авторизация на основе OAuth, предоставляемые платформой службы приложений, реализует требования спецификации авторизации MCP, такие как выдача 401 запроса и предоставление документа "Защищенные метаданные ресурсов" (PRM). При включении встроенной проверки подлинности клиенты, пытающиеся получить доступ к серверу, перенаправляются поставщикам удостоверений, таким как Идентификатор Microsoft Entra для проверки подлинности перед подключением.

Дополнительные сведения см. в статье "Настройка встроенной авторизации сервера (предварительная версия) и размещение серверов MCP в Функциях Azure.

Интеграции агентов Azure AI Foundry

Агенты в Azure AI Foundry можно настроить для использования средств на серверах MCP, размещенных в Функциях Azure.

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

При регистрации сервера MCP в Центре API Azure создается частный каталог средств организации. Этот подход рекомендуется для совместного использования серверов MCP в вашей организации с единообразным управлением и обнаруживаемостью. Дополнительные сведения см. в статье Регистрация серверов MCP, размещенных в Функциях Azure в Центре API Azure.

Поддержка общедоступной предварительной версии

Возможность размещения собственных серверов MCP на основе пакета SDK в Функциях в настоящее время доступна в предварительной версии и поддерживает следующие функции:

  • Серверы стейтлесс, использующие транспорт streamable-http. Если вам нужно, чтобы сервер был с отслеживанием состояния, рассмотрите возможность использования расширения Functions MCP.
  • Серверы, реализованные с помощью пакетов SDK для Python, TypeScript, C# или Java MCP.
  • При локальном запуске проекта необходимо использовать команду Azure Functions Core Tools (func start command). В настоящее время нельзя использовать F5 для запуска с отладчиком.
  • Серверы должны размещаться как приложения плана Flex Consumption.

Samples

Пока недоступно.

Пользовательские обработчики функций Azure