Teilen über


Selbst gehosteter MCP-Remoteserver in Azure Functions (öffentliche Vorschau)

Azure Functions bietet zwei Möglichkeiten zum Hosten von Remote-MCP-Servern:

Mit dem ersten Ansatz können Sie das Azure Functions-Programmiermodell mit Triggern und Bindungen verwenden, um den MCP-Server zu erstellen. Anschließend können Sie den Server remote hosten, indem Sie ihn in einer Funktions-App bereitstellen.

Wenn Sie bereits über einen MCP-Server verfügen, der mit den offiziellen MCP-SDKs erstellt wurde und sie nur remote hosten möchten, entspricht der zweite Ansatz wahrscheinlich Ihren Anforderungen. Sie müssen keine Codeänderungen am Server vornehmen, um sie auf Azure Functions zu hosten. Stattdessen können Sie die erforderlichen Functions-Artefakte hinzufügen, und der Server ist bereit zur Bereitstellung. Als solche werden diese Server als selbst gehostete MCP-Server bezeichnet.

Diagramm, das das Hosten von Funktions-Apps und benutzerdefinierten Handler-Apps zeigt.

Dieser Artikel enthält eine Übersicht über selbst gehostete MCP-Server und Links zu relevanten Artikeln und Beispielen.

Benutzerdefinierte Handler

Selbst gehostete MCP-Server werden als benutzerdefinierte Handler auf der Azure Functions-Plattform bereitgestellt. Benutzerdefinierte Handler sind schlanke Webserver, die Ereignisse vom Functions-Host empfangen. Sie bieten eine Möglichkeit, auf der Functions-Plattform Anwendungen auszuführen, die mit Frameworks erstellt wurden, die sich vom Programmiermodell der Functions unterscheiden, oder in Sprachen geschrieben sind, die nicht nativ unterstützt werden. Weitere Informationen finden Sie unter Benutzerdefinierte Azure Functions-Handler.

Wenn Sie einen MCP SDK-basierten Server in Azure Functions bereitstellen, müssen Sie eine host.json in Ihr Projekt einschließen. Die minimale host.json sieht wie folgt aus:

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

Hinweis

Da die in Azure Functions bereitgestellte Nutzlast der Inhalt des bin/output Verzeichnisses ist, ist der Pfad zur kompilierten DLL relativ zu diesem Verzeichnis, nicht zum Projektstamm.

Beispiel noch nicht verfügbar.

Die Verwendung eines configuration Profile Werts von mcp-custom-handler konfiguriert automatisch diese Funktionen-Hosteinstellungen, die für die Ausführung Ihres MCP-Servers in Azure Functions erforderlich sind:

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

Dieses Beispiel zeigt eine Datei host.json mit zusätzlichen benutzerdefinierten Handlereigenschaften, die dem Profil mcp-custom-handler entsprechen gesetzt werden:

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

In dieser Tabelle werden die Eigenschaften von customHandler.http, zusammen mit Standardwerten erläutert:

Eigentum Funktionsbeschreibung Standardwert
enableProxying Steuert, wie der Azure Functions-Host HTTP-Anforderungen an benutzerdefinierte Handler verarbeitet. Wenn enableProxying auf true festgelegt ist, fungiert der Functions-Host als Reverse-Proxy und leitet die gesamte HTTP-Anforderung (einschließlich Header, Body, Abfrageparameter) direkt an den benutzerdefinierten Handler weiter. Diese Einstellung ermöglicht dem benutzerdefinierten Handler vollzugriff auf die ursprünglichen HTTP-Anforderungsdetails.

Wenn enableProxyingfalse ist, verarbeitet der Functions-Host zuerst die Anforderung und wandelt sie in das Anforderungs-/Antwortformat von Azure Functions um, bevor sie an den benutzerdefinierten Handler übergeben wird.
false
defaultAuthorizationLevel Steuert die Authentifizierungsanforderung für den Zugriff auf benutzerdefinierte Handlerendpunkte. Erfordert beispielsweise function einen funktionsspezifischen API-Schlüssel für den Zugriff. Weitere Informationen finden Sie unter Autorisierungsstufen. function
route Gibt das URL-Pfadmuster an, auf das der benutzerdefinierte Handler reagiert. {*route} passt zu jedem URL-Pfad (z. B. /, /mcp, /api/tools oder /anything/nested/path) und leitet die Anforderung an den benutzerdefinierten Handler weiter. {*route}

Integrierte Serverauthentifizierung

OAuth-basierte Authentifizierung und Autorisierung, die von der App Service-Plattform bereitgestellt wird, implementiert die Anforderungen der MCP-Autorisierungsspezifikation, z. B. ausstellen von 401-Herausforderungen und Verfügbarmachen des Dokuments für geschützte Ressourcenmetadaten (Protected Resource Metadata, PRM). Wenn Sie die integrierte Authentifizierung aktivieren, werden Clients, die versuchen, auf den Server zuzugreifen, an Identitätsanbieter wie Microsoft Entra ID zur Authentifizierung umgeleitet, bevor Sie eine Verbindung herstellen.

Weitere Informationen finden Sie unter Configure built-in server authorization (preview) und Hosting MCP servers on Azure Functions.

Azure AI Foundry Agent-Integrationen

Agents in Azure AI Foundry können für die Verwendung von Tools in MCP-Servern konfiguriert werden, die in Azure-Funktionen gehostet werden.

Registrieren Ihres Servers im Azure API Center

Wenn Sie Ihren MCP-Server im Azure API Center registrieren, erstellen Sie einen privaten Toolkatalog der Organisation. Dieser Ansatz wird für die Bereitstellung von MCP-Servern zwischen Ihrer Organisation mit konsistenter Governance und Auffindbarkeit empfohlen. Weitere Informationen finden Sie unter Registrieren von MCP-Servern, die in Azure Functions im Azure API Center gehostet werden.

Unterstützung für öffentliche Vorschau

Die Möglichkeit zum Hosten eigener SDK-basierter MCP-Server in Funktionen befindet sich derzeit in der Vorschau und unterstützt diese Features:

  • Zustandslose Server, die den streambaren HTTP-Transport verwenden. Wenn der Server zustandsbehaftet sein muss, sollten Sie die MCP-Erweiterung „Functions“ verwenden.
  • Server, die mit den Python-, TypeScript-, C#- oder Java MCP-SDKs implementiert sind.
  • Wenn Sie das Projekt lokal ausführen, müssen Sie die Azure Functions Core Tools (func start Befehl) verwenden. Derzeit können Sie F5 nicht verwenden, um die Ausführung mit dem Debugger zu starten.
  • Server müssen als Flex-Verbrauchsplan-Apps gehostet werden.

Beispiele

Noch nicht verfügbar.

Benutzerdefinierte Azure Functions-Handler