Azure APIM MCP服务器-微电子半导体订单API
半导体订购使用Python/FastAPI和PostgreSQL构建的API,部署到Azure容器应用程序,并通过Azure API管理公开为REST API和MCP(模型上下文协议)服务器。
建筑
graph LR
Client[REST Client] -->|subscription key| APIM[Azure API Management]
Claude[Claude Desktop] -->|MCP over HTTP| APIM
APIM --> CA[Container App]
CA -->|SQLAlchemy| PG[(PostgreSQL)]
DevPortal[Developer Portal] --> APIM
ACR[Container Registry] -->|image pull| CA运作原理
REST API:客户端使用订阅密钥调用APIM /orders/api/v1/*.APIM将请求转发到容器应用程序后端。
MCP服务器:AI助手(Claude Desktop、VS Code等)连接到APIM /st-orders-mcp/mcp 使用流式HTTP传输。APIM本机将MCP工具调用(JSON-RPC)转换为REST API操作-不需要自定义MCP代码。MCP工具通过APIM REST API调用路由(不直接到后端),并通过策略注入内部订阅密钥。
技术栈
| 组件 | 技术 |
|---|---|
| API框架 | FastAPI(Python 3.11) |
| 数据库 | PostgreSQL 16 |
| ORM | SQL炼金术2.0(异步) |
| 移民 | Alembic |
| MCP服务器 | APIM本地MCP网关 |
| 基础架构 | Azure二头肌 |
| 托管 | Azure容器应用程序 |
| API网关 | Azure API管理(StandardV2层) |
| 身份验证 | APIM订阅密钥 |
| CI/CD | GitHub操作 |
| 容器注册表 | Azure容器注册表 |
本地开发
先决条件
- Docker&Docker编写
- Python 3.11+
快速开始
# Clone the repo
git clone https://github.com/ozgurkarahan/azure-apim-mcp-server.git
cd azure-apim-mcp-server
# Start with Docker Compose
docker-compose up --build
# API docs available at http://localhost:8000/docs运行测试
pip install -r requirements-dev.txt
pytest tests/ -v代码检查
ruff check src/ tests/API 参考
所有端点都在 /api/v1/.
| 方法 | 路径 | 描述 |
|---|---|---|
| 得到 | /health | 健康检查 |
| 得到 | /health/db | 数据库连接 |
| 获取/发布 | /api/v1/products | 列出/创建产品 |
| 获取/放置/删除 | /api/v1/products/{id} | 获取/更新/软删除产品 |
| 获取/发布 | /api/v1/customers | 列出/创建客户 |
| 获取/放置 | /api/v1/customers/{id} | 获取/更新客户 |
| 获取/发布 | /api/v1/orders | 列出/创建订单 |
| 获取/放置/删除 | /api/v1/orders/{id} | 获取/更新/取消订单 |
MCP服务器
APIM原生MCP
APIM将8个REST API操作作为MCP工具公开在 /st-orders-mcp/mcp.通过二头肌展开(infra/modules/apim-mcp.bicep),不需要自定义代码。
工具:list_products、get_product、list_customers、get_customer、list_orders、get_order、create_order、update_order_status
Claude桌面配置:
{
"mcpServers": {
"st-orders": {
"type": "http",
"url": "https://.azure-api.net/st-orders-mcp/mcp",
"headers": {
"Ocp-Apim-Subscription-Key": ""
}
}
}
}Azure部署
先决条件
- Azure命令行界面
- Azure开发者命令行界面(
azd) - 资源组(例如。,
az group create --name rg-poc-apim --location swedencentral)
快速部署 azd
这是主要的部署方法。 azd 在单个命令中处理基础设施配置、应用程序部署和部署后配置。
# Initialize the azd environment
azd init -e dev
# Set required parameters
azd env set PUBLISHER_EMAIL
azd env set POSTGRES_ADMIN_PASSWORD
# Optional parameters
azd env set AUTH_CLIENT_ID
azd env set AI_FOUNDRY_PRINCIPAL_ID
# Deploy everything
azd up环境变量 (阅读者 infra/main.bicepparam):
| 变量 | 必填 | 描述 |
|---|---|---|
PUBLISHER_EMAIL | 是 | APIM发布者的电子邮件地址 |
POSTGRES_ADMIN_PASSWORD | 是 | PostgreSQL管理员密码(不得包含 @ --中断异步URL解析) |
AUTH_CLIENT_ID | 否 | Entra ID应用程序注册客户端ID(仅当启用Easy Auth时) |
AI_FOUNDRY_PRINCIPAL_ID | 否 | APIM角色分配的AI Foundry中心管理的身份主体ID |
它是如何工作的:
- 第一阶段 —
azd up提供基础设施(ACR、APIM、PostgreSQL、带占位符映像的容器应用程序)并构建/部署应用程序容器 - 第2阶段 --The
postdeploy钩子(hooks/postdeploy.sh/postdeploy.ps1)部署后自动运行:等待应用程序健康检查,然后使用以下命令重新运行二头肌部署DEPLOY_API_CONFIG=true导入OpenAPI规范并配置MCP
这意味着一个单一 azd up 处理整个部署过程,无需手动执行两阶段步骤。
注: APIM StandardV2在首次部署时需要大约5分钟的时间进行配置。
GitHub操作(CI/CD)
GitHub操作工作流(.github/workflows/deploy.yml)运行推送 main 并使相同的两相流自动化:
- 部署基础设施 --第一阶段二头肌部署(基础设施)
- 构建并推进 --构建Docker镜像,推送到ACR
- 部署应用程序 --使用新映像更新容器应用程序
- 配置apim -健康检查+第2阶段Bicep部署(API导入+MCP配置)
所需的GitHub机密:
| 机密 | 必填 | 描述 |
|---|---|---|
AZURE_CREDENTIALS | 是 | 服务主体JSON来自 az ad sp create-for-rbac |
AZURE_RESOURCE_GROUP | 是 | 资源组名称(例如。, rg-poc-apim) |
POSTGRES_ADMIN_PASSWORD | 是 | PostgreSQL管理员密码(不得包含 @) |
PUBLISHER_EMAIL | 是 | APIM发布者的电子邮件地址 |
AUTH_CLIENT_ID | 否 | Entra ID应用程序注册客户端ID |
AI_FOUNDRY_PRINCIPAL_ID | 否 | AI Foundry中心管理的身份主体ID |
服务主体设置 (GitHub操作需要):
# Create SP with Contributor role
az ad sp create-for-rbac --name "github-deploy-sp" --role Contributor \
--scopes /subscriptions//resourceGroups/rg-poc-apim
# The SP also needs User Access Administrator for Bicep role assignments
SP_OBJECT_ID=$(az ad sp list --display-name "github-deploy-sp" --query "[0].id" -o tsv)
az role assignment create --assignee $SP_OBJECT_ID \
--role "User Access Administrator" \
--scope /subscriptions//resourceGroups/rg-poc-apimAzure资源(通过二头肌)
- 用户分配的托管身份
- 密钥库
- Azure容器注册表(基本)
- PostgreSQL灵活服务器(B1ms,v16)
- 容器应用环境+容器应用
- API管理(StandardV2层,系统相关MI)
- APIM REST API(从OpenAPI导入)
- APIM MCP API(
apiType: 'mcp',8工具)
项目结构
├── .github/workflows/ # CI/CD pipelines
├── hooks/ # azd lifecycle hooks
│ ├── postdeploy.sh # Phase 2 Bicep deployment (Linux/macOS)
│ └── postdeploy.ps1 # Phase 2 Bicep deployment (Windows)
├── infra/ # Azure Bicep templates (main + 8 modules)
│ ├── main.bicep
│ ├── main.bicepparam # Parameters (reads env vars from azd)
│ └── modules/
│ ├── managed-identity.bicep
│ ├── keyvault.bicep
│ ├── acr.bicep
│ ├── postgresql.bicep
│ ├── container-app.bicep
│ ├── apim.bicep
│ ├── apim-api.bicep # REST API + product + subscription
│ └── apim-mcp.bicep # MCP server (apiType: 'mcp')
├── src/app/ # FastAPI application
├── alembic/ # Database migrations
├── tests/ # Test suite
├── azure.yaml # Azure Developer CLI project config
├── Dockerfile
└── docker-compose.yml许可证
麻省理工学院
