azure-cost-mcp
Click on "Install 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., "@azure-cost-mcpcompare VM prices for D2s v3 across regions"
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.
azure-cost-mcp
An MCP server that gives Claude live access to Azure pricing and cost data — retail prices, VM comparisons, reservation analysis, architecture estimates, and actual subscription spend.
What it does
Nine tools across two API groups:
Tool | Description | Auth required |
| Search Azure retail prices with OData filters | No |
| Compare VM SKUs across regions (monthly matrix) | No |
| Find cheapest regions for a given SKU | No |
| PAYG vs 1-yr / 3-yr reservation with break-even | No |
| Estimate multi-component architecture monthly cost | No |
| Query actual subscription spend (group by service, resource group, etc.) | Yes |
| Top-N resources by spend with % of total | Yes |
| Cost forecast for a period | Yes |
| List budgets with CRITICAL / WARNING / OK status | Yes |
Related MCP server: cloudscope-mcp
Prerequisites
Node.js 20+
npm
Build
npm install
npm run buildAzure setup (for authenticated tools)
Create a service principal and assign the Cost Management Reader role:
# Create service principal
az ad sp create-for-rbac --name azure-cost-mcp --role "Cost Management Reader" \
--scopes /subscriptions/<SUBSCRIPTION_ID>
# Output includes appId (clientId), password (clientSecret), tenant (tenantId)Claude Desktop configuration
Add to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"azure-cost": {
"command": "node",
"args": ["/absolute/path/to/azure-cost-mcp/dist/index.js"],
"env": {
"AZURE_TENANT_ID": "...",
"AZURE_CLIENT_ID": "...",
"AZURE_CLIENT_SECRET": "...",
"AZURE_SUBSCRIPTION_ID": "..."
}
}
}
}The retail tools work without credentials. Cost Management tools will return setup instructions if credentials are missing.
Environment variables
Variable | Required | Description |
| For auth tools | Azure AD tenant ID |
| For auth tools | Service principal application ID |
| For auth tools | Service principal secret |
| For auth tools | Subscription to query |
| No | Default currency (default: |
Companion skill
A Claude Code skill at ~/.claude/skills/azure-cost.md encodes tool routing rules, the reservation comparison rule, output conventions, and graceful degradation guidance. Install it by copying skills/azure-cost.md from this repository to ~/.claude/skills/.
Development
npm test # run tests
npm run test:watch # watch mode
npm run lint # ESLint
npm run format # PrettierAvailable Tools
9 toolsazure_compare_reservation_vs_paygA
Compare pay-as-you-go vs 1-year and 3-year reservation pricing for a VM SKU. Always call this for workloads expected to run >6 months.
| Name | Required | Description | Default |
|---|---|---|---|
| armSkuName | Yes | ||
| currencyCode | No | USD | |
| armRegionName | Yes | ||
| response_format | No | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral burden. It correctly indicates a read-only comparison and nothing destructive is implied, but it does not disclose output shape, data source, or limitations such as relying on list prices rather than negotiated rates.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with no filler: the core action is front-loaded, and the usage trigger follows immediately. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is relatively simple and the input schema covers required fields and defaults, but there is no output schema and the description does not state what the comparison returns or how results are presented. This leaves a moderate gap in call expectations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description only mentions 'VM SKU' rather than explaining armSkuName, armRegionName, currencyCode, or response_format. The description therefore does not compensate for the missing parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Compare') and names the exact objects compared: pay-as-you-go vs 1-year and3-year reservation pricing for a VM SKU. This clearly distinguishes it from sibling tools such as azure_compare_vm_prices, which suggests a different kind of comparison.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives an explicit selection rule: always call this tool for workloads expected to run longer than 6 months. It does not name sibling alternatives or describe when not to use it, so it falls short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
azure_compare_vm_pricesA
Compare VM SKUs across regions. Always call azure_compare_reservation_vs_payg after for workloads running >6 months.
| Name | Required | Description | Default |
|---|---|---|---|
| regions | Yes | armRegionName values, e.g. ["eastus", "westeurope"] | |
| skuNames | Yes | armSkuName values, e.g. ["Standard_D2s_v5"] | |
| currencyCode | No | USD | |
| response_format | No | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full burden of behavioral disclosure. It only says the tool compares VM SKUs and implies a follow-up call; it does not state whether the operation is read-only, what output format to expect, how results are ordered, or any side effects/limitations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences that waste no words. The primary purpose is front-loaded, and the critical follow-up instruction is concise and actionable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a straightforward read-only comparison tool, the description is serviceable: it names the action, the key inputs (VM SKUs, regions), and a necessary follow-up. However, with no output schema and no annotations, it omits return-value semantics, output ordering, and any caveats about pricing data completeness or regional availability.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents the two required parameters with examples and provides an enum/default for response_format. The description adds no parameter-specific detail. With only 50% schema coverage, optional parameters like currencyCode rely on naming and defaults, but this is acceptable for a simple compare tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action and resource: 'Compare VM SKUs across regions.' This clearly conveys the tool's core function and distinguishes it from the reservation-vs-payg follow-up tool, though it does not explicitly contrast it with sibling search/find-cheapest tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear workflow guidance: 'Always call azure_compare_reservation_vs_payg after for workloads running >6 months.' This gives a concrete condition for using a sibling tool. However, it does not explain when to choose this tool over azure_search_prices or azure_find_cheapest_region.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
azure_estimate_architecture_costA
Estimate monthly and annual cost for a multi-component Azure architecture. Resolves prices in parallel.
| Name | Required | Description | Default |
|---|---|---|---|
| components | Yes | ||
| currencyCode | No | USD | |
| response_format | No | markdown | |
| includeReservationAlternative | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden of behavioral disclosure. It conveys that this is a compute/estimate operation rather than a mutation and adds the behavioral detail 'Resolves prices in parallel.' However, it does not disclose response shape, auth requirements, or failure behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with the primary purpose front-loaded. The parallel-resolution note is minor but not wasteful, making the definition appropriately concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With four top-level parameters, nested component objects, no annotations, and no output schema, the description is too high-level. It omits guidance on required SKU/region inputs, reservation vs consumption pricing, currency handling, and response format selection.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description adds no parameter-level meaning. It does not explain the components array requirements, priceType, currency, response_format, or includeReservationAlternative, so it fails to compensate for the low schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Estimate') and resource ('multi-component Azure architecture') with a clear monthly/annual scope. This differentiates it from sibling tools focused on single price lookups, VM comparisons, actual cost queries, or budgets.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: use when an aggregate monthly/annual cost estimate for a multi-component Azure architecture is needed. It does not explicitly name alternatives or exclusions, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
azure_find_cheapest_regionB
Find the cheapest Azure regions for a given VM SKU. Returns top N sorted by price.
| Name | Required | Description | Default |
|---|---|---|---|
| topN | No | ||
| priceType | No | Consumption | |
| armSkuName | Yes | ||
| currencyCode | No | USD | |
| response_format | No | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral disclosure burden. It does reveal that the result is a top-N, price-sorted list, which signals a read-only lookup, but it does not disclose pricing basis, units, availability caveats, or the concrete response shape beyond the sorting.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with no redundant wording. The core purpose is front-loaded and the output behavior is stated concisely in the second sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has five parameters and no output schema, yet the description covers only the high-level purpose and top-N ordering. The schema supplies defaults and enums, which helps minimally, but the description leaves out output-format expectations and does not clarify why it should be selected over the closely related pricing siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for parameter meaning. It only maps 'VM SKU' to armSkuName and 'top N' to topN; it adds no meaning for priceType, currencyCode, or response_format. The schema's defaults and enums provide some structure, but the description does not explain their intended use.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action — finding the cheapest Azure regions — scoped to a given VM SKU, and notes that it returns top N results sorted by price. This is clear and distinct in substance, but it does not explicitly differentiate from siblings like azure_search_prices or azure_compare_vm_prices.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'for a given VM SKU' implies the intended use case: select this tool when you need the cheapest regions for one SKU. However, there is no explicit guidance on when not to use it or which sibling tool to prefer for related scenarios such as comparing multiple SKUs or pricing models.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
azure_get_cost_forecastC
Retrieve Azure cost forecast for a period. Requires Cost Management credentials.
| Name | Required | Description | Default |
|---|---|---|---|
| endDate | No | ||
| startDate | No | ||
| timeframe | No | MonthToDate | |
| granularity | No | Daily | |
| response_format | No | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions the Cost Management credential requirement, which is useful, but it does not state whether the operation is read-only, how the forecast is calculated, what response formats are produced, or whether there are rate limits or other side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with no filler, and the primary action is front-loaded. It is concise, though the brevity borders on under-specification rather than economical completeness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With five parameters, no output schema, no annotations, and 0% schema descriptions, this single-sentence description is not enough for an agent to call the tool correctly. It provides only a basic purpose and one credential prerequisite, leaving parameter semantics, return behavior, and selection criteria unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate for undocumented parameters. It does not: none of startDate, endDate, timeframe, granularity, or response_format are explained beyond the vague phrase 'for a period.' The agent gets no added meaning about required formats, defaults, or valid combinations.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Retrieve') and resource ('Azure cost forecast') plus a time scope ('for a period'). It is clear about the core function, though it does not explicitly contrast itself with sibling tools like azure_query_costs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives such as azure_query_costs or azure_estimate_architecture_cost. The only context provided is the credential requirement, which is not enough to help an agent select among the eight sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
azure_list_budgetsB
List Azure budgets with current spend status (CRITICAL/WARNING/OK). Requires Cost Management credentials.
| Name | Required | Description | Default |
|---|---|---|---|
| resourceGroup | No | ||
| response_format | No | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral disclosure burden. 'List' implies a read-only operation, and 'Requires Cost Management credentials' is a useful prerequisite. However, it does not disclose error behavior, filtering semantics, or what happens when credentials are missing. This is adequate but has clear gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two succinct sentences with no filler. The core function is front-loaded, and the credential requirement is the only extra detail. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema and no annotations, the description is too sparse. It mentions the return statuses but does not explain the optional resourceGroup parameter, the response_format options, or how credentials are supplied. Sibling tools overlap in the cost domain, so more routing context would be expected.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not mention either parameter (resourceGroup or response_format). The description provides no additional meaning beyond the bare schema names, which are not self-explanatory. Both parameters remain effectively undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') and resource ('Azure budgets'), and adds a distinguishing detail ('current spend status (CRITICAL/WARNING/OK)'). This makes it clearly distinct from sibling tools that focus on prices, costs, and forecasts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. The only contextual note is 'Requires Cost Management credentials,' which is a prerequisite, not a usage guideline. No when-to-use or when-not-to-use information is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
azure_query_costsC
Query actual Azure subscription spend. Requires Cost Management credentials.
| Name | Required | Description | Default |
|---|---|---|---|
| endDate | No | ISO date, required when timeframe=Custom | |
| groupBy | No | ||
| costType | No | ActualCost | |
| startDate | No | ISO date, required when timeframe=Custom | |
| timeframe | Yes | ||
| granularity | No | None | |
| response_format | No | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions that Cost Management credentials are required and implies a read operation, but it does not disclose response format, default grouping, granularity, cost-type semantics, pagination, or other runtime behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and free of filler, and the credential requirement is relevant. However, for a 7-parameter tool with sparse schema documentation, this brevity reads more like under-specification than well-balanced conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the number of parameters, low schema coverage, no output schema, and several similar sibling tools, the description leaves major gaps: how timeframes work, what grouping options mean, what the response looks like, and when to prefer another tool. It is only a starting point.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 29%, and the description itself does not explain timeframe, groupBy, costType, granularity, or response_format. Only startDate and endDate have schema descriptions, so most parameters remain semantically ambiguous and the description does nothing to compensate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Query') and resource ('actual Azure subscription spend'), clearly establishing that this tool reads spend data rather than prices, forecasts, or budgets. It does not explicitly differentiate from azure_query_costs_by_resource, but the wording is sufficient to identify the core purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus closely related siblings such as azure_query_costs_by_resource, azure_get_cost_forecast, or azure_list_budgets. The word 'actual' hints at real spend versus forecasts or estimates, but there are no explicit conditions, exclusions, or alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
azure_query_costs_by_resourceC
Show top-N Azure resources by spend with % of total. Requires Cost Management credentials.
| Name | Required | Description | Default |
|---|---|---|---|
| topN | No | ||
| endDate | No | ||
| startDate | No | ||
| timeframe | No | MonthToDate | |
| resourceGroup | No | ||
| response_format | No | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral disclosure burden. It does add the credential requirement and indicates the output shape (top-N spend with percentage of total). However, it does not disclose read-only behavior, default time range handling, behavior on auth failure, or how results are ordered when ties occur.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences with no filler, and the main action is front-loaded. However, given six undocumented parameters and no annotations, the brevity results in under-specification rather than efficient coverage, so it is not a perfect 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations, no output schema, and six parameters, the description is markedly incomplete for safe invocation. It omits date/timeframe semantics, resourceGroup filtering, response_format options, and error behavior. The credential note is helpful, but an agent would need to inspect parameter names and enums to call this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, but it only clarifies the 'top-N' concept. It does not explain startDate, endDate, timeframe, resourceGroup, or response_format. Parameter names and enum defaults in the schema do some self-documenting work, but the description adds minimal semantic value beyond the topN parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb and resource: 'Show top-N Azure resources by spend with % of total.' This conveys the tool's core function and differentiates it from the general azure_query_costs sibling by the 'by resource' and top-N scope, though it does not explicitly name any sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The only usage-related information is 'Requires Cost Management credentials,' which is a prerequisite rather than guidance on when to choose this tool over alternatives. There is no mention of when to use this instead of azure_query_costs, azure_get_cost_forecast, or other sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
azure_search_pricesB
Search Azure retail prices with OData filters. Use for ad-hoc price lookups.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| skuName | No | partial match, e.g. "D2s v5" | |
| priceType | No | ||
| armSkuName | No | exact SKU, e.g. "Standard_D2s_v5" | |
| serviceName | No | e.g. "Virtual Machines" | |
| currencyCode | No | USD | |
| nextPageLink | No | ||
| armRegionName | No | e.g. "eastus" | |
| serviceFamily | No | e.g. "Compute" | |
| response_format | No | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure, yet it offers only what the verb 'Search' already implies about read-only operation. It omits relevant behavioral traits such as pagination via the nextPageLink parameter, external API dependency, rate limits, and data freshness. For a tool with zero annotation coverage, this is a material gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with zero filler; the principal action is front-loaded in sentence one and the usage hint in sentence two. Every word earns its place, which is the standard for conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter, no-annotation, no-output-schema tool, the description leaves key operational context unstated: how result pages are retrieved via nextPageLink, what response_format renders, and whether results come from an external API with latency or rate limits. An agent can craft a minimal valid call from the schema alone, but it cannot anticipate iteration or output behavior, which is the description's responsibility here.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The phrase 'OData filters' adds meaning beyond the schema by signaling that search parameters (skuName, armSkuName, serviceName, armRegionName, serviceFamily, priceType) compose into combinable filter expressions. With schema coverage at 50%, parameters like limit, nextPageLink, and response_format remain semantically bare in both schema and description, so the description only partially compensates for the gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Search'), a resource ('Azure retail prices'), and a mechanism ('OData filters'), making the core function immediately clear. The closing phrase 'Use for ad-hoc price lookups' implicitly differentiates it from the comparison, optimization, and budget siblings, though it never names a sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The last sentence supplies a usage context — ad-hoc lookups rather than the structured comparison, region-optimization, and budget workflows of the eight sibling tools — so the 'when' is implied. However, it names no alternatives and states no exclusions, leaving an agent to infer which sibling handles a given scenario. This lands at 'implied usage' but not at explicit routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
9 tool updates
v0.1.0- First observed
azure_compare_reservation_vs_payg - First observed
azure_compare_vm_prices - First observed
azure_estimate_architecture_cost - First observed
azure_find_cheapest_region - First observed
azure_get_cost_forecast - First observed
azure_list_budgets - First observed
azure_query_costs - First observed
azure_query_costs_by_resource - First observed
azure_search_prices
TDQS
The tools separate into pricing estimation and actual cost management, but there is some overlap among azure_search_prices, azure_compare_vm_prices, and azure_find_cheapest_region. Descriptions are specific enough that an agent can usually choose correctly, though the boundaries between ad-hoc price lookup and VM-specific comparison could be clearer.
All tool names follow a consistent azure_verb_noun snake_case pattern, with verbs like search, compare, find, estimate, query, get, and list. The naming is predictable and makes the resource/action of each tool immediately recognizable.
Nine tools is well within the ideal range for a focused Azure cost management server. Each tool covers a meaningful aspect of pricing, cost querying, forecasting, or budgeting without unnecessary redundancy or bloat.
The set covers core workflows: price discovery, VM cost comparison, reservation vs pay-as-you-go, architecture estimation, actual spend, resource-level breakdown, forecasting, and budgets. The main gap is budget lifecycle management—only listing budgets is supported, with no create, update, or delete operations, so budget management workflows are incomplete.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Hosted MCP server for AWS cloud spend: service breakdowns, anomalies, savings and forecasts.
Hosted MCP server for LLM cost estimation, model comparison, and budget-aware routing.
Hosted Amazon Seller and Vendor MCP server for Claude, ChatGPT, Cursor, Codex, Gemini, Copilot.
MCP server giving Claude AI access to 22+ NYC public-record databases for real estate due diligence
Related MCP Servers
- AlicenseBqualityCmaintenanceAn MCP server for unified cost tracking and analysis across AWS, OpenAI, and Anthropic. It enables users to query expenditures, compare costs across providers, and analyze usage trends through natural language.10MIT
- AlicenseAqualityBmaintenanceCloud cost management MCP server for Azure. Ask your AI about your cloud bill.15281MIT
- AlicenseAqualityBmaintenanceMCP server that lets Claude (or any MCP-compatible client) compare on-demand compute + storage pricing across AWS, Azure, and GCP in real time.141MIT
- FlicenseNot gradedqualityDmaintenanceThis MCP server enables querying Azure resource pricing programmatically through a structured workflow, including listing service families, service names, products, and calculating monthly costs.-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/MO2k4/azure-cost-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server