次の方法で共有


Azure Functions のモデル コンテキスト プロトコル バインドの概要

モデル コンテキスト プロトコル (MCP) は、言語モデルとエージェントが外部データ ソースとツールをより効率的に検出して使用できるようにするためのクライアント/サーバー プロトコルです。

Azure Functions MCP 拡張機能を使用すると、Azure Functions を使用してリモート MCP サーバーを作成できます。 これらのサーバーは、MCP ツール トリガー関数をホストできます。この関数は、言語モデルやエージェントなどの MCP クライアントがクエリを実行し、特定のタスクにアクセスできます。

Action タイプ
MCP ツール呼び出し要求から関数を実行する Trigger

Important

MCP 拡張機能は現在、PowerShell アプリをサポートしていません。

Prerequisites

  • Microsoft.Azure.Functions.Worker パッケージのバージョン 2.1.0 以降が必要です。
  • Microsoft.Azure.Functions.Worker.Sdk パッケージのバージョン 2.0.2 以降が必要です。

拡張機能のインストール

Note

C# の場合、Azure Functions MCP 拡張機能では 、分離されたワーカー モデルのみがサポートされます。

この NuGet パッケージ を好みの方法でインストールして、プロジェクトに拡張機能を追加します。

Microsoft.Azure.Functions.Worker.Extensions.Mcp

バンドルのインストール

アプリでこのバインド拡張機能を使用できるようにするには、プロジェクトのルートにある host.json ファイルに次の extensionBundle 参照が含まれていることを確認します。

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

この例では、version[4.0.0, 5.0.0)値は、少なくとも4.0.05.0.0未満のバンドル バージョン (4.x のすべての潜在的なバージョンを含む) を使用するように Functions ホストに指示します。 この表記は、v4.x 拡張機能バンドルの利用可能な最新のマイナー バージョンでアプリを効果的に維持します。

可能であれば、最新の拡張機能バンドルメジャー バージョンを使用し、ランタイムが最新のマイナー バージョンを自動的に維持できるようにする必要があります。 最新のバンドルの内容は、 拡張機能バンドルのリリース ページで確認できます。 詳細については、 Azure Functions 拡張機能バンドルに関するページを参照してください。

host.json 設定

このセクションでは、バージョン 2.x 以降でこのバインドに使用できる構成設定について説明します。 host.json ファイルの設定は、関数アプリ インスタンスのすべての関数に適用されます。 関数アプリの構成設定の詳細については、 Azure Functions のhost.json リファレンスを参照してください。

extensions.mcphost.json セクションを使用して、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 リモート MCP サーバーにアクセスする方法をクライアントに説明します。
serverName リモート MCP サーバーのフレンドリ名。
serverVersion リモート MCP サーバーの現在のバージョン。
encryptClientState クライアントの状態が暗号化されているかどうかを判断します。 既定値は true です。 false に設定すると、デバッグとテストのシナリオに役立ちますが、運用環境では推奨されません。
messageOptions SSE トランスポート内のメッセージ エンドポイントの Options オブジェクト。
messageOptions.UseAbsoluteUriForEndpoint 既定値は false です。 サーバー送信イベント (SSE) トランスポートにのみ適用されます。この設定は、Streamable HTTP トランスポートには影響しません。 falseに設定すると、メッセージ エンドポイントは、SSE トランスポート経由の初期接続時に相対 URI として提供されます。 trueに設定すると、メッセージ エンドポイントは絶対 URI として返されます。 特定の理由がない限り、相対 URI の使用は推奨されません。
system システム レベルの構成の Options オブジェクト。
system.webhookAuthorizationLevel Webhook エンドポイントに必要な承認レベルを定義します。 既定値は "System" です。 使用できる値は、"System" と "Anonymous" です。 値を "Anonymous" に設定すると、要求にアクセス キーは不要になります。 キーが必要かどうかに関係なく、 組み込みの MCP サーバー承認 を ID ベースのアクセス制御レイヤーとして使用できます。

MCP サーバーに接続する

関数アプリによって公開されている MCP サーバーに接続するには、適切なエンドポイントとトランスポート情報を MCP クライアントに提供する必要があります。 次の表は、Azure Functions MCP 拡張機能でサポートされているトランスポートと、対応する接続エンドポイントを示しています。

Transport エンドポイント
ストリーミング可能な HTTP /runtime/webhooks/mcp
Server-Sent イベント (SSE)1 /runtime/webhooks/mcp/sse

1 新しいプロトコル バージョンでは、Server-Sent イベント トランスポートが非推奨になりました。 クライアントで特に要求されない限り、代わりに Streamable HTTP トランスポートを使用する必要があります。

Azure でホストされている場合、既定では、拡張機能によって公開されるエンドポイントには、という名前のmcp_extensionも必要です。 x-functions-key HTTP ヘッダーまたは code クエリ文字列パラメーターで指定されていない場合、クライアントは401 Unauthorized応答を受け取ります。 この要件を削除するには、system.webhookAuthorizationLevelhost.json プロパティを Anonymous に設定します。 詳細については、「 host.json 設定 」セクションを参照してください。

キーは、「関数アクセス キーの取得」で説明されている任意のメソッド を使用して取得できます。 次の例は、Azure CLI でキーを取得する方法を示しています。

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

MCP クライアントは、さまざまな方法でこの構成を受け入れます。 選択したクライアントのドキュメントを参照してください。 次の例は、mcp.jsonする場合と同様に、 ファイルを示しています。 この例では、両方とも Streamable HTTP トランスポートを使用して、2 つのサーバーを設定します。 1 つ目は、Azure Functions Core Tools を使用したローカル テスト用です。 2 つ目は、Azure でホストされている関数アプリ用です。 この構成では、リモート サーバーを初めて実行するときに Visual Studio Code からプロンプトが表示される入力パラメーターを受け取ります。 入力を使用すると、システム キーなどのシークレットがファイルに保存されず、ソース管理にチェックインされます。

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