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 upazd 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,请设置以下内容。
- 注册Shipment API(准备)
- 从APIs>API>Createfrom definition>OpenAPI打开docs/api.yaml。
- 显示名称:发货API - 名称:shipmant api - API URL后缀:API 创建
- 注册后,从设置
- https:///api将设置为Web service URL(这相当于指定后端) - 取消选中Subscription required(为了使本样本的认证最小化) - alt text
- 保存,保存
- 注册Shipment REST MCP
- 从MCP服务器>MCP服务器的制作中选择“将API作为MCP服务器公开”
- 选择Shipment API作为API,API操作选择所有API
- 作为新的MCP服务器的设定,指定以下“制作”
- 显示名称:装运REST MCP - 名称:装运休息mcp - 说明:可以注册、参照配送行李
- 注册Shipment Tracking MCP
- 从MCP服务器>MCP服务器的制作中选择“公开现有的MCP服务器”
- 作为新的MCP服务器的设定,指定以下“制作”
- MCP服务器的基本URL:指定https:/\ - 显示名称:发货跟踪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://.data..azure-apicenter.ms中所述修改相应参数的值。
前提条件(仅需首次设置):
- 创建Entra ID应用程序注册
Azure门户>API中心> API中心门户 > 设置 > 配置Entra ID 中所述修改相应参数的值。因此 -apic-aad 将自动创建名为的Entra ID应用程序注册,并将所需的角色授予服务承担者。
但是,被制作的应用程序作为机密客户机(confidential client)被构成。由于测试脚本使用设备代码流(公共客户端流),因此在首次运行时脚本会自动启用公共客户端流。手动设置时Azure Portal>App registrations> -apic-aad > 认证 > 允许公共客户端流 的 是 中所述修改相应参数的值。
- 添加RBAC角色
测试运行用户 Azure API中心数据读取器 授予角色。 门户设置将自动授予服务承担者,但设备代码流(授权授权授权)将以用户的权限发布令牌执行用户自身也需要角色是:
az role assignment create \
--assignee "" \
--role "Azure API Center Data Reader" \
--scope "/subscriptions//resourceGroups//providers/Microsoft.ApiCenter/services/"- 运行测试
脚本自动从azd环境中检测API中心名称区域-apic-aad 寻找应用程序注册。由于使用设备代码流身份验证,运行时将提示浏览器进行身份验证。
./tests/apic_dataplane_test.sh也可以在环境变量中手动指定:
APIC_SERVICE_NAME=apic-apimcp \
APIC_REGION=japaneast \
APIC_CLIENT_ID= \
./tests/apic_dataplane_test.sh注: 数据平面API不能通过Azure CLI令牌直接访问(AADSTS 65002)。需要通过Entra ID应用程序注册的认证。了解更多信息 API中心门户的自主机 来修改标记元素的显示属性。
削除:
azd down