azure-resource-lookup — Claude Code skill: list Azure resources
Lists and finds Azure resources across subscriptions and resource groups through Azure Resource Graph. Handy when you need to see what is actually deployed.
npx skills add microsoft/skills --skill azure-resource-lookup -a claude-codeWhat azure-resource-lookup does
The skill answers prompts like "list my web apps", "list virtual machines" and "what resources do I have". It runs on Azure Resource Graph: KQL queries, executed as az graph query -q "<KQL>" -o table. Before querying, it checks whether a dedicated MCP tool covers the resource type. VMs, storage accounts, Cosmos DB, AKS and Service Bus have full coverage. App Service and Container Apps do not, so those go straight to ARG.
Queries are generated with extension_cli_generate, and you can shape the output with --query (JMESPath), --first N and --subscriptions. The skill also hunts down leftovers: unattached disks, idle NICs, resources missing required tags.
Two things to set up first: the extension via az extension add --name resource-graph, and the Reader role on the subscription. Without read access the query fails with AuthorizationFailed. ARG is read-only, so nothing gets deployed or changed through it — that is azure-deploy's job. Real-time monitoring is off the table too, because the data lags behind.
What it helps with
- build a resource inventory across several subscriptions
- find unattached disks and idle IP addresses
- spot resources missing required tags
- count resources by type inside one resource group
- list web apps and container apps that have no dedicated MCP command
Example prompts for the agent
- list the websites in my subscription
- find unattached disks across all subscriptions
- show resources without an owner tag in rg-prod
How to install azure-resource-lookup
1Skills CLI (Vercel)
npx skills add microsoft/skills --skill azure-resource-lookup -a claude-code2Manually: put the files in place
~/.claude/skills/azure-resource-lookup/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/azure-resource-lookup/
Manually: put the files in place
.agents/skills/azure-resource-lookup/SKILL.mdFor all projects use ~/.agents/skills/
Manually: put the files in place
.cursor/skills/azure-resource-lookup/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install microsoft/skills azure-resource-lookup2Manually: put the files in place
.github/skills/azure-resource-lookup/SKILL.mdPlatform CLI
gemini skills install https://github.com/microsoft/skills --path .github/plugins/azure-skills/skills/azure-resource-lookupManually: put the files in place
.devin/skills/azure-resource-lookup/SKILL.mdThe legacy .windsurf/skills/ path still works
Claude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about azure-resource-lookup
How do I install azure-resource-lookup in Claude?
Run npx skills add microsoft/skills --skill azure-resource-lookup -a claude-code. The skill lands at ~/.claude/skills/azure-resource-lookup/SKILL.md.
What does azure-resource-lookup do?
It lists and finds Azure resources of any type across subscriptions and resource groups, falling back to Azure Resource Graph when no dedicated MCP tool covers the type.
What is it not for?
Read-only work. Deploying or changing resources belongs to azure-deploy, and cost optimization to cost-optimization from the optional azure-cost plugin.
Source text
SKILL.md · MIT
---
name: azure-resource-lookup
description: "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 for cost analysis), unattached disks, count resources by type, cross-subscription lookup, and Azure Resource Graph queries. DO NOT USE FOR: deploying/changing resources (use azure-deploy), cost optimization (use cost-optimization from the optional azure-cost plugin), or non-Azure clouds."
license: MIT
metadata:
author: Microsoft
version: "1.2.3"
---
# Azure Resource Lookup
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.
## When to Use This Skill
Use this skill when the user wants to:
- **List resources** of any type (VMs, web apps, storage accounts, container apps, databases, etc.)
- **Show resources** in a specific subscription or resource group
- Query resources **across multiple subscriptions** or resource types
- Find **orphaned resources** (unattached disks, unused NICs, idle IPs)
- Discover resources **missing required tags** or configurations
- Get a **resource inventory** spanning multiple types
- Find resources in a **specific state** (unhealthy, failed provisioning, stopped)
- Answer "**what resources do I have?**" or "**show me my Azure resources**"
- **List web apps, websites, or App Services**
> ⚠️ **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.
## Quick Reference
| 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 |
## MCP Tools
| 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 |
## Workflow
### Step 1: Check for a Dedicated MCP Tool
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.
### Step 2: Generate the ARG Query
Use `extension_cli_generate` to build the `az graph query` command:
```yaml
mcp_azure_mcp_extension_cli_generate
intent: "query Azure Resource Graph to <user's request>"
cli-type: "az"
```
See [Azure Resource Graph Query Patterns](references/azure-resource-graph.md) for common KQL patterns.
### Step 3: Execute and Format Results
Run the generated command. Use `--query` (JMESPath) to shape output:
```bash
az 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 Handling
| 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 |
## Constraints
- ✅ **Always** use `=~` for case-insensitive type matching (types are lowercase)
- ✅ **Always** scope queries with `--subscriptions` or `--first` for large tenants
- ✅ **Prefer** dedicated MCP tools for single-resource-type queries
- ❌ **Never** use ARG for real-time monitoring (data has slight delay)
- ❌ **Never** attempt mutations through ARG (read-only)
© Microsoft · MIT · microsoft/skills