Install any skill in seconds. Free to start, no credit card required.
Get Started Free →List, find, and show Azure resources across subscriptions or resource groups. Handles prompts like \"list the websites in my subscription\", \"list my web apps\", \"show my app services\", \"list virtual machines\", \"list my VMs\", \"show storage accounts\", \"find container apps\", and \"what resources do I have\". USE FOR: list websites, list web apps, list app services, show websites in subscription, resource inventory, find resources by tag, tag analysis, orphaned resource discovery (not fo
.claude/skills/azure-resource-lookup/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-07 | ✓→✓ | = Same ✓ | — | — |
| case-01 | ✗→✗ | = Same ✗ | — | — |
| case-09 | ✗→✗ | = Same ✗ | — | — |
| case-12 | ✗→✗ | = Same ✗ | — | — |
| case-18 | ✗→✗ | = Same ✗ | — | — |
List, find, and discover Azure resources of any type across subscriptions and resource groups. Use Azure Resource Graph (ARG) for fast, cross-cutting queries when dedicated MCP tools don't cover the resource type.
Use this skill when the user wants to:
> ⚠️ Warning: App Service / Web Apps have no dedicated MCP list command. Prompts like "list websites", "list web apps", or "list app services" must route through this skill to use Azure Resource Graph.
> 💡 Tip: For single-resource-type queries, first check if a dedicated MCP tool can handle it (see routing table below). If none exists, use Azure Resource Graph.
| Property | Value | |----------|-------| | Query Language | KQL (Kusto Query Language subset) | | CLI Command | az graph query -q "<KQL>" -o table | | Extension | az extension add --name resource-graph | | MCP Tool | extension_cli_generate with intent for az graph query | | Best For | Cross-subscription queries, orphaned resources, tag audits |
| Tool | Purpose | When to Use | |------|---------|-------------| | extension_cli_generate | Generate az graph query commands | Primary tool — generate ARG queries from user intent | | mcp_azure_mcp_subscription_list | List available subscriptions | Discover subscription scope before querying | | mcp_azure_mcp_group_list | List resource groups | Narrow query scope |
For single-resource-type queries, check if a dedicated MCP tool can handle it:
| Resource Type | MCP Tool | Coverage | |---|---|---| | Virtual Machines | compute | ✅ Full — list, details, sizes | | Storage Accounts | storage | ✅ Full — accounts, blobs, tables | | Cosmos DB | cosmos | ✅ Full — accounts, databases, queries | | Key Vault | keyvault | ⚠️ Partial — secrets/keys only, no vault listing | | SQL Databases | sql | ⚠️ Partial — requires resource group name | | Container Registries | acr | ✅ Full — list registries | | Kubernetes (AKS) | aks | ✅ Full — clusters, node pools | | App Service / Web Apps | appservice | ❌ No list command — use ARG | | Container Apps | — | ❌ No MCP tool — use ARG | | Event Hubs | eventhubs | ✅ Full — namespaces, hubs | | Service Bus | servicebus | ✅ Full — queues, topics |
If a dedicated tool is available with full coverage, use it. Otherwise proceed to Step 2.
Use extension_cli_generate to build the az graph query command:
yamlmcp_azure_mcp_extension_cli_generate intent: "query Azure Resource Graph to <user's request>" cli-type: "az"
See Azure Resource Graph Query Patterns for common KQL patterns.
Run the generated command. Use --query (JMESPath) to shape output:
bashaz graph query -q "<KQL>" --query "data[].{name:name, type:type, rg:resourceGroup}" -o table
Use --first N to limit results. Use --subscriptions to scope.
| Error | Cause | Fix | |-------|-------|-----| | resource-graph extension not found | Extension not installed | az extension add --name resource-graph | | AuthorizationFailed | No read access to subscription | Check RBAC — need Reader role | | BadRequest on query | Invalid KQL syntax | Verify table/column names; use =~ for case-insensitive type matching | | Empty results | No matching resources or wrong scope | Check --subscriptions flag; verify resource type spelling |
=~ for case-insensitive type matching (types are lowercase)--subscriptions or --first for large tenants| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-09 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-12 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-18 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-04 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-16 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-21 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-22 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-15 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-14 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-13 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-02 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-10 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-03 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-20 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-08 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-05 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-17 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-11 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-07 | pass→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-19 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-06 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 8 counted toward the lift figure. The other 14 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of 0 percentage points is the difference between those two pass rates over the 8 comparable cases. 10 cases got worse with the skill loaded, and they are included in that figure.
The per-case answers from this run were removed by the retention sweep, so the case table below shows the verdicts without the text either arm produced. The counts above were recorded at the time and are unaffected. Answers are now kept for 180 days.
Other measured skills in the registry, with their headline benchmark lift.