Azure Cost Management MCP: real spend, two clients
What the 14 cost tools return, which 5 need no configuration, and why the preview reaches GitHub Copilot and little else.
Last verified 1 September 2026 · from The Azure Resource Manager MCP server's README, its Cost Management tool reference and the GitHub API
This page is one of 90 in a directory of monitoring and developer tools. Each page checks what an AI coding agent can get out of the tool through its MCP server, the connector that lets the agent query the tool directly.
Summary
An Azure Cost Management MCP server exists, under another name. Microsoft ships the cost tools inside the Azure Resource Manager MCP server, a hosted endpoint at https://mcp.management.azure.com.
Five cost tools are on by default. query_costs, query_aks_costs, get_retail_prices, start_pricesheet_download and get_pricesheet_status need no configuration at all.
Nine more arrive with a header. Setting x-mcp-toolset: CostManagement on the connection adds forecasting, dimensions, budgets, alerts and benefit insights, for 14 in total.
query_costs answers what a subscription actually spent, not what it would list at. It takes an Azure scope and returns 100 cost rows by default.
The preview is client-limited. The README names GitHub Copilot Chat in VS Code and GitHub Copilot CLI, and every other client needs an Azure app registration.
What is the Azure Cost Management MCP server?
Azure Cost Management is the service that holds actual spend. It covers usage records, amortized reservation costs, budgets, alerts and exports.
MCP is an open protocol that lets an AI coding agent call a tool's functions, such as running a log search, without anyone writing code against the tool's API. Microsoft's server puts the Cost Management APIs behind that protocol.
Cost is the stage this page grades, and the same endpoint reaches further. It also deploys ARM templates and runs Azure Resource Graph queries, which arrive on the same connection.
What answers an Azure cost question:
| Route | What it reaches | State |
|---|---|---|
| ARM MCP server, default tools | Actual and amortized spend, AKS costs, retail prices, pricesheets | Official. On without configuration |
ARM MCP server, CostManagement toolset | Forecasts, dimensions, budgets, alerts, reservations and savings plans | Official. One header away |
Azure MCP Server, pricing | Retail rates, estimates, SKU and region detail | Official, and a separate local server. Prices, not spend |
msftnadavbh/AzurePricingMCP | Estimates, spot prices, savings analysis, idle resources | MIT · 55 stars · pushed 23 June 2026. Still pricing |
glassity/focus-mcp | FOCUS billing data, an open billing format, across AWS, Azure and GCP | Apache-2.0 · 11 stars · pushed 1 September 2026 |
The first two rows are the same endpoint, and the difference between them is one header. The third is a different server that Microsoft also publishes, and it answers rate-card questions rather than billed ones.
Azure Cost Management is named for the cost stage, and the cost stage is the one this connector serves best.
| Part of the work | What Azure Cost Management has here | Can an agent reach it |
|---|---|---|
| Code, tests & review | None | Nothing for code or review |
| CI & release | ARM template deployment, on the same endpoint | Partial. Deployments are reachable, and they are not a cost surface |
| Production observability | None. Azure Monitor and Resource Health sit outside Cost Management | No. Those areas belong to the separate local Azure MCP Server |
| Agent observability & evals | None | No traces or evaluations of model behavior |
| AI cost management | Actual spend, forecasts, budgets, benefits and pricesheets | Yes. query_costs returns billed spend, and 9 further tools arrive with the CostManagement header |
The cost stage is where this endpoint is strongest. What limits it is not coverage but the short list of clients the preview will accept.
What can an AI agent do with Azure Cost Management?
The 5 default tools answer what a cost review opens with. query_costs returns actual or amortized spend for a subscription, management group or billing scope, grouped and filtered as asked. query_aks_costs splits an AKS bill by cluster, namespace, idle time and service category, at subscription scope only. get_retail_prices needs no sign-in. The pricesheet pair fetches a negotiated EA or MCA rate card as an asynchronous download. Budgets and forecasts wait behind the CostManagement header.
14 cost and pricing tools, 5 on by default and 9 behind the CostManagement header.
- Enabled by default5
query_costsquery_aks_costsget_retail_pricesstart_pricesheet_downloadget_pricesheet_status- Query and forecast2
forecast_costslist_dimensions- Budgets and alerts4Write
list_budgetsget_budgetcreate_budgetlist_alerts- Reservations and savings plans3
list_benefit_utilizationget_benefit_recommendationslist_reservation_transactions
The list comes from the server's Cost Management and Pricing tool reference, read 1 September 2026. The last three groups are the optional CostManagement toolset, so a default connection shows the first group only. The count of writes is 1. The reference marks create_budget as a write, and the other thirteen only read, fetch or start a download.
Azure Cost Management MCP server limits: where answers come back incomplete
The first limit below decides whether the connector is reachable at all. The rest change what an answer means once it is.
The agent says: “Connected to Azure Resource Manager.” From 2 clients, both GitHub Copilot.
The README states the server can only be used with a set of MCP clients during the preview, and names GitHub Copilot Chat in VS Code and GitHub Copilot CLI.
A third-party client is possible and not simple. It needs an app registration requesting the server's application ID, a service principal, a client secret and a redirect URI.
Guard: Confirm your client is on the list before planning around this server. Budget an Azure app registration if it is not.
The agent says: “There is no budget tool here.” There are 4, behind one header.
9 of the 14 cost tools live in the CostManagement toolset, which is off until x-mcp-toolset: CostManagement is set on the connection.
The default connection carries only 5 cost tools, so budgets, forecasts, alerts, dimensions and benefit data are all absent from the tool list an agent sees.
Guard: Set the header in the client config, restart the server, and check that 14 cost tools appear rather than 5.
The agent says: “The subscription costs $8,400 a month.” That was the rate card, not the bill.
2 of the 5 default tools answer money questions in different currencies of meaning. query_costs returns what was charged, and get_retail_prices returns published pay-as-you-go rates.
Retail rates carry no enterprise agreement, no reservation and no credit, because get_retail_prices is a public lookup that needs no scope and no sign-in.
Guard: Require the agent to name the tool it called, as the disclosure block above does. Rates and spend read identically otherwise.
The agent says: “Here is your spend across tenants.” 1 tenant, the account's default.
The FAQ states only one tenant can be queried at a time, with no way to specify a tenant per the logged-in user. It attributes the limitation to VS Code and links an open issue.
The workaround it suggests is a second account with subscription write access in the target tenant, switched to in VS Code before running the query.
Guard: State the tenant in the answer. A cross-tenant total from one sign-in is a partial total wearing a complete one's name.
How to configure Azure Cost Management MCP for agents
- 1
Set the header if you need budgets
Without
x-mcp-toolset: CostManagement, an agent sees 5 cost tools rather than 14. - 2
Check your client before anything else
The preview names two, and both are GitHub Copilot. Anything else needs an app registration.
- 3
Know which tool writes
create_budgetcreates a budget with threshold notifications. The other 13 cost tools return data. - 4
Expect one tenant at a time
The FAQ states there is no way to name a tenant per request, so the signed-in account decides.
- 5
Query a billing scope for wide comparisons
The reference advises one call against a billing scope instead of one call per subscription.
Paste this into your agent’s instructions
Actual spend and a retail rate are both currency figures in a sentence, and this server returns both. Nothing in an answer separates them unless the agent is made to say which tool produced it.
When you answer an Azure cost question, state: - Whether the figure is actual spend, amortized cost or a retail list price. query_costs returns what was charged and get_retail_prices returns published rates. - The scope, the timeframe and the currency it applies to. - Whether the CostManagement toolset is enabled, because budgets, forecasts and benefit data need that header. - That a cost query returns 100 rows by default, so a total may be partial. Never state that data does not exist. State which tool you called and what it returned. Write your answer in ASD-STE100 Simplified Technical English. Use short sentences with one idea in each.
Do you need the MCP server at all?
You do not need it for a single figure, because Cost Management already answers through the Azure portal and its REST API. The server matters when an agent has to ask the question mid-conversation.
Cost Management exports write usage and amortized cost to storage on a schedule. That stays the route for a complete bill, because a cost query returns 100 rows by default.
For more than one cloud, FOCUS is an open billing format, and glassity/focus-mcp reads AWS, Azure and GCP through it.
msftnadavbh/AzurePricingMCP remains a pricing tool. It estimates and compares rates, which is a different question from what a subscription was charged.
With MCP, spend, forecasts and budgets arrive in the same conversation as the resources that caused them, over one endpoint with nothing installed.
Connect it if a supported client can reach it. Otherwise read an export or call the REST API, and keep the app registration in reserve.
Azure Cost Management MCP server setup
Nothing gets installed. Microsoft hosts the server at https://mcp.management.azure.com, and a client reaches it as an HTTP MCP server.
What you need first is an Azure account with access to a subscription, and a client the preview accepts. The server acts as the signed-in user, so Azure roles decide what it can read.
Adding x-mcp-toolset: CostManagement to the same entry is what turns 5 cost tools into 14.
VS Code, with GitHub Copilot Chat
Opening https://aka.ms/JoinARMMCP launches VS Code and offers the server for install. The sign-in prompt uses Azure credentials, so no key is written into the file.
Adding the toolset by hand means editing .vscode/mcp.json in the repository, or the user-level mcp.json from MCP: Open User Configuration. Restart the server afterwards.
{"servers":{"azure-resource-manager-mcp":{
"type":"http",
"url":"https://mcp.management.azure.com",
"headers":{"x-mcp-toolset":"CostManagement"}}}}GitHub Copilot CLI
The second supported client reads ~/.copilot/mcp-config.json. The shape is the same, under mcpServers rather than servers.
Exit and relaunch copilot to pick up the change, then confirm the server is running with the /mcp show command. No credentials go in the file.
{"mcpServers":{"azure-resource-manager-mcp":{
"type":"http",
"url":"https://mcp.management.azure.com",
"headers":{"x-mcp-toolset":"CostManagement"}}}}Claude Code and other clients
Not supported by the preview, and documented anyway. docs/OtherClientSupport.md describes an Azure app registration whose manifest requests access to the server's application ID.
The steps are a redirect URI of https://claude.ai/api/mcp/auth_callback/, a service principal, and a client secret used in a custom connector. The guide states the account needs at least Owner on one subscription.
az ad sp create --id 22bfbae3-f4e7-485f-be43-8cee15065084 # then add the redirect URI, create a client secret, # and use it in the custom connector definition
Every other client
Each block below is the configuration for one client, with the file path and the key that client expects.
The other Azure MCP server
Microsoft publishes two. The FAQ describes the Azure MCP Server as a local server on the client machine, and this one as remote and cloud-hosted.
The local server documents a pricing area for retail rates, plus quota and advisor. It has no Cost Management area, so spend questions belong to the hosted endpoint. No credentials go into its configuration, because it reuses the Azure sign-in on the machine.
{"mcpServers":{"azure":{
"command":"npx",
"args":["-y","@azure/mcp@latest","server","start"]}}}Read-only access, permissions and security
The server acts as the signed-in user
The README states that every tool call is made on that user's behalf, under the same Azure permissions.
Spend data is commercially sensitive
What a company spends on which service describes what it is building, so scope the role before connecting.
One cost tool changes state
create_budgetwrites a budget with notification rules, and the reference marks it as the only write among the 14.The connection reaches past cost
The same endpoint registers deployment and resource-creation tools, so a cost question carries them along.
Deployments can be denied by policy
The README documents an Azure Policy sample that blocks
create_deploymentby the server's application ID.The third-party route is a broad grant
An app registration with a client secret, plus Owner on a subscription, is a larger ask than a read-only connector.
Troubleshooting
- Your client cannot connect
- The preview accepts GitHub Copilot Chat in VS Code and GitHub Copilot CLI. Other clients need the app registration route in
docs/OtherClientSupport.md. - There is no budget or forecast tool
- Those 9 tools sit in the CostManagement toolset. Add
x-mcp-toolset: CostManagementto the server entry, then restart the server in the client. - AADSTS500200 on sign-in
- The troubleshooting guide attributes this to a personal account. It suggests an organizational account, or inviting the personal account into the tenant as a guest.
- The costs are from the wrong tenant
- The FAQ states one tenant can be queried at a time, with no per-request tenant setting. The account falls back to its default tenant.
- A total looks too small
- A cost query returns 100 rows by default. The
topparameter is registered up to 5,000, and a wide question may still need a narrower grouping.
Azure Cost Management MCP server: Reference
| Item | Value |
|---|---|
| Official server | Azure Resource Manager MCP server, hosted by Microsoft |
| Endpoint | https://mcp.management.azure.com |
| Feedback repository | Azure/Azure-Resource-Manager-MCP · MIT · 29 stars · pushed 19 August 2026 |
| Cost and pricing tools | 14 |
| On by default | 5 |
| Behind the CostManagement header | 9 |
| Tools that write | 1, create_budget |
| Supported preview clients | GitHub Copilot Chat in VS Code, GitHub Copilot CLI |
| Other clients | App registration, service principal and a client secret |
| Rows per cost query | 100 by default, with top registered up to 5,000 |
| Scopes accepted | Subscription, management group and billing |
| The other Azure server | Azure MCP Server, in microsoft/mcp, local, with pricing but no spend |
| Inventory source | The server's Cost Management and Pricing reference, read 1 September 2026 |
What the vendor documents
Public practitioner writing about these tools is thin, so the quotations below are Microsoft's own words about its own server.
| What was checked | What it shows |
|---|---|
| Cost and pricing tools | 14 |
| On by default | 5 |
| Behind the CostManagement header | 9 |
| Cost tools that write | 1 |
| Supported preview clients | 2 |
Azure/Azure-Resource-Manager-MCP stars | 29 |
“Several Cost Management & Pricing tools are enabled by default and need no extra configuration”
“During this preview, Azure Resource Manager MCP server can only be used with a set of MCP Clients.”
“The Azure Resource Manager MCP server ships a Cost Management & Pricing tool surface that lets agents answer cost, budget, savings, and pricing questions in natural language, on behalf of the signed-in user.”
The tool inventory was read from the server's Cost Management and Pricing reference and its README on 1 September 2026, and the two lists reconcile at 5 plus 9. Repository facts come from the GitHub API on the same date.
Should you connect an agent to Azure Cost Management?
Yes, with one of the four checks failing. Best for cost questions asked inside Copilot, with budgets and forecasts switched on by header.
- Strongest fit
- Teams working in GitHub Copilot who want an agent to read real Azure spend without leaving the editor.
- Main advantage
- Billed and amortized spend from a first-party hosted endpoint, with no package to install and no key to store.
- Main weakness
- The preview accepts two clients. Reaching it from anywhere else needs an Azure app registration and a client secret.
- Operational risk
- A default connection that carries deployment and resource-creation tools alongside the cost ones.
From Oodle
One platform for agent traces and infrastructure
Agent traces usually sit in a different product from the rest of your telemetry, so when a slow database makes an agent slow the symptom is in one tool and the cause is in another. Oodle keeps both in one query surface, from $10 per million spans.
See agent observabilityFrequently asked questions
Does Azure Cost Management have an MCP server?
Yes. Microsoft's Azure Resource Manager MCP server carries 14 cost and pricing tools at https://mcp.management.azure.com, and 5 of them are on by default.
Can an agent read what my subscription actually spent?
Yes. query_costs returns actual or amortized cost and usage rows for a subscription, management group or billing scope, and it is on by default.
How do I get the budget and forecast tools?
Add the header x-mcp-toolset: CostManagement to the server entry in your client config, then restart the server. That adds the other 9 tools.
Which clients can connect?
The preview names GitHub Copilot Chat in VS Code and GitHub Copilot CLI. Other clients need an Azure app registration, a service principal and a client secret.
Does any cost tool change my Azure account?
One does. create_budget creates a budget with threshold notifications, and the other 13 cost and pricing tools return data.
What about the Azure MCP Server in microsoft/mcp?
It is a separate local server. Its documented areas include pricing, quota and advisor, but no Cost Management area, so it answers rates rather than spend.