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


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

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

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

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

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

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

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

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

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

При развертывании сервера на основе пакета SDK MCP для Azure Functions необходимо включить в проект 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 Functions:

  • 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-запроса.

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

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

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

Дополнительные сведения см. в разделе Настройка встроенной авторизации сервера (предварительная версия) и Hosting MCP-серверов на Azure Functions.

Интеграция агента Microsoft Foundry

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

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

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

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

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

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

Samples

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

Azure Functions пользовательские обработчики