MCP服务器与API管理功能示例

这是一个Azure参考实现,通过单个Azure API管理网关提供MCP服务器和状态变更操作的REST API,适用于配送跟踪和管理的学习与验证。

  • by mizti
  • Shell
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 mizti/mcp-apim-functions-sample

使用说明

mcp-apim函数示例

具有API管理和功能的MCP服务器的Azure参考实现

建筑

此回购提供了什么

这是一个最小的Azure示例,通过单个Azure API管理(APIM)网关公开:

  • 托管在Azure Functions上的MCP服务器(Python编程模型v2)公开 工具 (只读,装运跟踪场景)
  • 托管在Azure函数上的小型REST API 状态变化 操作(创建/读取货物),APIM还将其暴露为 MCP工具

它专为学习和验证而设计,可以使用Azure Developer CLI进行端到端部署:

  • 一个命令部署: azd up
  • APIM是唯一的公共入口点
  • Azure功能开启 弹性消费
  • 启用应用程序洞察

端点(APIM公共):

  • MCP服务器(装运跟踪/详细信息/规则,可流式HTTP):APIM 现有MCP服务器 端点URL(如所示 azd up 输出)
  • MCP服务器(发货,流式HTTP):APIM 将REST API公开为MCP服务器 端点URL(如所示 azd up 输出)

身份验证(示例):APIM订阅密钥。

注意:根据您的APIM配置,订阅密钥可能是可选的。附带的烟雾测试脚本支持这两种模式。

如何使用

先决条件:

  • Azure订阅
  • Azure开发者命令行界面(azd)
  • Azure命令行界面(az)

部署:

azd auth login
azd env set APIM_PUBLISHER_EMAIL "you@example.com"
azd env set APIM_PUBLISHER_NAME "Your Name"
azd up

注意:资源命名使用 AZURE_ENV_NAME 通过 infra/main.parameters.json 因此,您为其输入的Azure环境名称 azd 反映在配置的资源名称中。

之后 azd up,请注意打印的APIM网关基本URL和订阅密钥。

调用REST API(示例):

curl -sS -X POST "${APIM_BASE_URL}/api/shipments" \
	-H "Content-Type: application/json" \
	-H "Ocp-Apim-Subscription-Key: ${APIM_SUBSCRIPTION_KEY}" \
	-d '{"recipientName":"佐藤花子","from":"東京都千代田区","to":"大阪府大阪市","weightKg":10,"sizeCm":"40x30x20","note":"割れ物注意"}'

呼叫MCP服务器:

  • 使用任何支持以下功能的MCP客户端 可流式传输的HTTP.
  • 对于VS Code/GitHub Copilot,配置由打印的服务器URL azd up 并包括 Ocp-Apim-Subscription-Key 头球

注:APIM MCP端点可能会以SSE帧输出进行响应(event: / data:)即使后端使用Streamable HTTP。

烟雾测试:

  • 跑 ./tests/apim_smoke_test.sh 通过APIM验证REST+MCP。

清理:

azd down

日本语

此存储库提供

此存储库是一个最小的示例,它将单个Azure API管理(APIM)作为网关,同时发布以下内容:。

  • 在Azure Functions(Python编程模型v2)中运行 MCP服务器(参照系的 工具 公开。配送跟踪、配送详细信息、配送规则)
  • 在空气功能中运行 REST API(配送货物的登记/参照等状态变更系)

用于学习和验证,功能最小。可以通过Azure Developer CLI批量部署。

  • azd up 然后将基础设施+应用程序集中部署
  • 公共端点假定为APIM
  • Azure Functions是 弹性消费
  • 启用应用程序索引

端点:

  • 参考:配送跟踪/配送详细信息/配送规则。可流HTTP):APIM的 现有MCP服务器 服务器URL(azd up 在输出中显示)
  • 配送系:shipments操作作为tools公开。可流HTTP):APIM的 REST API作为MCP服务器 服务器URL(azd up 在输出中显示)

认证(示例):APIM Subscription Key。

注意:根据APIM的设置,可以不需要Subscription Key。本存储库的烟雾测试可在任何设置下运行。

使用此存储库

前提:

  • Azure预订
  • Azure开发者命令行界面(azd)
  • Azure命令行界面(az)

部署:

azd auth login
azd env set APIM_PUBLISHER_EMAIL "you@example.com"
azd env set APIM_PUBLISHER_NAME "Your Name"
azd up

azd up 中描述的场景,使用以下步骤创建明细表,以便在概念设计中分析体量的体积。

功能测试

通过以下命令可以确认函数应用程序是否正常运行。

./tests/functions_smoke_test.sh

如果想手动调用REST API,请参考以下内容:

