你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
适用于:开发人员 | 基本 | 基本 v2 | 标准 | 标准 v2 | 高级 | 高级 v2
本文介绍如何使用 API 管理来公开和管理现有的远程模型上下文协议 (MCP) 服务器 - 在 API 管理外部托管的工具服务器。 通过 API 管理公开和管理服务器的工具,以便 MCP 客户端可以使用 MCP 协议调用它们。
某些示例情境包括:
- 通过 API 管理,使用每服务器身份验证和速率限制来代理 LangChain 或 LangServe 工具服务器。
- 使用 IP 筛选和 OAuth 安全地将基于 Azure 逻辑应用的工具暴露给智能助手。
- 将 MCP 服务器工具从 Azure Functions 和开源运行时集中到 Azure API 中心。
- 启用 GitHub Copilot、Anthropic Claude 或 ChatGPT 以安全地与企业中的工具交互。
API 管理还支持从托管 REST API 在 API 管理中本机公开的 MCP 服务器。 有关详细信息,请参阅将 REST API 公开为 MCP 服务器。
了解有关以下方面的详细信息:
局限性
外部 MCP 服务器必须符合 MCP 版本
2025-06-18或更高版本。 服务器可以支持:- 没有授权或符合以下标准的授权协议: https://modelcontextprotocol.io/specification/2025-06-18/basic/authorization#standards-compliance
- 可流式传输的 HTTP 或 SSE 传输类型。
API 管理目前支持 MCP 服务器工具,但它不支持 MCP 资源或提示。
API 管理目前不支持 工作区中的 MCP 服务器功能。
先决条件
如果你还没有 API 管理实例,请完成以下快速入门:创建 Azure API 管理实例。 该实例必须位于支持 MCP 服务器的服务层之一中。
对外部 MCP 兼容的服务器(例如,托管在 Azure 逻辑应用、Azure Functions、LangServe 或其他平台中)的访问权限。
MCP 服务器的相应凭据(如 OAuth 2.0 客户端凭据或 API 密钥,具体取决于服务器),以便进行安全访问。
如果在 API 管理实例的全局范围(所有 API)内通过 Application Insights 或 Azure Monitor 启用诊断日志记录,请将前端响应的“要记录的有效负载字节数”设置设为 0。 此设置可防止在所有 API 中意外记录响应主体,并有助于确保 MCP 服务器的正常运行。 若要选择性地记录特定 API 的有效负载,请在 API 范围内单独配置设置,从而允许对响应日志记录进行有针对性的控制。
若要测试 MCP 服务器,请使用 Visual Studio Code 访问 GitHub Copilot 或 MCP 检查器等工具。
公开现有 MCP 服务器
按照以下步骤在 API 管理中公开现有 MCP 服务器:
- 在 Azure 门户中,转到 API 管理实例。
- 在左侧菜单中的“API”下,选择“MCP 服务器”>“+ 创建 MCP 服务器”。
- 选择“公开现有 MCP 服务器”。
- 在“后端 MCP 服务器”中:
- 输入现有的“MCP 服务器基础 URL”。 例如,对于 Microsoft Learn MCP 服务器为
https://learn.microsoft.com/api/mcp。 - 在 传输类型中,默认选择 可流式传输 HTTP 。
- 输入现有的“MCP 服务器基础 URL”。 例如,对于 Microsoft Learn MCP 服务器为
- 在“新 MCP 服务器”中:
- 在 API 管理中输入 MCP 服务器 的名称 。
- 在“基础路径”中,输入工具的路由前缀。 例如,
mytools。 - (可选)输入 MCP 服务器的“说明”。
- 选择 创建。
- MCP 服务器创建完毕,远程服务器操作以工具的形式公开。
- MCP 服务器列在 MCP 服务器 窗格中。 “服务器 URL”列显示要调用以进行测试或在客户端应用程序中调用的 MCP 服务器 URL。
重要
目前,API 管理不会显示现有 MCP 服务器中的工具。 必须在现有远程 MCP 服务器上注册和配置所有工具。
为 MCP 服务器配置策略
配置一个或多个 API 管理 策略 以帮助管理 MCP 服务器。 这些策略适用于在 MCP 服务器中作为工具暴露的所有 API 操作。 使用这些策略控制工具的访问、身份验证和其他方面。
详细了解如何配置策略:
谨慎
请勿使用 context.Response.Body MCP 服务器策略中的变量访问响应正文。 这样做会触发响应缓冲,这会干扰 MCP 服务器所需的流式处理行为,并可能导致它们出现故障。
若要为 MCP 服务器配置策略,请执行以下步骤:
在 Azure 门户中,转到 API 管理实例。
在左侧菜单中的“API”下,选择“MCP 服务器”。
从列表中选择一个 MCP 服务器。
在左侧菜单中的 MCP 下,选择“ 策略”。
在策略编辑器中,添加或编辑要应用于 MCP 服务器工具的策略。 以 XML 格式定义策略。
例如,可以添加策略来限制对 MCP 服务器工具的调用(在此示例中,每个 MCP 会话每 60 秒调用一次)。
<!-- Rate limit tool calls by Mcp-Session-Id header --> <set-variable name="body" value="@(context.Request.Body.As<string>(preserveContent: true))" /> <choose> <when condition="@( Newtonsoft.Json.Linq.JObject.Parse((string)context.Variables["body"])["method"] != null && Newtonsoft.Json.Linq.JObject.Parse((string)context.Variables["body"])["method"].ToString() == "tools/call" )"> <rate-limit-by-key calls="1" renewal-period="60" counter-key="@( context.Request.Headers.GetValueOrDefault("Mcp-Session-Id", "unknown") )" /> </when> </choose>
注释
API 管理会在评估 MCP 服务器范围内的策略之前评估全局(所有 API)范围内配置的策略。
验证和使用 MCP 服务器
使用合规的 LLM 代理(如 GitHub Copilot、Semantic Kernel 或 Copilot Studio)或测试客户端(例如 curl)调用 API 管理托管的 MCP 终结点。 确保请求包含适当的标头或令牌,并确认 MCP 服务器的成功路由和响应。
小窍门
如果使用 MCP 检查器 测试由 API 管理管理的 MCP 服务器,请使用版本 0.9.0。
在 Visual Studio Code 中添加 MCP 服务器
在 Visual Studio Code 中,在代理模式下使用 GitHub Copilot 聊天添加 MCP 服务器并使用这些工具。 有关 Visual Studio Code 中 MCP 服务器的背景信息,请参阅在 VS Code 中使用 MCP 服务器。
若要在 Visual Studio Code 中添加 MCP 服务器,请执行以下作:
使用命令面板中的 MCP: Add Server 命令。
出现提示时,选择服务器类型:HTTP(HTTP 或服务器发送事件)。
在 API 管理中输入 MCP 服务器的“服务器 URL”。 例如,
https://<apim-service-name>.azure-api.net/<api-name>-mcp/mcp对于 MCP 终结点。输入所选的“服务器 ID”。
选择是将配置保存到 工作区设置 还是 用户设置。
工作区设置 - 服务器配置被保存到一个文件,该文件仅在当前工作区中可用。
用户设置 - 服务器配置将添加到全局
settings.json文件,可在所有工作区中使用。 配置如下所示:
为 JSON 配置添加字段,用于设置例如身份验证标头。 以下示例显示了在标头中作为输入值传递的 API 管理订阅密钥的配置。 详细了解 配置格式
在代理模式下使用工具
在 Visual Studio Code 中添加 MCP 服务器后,可以在代理模式下使用工具。
在 GitHub Copilot 聊天中,选择 代理 模式,然后选择 “工具” 按钮以查看可用的工具。
从 MCP 服务器中选择一个或多个可在聊天中使用的工具。
在聊天中输入提示以调用该工具。 例如,如果选择了一个工具来获取有关订单的信息,则可以向代理询问订单。
Get information for order 2选择 “继续 ”以查看结果。 代理使用该工具调用 MCP 服务器,并在聊天中返回结果。
故障排除和已知问题
| 问题 | 原因 | 解决方案 |
|---|---|---|
后端的 401 Unauthorized 错误 |
授权标头未转发 | 如有必要,请使用 set-header 策略手动附加令牌 |
| API 调用在 API 管理中有用,但在代理中失败 | 基础 URL 不正确或令牌缺失 | 仔细检查安全策略和终结点 |
| 启用诊断日志时 MCP 服务器流式处理失败 | 通过策略记录响应正文或访问响应正文会干扰 MCP 传输 | 在所有 API 范围内禁用响应正文日志记录 - 请参阅先决条件 |