用途
Azure Resource Lookup 用于列出、查找和发现 Azure 中任意类型的资源,可跨订阅和资源组执行查询。当用户提出“列出我订阅中的网站”“列出我的 Web 应用”“我有哪些 Azure 资源”等需求时,该技能可借助 Azure Resource Graph(ARG)完成查询。在专用 MCP 工具无法覆盖某类资源时,它作为补充手段使用。
主要能力
- 列出任意类型的资源,包括虚拟机、Web 应用、存储账户、容器应用、数据库等。
- 显示特定订阅或资源组中的资源。
- 跨多个订阅或资源类型进行查询。
- 查找孤立资源,例如未挂载的磁盘、未使用的网卡、闲置 IP。
- 发现缺少必需标签或配置的资源。
- 获取跨多种类型的资源清单。
- 查找处于特定状态的资源,例如不健康、预配失败、已停止。
- 列出 Web 应用、网站或 App Services。
注意:App Service / Web Apps 没有专用的 MCP 列表命令。类似“list websites”“list web apps”“list app services”的提示必须通过本技能路由,使用 Azure Resource Graph 完成。
提示:对于单一资源类型的查询,应先检查是否有专用 MCP 工具可以处理(见下方路由表)。如果没有,则使用 Azure Resource Graph。
使用方式
查询语言为 KQL(Kusto Query Language 子集),CLI 命令示例为:
az graph query -q "<KQL>" -o table
所需扩展安装命令:
az extension add --name resource-graph
MCP 工具:extension_cli_generate 用于生成 az graph query 命令,是主要工具,可从用户意图生成 ARG 查询;mcp_azure_mcp_subscription_list 用于列出可用订阅,在查询前发现订阅范围;mcp_azure_mcp_group_list 用于列出资源组,缩小查询范围。
工作流程
第 1 步:检查是否有专用 MCP 工具。对于单一资源类型查询,先检查专用工具覆盖情况:
- 虚拟机:compute 工具,完整覆盖(列表、详情、规格)。
- 存储账户:storage 工具,完整覆盖(账户、Blob、表)。
- Cosmos DB:cosmos 工具,完整覆盖(账户、数据库、查询)。
- Key Vault:keyvault 工具,部分覆盖(仅密钥/机密,无保管库列表)。
- SQL 数据库:sql 工具,部分覆盖(需要资源组名称)。
- 容器注册表:acr 工具,完整覆盖(列出注册表)。
- Kubernetes(AKS):aks 工具,完整覆盖(集群、节点池)。
- App Service / Web Apps:appservice 工具,无列表命令,使用 ARG。
- 容器应用:无 MCP 工具,使用 ARG。
- 事件中心:eventhubs 工具,完整覆盖(命名空间、中心)。
- 服务总线:servicebus 工具,完整覆盖(队列、主题)。
如果有完整覆盖的专用工具,则使用它;否则进入第 2 步。
第 2 步:生成 ARG 查询。使用 extension_cli_generate 构建 az graph query 命令:
mcp_azure_mcp_extension_cli_generate
intent: "query Azure Resource Graph to <user's request>"
cli-type: "az"
常见 KQL 模式可参考 Azure Resource Graph Query Patterns。
第 3 步:执行并格式化结果。运行生成的命令,使用 --query(JMESPath)塑形输出:
az graph query -q "<KQL>" --query "data[].{name:name, type:type, rg:resourceGroup}" -o table
使用 --first N 限制结果数量,使用 --subscriptions 限定范围。
错误处理
- resource-graph extension not found:扩展未安装,修复方式为
az extension add --name resource-graph。 - AuthorizationFailed:无订阅读取权限,检查 RBAC,需要 Reader 角色。
- BadRequest on query:KQL 语法无效,验证表/列名称,使用 =~ 进行不区分大小写的类型匹配。
- Empty results:没有匹配资源或范围错误,检查 --subscriptions 参数,验证资源类型拼写。
约束
- 始终使用 =~ 进行不区分大小写的类型匹配(类型为小写)。
- 始终使用 --subscriptions 或 --first 为大型租户限定查询范围。
- 单一资源类型查询优先使用专用 MCP 工具。
- 切勿将 ARG 用于实时监控(数据有轻微延迟)。
- 切勿通过 ARG 尝试变更操作(只读)。