天蓝色apim-mcp试剂
一个参考实现,用于将Azure API管理公开为MCP(模型上下文协议)服务器,使Claude和M365 Copilot等人工智能代理能够使用自然语言发现、查询和与您的API交互-本质上是 API目录的副本.
建筑
Claude / Copilot / VS Code (MCP Client)
|
Azure API Management (MCP Server feature)
- Auth: subscription key + Entra ID
- Maps REST operations -> MCP tools
|
Azure Container Apps (Functions, scale-to-zero)
- RESTful API endpoints
|
Azure ARM APIs (managed identity)
- Reads API metadata from APIM instancesAPIM内置的MCP服务器功能处理MCP协议。函数应用程序是一个普通的REST API。
REST API端点
| 方法 | 路径 | 描述 |
|---|---|---|
| 得到 | /instances | 列出所有已配置的APIM实例 |
| 得到 | /instances/{name}/apis | 列出实例中的所有API |
| 得到 | /instances/{name}/apis/search?keyword={kw} | 按关键字搜索API |
| 得到 | /instances/{name}/apis/{apiId} | 获取API元数据 |
| 得到 | /instances/{name}/apis/{apiId}/spec | 下载OpenAPI规范 |
| 得到 | /instances/{name}/apis/{apiId}/operations | 列出API中的所有操作(终结点) |
| 得到 | /instances/{name}/catalog | 完整目录:所有API及其操作 |
| 职位 | /chat | 自然语言API查询(Azure OpenAI) |
| 得到 | /health | 健康检查 |
先决条件
- .NET 10 SDK
- Azure功能核心工具v4
- Azure命令行界面
- 码头工人
- 具有至少一个API管理实例的Azure订阅
- Azure CLI已登录(
az login) - (可选)Azure OpenAI资源
/chat端点
本地开发
- 克隆仓库并还原包:
dotnet restore- 在中配置您的APIM实例
src/AzureApimMcp.Functions/local.settings.json:
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated",
"Apim__Instances__0__Name": "dev",
"Apim__Instances__0__SubscriptionId": "",
"Apim__Instances__0__ResourceGroup": "",
"Apim__Instances__0__ServiceName": "",
"AzureOpenAI__Endpoint": "",
"AzureOpenAI__DeploymentName": ""
}
}Azure OpenAI设置是可选的。如果省略 /chat 终结点将不可用,但所有其他终结点将正常工作。
- 在本地运行:
cd src/AzureApimMcp.Functions
func start- 测试端点:
curl http://localhost:7071/health
curl http://localhost:7071/instances
curl http://localhost:7071/instances/dev/apis
curl "http://localhost:7071/instances/dev/apis/search?keyword=payment"
curl http://localhost:7071/instances/dev/apis/my-api/operations
curl http://localhost:7071/instances/dev/catalog
curl -X POST http://localhost:7071/chat \
-H "Content-Type: application/json" \
-d '{"message": "which API gives me a customer transaction history?", "sessionId": "test1"}'部署
快速部署(推荐)
使用附带的部署脚本来构建、推送和部署所有内容:
./deploy.ps1选项:
./deploy.ps1 -SkipBuild--跳过Docker构建/推送,部署基础架构,仅重新启动./deploy.ps1 -SkipInfra--跳过二头肌部署,仅构建和重新启动
手动部署
构建并推送容器镜像
az acr login --name
docker build -f src/AzureApimMcp.Functions/Dockerfile -t .azurecr.io/apim-mcp:latest .
docker push .azurecr.io/apim-mcp:latest使用二头肌部署基础设施
az deployment group create \
--resource-group \
--template-file infra/main.bicep \
--parameters infra/main.bicepparam更新容器应用程序
az containerapp update \
--resource-group \
--name apim-mcp-app \
--image .azurecr.io/apim-mcp:latest配置APIM MCP服务器
部署后,配置APIM以将API公开为MCP服务器:
- 导航到Azure门户中的APIM实例
- 首选 MCP服务器 在API部分
- 将已部署的API添加为MCP服务器
- 从REST操作配置MCP工具映射
添加多个APIM实例
通过环境变量添加更多实例或 local.settings.json:
{
"Apim__Instances__0__Name": "production",
"Apim__Instances__0__SubscriptionId": "...",
"Apim__Instances__0__ResourceGroup": "...",
"Apim__Instances__0__ServiceName": "...",
"Apim__Instances__1__Name": "staging",
"Apim__Instances__1__SubscriptionId": "...",
"Apim__Instances__1__ResourceGroup": "...",
"Apim__Instances__1__ServiceName": "..."
}项目结构
src/AzureApimMcp.Functions/
Configuration/ - Strongly-typed config models
Services/ - IApimService + ApimService (ARM SDK)
Functions/ - HTTP trigger functions (REST + Chat endpoints)
Program.cs - Host builder + DI registration
openapi.json - OpenAPI specification
infra/
main.bicep - Orchestrator
main.bicepparam - Parameter values
modules/ - ACR, ACA, identity, RBAC, APIM
deploy.ps1 - Build, push, and deploy script