MCP资源图(Azure函数)
此项目通过Azure Functions(Node.js v4)公开了一个模型上下文协议(MCP)工具。它允许MCP客户端对Azure资源图执行KQL查询,通过 query_resource_graph 工具。
概述
- 条目:
src/index.ts–功能初始化。 - MCP工具:
src/functions/mcpResourceGraph.ts
- 工具名称: query_resource_graph - 经办人: mcpQueryGraph
- 逻辑:
src/logics/queryGraphLogic.ts–调用资源图REST API。 - 认证:
src/utils/auth.ts–通过以下方式获得ARM范围的令牌DefaultAzureCredential. - 验证:
src/utils/patterns.ts–用于订阅ID等的正则表达式。
能力
- 将KQL查询发送到Azure资源图并检索结果。
- 示例:列出虚拟机、资源组、订阅、具有特定标签的资源等。
- 如果
subscriptions省略了环境变量AZURE_SUBSCRIPTION_ID(如果存在)用作默认值。
先决条件
- Node.js 18+(TypeScript 5)
- Azure功能核心工具v4(
func) - Azure CLI(建议用于本地身份验证)
- 权限:目标订阅的阅读器或更高版本
设置
# Install dependencies
npm install
# Authenticate locally
az login
# Optionally set a default subscription for queries
# Linux / macOS
export AZURE_SUBSCRIPTION_ID=""
# Windows (PowerShell)
$env:AZURE_SUBSCRIPTION_ID=""local.settings.json 配置用于开发 AzureWebJobsStorage=UseDevelopmentStorage=true (Azurite)。函数不使用存储触发器,但函数需要存储连接。
在本地运行
- VS代码任务
- npm watch (functions) 背景 - func: host start 背景
- 或通过命令
# TypeScript watch build
npm run watch
# In another terminal, or let prestart build and start
npm start # = func start当Functions Core Tools启动时,MCP Webhook会监听 http://localhost:7071/runtime/webhooks/mcp.
从MCP使用
- 端点:
http://localhost:7071/runtime/webhooks/mcp - 工具:
query_resource_graph - 参数:
- subscriptions?: string[] –目标订阅ID(可选) - query: string –KQL用于资源图
配置支持MCP的客户端(编辑器/代理)以注册上述端点。客户将列出 query_resource_graph 并允许您传递参数和运行查询。
注意:MCP webhooks的HTTP有效载荷格式取决于客户端实现。建议使用MCP客户端而不是手动客户端 curl.示例查询(KQL)
- 列出虚拟机:
Resources
| where type =~ "Microsoft.Compute/virtualMachines"
| project name, location, resourceGroup, subscriptionId, properties.hardwareProfile.vmSize- 列出资源组:
ResourceContainers
| where type =~ "microsoft.resources/subscriptions/resourcegroups"
| project name, location, subscriptionId, tags常见错误和补救措施
- 一个或多个订阅ID无效:
- 确认订阅ID格式(UUID)。
- 未能获取Azure AD/Entra ID令牌:
- 确保 az login 已完成,或 AZURE_TENANT_ID / AZURE_CLIENT_ID / AZURE_CLIENT_SECRET (或托管身份)设置正确。
- 未能绘制数据:
- 检查权限(Reader+)、网络可达性和API版本(2022-10-01).
部署(概述)
- 在Azure中创建功能应用程序(Node 18,Linux推荐)。
- 启用系统分配的托管标识,并在目标订阅上授予Reader或更高版本。
- 可选设置
AZURE_SUBSCRIPTION_ID在应用程序设置中。 - 从VS代码或功能核心工具部署:
func azure functionapp publish 开发说明
- TypeScript:
npm run build/npm run watch - 密钥代码:
- src/functions/mcpResourceGraph.ts –MCP工具暴露和arg定义 - src/logics/queryGraphLogic.ts –资源图REST执行 - src/utils/auth.ts –通过以下方式获取代币 DefaultAzureCredential
- API终点:
- POST https://management.azure.com/providers/Microsoft.ResourceGraph/resources?api-version=2022-10-01
许可证
如果没有为此存储库定义许可证,请根据您的组织/个人协议进行处理。
