Condividi tramite


Server MCP remoto autogestito su Funzioni di Azure (anteprima pubblica)

Funzioni di Azure offre due modi per ospitare server MCP remoti:

  • Server MCP creati con l'estensione Functions MCP
  • Server MCP creati con gli SDK MCP ufficiali

Con il primo approccio, è possibile usare il modello di programmazione di Funzioni di Azure con trigger e associazioni per compilare il server MCP. È quindi possibile ospitare il server in remoto distribuendolo in un'app per le funzioni.

Se si dispone già di un server MCP creato con gli SDK MCP ufficiali e si vuole semplicemente ospitarlo in remoto, il secondo approccio è probabilmente adatto alle proprie esigenze. Non è necessario apportare modifiche al codice al server per ospitarlo in Funzioni di Azure. È invece possibile aggiungere gli artefatti di Funzioni necessari e il server è pronto per la distribuzione. Di conseguenza, questi server vengono definiti come server MCP autogestiti.

Diagramma che mostra l'hosting di app per le funzioni e app del gestore personalizzato.

Questo articolo offre una panoramica dei server MCP self-hosted e collegamenti ad articoli ed esempi pertinenti.

Gestori personalizzati

I server MCP self-hosted vengono distribuiti nella piattaforma Funzioni di Azure come gestori personalizzati. I gestori personalizzati sono server Web leggeri che ricevono eventi dall'host di Funzioni. Offrono un modo per eseguire applicazioni sulla piattaforma Funzioni, utilizzando framework diversi dal modello di programmazione Funzioni o in linguaggi non supportati nativamente. Per altre informazioni, vedere Gestori personalizzati per Funzioni di Azure.

Quando si distribuisce un server basato su MCP SDK in Funzioni di Azure, è necessario includere un host.json nel progetto. Il host.json minimo è simile al seguente:

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

Annotazioni

Poiché il payload distribuito in Funzioni di Azure è il contenuto della bin/output directory, il percorso della DLL compilata è relativo a tale directory, non alla radice del progetto.

Esempio non ancora disponibile.

Usando un valore configuration Profile di mcp-custom-handler configura automaticamente queste impostazioni dell'host delle Funzioni, necessarie per l'esecuzione del server MCP in Azure Functions:

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

Questo esempio mostra un file host.json con proprietà del gestore personalizzate aggiuntive impostate come equivalenti all'uso del mcp-custom-handler profilo:

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

Questa tabella illustra le proprietà di customHandler.http, insieme ai valori predefiniti:

Proprietà Funzione Valore predefinito
enableProxying Controlla il modo in cui l'host di Funzioni di Azure gestisce le richieste HTTP ai gestori personalizzati. Quando enableProxying è impostato su true, l'host funzioni funge da proxy inverso e inoltra l'intera richiesta HTTP (incluse intestazioni, corpo, parametri di query) direttamente al gestore personalizzato. Questa impostazione consente al gestore personalizzato di accedere completamente ai dettagli della richiesta HTTP originale.

Quando enableProxying è false, l'host di Funzioni elabora prima la richiesta e la trasforma nel formato di richiesta/risposta di Funzioni di Azure prima di passarla al gestore personalizzato.
false
defaultAuthorizationLevel Controlla il requisito di autenticazione per l'accesso agli endpoint del gestore personalizzati. Ad esempio, function richiede una chiave API specifica della funzione per accedere. Per altre informazioni, vedere Livelli di autorizzazione. function
route Specifica il modello di percorso URL a cui risponde il gestore personalizzato. {*route}corrisponde a qualsiasi percorso URL ( ad esempio /, /mcp/api/tools, o /anything/nested/path) e inoltra la richiesta al gestore personalizzato. {*route}

Autenticazione server predefinita

L'autenticazione e l'autorizzazione basate su OAuth fornite dalla piattaforma del servizio app implementa i requisiti della specifica di autorizzazione MCP, ad esempio l'emissione della richiesta 401 e l'esposizione del documento Metadati risorse protette (PRM). Quando si abilita l'autenticazione predefinita, i client che tentano di accedere al server vengono reindirizzati a provider di identità come Microsoft Entra ID per l'autenticazione prima della connessione.

Per altre informazioni, vedere Configurare l'autorizzazione server predefinita (anteprima) e l'hosting di server MCP in Funzioni di Azure.

Integrazioni dell'agente Azure AI Foundry

Gli agenti in Azure AI Foundry possono essere configurati per l'uso di strumenti nei server MCP ospitati in Funzioni di Azure.

Registrare il server nel Centro API di Azure

Quando si registra il server MCP nel Centro API di Azure, si crea un catalogo di strumenti dell'organizzazione privato. Questo approccio è consigliato per condividere i server MCP nell'organizzazione con governance e individuabilità coerenti. Per altre informazioni, vedere Registrare i server MCP ospitati in Funzioni di Azure nel Centro API di Azure.

Supporto dell'anteprima pubblica

La possibilità di ospitare i propri server MCP basati su SDK in Funzioni è attualmente in anteprima e supporta queste funzionalità:

  • Server senza stato che usano il trasporto streamable-http. Se hai bisogno che il server sia stateful, considera di usare l'estensione Functions MCP.
  • Server implementati con Python, TypeScript, C# o JAVA MCP SDK.
  • Quando si esegue il progetto in locale, è necessario usare il comando Azure Functions Core Tools (func start ). Non è attualmente possibile usare F5 per avviare l'esecuzione con il debugger.
  • I server devono essere ospitati come app del piano a Consumo Flessibile.

Samples

Non ancora disponibile.

Gestori personalizzati di Funzioni di Azure