azure-vm-pricing-mcp
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: CC BY 4.0. Please credit cld2day.com with a link to https://cld2day.com/tools/azure-vm. The MCP server code is MIT licensed.
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. | |
| max_results | No | Default 10. | |
| min_memory_gib | No | Minimum memory in GiB. | |
| 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 already declare readOnlyHint=true and openWorldHint=false, so safety is covered. The description adds real behavioral context: prices are monthly USD list prices, and burstable/confidential families are silently excluded unless explicitly requested — a non-obvious filtering trait that affects result interpretation.
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, both load-bearing: the first covers purpose and output units, the second covers the default exclusion rule. The most decision-relevant information (what it finds and at what price basis) is front-loaded with zero filler.
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 10 all-optional parameters, no required inputs, and no output schema, the description supplies what the schema cannot: the default filtering behavior and price basis. It does not describe result ordering limits or tie-breaking beyond what sort/ max_results already say, but nothing essential to calling it correctly 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?
Schema description coverage is 100%, so every parameter including the enum semantics (ai vs gpu, sort=price vs fit, region default) is already documented in the schema. The description reinforces that vCPU, memory and workload drive the match, but adds no syntax or format detail beyond it, so the 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 and resource ("Find the cheapest Azure VM sizes") plus the qualifying dimensions (vCPU, memory, workload) and the delivered artifact (monthly USD list prices). It is clearly distinguishable from get_vm_size (singular detail) and estimate_vm_cost (costing), 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 sentence "Burstable (B-series) and confidential sizes are only included when that workload is requested" is a genuine usage rule about default behavior. However, there is no explicit when/when-not guidance and no routing to the sibling tools, so the agent must infer that this is the discovery step before estimate_vm_cost.
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.
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 targets a distinct angle: find_vm_sizes discovers sizes meeting requirements, get_vm_size returns specs/hourly prices for one size, estimate_vm_cost computes committed monthly/yearly totals, and get_price_changes reports market movements. The main risk is overlap between get_vm_size (hourly prices) and estimate_vm_cost (monthly/yearly), but the descriptions make the intent distinguishable.
All four tools follow a clean verb_noun pattern (estimate_vm_cost, find_vm_sizes, get_vm_size, get_price_changes) with consistent snake_case and clear, standard verbs.
Four tools is a tight, well-scoped set for a VM pricing server — lookup, discovery, cost estimation, and change tracking — with no redundant entries. It is slightly on the thin side, but each tool clearly earns its place.
The surface covers the core pricing lifecycle: discovery by requirements, single-size detail, commitment cost comparison, and price-change monitoring. Minor gaps exist (e.g. no region/currency enumeration or discount/SKU availability lookup), but agents can work around them.
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.
Hourly cloud GPU prices from 60+ providers: find, compare, cost and track GPUs.
Cloud GPU prices with live stock from 22 providers. Find where to rent an H100 or B300 now.
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.865 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.1531 PyPI3MIT