Compartir vía


Servidor MCP remoto autohospedado en Azure Functions (versión preliminar pública)

Azure Functions proporciona dos maneras de hospedar servidores MCP remotos:

Con el primer enfoque, puede usar el modelo de programación de Azure Functions con desencadenadores y enlaces para compilar el servidor MCP. A continuación, puede hospedar el servidor de forma remota mediante la implementación en una aplicación de funciones.

Si ya tiene un servidor MCP creado con los SDK de MCP oficiales y solo desea hospedarlo de forma remota, es probable que el segundo enfoque se adapte a sus necesidades. No es necesario realizar ningún cambio de código en el servidor para hospedarlo en Azure Functions. En su lugar, puede agregar los artefactos de Functions necesarios y el servidor está listo para implementarse. Por lo tanto, estos servidores se conocen como servidores MCP autohospedados.

Diagrama que muestra el hospedaje de aplicaciones de funciones y aplicaciones de controlador personalizadas.

En este artículo se proporciona información general sobre los servidores MCP autohospedados y vínculos a artículos y ejemplos pertinentes.

Controladores personalizados

Los servidores MCP autohospedados se implementan en la plataforma de Azure Functions como controladores personalizados. Los controladores personalizados son servidores web ligeros que reciben eventos del host de Functions. Proporcionan una manera de ejecutarse en las aplicaciones de plataforma de Functions creadas con marcos diferentes del modelo de programación de Functions o en lenguajes que no se admiten de forma predeterminada. Para más información, consulte Controladores personalizados de Azure Functions.

Al implementar un servidor basado en el SDK de MCP en Azure Functions, debe incluir un host.json en el proyecto. El host.json mínimo tiene este aspecto:

{
   "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>"
    }
}

Nota:

Dado que la carga implementada en Azure Functions es el contenido del bin/output directorio, la ruta de acceso al archivo DLL compilado es relativa a ese directorio, no a la raíz del proyecto.

Ejemplo aún no disponible.

El establecimiento del valor configuration Profile de mcp-custom-handler configura automáticamente estas configuraciones del host en Azure Functions, que son necesarias para ejecutar su servidor MCP:

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

En este ejemplo se muestra un archivo host.json con propiedades de controlador personalizadas adicionales establecidas equivalentes al uso del mcp-custom-handler perfil:

{
    "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"
                }
            ]
        }
    }
}

En esta tabla se explican las propiedades de customHandler.http, junto con los valores predeterminados:

Propiedad Qué hace Valor predeterminado
enableProxying Controla cómo el host de Azure Functions controla las solicitudes HTTP a los controladores personalizados. Cuando enableProxying se establece en true, el host de Functions funciona como proxy inverso y reenvía la solicitud HTTP completa (incluidos encabezados, cuerpo, parámetros de interrogación) directamente al controlador personalizado. Esta configuración proporciona al controlador personalizado acceso completo a los detalles de la solicitud HTTP original.

Cuando enableProxying es false, el host de Functions procesa primero la solicitud y la transforma en el formato de solicitud y respuesta de Azure Functions antes de pasarla al controlador personalizado.
false
defaultAuthorizationLevel Controla el requisito de autenticación para acceder a los puntos de conexión de controlador personalizados. Por ejemplo, function requiere una clave de API específica de función para acceder. Para obtener más información, consulte Niveles de autorización. function
route Especifica el patrón de ruta URL al que responde el controlador personalizado. {*route} coincide con cualquier ruta de acceso url (como /, /mcp, /api/toolso /anything/nested/path) y reenvía la solicitud al controlador personalizado. {*route}

Autenticación de servidor integrada

La autenticación y autorización basadas en OAuth proporcionadas por la plataforma de App Service implementa los requisitos de la especificación de autorización de MCP, como la emisión del desafío 401 y la exposición del documento de metadatos de recursos protegidos (PRM). Al habilitar la autenticación integrada, los clientes que intentan acceder al servidor se redirigen a proveedores de identidades como Microsoft Entra ID para la autenticación antes de conectarse.

Para más información, consulte Configuración de la autorización de servidor integrada (versión preliminar) y Hospedaje de servidores MCP en Azure Functions.

Integraciones del agente de Azure AI Foundry

Los agentes de Azure AI Foundry se pueden configurar para usar herramientas en servidores MCP hospedados en Azure Functions.

Registro del servidor en el Centro de API de Azure

Al registrar el servidor MCP en el Centro de API de Azure, se crea un catálogo de herramientas de la organización privada. Este enfoque se recomienda para compartir servidores MCP en toda la organización con gobernanza y detectabilidad coherentes. Para más información, consulte Registro de servidores MCP hospedados en Azure Functions en el Centro de API de Azure.

Compatibilidad con la versión preliminar pública

La capacidad de hospedar sus propios servidores MCP basados en EL SDK en Functions está actualmente en versión preliminar y admite estas características:

  • Servidores sin estado que utilizan el transporte streamable-http. Si necesita que el servidor tenga estado, considere la posibilidad de usar la extensión MCP de Functions.
  • Servidores implementados con los SDK de MCP de Python, TypeScript, C#o Java.
  • Al ejecutar el proyecto localmente, debe usar Azure Functions Core Tools (func start comando). Actualmente no se puede usar F5 para iniciar la ejecución con el depurador.
  • Los servidores deben hospedarse como aplicaciones de plan de consumo flexible .

Samples

No disponible todavía.

Controladores personalizados de Azure Functions