你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
模型上下文协议(MCP)为 AI 代理提供了一个标准接口,用于与 API 和外部服务进行交互。 需要集成没有现有 MCP 服务器实现的专用或内部企业系统时,可以生成自己的自定义服务器。 本文介绍如何使用 Azure Functions 创建远程 MCP 服务器,使用 Azure API 中心将其注册到专用组织工具目录中,并将其连接到 Foundry 代理服务。
此方法使你能够安全地将内部 API 和服务集成到 Microsoft Foundry 生态系统中,从而允许代理通过标准化 MCP 接口调用特定于企业的工具。
先决条件
- 启用了代理服务的 Foundry 项目。 有关设置说明,请参阅 快速入门:创建提示代理。
- Azure订阅和创建资源的权限。 通常情况下,你至少需要在目标资源组上拥有“参与者”角色。
- 在本地开发计算机上安装Python 3.13 或更高版本。
- Azure Functions Core Tools 4.8.0 或更高版本。
- 为部署自动化安装Azure开发人员 CLI 1.23.0 或更高版本。
- 对于本地开发和调试:
- Visual Studio Code
- 适用于 Visual Studio Code 的 Azure Functions 扩展
- Azure API 中心资源(可选,仅适用于组织工具目录注册)。
注意
代理服务连接到可公开访问的 MCP 服务器终结点, 并且可以配置为 使用专用 MCP 服务器终结点。
了解请求流
远程 MCP 服务器可以是自定义构建的(如本文中所述),也可以是 Microsoft 提供的 Foundry Add Tools 目录中的产品,例如 Azure DevOps MCP 服务器(预览版)。 Foundry 中的连接和治理体验两者相似,区别在于特定于提供商的身份验证和范围。
高层流程如下所示:
- 部署 MCP 服务器(本文使用 Azure Functions 公开一个或多个 MCP 工具)。
- 可以选择在 Azure API 中心注册服务器,使其显示在组织工具目录中。
- 在 Foundry 门户中,将 MCP 服务器连接到代理服务。
- 当代理需要工具时,代理服务会调用 MCP 服务器终结点。
- MCP 服务器验证请求、调用内部 API 并返回工具结果。
使用 Azure Functions 生成 MCP 服务器
Azure Functions是一种无服务器计算服务,提供按需缩放至零的能力、突发性扩展和企业特性,包括基于身份的访问和虚拟网络。 轻量级编程模型使生成 MCP 服务器非常简单,因此你可以专注于实现业务逻辑,而不是基础结构管理。
注意
本文中的示例使用Azure Functions方便起见,但 MCP 是可用于任何 HTTP 服务器的开放协议。 可以使用 ASP.NET Core、Express.js、Flask 或任何其他可处理 HTTP 请求的 Web 框架来托管 MCP 服务器。 关键要求是你的服务器实现 MCP 规范终结点。 Azure Functions是简化部署和缩放的一个选项。
打开终端或命令提示符,并导航到要在其中创建项目的文件夹。
运行
命令以初始化项目,基于此示例 MCP 服务器模板 。 azd init --template remote-mcp-functions-python -e mcpserver-python查看示例结构。 该模板包含多个示例项目,每个项目都有自己的自述文件:
- 公开可调用函数的 MCP 工具示例。
- MCP 资源和 MCP 提示词示例。
- 用于Azure的基础结构和部署脚本。
从 MCP 工具示例开始,该示例演示了将 API 公开为 MCP 工具的核心模式。
自定义 MCP 服务器函数以公开特定的 API 和服务。 修改函数代码以实现代理所需的工具和功能。
使用 Azure Functions Core Tools 在本地测试 MCP 服务器:
func start使用 Azure 开发人员 CLI 将 MCP 服务器部署到Azure:
azd up按照提示选择Azure订阅和资源组。
部署完成后,保存以下信息以供后续步骤使用:
- 远程 MCP 服务器终结点:
https://{function_app_name}.azurewebsites.net/runtime/webhooks/mcp - 身份验证信息:对于访问密钥身份验证,请注意Azure门户中的
mcp_extension系统密钥。
如果您更喜欢使用命令行界面工作流来检索函数访问密钥,请参阅 在 Azure Functions 中使用访问密钥。
- 远程 MCP 服务器终结点:
(可选)若要使用Microsoft Entra身份验证而不是基于密钥的访问,请对 Function App 启用Azure Functions身份验证,将允许的受众设置为 MCP 终结点所需的应用程序 ID URI,并验证 MCP Webhook 路径(
/runtime/webhooks/mcp)。 有关详细的设置步骤,请参阅教程在 Azure Functions 。
有关其他实现详细信息,包括高级身份验证模式和故障排除,请参阅教程
保护 MCP 服务器终结点
在与他人共享 MCP 服务器之前,请定义并应用安全基线:
- 需要身份验证。 除非方案明确需要匿名访问,否则请避免匿名访问。
- 将凭据视为机密。 不要在代码中硬编码密钥或将其签入版本控制系统。 将机密存储在安全存储中,例如 Azure 密钥保管库。
- 为下游调用实现最小权限。 如果 MCP 服务器调用内部 API,请将权限限定为仅暴露的工具所需的权限。
- 记录和监视工具调用。 使用Azure Functions日志记录来跟踪请求并排查故障。
使用Azure Functions托管 MCP 服务器时,身份验证选项将映射到 Foundry,如下所示:
-
函数密钥 (
x-functions-key): 对应于 Foundry 中基于密钥的身份验证。 - Microsoft Entra:对应于 Foundry 中的Microsoft Entra身份验证(代理标识或项目托管标识)。
- OAuth 标识传递:对应 Foundry 中的 OAuth 标识传递 (OBO)。
- 未经身份验证:受限制方案支持,但不建议用于生产工作负荷。
有关代理服务身份验证模式(例如基于密钥的身份验证、Microsoft Entra标识和 OAuth 标识传递),请参阅 MCP 服务器身份验证。
有关运行 MCP 工具时的治理和操作指南,请参阅 Foundry MCP 服务器最佳做法和安全指南。
在组织工具目录中注册 MCP 服务器
在 Azure API 中心注册 MCP 服务器时,将创建专用组织工具目录。 此步骤是可选的,但建议在整个组织中共享 MCP 服务器,并具有一致的治理和可发现性。
注册 MCP 服务器:
登录到 Azure 门户并转到Azure API 中心资源。
提示
API 中心名称将成为注册表筛选器中的专用工具目录名称。 选择有助于用户识别组织工具目录的信息性名称。
在左侧导航窗格中,展开 “清单 ”并选择“ 资产”。
选择 “注册资产 ”,然后选择 “MCP 服务器”。
提供有关 MCP 服务器所需的信息。
按照本教程,在 Azure API 中心中为 API 添加环境和部署。
为 MCP 服务器配置身份验证(可选):
在 API 中心资源的左侧导航窗格中,选择 “治理>授权”。
选择 “添加配置”。
选择符合 MCP 服务器要求的安全方案:
- API 密钥:开发人员在 Foundry 中的工具配置期间提供 API 密钥
- OAuth:配置 OAuth 2.0 身份验证参数
- HTTP:配置持有者令牌授权
提供所选方案的所需身份验证详细信息。
注意
如果选择 API 密钥身份验证,则存储在 Azure 密钥保管库 中的密钥不会在 Foundry 中自动使用。 开发人员在配置 MCP 服务器连接时必须提供 API 密钥。
配置访问管理(可选):
a. 进入 API 中心访问您的已注册 MCP 服务器。
B。 选择“详细信息>版本>管理访问权限”(预览版)。
C。 配置哪些用户或组可以通过组织目录访问此 MCP 服务器。
注册后,MCP 服务器会显示在 Foundry 工具目录中,其中包含配置的治理和身份验证设置。
在组织之外共享 MCP 服务器
组织工具目录(Azure API 中心)仅限于您的组织使用。 若要与外部团队或更广泛的社区共享 MCP 服务器,请考虑使用设置说明通过公共或专用GitHub存储库分发这些服务器。 目前没有跨组织 MCP 服务器市场,但 MCP 生态系统正在不断发展。 检查 MCP 规范站点 ,了解服务器发现和分发上的更新。
将 MCP 服务器连接到代理服务
可以通过组织工具目录(如果已注册)或自定义 MCP 工具将 MCP 服务器连接到代理服务。
使用组织工具目录进行连接
如果在 Azure API 中心注册了 MCP 服务器,则具有适当访问权限的用户可以发现并配置它:
在 Foundry 门户中,转到你的项目。
转到 “生成>工具” 或打开“代理生成器”。
浏览组织工具目录以查找已注册的 MCP 服务器。
按照工具目录中显示的配置指南将服务器添加到代理。
多个客户端(如 Foundry 代理服务和Visual Studio Code等开发人员工具)可以重复使用相同的 MCP 服务器,因为已正确配置身份验证。
提示
Foundry 还在 Add Tools 目录中显示Microsoft提供的 MCP 服务器。 例如,可以选择 Azure DevOps MCP 服务器(预览版)并连接组织以启用代理访问。 选择目录 MCP 服务器后,可以通过选择可用工具的子集来限制为代理启用哪些工具。 这在 Foundry 配置流中强制执行最低特权原则和治理机制。
使用自定义 MCP 工具进行连接
如果未在组织目录中注册 MCP 服务器,请将其直接添加为自定义工具:
在 Foundry 门户中,转到你的项目。
转到 “生成>工具” 或打开“代理生成器”。
选择 “添加工具>自定义>模型上下文协议”。
输入 MCP 服务器详细信息:
- 名称:远程 MCP 服务器的唯一名称
-
远程 MCP 服务器终结点:输入远程 MCP 服务器终结点 URL(例如
https://{function_app_name}.azurewebsites.net/runtime/webhooks/mcp) -
身份验证:选择身份验证方法:
-
基于密钥:将凭据作为
"x-functions-key": "{mcp_extension_system_key}"提供。 - Microsoft Entra ID:选择代理标识或项目托管标识。 提供 MCP 服务器上配置的 受众 (应用程序 ID URI)。 确保所选标识对 Function App 具有所需的权限。
- OAuth 标识传递 (OBO):为 OAuth 提供程序提供客户端 ID、客户端密钥、授权 URL、令牌 URL、刷新 URL(如果适用)和作用域。 当需要代表已登录用户采取行动时,请使用此选项。
-
基于密钥:将凭据作为
选择 “连接” 以注册自定义 MCP 工具。
有关详细配置步骤(包括项目连接和审批工作流),请参阅“连接到模型上下文协议服务器”(预览版)。
连接 MCP 服务器后,Foundry 项目中的代理可以调用自定义服务器公开的工具和函数。 如果正确配置身份验证,则多个客户端(如 Foundry 代理服务和Visual Studio Code等开发人员工具)可以重复使用同一 MCP 服务器。
验证 MCP 服务器是否以端到端方式工作
部署并连接服务器后,请验证服务器是否可发现,以及代理是否可以成功调用工具。
在 Foundry 门户中,确认 MCP 服务器显示在项目工具列表中。
创建代理(或打开现有代理),并添加 MCP 服务器工具。
运行一个需要使用 MCP 工具的提示。
如果启用审批,请查看工具名称和参数,然后批准调用。
确认工具调用成功。
如果工具调用失败,请在 Azure 门户中打开 Function App 日志,确认调用 MCP 终结点并诊断错误。
提示
可以通过在代理或工具配置体验中发出测试聊天提示,从 Foundry 执行快速验证。 这有助于在向更广泛的用户推出之前确认已发现和可调用所选工具。
故障 排除
下面是生成和连接 MCP 服务器时可能会遇到的一些常见问题:
-
MCP 服务器连接失败:确认服务器 URL 可从代理服务访问,并使用 MCP Webhook 路径(
/runtime/webhooks/mcp)。 对于公共终结点,请验证 URL 是否可公开访问。 对于专用终结点,请检查您的 标准代理设置及其专用网络 是否已正确配置。 在 Azure 门户中检查 Function App 日志中是否存在错误。 - 身份验证错误(401/403):验证你使用的是所选身份验证方法的正确密钥或令牌。 轮换可能已公开的密钥,并更新任何已保存的凭据。
- Microsoft Entra身份验证失败(401/403):验证 Foundry 工具配置中的访问群体(应用程序 ID URI)是否与 Function App 身份验证设置中配置的允许访问群体匹配。 确认所选标识(代理标识或项目托管标识)在 Function App 上具有所需的角色分配。 检查颁发者 URL 是否对你的 Microsoft Entra 租户正确。
- OAuth 标识传递失败:验证 Foundry 工具配置中的授权 URL、令牌 URL 和作用域是否与 OAuth 提供程序设置匹配。 确认客户端 ID 和客户端密码正确且未过期。 范围不匹配或终结点 URL 不正确是 OBO 令牌交换失败的常见原因。
- Tool 发现问题:如果在 Azure API 中心注册了服务器,请确认 API 已发布,并且你有权访问它。 如果添加了自定义工具,请确认终结点 URL 是否正确。
- 工具调用成功,但内部 API 失败:查看 MCP 服务器日志以确认发送到下游 API 的请求。 验证 MCP 服务器标识或 API 凭据是否具有所需的权限。
清理资源
完成后,请删除模板创建的Azure资源,以避免持续产生费用。
在 MCP 服务器项目文件夹中,运行:
azd down --purge如果您在 Azure API 中心注册了服务器,并且不再需要该 API 条目,请将其删除。