Skip to main content
Glama
vdionisopoulos

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

data/azure-vm-prices.csv

One row per size and region. Sorted, so the git history of this file is the price history.

data/azure-vm-sku-catalog.json

Same data, nested by size (compact keys, see below).

data/azure-vm-price-changes.json

Weekly change reports: new sizes, retired sizes, region changes, price moves.

data/meta.json

Snapshot date and counts.

mcp/

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 virtualMachines in 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 tools
estimate_vm_costEstimate Azure VM costA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
osNoOperating system for pay-as-you-go prices. Default linux.
sizesYesOne to five VM sizes to price, e.g. ["Standard_D4s_v5", "Standard_D4as_v6"].
regionNoAzure region, e.g. westeurope or "West Europe". Omit to use each size's cheapest region.
instancesNoNumber of VMs. Default 1.
hours_per_monthNoRuntime hours per month. Default 730 (always on).

TDQS

A3.8/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 sizesA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
osNoOperating system for pay-as-you-go prices. Default linux.
archNoCPU architecture.
sortNoprice = cheapest first (default); fit = least spare vCPU/memory first.
regionNoAzure region, e.g. westeurope or "West Europe". Omit to use each size's cheapest region.
min_gpusNoMinimum number of whole GPUs (partitioned GPUs such as 1/6 A10 do not count).
workloadNoWorkload family. ai = NVIDIA GPUs only (CUDA, PyTorch, vLLM); gpu = any GPU incl. AMD. Omit for any (excludes burstable and confidential).
min_vcpusNoMinimum vCPUs.
max_resultsNoDefault 10.
min_memory_gibNoMinimum memory in GiB.
need_temp_diskNoOnly sizes with a local temporary disk.

TDQS

A3.8/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 changesA
Read-only
Inspect

Weekly report of new Azure VM sizes, retired sizes and the biggest list-price moves across 24 regions.

ParametersJSON Schema
NameRequiredDescriptionDefault
weeksNoHow many weekly reports, newest first. Default 1.

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 detailsA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
sizeYesVM size, e.g. Standard_D4s_v5 or D4s v5.
regionNoLimit prices to one region.

TDQS

A3.7/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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. 4 tool updatesv0.1.0
    • First observedestimate_vm_cost
    • First observedfind_vm_sizes
    • First observedget_price_changes
    • First observedget_vm_size

TDQS

A3.9/5.0

Scored across 4 tools

Disambiguation4/5

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.

Naming Consistency5/5

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.

Tool Count4/5

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.

Completeness4/5

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

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    F
    maintenance
    Provides 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.
    13
    56
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    MCP 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
  • A
    license
    A
    quality
    B
    maintenance
    Anchor 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.
    15
    31 PyPI
    3
    MIT