公开和管理现有 MCP 服务器

本文介绍如何使用 API Management 公开和管理现有远程 Model 上下文协议 (MCP) 服务器 -API Management 外部托管的工具服务器。 通过API Management公开和管理服务器的工具,以便 MCP 客户端可以使用 MCP 协议调用它们。

示例方案包括:

  • 通过 API Management 对 LangChainLangServe 工具服务器进行代理,并对每个服务器进行身份验证和速率限制。
  • 使用 IP 筛选和 OAuth 安全地将基于Azure 逻辑应用的工具公开给 copilots。

API Management 还支持在 API Management 中托管的 REST API 中本机公开的 MCP 服务器。 有关详细信息,请参阅将 REST API 公开为 MCP 服务器

了解有关以下方面的详细信息:

局限性

先决条件

  • 如果还没有API Management实例,请完成以下快速入门:创建Azure API 管理实例。 该实例必须位于支持 MCP 服务器的服务层之一中。

  • 访问外部MCP兼容的服务器(例如,托管在Azure 逻辑应用、Azure Functions、LangServe或其他平台上)。

  • MCP 服务器的相应凭据(例如 OAuth 2.0 客户端凭据或 API 密钥,具体取决于服务器)以确保安全访问。

  • 如果在全局范围内(所有 API)为 API Management 实例通过 Application Insights 或 Azure Monitor 启用诊断日志记录,请将前端响应的记录的有效负载字节数设置为 0。 此设置可防止在所有 API 中意外记录响应主体,并有助于确保 MCP 服务器的正常运行。 若要选择性地记录特定 API 的有效负载,请在 API 范围内单独配置设置,从而允许对响应日志记录进行有针对性的控制。

  • 若要测试 MCP 服务器,可以使用带有 GitHub Copilot 的 Visual Studio Code 或诸如 MCP 检查器之类的工具。

公开现有 MCP 服务器

按照以下步骤在 API Management 中公开现有 MCP 服务器:

  1. Azure portal 中,转到API Management实例。
  2. 在左侧菜单中的“API”下,选择“MCP 服务器”“+ 创建 MCP 服务器”>
  3. 选择“公开现有 MCP 服务器”
  4. 在“后端 MCP 服务器”中
    1. 输入现有的“MCP 服务器基础 URL”。 例如, https://learn.microsoft.com/api/mcp 对于 Microsoft Learn MCP 服务器。
    2. 传输类型中,默认选择 可流式传输 HTTP
  5. 在“新 MCP 服务器”中:
    1. 在 API Management 中输入 MCP 服务器的 Name
    2. 在“基础路径”中,输入工具的路由前缀。 例如,mytools
    3. (可选)输入 MCP 服务器的“说明”。
  6. “产品”中,可以选择一个或多个要与 MCP 服务器关联的产品。 将 MCP 服务器与产品关联后,可以通过该产品管理 MCP 服务器的访问和订阅。
  7. 选择 创建

在门户中创建 MCP 服务器的屏幕截图。

  • 门户会创建 MCP 服务器,并将远程服务器的操作作为工具提供。
  • 门户在 “MCP 服务器”窗格中列出 MCP 服务器 。 “服务器 URL”列显示要调用以进行测试或在客户端应用程序中调用的 MCP 服务器 URL。

注释

可以选择将操作作为工具公开,以便在 MCP 服务器的 “工具” 边栏选项卡中供 AI 代理和 LLM 稍后调用。

门户中 MCP 服务器列表的屏幕截图。

为 MCP 服务器配置策略

配置一个或多个 API Management policies 以帮助管理 MCP 服务器。 这些策略适用于在 MCP 服务器中作为工具暴露的所有 API 操作。 使用这些策略来控制工具的访问、身份验证和其他方面。

详细了解如何配置策略:

注意

不要在 MCP 服务器策略中使用 context.Response.Body 变量来访问响应正文。 这样做会触发响应缓冲,这会干扰 MCP 服务器所需的流式处理行为,并可能导致它们出现故障。

