Udostępnij za pomocą


Omówienie powiązań protokołu kontekstu modelu dla usługi Azure Functions

Protokół MCP (Model Context Protocol) to protokół klient-serwer, który umożliwia modelom językowym i agentom wydajniejsze odnajdywanie zewnętrznych źródeł danych i narzędzi oraz korzystanie z nich.

Rozszerzenie MCP usługi Azure Functions umożliwia tworzenie zdalnych serwerów MCP za pomocą usługi Azure Functions. Te serwery mogą hostować funkcje wyzwalacza narzędzi MCP, które klienci MCP, tacy jak modele językowe i agenci, mogą wykonywać zapytania i uzyskiwać dostęp do określonych zadań.

Action Typ
Uruchamianie funkcji z żądania wywołania narzędzia MCP Trigger

Important

Rozszerzenie MCP nie obsługuje obecnie aplikacji programu PowerShell.

Prerequisites

  • Wymaga wersji 2.1.0 lub nowszej Microsoft.Azure.Functions.Worker pakietu.
  • Wymaga wersji 2.0.2 lub nowszej Microsoft.Azure.Functions.Worker.Sdk pakietu.

Instalowanie rozszerzenia

Note

W przypadku języka C# rozszerzenie MCP usługi Azure Functions obsługuje tylko izolowany model procesu roboczego.

Dodaj rozszerzenie do projektu, instalując ten pakiet NuGet w preferowany sposób:

Microsoft.Azure.Functions.Worker.Extensions.Mcp

Instalowanie pakietu

Aby móc używać tego rozszerzenia powiązania w aplikacji, upewnij się, że plik host.json w katalogu głównym projektu zawiera następujące extensionBundle odwołanie:

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

W tym przykładzie version[4.0.0, 5.0.0) wartość polecenia nakazuje hostowi usługi Functions użycie wersji pakietu, która jest co najmniej 4.0.0 mniejsza niż 5.0.0, która zawiera wszystkie potencjalne wersje 4.x. Ta notacja skutecznie utrzymuje aplikację w najnowszej dostępnej wersji pomocniczej pakietu rozszerzenia v4.x.

Jeśli to możliwe, należy użyć najnowszej wersji głównej pakietu rozszerzeń i zezwolić środowisku uruchomieniowemu na automatyczne utrzymywanie najnowszej wersji pomocniczej. Zawartość najnowszego pakietu można wyświetlić na stronie wydania pakietów rozszerzeń. Aby uzyskać więcej informacji, zobacz Pakiety rozszerzeń usługi Azure Functions.

ustawienia pliku host.json

W tej sekcji opisano ustawienia konfiguracji dostępne dla tego powiązania w wersji 2.x lub nowszej. Ustawienia w pliku host.json mają zastosowanie do wszystkich funkcji w wystąpieniu aplikacji funkcji. Aby uzyskać więcej informacji na temat ustawień konfiguracji aplikacji funkcji, zobacz host.json dokumentacja usługi Azure Functions.

Możesz użyć extensions.mcp sekcji w sekcji , host.json aby zdefiniować informacje o serwerze 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 Opisuje klientów, jak uzyskać dostęp do zdalnego serwera MCP.
serverName Przyjazna nazwa zdalnego serwera MCP.
serverVersion Bieżąca wersja zdalnego serwera MCP.
encryptClientState Określa, czy stan klienta jest zaszyfrowany. Domyślnie ustawione na true. Ustawienie wartości false może być przydatne w przypadku debugowania i testowania scenariuszy, ale nie jest zalecane w środowisku produkcyjnym.
messageOptions Obiekt options dla punktu końcowego komunikatu w transporcie SSE.
messageOptions.UseAbsoluteUriForEndpoint Wartość domyślna to false. Dotyczy tylko transportu zdarzeń wysyłanych przez serwer (SSE); to ustawienie nie ma wpływu na transport HTTP z możliwością przesyłania strumieniowego. Jeśli ustawiono falsewartość , punkt końcowy komunikatu jest udostępniany jako względny identyfikator URI podczas początkowych połączeń za pośrednictwem transportu SSE. Jeśli ustawiono truewartość , punkt końcowy komunikatu jest zwracany jako bezwzględny identyfikator URI. Użycie względnego identyfikatora URI nie jest zalecane, chyba że masz określony powód, aby to zrobić.
system Obiekt opcji konfiguracji na poziomie systemu.
system.webhookAuthorizationLevel Definiuje poziom autoryzacji wymagany dla punktu końcowego elementu webhook. Wartość domyślna to "System". Dozwolone wartości to "System" i "Anonymous". Po ustawieniu wartości na "Anonimowy" klucz dostępu nie jest już wymagany dla żądań. Niezależnie od tego, czy klucz jest wymagany, czy nie, można użyć wbudowanej autoryzacji serwera MCP jako warstwy kontroli dostępu opartej na tożsamościach.

Nawiązywanie połączenia z serwerem MCP

Aby nawiązać połączenie z serwerem MCP uwidoczniony przez aplikację funkcji, należy podać klienta MCP z odpowiednimi informacjami dotyczącymi punktu końcowego i transportu. W poniższej tabeli przedstawiono transporty obsługiwane przez rozszerzenie MCP usługi Azure Functions wraz z odpowiednim punktem końcowym połączenia.

Transport Endpoint
Przesyłanie strumieniowe HTTP /runtime/webhooks/mcp
zdarzenia Server-Sent (SSE)1 /runtime/webhooks/mcp/sse

1 Nowsze wersje protokołu przestarzały transport Server-Sent Events. Jeśli klient nie wymaga tego specjalnie, należy zamiast tego użyć transportu HTTP z możliwością przesyłania strumieniowego.

W przypadku hostowanych na platformie Azure domyślnie punkty końcowe uwidocznione przez rozszerzenie również wymagają klucza systemowego o nazwie mcp_extension. Jeśli nie jest on podany w nagłówku x-functions-key HTTP lub w parametrze code ciągu zapytania, klient otrzyma 401 Unauthorized odpowiedź. To wymaganie można usunąć, ustawiając system.webhookAuthorizationLevel właściwość na host.json wartość Anonymous. Aby uzyskać więcej informacji, zobacz sekcję host.json settings (Ustawieniahost.json ).

Klucz można pobrać przy użyciu dowolnej z metod opisanych w temacie Uzyskiwanie kluczy dostępu funkcji. W poniższym przykładzie pokazano, jak uzyskać klucz za pomocą interfejsu wiersza polecenia platformy Azure:

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

Klienci MCP akceptują tę konfigurację na różne sposoby. Zapoznaj się z dokumentacją wybranego klienta. W poniższym przykładzie pokazano plik, mcp.json którego można użyć do skonfigurowania serwerów MCP dla narzędzia GitHub Copilot w programie Visual Studio Code. W przykładzie skonfigurowaliśmy dwa serwery przy użyciu transportu HTTP z możliwością przesyłania strumieniowego. Pierwszy z nich dotyczy testowania lokalnego za pomocą narzędzi Azure Functions Core Tools. Druga dotyczy aplikacji funkcji hostowanej na platformie Azure. Konfiguracja przyjmuje parametry wejściowe, dla których program Visual Studio Code wyświetla monit podczas pierwszego uruchomienia serwera zdalnego. Użycie danych wejściowych gwarantuje, że wpisy tajne, takie jak klucz systemowy, nie zostaną zapisane w pliku i zaewidencjonowane w kontroli źródła.

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