azure-vm-pricing-mcp
This server lets AI assistants look up and compare Azure VM specs and list prices (USD, 24 regions) from the cld2day dataset.
find_vm_sizes — find the cheapest VM sizes matching vCPU, memory, GPU, architecture, OS, workload family (general, compute, memory, storage, ai, gpu, hpc, confidential, burstable), region and temp-disk requirements; sort by price or closest fit.
get_vm_size — get full specs and hourly prices for one size across regions (Linux/Windows pay-as-you-go, 1-/3-year reservations and savings plans), cheapest region first.
estimate_vm_cost — estimate monthly and yearly cost for 1–5 sizes, with options for OS, region, instance count and hours per month, plus break-even hours per commitment.
get_price_changes — review up to 12 weeks of reports on new sizes, retired sizes and the biggest list-price moves.
All tools are read-only and query the local dataset only (no external requests).
This server has a remotely hosted endpoint. Open its connector listing for connection details, authentication requirements, and setup instructions:
Azure VM pricing & specs dataset
Every Azure virtual machine size with its specs and USD list prices in 24 regions: Linux and Windows pay as you go, 1- and 3-year reservations, and 1- and 3-year savings plans. Refreshed every Monday and published as plain JSON and CSV.
This is the data behind cld2day.com/tools/azure-vm, the Azure VM size finder and the Azure VM cost calculator.
Files
File | What it is |
One row per size and region. Sorted, so the git history of this file is the price history. | |
Same data, nested by size (compact keys, see below). | |
Weekly change reports: new sizes, retired sizes, region changes, price moves. | |
Snapshot date and counts. | |
An MCP server so AI assistants (Claude, Copilot, Cursor) can query this data. |
Related MCP server: atom-mcp-server
CSV columns
size, region, region_name, category, series, vcpus, memory_gib, gpus, arch, temp_disk_gib, linux_payg_hourly, windows_payg_hourly, reserved_1y_hourly, reserved_3y_hourly, savings_plan_1y_hourly, savings_plan_3y_hourly
All prices are USD per hour per VM. An empty cell means Azure does not sell that option for the size in that region.
JSON shape
{
"generatedUtc": "2026-10-20T03:17:00Z",
"currency": "USD",
"regions": [{ "name": "westeurope", "displayName": "West Europe" }],
"skus": [{
"name": "Standard_D4s_v5", "series": "Dsv5", "category": "General purpose",
"vcpus": 4, "memoryGiB": 16, "gpus": 0, "tempDiskGiB": 0, "arch": "x64",
"maxDataDisks": 8, "maxNics": 2, "acceleratedNetworking": true, "premiumStorage": true,
"prices": { "westeurope": { "l": 0.23, "w": 0.414, "r1": 0.1418, "r3": 0.0909, "s1": 0.1748, "s3": 0.1265 } }
}]
}l Linux pay as you go · w Windows pay as you go (license included) · r1/r3 1-/3-year reservation · s1/s3 1-/3-year savings plan.
How it is built
Specs:
az vm list-skus --all --resource-type virtualMachinesin each region (vCPU, memory, GPUs, temporary disk, data disks, NICs, accelerated networking, Premium SSD, CPU architecture).Prices: the public Azure Retail Prices API, USD retail prices.
Spot and Low Priority meters are excluded.
Reservation prices are published as a term total, so they are converted to an effective hourly rate (÷ 8,760 or ÷ 26,280).
Reservations and savings plans cover compute only, so Windows license costs are not included in
r1/r3/s1/s3.
Only sizes with a Linux pay-as-you-go price in at least one region are included.
These are list prices before taxes and any negotiated discount (EA, MCA, CSP). Not affiliated with or endorsed by Microsoft.
Use it from an AI assistant (MCP)
{
"mcpServers": {
"azure-vm-pricing": { "command": "npx", "args": ["-y", "azure-vm-pricing-mcp"] }
}
}Then ask things like "cheapest 8 vCPU / 32 GB VM in West Europe" or "compare D4s_v5 and D4as_v6 on a 3-year reservation". See mcp/README.md.
License
Data (
data/): CC BY 4.0. Please credit cld2day.com with a link to https://cld2day.com/tools/azure-vm.Code (
mcp/): MIT.
Maintained by Vassilis Dionysopoulos, Principal Cloud Architect (cld2day.com, cloudtales.gr).
Available Tools
4 toolsestimate_vm_costEstimate Azure VM costARead-onlyInspect
Monthly and yearly cost of one or more Azure VM sizes for pay as you go, reservations and savings plans, with the break-even hours per month for each commitment. Use it to compare sizes or regions.
| Name | Required | Description | Default |
|---|---|---|---|
| os | No | Operating system for pay-as-you-go prices. Default linux. | |
| sizes | Yes | One to five VM sizes to price, e.g. ["Standard_D4s_v5", "Standard_D4as_v6"]. | |
| region | No | Azure region, e.g. westeurope or "West Europe". Omit to use each size's cheapest region. | |
| instances | No | Number of VMs. Default 1. | |
| hours_per_month | No | Runtime hours per month. Default 730 (always on). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint and openWorldHint, so the description adds real value by disclosing the shape of the result: monthly and yearly figures, three commitment models, and break-even hours per commitment. It doesn't mention rate limits, caching, or pricing-freshness caveats, which keeps it short of a 5.
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 sentences, zero filler, with the output contract front-loaded and the usage hint trailing. Every clause carries information.
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 output schema, the description correctly compensates by summarizing what is returned (monthly/yearly costs, break-even hours). Combined with the fully documented input schema and read-only annotation, an agent has enough to call it correctly; only the pricing-freshness/commitment-selection nuance is left unstated.
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 100%, so the schema already documents os, sizes, region, instances and hours_per_month with defaults and bounds. The description's mention of commitment types is framing rather than parameter guidance, so baseline 3 applies.
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 names a specific resource (Azure VM sizes) and a specific output (monthly/yearly cost across pay-as-you-go, reservations and savings plans, plus break-even hours). It is clearly distinct from the size-lookup siblings, though it never names them 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?
"Use it to compare sizes or regions" gives an implied use case, but there is no statement of when NOT to use it, no prerequisites, and no pointer to alternatives such as get_price_changes or find_vm_sizes. Adequate but thin.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_vm_sizesFind Azure VM sizesARead-onlyInspect
Find the cheapest Azure VM sizes that meet vCPU, memory and workload requirements, with monthly USD list prices. Burstable (B-series) and confidential sizes are only included when that workload is requested.
| Name | Required | Description | Default |
|---|---|---|---|
| os | No | Operating system for pay-as-you-go prices. Default linux. | |
| arch | No | CPU architecture. | |
| sort | No | price = cheapest first (default); fit = least spare vCPU/memory first. | |
| region | No | Azure region, e.g. westeurope or "West Europe". Omit to use each size's cheapest region. | |
| min_gpus | No | Minimum number of whole GPUs (partitioned GPUs such as 1/6 A10 do not count). | |
| workload | No | Workload family. ai = NVIDIA GPUs only (CUDA, PyTorch, vLLM); gpu = any GPU incl. AMD. Omit for any (excludes burstable and confidential). | |
| min_vcpus | No | Minimum vCPUs, e.g. 8. | |
| max_results | No | Default 10. | |
| min_memory_gib | No | Minimum memory in GiB, e.g. 32. | |
| need_temp_disk | No | Only sizes with a local temporary disk. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnly/openWorld=false, so the description earns credit for disclosing non-obvious behavior: prices are monthly USD list prices, results are cheapest-first, and B-series/confidential sizes are filtered out by default. It says nothing about result-set size or what fields each size row carries, so it is not fully transparent.
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 tight sentences, no filler, front-loading the core search semantics before the caveat about burstable/confidential families.
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 search tool with no output schema, the description covers the semantics an agent needs to choose it and interpret results (price basis, ordering, family exclusions). It omits any indication of the shape of the returned size records and result limiting beyond the schema's max_results.
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 100%, so the baseline is 3, but the description adds meaning the schema does not: the pricing model behind the numbers (monthly USD list, i.e. not reserved/spot) and the default cheapest-first ordering semantics. It does not elaborate on region fallback or gpu/vCPU interplay, so it does not reach 5.
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?
States a specific verb (find) and resource (Azure VM sizes) plus the optimization criterion (cheapest meeting vCPU/memory/workload requirements) and the returned pricing basis. This clearly separates it from the singular get_vm_size/estimate_vm_cost siblings without needing to name them.
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?
Gives real selection guidance for the workload parameter: burstable and confidential families are only returned when explicitly requested, telling the agent how to obtain them. It never names the sibling alternatives or states when to prefer this over estimate_vm_cost, so it stops short of explicit when/when-not routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_price_changesAzure VM price changesARead-onlyInspect
Weekly report of new Azure VM sizes, retired sizes and the biggest list-price moves across 24 regions.
| Name | Required | Description | Default |
|---|---|---|---|
| weeks | No | How many weekly reports, newest first. Default 1. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered. The description usefully adds the fixed 24-region scope and the report's content categories, but says nothing about data freshness, coverage limits, or latency for a report spanning up to 12 weeks.
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?
A single front-loaded sentence that enumerates the report's contents with no filler or repetition. Nothing could be removed without losing information.
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 one-optional-param read tool with no output schema, the description adequately conveys what the report returns (new sizes, retired sizes, price moves). It could say slightly more about the returned structure or region coverage granularity, but nothing essential is missing.
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?
Only one parameter and schema coverage is 100%, so the schema fully documents 'weeks' including its default and max. The description adds no semantics beyond it, which matches the baseline for high-coverage schemas.
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?
Specific verb+resource: a weekly report of new/retired VM sizes and list-price moves across 24 regions. It clearly differs in substance from siblings like find_vm_sizes and estimate_vm_cost, though it never names an alternative 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 phrase 'Weekly report' implies the use case (tracking changes over time) but there is no explicit when-to-use, when-not-to-use, or pointer to a sibling tool. Usage is inferred rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_vm_sizeAzure VM size detailsARead-onlyInspect
Specs of one Azure VM size and its hourly USD prices per region (Linux, Windows, 1/3-year reservations, 1/3-year savings plans), cheapest region first.
| Name | Required | Description | Default |
|---|---|---|---|
| size | Yes | VM size, e.g. Standard_D4s_v5 or D4s v5. | |
| region | No | Limit prices to one region. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is known. The description adds genuine behavioral context beyond that: it enumerates the pricing dimensions (Linux, Windows, reservations, savings plans) and the output ordering ('cheapest region first'), which an agent needs to interpret results.
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?
A single dense sentence that front-loads what the tool returns and ends with the sort order. Every clause carries information, though the parenthetical pricing enumeration is heavy for one line.
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 output schema, the description compensates by naming what is returned (specs, hourly USD prices by pricing model) and the ordering, which is sufficient for an agent to use the result. Only the spec fields themselves remain unspecified, a minor gap.
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 100%, so both parameters are already documented with examples in the schema. The description only implicitly references the region parameter via 'per region' and adds no format or syntax beyond what the schema provides, so baseline 3 applies.
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?
States a specific verb+resource (specs of ONE Azure VM size) with clear scope, distinguishing it from the plural find_vm_sizes by emphasizing a single-size lookup. It doesn't explicitly name siblings, but the singular framing and price focus make the purpose unambiguous.
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?
Usage is implied by 'one Azure VM size,' which signals a single-size detail lookup rather than discovery or estimation. However, it never states when to use this versus estimate_vm_cost or find_vm_sizes, and offers no exclusions or prerequisites.
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.
1 tool update
v0.1.1- Changed
find_vm_sizes5 fields changed- changed
Input schema / properties / min_gpus / maximumPrevious value: -9007199254740991New value: +16 - changed
Input schema / properties / min_memory_gib / descriptionPrevious value: -"Minimum memory in GiB."New value: +"Minimum memory in GiB, e.g. 32." - added
Input schema / properties / min_memory_gib / maximumAdded value: +32768 - changed
Input schema / properties / min_vcpus / descriptionPrevious value: -"Minimum vCPUs."New value: +"Minimum vCPUs, e.g. 8." - changed
Input schema / properties / min_vcpus / maximumPrevious value: -9007199254740991New value: +1024
4 tool updates
v0.1.0- First observed
estimate_vm_cost - First observed
find_vm_sizes - First observed
get_price_changes - First observed
get_vm_size
TDQS
Scored across 4 tools
Each tool has a distinct primary purpose: change reporting, single-size lookup, requirement-based discovery, and multi-size cost projection. However, get_vm_size (per-region hourly prices), find_vm_sizes (monthly list prices), and estimate_vm_cost (monthly/yearly costs with commitments) all surface pricing data, so an agent could reasonably confuse which pricing tool to pick for a given question.
All four names follow a clean verb_noun snake_case pattern (get_price_changes, get_vm_size, find_vm_sizes, estimate_vm_cost). Verb choices (get/find/estimate) are predictable and the singular/plural distinction between get_vm_size and find_vm_sizes is semantically meaningful, not inconsistent.
Four tools is slightly lean but well-scoped for a narrow domain like Azure VM pricing: monitoring, lookup, search, and estimation. Nothing redundant, though a slightly broader surface (e.g., a catalog/region listing tool) would round it out.
The surface covers the core pricing lifecycle: change tracking, per-size specs and regional prices, requirement-based discovery, and commitment cost estimation with break-even analysis. Gaps are minor (no spot/preemptible pricing, no full catalog or region listing), but agents can work around them with the existing tools.
Maintenance
Related MCP Connectors
Live VPS, bare metal and GPU hosting prices across ~75 providers, rescraped daily.
VPS prices read daily from providers' own pricing pages and APIs: cheapest by size, place or app.
Published list prices of compute (VPS, GPU hours, LLM tokens, media), archived daily. Read-only.
Hourly cloud GPU prices from 80+ providers: find, compare, cost and track GPUs.
Related MCP Servers
- AlicenseAqualityFmaintenanceProvides AI assistants with real-time access to Azure retail pricing information, enabling price searches, regional cost comparisons, monthly bill estimates, and SKU discovery through natural language queries.1356MIT
- AlicenseAqualityBmaintenanceGlobal price benchmarking for AI inference across 2,600+ SKUs from 47 vendors. Query live pricing, market indexes, and model specs via 8 tools. Free tier available.863 npmMIT
- AlicenseNot gradedqualityBmaintenanceMCP server that converts hardware specs into Azure price quotes using live Azure Retail Prices API. Provides tools to propose VM flavors, get full quotes with disk and reservation options, and batch-analyze RVTools exports.MIT
- AlicenseAqualityBmaintenanceAnchor AI FinOps to real, live cloud pricing. AWS, GCP & Azure — public list prices and enterprise negotiated rates. No credentials needed for AWS and Azure public pricing.15139 PyPI3MIT