你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

Azure Functions 的模型上下文协议绑定概述

模型上下文协议(MCP)是一种客户端-服务器协议,旨在使语言模型和代理能够更有效地发现和使用外部数据源和工具。

Azure Functions MCP 扩展允许使用 Azure Functions 创建远程 MCP 服务器。 这些服务器可以托管 MCP 工具触发器函数,MCP 客户端(如语言模型和代理)可以查询和访问以执行特定任务。

Action 类型
从 MCP 工具调用请求运行函数 Trigger

Important

MCP 扩展目前不支持 PowerShell 应用。

Prerequisites

  • 需要 2.1.0 或更高版本的 Microsoft.Azure.Functions.Worker 包。
  • 需要 2.0.2 或更高版本的 Microsoft.Azure.Functions.Worker.Sdk 包。

安装扩展

Note

对于 C#,Azure Functions MCP 扩展仅支持 隔离的辅助角色模型

通过采用首选方式安装此 NuGet 包 ,将扩展添加到项目:

Microsoft.Azure.Functions.Worker.Extensions.Mcp

Important

扩展的正式发布版本现已推出。 但是,它尚未包含在默认扩展捆绑包中。 这些说明演示如何使用预览扩展捆绑包,其中包括早期预览版本的 MCP 扩展以及其他预览依赖项。 目前,若要使用扩展的正式版,必须 手动安装该扩展

安装捆绑包

若要能够在应用中使用此预览绑定扩展,必须引用包含它的预览扩展捆绑包。

在文件中添加或替换以下代码,该代码 host.json 专门面向 4.x 捆绑包的最新预览版

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

选择上一个链接以验证最新的预览捆绑包版本是否包含预览扩展。

host.json 设置

本部分介绍版本 2.x 及更高版本中此绑定可用的配置设置。 host.json 文件中的设置将应用于函数应用实例中的所有函数。 有关函数应用配置设置的详细信息,请参阅 Azure Functions 的host.json 参考

可以使用该 extensions.mcp 部分 host.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
      }
    }    
  }
}
Property Description
instructions 描述客户端如何访问远程 MCP 服务器。
serverName 远程 MCP 服务器的友好名称。
serverVersion 远程 MCP 服务器的当前版本。
encryptClientState 确定客户端状态是否已加密。 默认值为 true。 设置为 false 对于调试和测试方案可能很有用,但不建议用于生产环境。
messageOptions SSE 传输中消息终结点的选项对象。
messageOptions.UseAbsoluteUriForEndpoint 默认为 false。 仅适用于服务器发送的事件(SSE)传输;此设置不会影响可流式传输的 HTTP 传输。 如果设置为 false,则消息终结点在通过 SSE 传输进行初始连接期间作为相对 URI 提供。 如果设置为 true,则消息终结点将作为绝对 URI 返回。 除非有特定原因这样做,否则不建议使用相对 URI。

连接到 MCP 服务器

若要连接到函数应用公开的 MCP 服务器,需要为 MCP 客户端提供相应的终结点和传输信息。 下表显示了 Azure Functions MCP 扩展支持的传输及其相应的连接终结点。

Transport 端点
可流式传输 HTTP /runtime/webhooks/mcp
Server-Sent 事件 (SSE)1 /runtime/webhooks/mcp/sse

1 个较新的协议版本已弃用 Server-Sent 事件传输。 除非客户端特别需要它,否则应改用可流式传输 HTTP 传输。

在 Azure 中托管时,扩展公开的终结点还需要名为mcp_extension。 如果未在 HTTP 标头或code查询字符串参数中x-functions-key提供,客户端将收到401 Unauthorized响应。 可以使用 Get 函数访问密钥中所述的任何方法检索密钥。 以下示例演示如何使用 Azure CLI 获取密钥:

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

MCP 客户端以各种方式接受此配置。 请参阅所选客户端的文档。 以下示例演示了一个 mcp.json 文件,就像在 Visual Studio Code 中为 GitHub Copilot 配置 MCP 服务器一样。 该示例使用可流式传输 HTTP 传输设置两个服务器。 第一个是使用 Azure Functions Core Tools 进行本地测试。 第二个用于 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}"
            }
        }
    }
}

在远程 MCP 服务器中创建工具终结点