若要为 MCP 服务器配置策略,请执行以下步骤:

  1. Azure portal 中,转到API Management实例。

  2. 在左侧菜单中的“API”下,选择“MCP 服务器”。

  3. 从列表中选择一个 MCP 服务器。

  4. 在左侧菜单中的 MCP 下,选择“ 策略”。

  5. 在策略编辑器中,添加或编辑要应用于 MCP 服务器工具的策略。 以 XML 格式定义策略。

    例如,可以将策略添加到“入站”部分,以限制对 MCP 服务器工具的调用(在此示例中,每个 IP 地址每 30 秒 5 次调用),并添加调用方代理 ID 的自定义跟踪。

    <inbound>
        <base />
        <rate-limit-by-key calls="5" renewal-period="30" counter-key="@(context.Request.IpAddress)" remaining-calls-variable-name="remainingCallsPerIP" />
     	<trace source="My MCP" severity="information">
     		<message>My MCP trace info</message>
     		<metadata name="agent-id" value="@(context.Request.Headers.GetValueOrDefault("agent-id", "n/a"))" />
    </inbound>
    

    MCP 服务器的策略编辑器的屏幕截图。

注释

API 管理在评估 MCP 服务器范围内的策略之前,会先评估在全局(所有 API)范围内配置的策略。

验证和使用 MCP 服务器

使用合规的 LLM 代理(如 GitHub Copilot、语义内核 或 Copilot Studio)或测试客户端(如 curl)调用API Management托管的 MCP 终结点。 确保请求包含适当的标头或令牌,并确认 MCP 服务器的成功路由和响应。

小窍门

如果使用 MCP 检查器测试由API Management管理的 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 服务器,请执行以下作:

  1. 使用命令面板中的 MCP: Add Server 命令。

  2. 出现提示时,选择服务器类型:HTTP(HTTP 或服务器发送事件)。

  3. 在 API Management 中输入 MCP 服务器的 Server URL。 例如,MCP 端点的 https://<apim-service-name>.azure-api.net/<api-name>-mcp/mcp

  4. 输入所选的“服务器 ID”。

  5. 选择是将配置保存到 工作区设置 还是 用户设置

    • 工作区设置 - 服务器配置被保存到一个文件,该文件仅在当前工作区中可用。

    • 用户设置 - 服务器配置将添加到全局 settings.json 文件,可在所有工作区中使用。 配置如下所示:

    Visual Studio Code 中配置的 MCP 服务器的屏幕截图。

为 JSON 配置添加字段,用于设置例如身份验证标头。 以下示例显示如何将 API 管理订阅密钥作为输入值包含在标头中进行配置。 详细了解 配置格式

MCP 服务器的身份验证标头配置的屏幕截图

在代理模式下使用工具

在 Visual Studio Code 中添加 MCP 服务器后,可以在代理模式下使用工具。

  1. 在 GitHub Copilot 聊天中,选择 Agent 模式,然后选择 Tools 按钮以查看可用的工具。

    聊天中的“工具”按钮的屏幕截图。

  2. 从 MCP 服务器中选择一个或多个工具,在聊天中可用。

    在 Visual Studio Code 中选择工具的截图。

  3. 在聊天中输入提示以调用该工具。 例如,如果选择了一个工具来获取有关订单的信息,则可以向代理询问订单。

    Get information for order 2
    

    选择 “继续 ”以查看结果。 代理使用该工具调用 MCP 服务器,并在聊天中返回结果。

    Visual Studio Code 中聊天结果的截图。

故障排除和已知问题

问题 原因 Solution
后端的 401 Unauthorized 错误 授权标头未转发 如有必要,请使用 set-header 策略手动附加令牌
API 调用在 API 管理中正常工作,但在代理程序中失败 基础 URL 不正确或令牌缺失 仔细检查安全策略和终结点
启用诊断日志时 MCP 服务器流式处理失败 通过策略记录响应正文或访问响应正文会干扰 MCP 传输 在所有 API 范围内禁用响应正文日志记录 - 请参阅先决条件