curl -sS -X POST "${APIM_BASE_URL}/api/shipments" \
	-H "Content-Type: application/json" \
	-H "Ocp-Apim-Subscription-Key: ${APIM_SUBSCRIPTION_KEY}" \
	-d '{"recipientName":"佐藤花子","from":"東京都千代田区","to":"大阪府大阪市","weightKg":10,"sizeCm":"40x30x20","note":"割れ物注意"}'

API管理设置

※本来MCP设定也可以用Bicep进行,但是因为没有足够的文档信息,所以APIM的MCP设定 你先去门户吧。

要通过API管理设置MCP,请设置以下内容。

  1. 注册Shipment API(准备)
  • 从APIs>API>Createfrom definition>OpenAPI打开docs/api.yaml。
    • 显示名称:发货API
    • 名称:shipmant api
    • API URL后缀:API 创建
  • 注册后,从设置
    • https://<Shipment REST 関数アプリURL>/api将设置为Web service URL(这相当于指定后端)
    • 取消选中Subscription required(为了使本样本的认证最小化)
  • 保存,保存
  1. 注册Shipment REST MCP
  • 从MCP服务器>MCP服务器的制作中选择“将API作为MCP服务器公开”
  • 选择Shipment API作为API,API操作选择所有API
  • 作为新的MCP服务器的设定,指定以下“制作”
    • 显示名称:装运REST MCP
    • 名称:装运休息mcp
    • 说明:可以注册、参照配送行李
  1. 注册Shipment Tracking MCP
  • 从MCP服务器>MCP服务器的制作中选择“公开现有的MCP服务器”
  • 作为新的MCP服务器的设定,指定以下“制作”
    • MCP服务器的基本URL:指定https:/<Shipment MCP函数应用程序的URL>
    • 显示名称:发货跟踪MCP
    • 名称:货物跟踪mcp
    • 基本路径:shipment-mcp
    • 说明:您可以跟踪配送、查看配送详细信息和查看配送规则

至此,后端的函数应用程序可以在API管理中作为MCP公开。

您可以通过更改注册的MCP设置和策略来进行订阅密钥认证或应用各种策略。另外,也可以和API一样经由产品等公开。

./tests/apim_smoke_test.sh

中描述的场景,使用以下步骤创建明细表,以便在概念设计中分析体量的体积。

API中心测试

有两种测试脚本可通过REST API浏览和验证在API中心注册的API。

控制平面API测试

测试通过Azure资源管理器(ARM)获取API中心信息。az rest 中描述的场景,使用以下步骤创建明细表,以便在概念设计中分析体量的体积。

./tests/apic_rest_api_test.sh

所需权限: Microsoft.ApiCenter/services/*/read(Reader角色等) 自动授予已构建的用户

数据平面API测试

API Center数据平面API(https://<name>.data.<region>.azure-apicenter.ms中所述修改相应参数的值。

前提条件(仅需首次设置):

  1. 创建Entra ID应用程序注册 Azure门户>API中心> API中心门户 > 设置 > 配置Entra ID 中所述修改相应参数的值。因此 <api-center-name>-apic-aad 将自动创建名为的Entra ID应用程序注册,并将所需的角色授予服务承担者。

    但是,被制作的应用程序作为机密客户机(confidential client)被构成。由于测试脚本使用设备代码流(公共客户端流),因此在首次运行时脚本会自动启用公共客户端流。手动设置时Azure Portal>App registrations> <api-center-name>-apic-aad > 认证 > 允许公共客户端流 的 是 中所述修改相应参数的值。

  2. 添加RBAC角色 测试运行用户 Azure API中心数据读取器 授予角色。 门户设置将自动授予服务承担者,但设备代码流(授权授权授权)将以用户的权限发布令牌执行用户自身也需要角色是:

    az role assignment create \
      --assignee "<user-object-id-or-upn>" \
      --role "Azure API Center Data Reader" \
      --scope "/subscriptions/<subscription-id>/resourceGroups/<rg>/providers/Microsoft.ApiCenter/services/<api-center-name>"
    
  3. 运行测试 脚本自动从azd环境中检测API中心名称区域<api-center-name>-apic-aad 寻找应用程序注册。由于使用设备代码流身份验证,运行时将提示浏览器进行身份验证。

    ./tests/apic_dataplane_test.sh
    

    也可以在环境变量中手动指定:

    APIC_SERVICE_NAME=apic-apimcp \
    APIC_REGION=japaneast \
    APIC_CLIENT_ID=<app-registration-client-id> \
    ./tests/apic_dataplane_test.sh
    

注: 数据平面API不能通过Azure CLI令牌直接访问(AADSTS 65002)。需要通过Entra ID应用程序注册的认证。了解更多信息 API中心门户的自主机 来修改标记元素的显示属性。

削除:

azd down