Condividi tramite


Panoramica delle associazioni del protocollo del contesto del modello per Funzioni di Azure

Il protocollo MCP (Model Context Protocol) è un protocollo client-server progettato per consentire ai modelli linguistici e agli agenti di individuare e usare in modo più efficiente origini dati e strumenti esterni.

L'estensione MCP di Funzioni di Azure consente di usare Funzioni di Azure per creare server MCP remoti. Questi server possono ospitare funzioni di trigger dello strumento MCP, che i client MCP, ad esempio modelli di linguaggio e agenti, possono eseguire query e accedere a attività specifiche.

Action Type
Eseguire una funzione da una richiesta di chiamata dello strumento MCP Trigger

Important

L'estensione MCP attualmente non supporta le app di PowerShell.

Prerequisites

  • Richiede la versione 2.1.0 o successiva del Microsoft.Azure.Functions.Worker pacchetto.
  • Richiede la versione 2.0.2 o successiva del Microsoft.Azure.Functions.Worker.Sdk pacchetto.

Installare l'estensione

Note

Per C#, l'estensione MCP di Funzioni di Azure supporta solo il modello di lavoro isolato.

Aggiungere l'estensione al progetto installando questo pacchetto NuGet nel modo preferito:

Microsoft.Azure.Functions.Worker.Extensions.Mcp

Installare il bundle

Per poter usare questa estensione di associazione nell'app, assicurarsi che il file host.json nella radice del progetto contenga questo extensionBundle riferimento:

{
    "version": "2.0",
    "extensionBundle": {
        "id": "Microsoft.Azure.Functions.ExtensionBundle",
        "version": "[4.0.0, 5.0.0)"
    }
}

In questo esempio, il valore version indica all'host delle Funzioni di [4.0.0, 5.0.0) di usare una versione del pacchetto che sia almeno 4.0.0 ma inferiore a 5.0.0, includendo tutte le versioni comprese nella serie 4.x. Questa notazione mantiene l'app nella versione secondaria più recente disponibile del bundle di estensione v4.x.

Quando possibile, è consigliabile usare la versione principale del bundle di estensione più recente e consentire al runtime di mantenere automaticamente la versione secondaria più recente. È possibile visualizzare il contenuto del bundle più recente nella pagina di rilascio dei bundle di estensioni. Per altre informazioni, vedere Bundle di estensioni di Funzioni di Azure.

impostazioni host.json

Questa sezione descrive le impostazioni di configurazione disponibili per questa associazione nella versione 2.x e successive. Le impostazioni nel file host.json si applicano a tutte le funzioni in un'istanza dell'app per le funzioni. Per altre informazioni sulle impostazioni di configurazione dell'app per le funzioni, vedere informazioni di riferimentohost.json per Funzioni di Azure.

È possibile usare la sezione in extensions.mcp per definire le host.json informazioni sul server MCP.

{
  "version": "2.0",
  "extensions": {
    "mcp": {
      "instructions": "Some test instructions on how to use the server",
      "serverName": "TestServer",
      "serverVersion": "2.0.0",
      "encryptClientState": true,
      "messageOptions": {
        "useAbsoluteUriForEndpoint": false
      },
      "system": {
        "webhookAuthorizationLevel": "System"
      }
    }    
  }
}
Property Description
instructions Descrive ai client come accedere al server MCP remoto.
serverName Nome descrittivo per il server MCP remoto.
serverVersion Versione corrente del server MCP remoto.
encryptClientState Determina se lo stato del client è crittografato. il valore predefinito è true. L'impostazione su false può essere utile per il debug e gli scenari di test, ma non è consigliata per la produzione.
messageOptions Oggetto Options per l'endpoint del messaggio nel trasporto SSE.
messageOptions.UseAbsoluteUriForEndpoint Il valore predefinito è false. Applicabile solo al trasporto degli eventi inviati dal server; questa impostazione non influisce sul trasporto HTTP streamable. Se impostato su false, l'endpoint del messaggio viene fornito come URI relativo durante le connessioni iniziali nel trasporto SSE. Se impostato su true, l'endpoint del messaggio viene restituito come URI assoluto. L'uso di un URI relativo non è consigliato a meno che non si disponga di un motivo specifico per farlo.
system Oggetto Opzioni per la configurazione a livello di sistema.
system.webhookAuthorizationLevel Definisce il livello di autorizzazione necessario per l'endpoint del webhook. Il valore predefinito è "System". I valori consentiti sono "System" e "Anonymous". Quando si imposta il valore su "Anonimo", non è più necessaria una chiave di accesso per le richieste. Indipendentemente dal fatto che una chiave sia necessaria o meno, è possibile usare l'autorizzazione del server MCP predefinita come livello di controllo degli accessi in base all'identità.

Connettersi al server MCP

Per connettersi al server MCP esposto dall'app per le funzioni, è necessario fornire a un client MCP le informazioni appropriate sull'endpoint e sul trasporto. La tabella seguente illustra i trasporti supportati dall'estensione MCP di Funzioni di Azure, insieme all'endpoint di connessione corrispondente.

Transport Punto finale
HTTP gestibile in streaming /runtime/webhooks/mcp
eventi Server-Sent (SSE)1 /runtime/webhooks/mcp/sse

1 Versioni più recenti del protocollo deprecate il trasporto eventi Server-Sent. A meno che il client non lo richieda in modo specifico, è consigliabile usare invece il trasporto HTTP streamable.

Se ospitato in Azure, per impostazione predefinita, gli endpoint esposti dall'estensione richiedono anche la chiave di sistema denominata mcp_extension. Se non viene specificato nell'intestazione x-functions-key HTTP o nel parametro della code stringa di query, il client riceve una 401 Unauthorized risposta. È possibile rimuovere questo requisito impostando la system.webhookAuthorizationLevel proprietà in host.json su Anonymous. Per altre informazioni, vedere la sezione impostazionihost.json .

È possibile recuperare la chiave usando uno dei metodi descritti in Ottenere le chiavi di accesso alle funzioni. L'esempio seguente illustra come ottenere la chiave con l'interfaccia della riga di comando di Azure:

az functionapp keys list --resource-group <RESOURCE_GROUP> --name <APP_NAME> --query systemKeys.mcp_extension --output tsv

I client MCP accettano questa configurazione in vari modi. Consultare la documentazione per il client scelto. L'esempio seguente mostra un mcp.json file simile a quello che è possibile usare per configurare i server MCP per GitHub Copilot in Visual Studio Code. Nell'esempio vengono impostati due server, entrambi usando il trasporto HTTP streamable. Il primo è per i test locali con Gli strumenti di base di Funzioni di Azure. Il secondo è per un'app per le funzioni ospitata in Azure. La configurazione accetta i parametri di input per i quali Visual Studio Code richiede quando si esegue per la prima volta il server remoto. L'uso degli input garantisce che i segreti come la chiave di sistema non vengano salvati nel file e controllati nel controllo del codice sorgente.

{
    "inputs": [
        {
            "type": "promptString",
            "id": "functions-mcp-extension-system-key",
            "description": "Azure Functions MCP Extension System Key",
            "password": true
        },
        {
            "type": "promptString",
            "id": "functionapp-host",
            "description": "The host domain of the function app."
        }
    ],
    "servers": {
        "local-mcp-function": {
            "type": "http",
            "url": "http://localhost:7071/runtime/webhooks/mcp"
        },
        "remote-mcp-function": {
            "type": "http",
            "url": "https://${input:functionapp-host}/runtime/webhooks/mcp",
            "headers": {
                "x-functions-key": "${input:functions-mcp-extension-system-key}"
            }
        }
    }
}