mcp-azure
The provided schema exposes read-only Azure inventory operations; broader write/admin capabilities described in the README are not registered here.
List subscriptions visible to the service principal, filtered by allowlist.
List locations/regions available to a subscription (defaults to
AZURE_SUBSCRIPTION_ID).List resource groups in a subscription, filtered by allowlist.
List resources in a subscription or within a specific resource group.
Get a specific resource by its full ARM resource ID, providing the required API version.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mcp-azure List all resource groups in my subscription and show their locations."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
mcp-azure
A Model Context Protocol server for Azure (via the Azure Resource Manager API — the programmatic layer behind the Azure Portal). It lets an MCP-capable client (Claude Desktop, Claude Code, Cursor, Codex, …) inventory and operate Azure resources — with a governance layer that keeps an AI agent inside safe boundaries.
What this offers
Inventory — list subscriptions, locations, resource groups, and resources; get any resource by ARM id.
Operations — create resource groups (in approved regions), merge tags onto any resource, and control VM power state (start / stop / restart / deallocate).
Lifecycle — delete resource groups and individual resources, guarded.
Governance built in — access modes, subscription/resource-group allowlists, protected resource groups, a location allowlist for new groups, delete gating, typed confirmation for high-impact deletes, dry-run, and JSON audit logging.
Related MCP server: Azure MCP Server
Governance & security model
Concern | Flag | Default | Effect |
What can the server do? |
|
|
|
Which subscriptions? |
| (all) | Operations on other subscriptions are refused. For tools taking a |
Which resource groups? |
| (all) | Operations outside the list are refused, and |
Read-only-forever groups |
| (none) | Readable, never mutable. |
Approved regions |
| (any) | New resource groups may only be created here. |
Can it delete? |
|
| Deletes need this and admin mode. |
Typed confirmation |
|
| Deletes require |
Preview |
|
| Write/admin tools validate + log intent, then return. |
Audit trail |
|
| JSON line to stderr per guarded operation. |
Interactive confirmation | (automatic) | — | Destructive & high-impact actions prompt the human to approve via MCP elicitation before running. The prompt shows the tool, the exact arguments and a fingerprint; the target's version is pinned across the prompt and the action is refused if it changed; a prompt nobody answers is a refusal. |
Require a human |
|
| When |
Tools
Read (read-only+): list_subscriptions, list_locations, list_resource_groups, list_resources, get_resource
The three paged listings (list_subscriptions, list_resource_groups, list_resources) return every page up to a 50-page limit. A complete listing is a plain JSON array; if the limit is hit the result is { "truncated": true, "note": …, "items": […] }, so a partial list is never mistaken for a complete one.
Write (read-write+): create_resource_group, tag_resource, control_vm
Admin (admin): delete_resource_group, delete_resource (both need AZURE_ALLOW_DELETE + typed confirm)
Quickstart — add to your agent
Published on npm as @dockndevai/mcp-azure. Runs via npx with an Entra ID service principal. See docs/CLIENTS.md for every client and .env.example for all variables.
Claude Code
claude mcp add azure -e AZURE_TENANT_ID="…" -e AZURE_CLIENT_ID="…" -e AZURE_CLIENT_SECRET="…" -e AZURE_SUBSCRIPTION_ID="…" -e AZURE_MODE="read-only" -- npx -y @dockndevai/mcp-azureClaude Desktop · Cursor · Windsurf
{
"mcpServers": {
"azure": {
"command": "npx",
"args": ["-y", "@dockndevai/mcp-azure"],
"env": {
"AZURE_TENANT_ID": "…",
"AZURE_CLIENT_ID": "…",
"AZURE_CLIENT_SECRET": "…",
"AZURE_SUBSCRIPTION_ID": "…",
"AZURE_MODE": "read-only"
}
}
}
}Example prompts
"List all resource groups in my subscription and which region each is in"
"Show every resource in the rg-web group"
"Tag the app-plan resource with env=prod and owner=team-a" (needs read-write)
"Stop the build-agent VM in rg-ci" (needs read-write)
Run from source (development)
npm install
npm run build
node dist/index.js # with the environment variables setDevelop
npm run dev
npm test # governance policy: modes, scoping, location allowlist, delete + confirmation
npm run typecheckPublishing
Ships a server.json for the official MCP registry and an mcpName for npm ownership validation. See PUBLISHING.md.
License
MIT
Available Tools
5 toolsget_resourceGet resourceBRead-onlyIdempotent
Fetch a resource by its full ARM id. Provide the api-version for the resource type.
Inputs: apiVersion (required), resourceId (required).
list_locationsList locationsCRead-onlyIdempotent
List the regions available to a subscription.
Inputs: subscription.
list_resource_groupsList resource groupsBRead-onlyIdempotent
List resource groups in a subscription (filtered by allowlist).
Inputs: subscription.
list_resourcesList resourcesBRead-onlyIdempotent
List resources in a subscription, or within a specific resource group.
Inputs: subscription, resourceGroup.
list_subscriptionsList subscriptionsARead-onlyIdempotent
List subscriptions the service principal can see (filtered by allowlist).
Inputs: no named parameters.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 5 tools
Each tool targets a distinct Azure resource type or action: subscriptions, locations, resource groups, resource lists, and single resource retrieval. The boundary between list_resources and get_resource is clear (collection vs. individual by ARM id). No overlapping purposes.
All tools follow a consistent verb_noun pattern: list_subscriptions, list_locations, list_resource_groups, list_resources, get_resource. The single get_ prefix is predictable and fits the same convention.
Five tools is well within the typical 3–15 range and each tool serves a clear, non-redundant purpose for Azure resource discovery. The set is concise and focused.
The surface covers listing and getting Azure resources but omits any create, update, or delete operations for resource groups or resources, as well as deployment and provider management. These are notable gaps for a general Azure management MCP.
Maintenance
Related MCP Connectors
Governed MCP gateway: one endpoint for your tools, with credential custody and audit log.
Hosted remote MCP for protected account access, permissions, activity history and supported undo.
Cloud cost, inventory and governance on AWS/Azure/GCP. Read-only by default, optional scoped writes
Managed MCP gateway with OAuth, per-agent permissions, shared accounts and activity logs.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceProvides tools for listing and querying Azure resources directly from any MCP client, allowing you to efficiently browse your Azure infrastructure and analyze costs without leaving your workflow.3-
- AlicenseNot gradedqualityDmaintenanceAn MCP server for interacting with Azure. Contains some common Compute and Networking actions, and extensible to add many more.1Apache 2.0
- AlicenseNot gradedqualityDmaintenanceAn MCP server that exposes core Azure services as read-mostly tools any MCP client can call, including Blob Storage, Key Vault, Service Bus, and Resource Manager.1MIT
- AlicenseAqualityCmaintenanceMCP server for Azure resource management, AI Foundry, and Entra ID — inspect and operate Azure infrastructure through AI agents.3MIT