Servidor MCP remoto auto-hospedado em Azure Functions (versão prévia pública)

Azure Functions fornece duas maneiras de hospedar servidores MCP remotos:

Com a primeira abordagem, você pode usar o modelo de programação Azure Functions com gatilhos e associações para criar o servidor MCP. Em seguida, você pode hospedar o servidor remotamente implantando-o em um aplicativo de funções.

Se você já tiver um servidor MCP criado com os SDKs oficiais do MCP e apenas quiser hospedá-lo remotamente, a segunda abordagem provavelmente atenderá às suas necessidades. Você não precisa fazer alterações de código no servidor para hospedá-lo no Azure Functions. Em vez disso, você pode adicionar os artefatos necessários do Functions, e o servidor estará pronto para ser implantado. Dessa forma, esses servidores são chamados de servidores MCP auto-hospedados.

Diagrama mostrando a hospedagem de aplicativos de funções e aplicativos de manipulador personalizados.

Este artigo fornece uma visão geral dos servidores MCP auto-hospedados e links para artigos e exemplos relevantes.

Manipuladores personalizados

Os servidores MCP auto-hospedados são implantados na plataforma Azure Functions como manipuladores personalizados. Os manipuladores personalizados são servidores Web leves que recebem eventos do host do Functions. Eles fornecem uma maneira de executar na plataforma Functions aplicações criadas com frameworks diferentes do modelo de programação Functions ou em linguagens não suportadas de forma nativa. Para obter mais informações, consulte Azure Functions manipuladores personalizados.

Ao implantar um servidor baseado em SDK do MCP para Azure Functions, você deve incluir um host.json em seu projeto. A host.json mínima tem esta aparência:

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

Observação

Como a carga útil implantada no Azure Functions é o conteúdo do diretório bin/output, o caminho para a DLL compilada é relativo a esse diretório, não à raiz do projeto.

Exemplo ainda não disponível.

Usar um valor configuration Profile de mcp-custom-handler define automaticamente essas configurações de host do Functions, que são necessárias para executar o servidor MCP no Azure Functions:

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

Este exemplo mostra um arquivo host.json com propriedades personalizadas adicionais de manipulador configuradas para serem equivalentes ao perfil de uso do 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"
                }
            ]
        }
    }
}

Esta tabela explica as propriedades de customHandler.http, juntamente com os valores padrão:

Propriedade O que faz Valor padrão
enableProxying Controla como o host Azure Functions manipula solicitações HTTP para manipuladores personalizados. Quando enableProxying definido como true, o host do Functions atua como um proxy reverso e encaminha toda a solicitação HTTP (incluindo cabeçalhos, corpo, parâmetros de consulta) diretamente para o manipulador personalizado. Essa configuração fornece ao manipulador personalizado acesso total aos detalhes da solicitação HTTP original.

Quando enableProxying é false, o host do Functions processa a solicitação primeiro e a transforma no formato Azure Functions solicitação/resposta antes de passá-la para o manipulador personalizado.
false
defaultAuthorizationLevel Controla a necessidade de autenticação para acessar endpoints personalizados do manipulador. Por exemplo, function requer uma chave de API específica à função para acessar. Para obter mais informações, consulte os níveis de autorização. function
route Especifica o padrão de caminho de URL ao qual o manipulador personalizado responde. {*route}corresponde a qualquer caminho de URL (como/, , /mcp/api/toolsou /anything/nested/path) e encaminha a solicitação para o manipulador personalizado. {*route}

Autenticação de servidor interno

A autenticação e a autorização baseadas em OAuth fornecidas pela plataforma do Serviço de Aplicativo implementam os requisitos da especificação de autorização do MCP, como emitir o desafio 401 e expor o documento PRM (Metadados de Recurso Protegido). Quando você habilita a autenticação interna, os clientes que tentam acessar o servidor são redirecionados para provedores de identidade, como Microsoft Entra ID para autenticação antes de se conectarem.

Para obter mais informações, consulte Autorização embutida do servidor (prévia) e Hospedagem de servidores MCP no Azure Functions.

Integrações de agente do Microsoft Foundry

Os agentes na Foundry podem ser configurados para usar ferramentas em servidores MCP hospedados em Azure Functions.

Registrar seu servidor no Centro de API do Azure

Ao registrar seu servidor MCP no Centro de API do Azure, você cria um catálogo de ferramentas organizacionais privadas. Essa abordagem é recomendada para compartilhar servidores MCP em sua organização com governança e descoberta consistentes. Para obter mais informações, consulte Registrar servidores MCP hospedados em Azure Functions no Centro de API do Azure.

Suporte à visualização pública

A capacidade de hospedar seus próprios servidores MCP baseados em SDK no Functions está atualmente em versão prévia e dá suporte a esses recursos:

  • Servidores sem estado que usam o transporte streamable-http. Se você precisar que seu servidor seja stateful, considere usar a extensão MCP do Functions.
  • Servidores implementados com os SDKs do MCP Python, TypeScript, C#ou Java.
  • Ao executar o projeto localmente, você deve usar o Azure Functions Core Tools (comando func start). No momento, você não pode usar F5 para iniciar a execução com o depurador.
  • Os servidores devem ser hospedados como aplicativos do Flex Consumption plan.

Samples

Ainda não está disponível.

Manipuladores personalizados do Azure Functions