MCP server for estimating Azure service costs using the Azure Retail Prices API
Project description
azure-pricing-mcp
An MCP (Model Context Protocol) server that lets LLMs query Azure service pricing using the public Azure Retail Prices API.
No Azure credentials required — the API is free and public.
Quick Start
Run directly with uvx:
uvx azure-pricing-mcp
Or install and run:
uv pip install azure-pricing-mcp
azure-pricing-mcp
Tools
| Tool | Description |
|---|---|
search_prices |
Search Azure retail prices by service, region, SKU, or product name |
estimate_cost |
Estimate monthly cost for a service given quantity and usage hours |
compare_regions |
Compare prices for a service/SKU across Azure regions (sorted cheapest first) |
list_services |
Discover available Azure services (with optional text search) |
list_regions |
List Azure regions (optionally filtered by service) |
All tools support a currency_code parameter (default: USD). Examples: EUR, BRL, GBP, JPY.
Usage Examples
Once connected to an MCP client (Claude Desktop, Cursor, Claude Code, etc.), you can ask:
- "What's the price of a D2 v3 VM in East US?"
- "Estimate the monthly cost for 5 Standard_LRS storage accounts in West Europe"
- "Compare Virtual Machines D4 v3 pricing across all regions"
- "List all Azure services related to 'database'"
- "What regions offer Azure Cosmos DB?"
Configuration
Using mcp.json (VS Code / GitHub Copilot)
Create an mcp.json file in your project's .vscode folder (.vscode/mcp.json) to share the server with your team:
{
"servers": {
"azure-pricing": {
"command": "uvx",
"args": ["azure-pricing-mcp"]
}
}
}
Or add it at the user level (~/.vscode/mcp.json) to make it available across all projects.
Tip: When opening a project with an
mcp.json, VS Code will prompt you to start the MCP server automatically.
Claude Desktop
Add to your claude_desktop_config.json:
{
"mcpServers": {
"azure-pricing": {
"command": "uvx",
"args": ["azure-pricing-mcp"]
}
}
}
Claude Code
claude mcp add azure-pricing -- uvx azure-pricing-mcp
Cursor
Add to your Cursor MCP settings (.cursor/mcp.json):
{
"mcpServers": {
"azure-pricing": {
"command": "uvx",
"args": ["azure-pricing-mcp"]
}
}
}
Windsurf
Add to your Windsurf MCP config (~/.windsurf/mcp.json):
{
"mcpServers": {
"azure-pricing": {
"command": "uvx",
"args": ["azure-pricing-mcp"]
}
}
}
Development
# Clone and install
git clone https://github.com/pimentelleo/azure-pricing-mcp.git
cd azure-pricing-mcp
uv sync
# Run locally
uv run azure-pricing-mcp
# Test with MCP Inspector
npx -y @modelcontextprotocol/inspector uv run azure-pricing-mcp
How It Works
This server uses the Azure Retail Prices REST API to fetch real-time public pricing data for Azure services. Key characteristics:
- No authentication required — the API is publicly accessible
- Real-time data — prices are updated regularly by Microsoft
- Public retail prices only — does not include enterprise agreements or negotiated rates
- Supports all Azure services — VMs, Storage, Databases, Networking, AI/ML, and more
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file azure_pricing_mcp-0.1.1.tar.gz.
File metadata
- Download URL: azure_pricing_mcp-0.1.1.tar.gz
- Upload date:
- Size: 52.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6464132876b49b4ca0a38906539266a7d303800c000e83e9b95583e81aad5b9b
|
|
| MD5 |
ee87558784f067d04c6598378fe6cd3a
|
|
| BLAKE2b-256 |
33d90f48aa64cd0bfea27112e135e392de8dfff2f17eeeac611288002a95bdab
|
Provenance
The following attestation bundles were made for azure_pricing_mcp-0.1.1.tar.gz:
Publisher:
publish.yml on pimentelleo/azure-pricing-mcp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
azure_pricing_mcp-0.1.1.tar.gz -
Subject digest:
6464132876b49b4ca0a38906539266a7d303800c000e83e9b95583e81aad5b9b - Sigstore transparency entry: 1595585635
- Sigstore integration time:
-
Permalink:
pimentelleo/azure-pricing-mcp@a0f2292ba0f62a12b066b9a4820d6a5565a3b5b4 -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/pimentelleo
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@a0f2292ba0f62a12b066b9a4820d6a5565a3b5b4 -
Trigger Event:
release
-
Statement type:
File details
Details for the file azure_pricing_mcp-0.1.1-py3-none-any.whl.
File metadata
- Download URL: azure_pricing_mcp-0.1.1-py3-none-any.whl
- Upload date:
- Size: 8.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
425323a616ec19bf18d8c94d5baa7399e0c48043a6541fa15015980bd9da0e76
|
|
| MD5 |
fd56e082aac647e9271ce1a5a7731c4d
|
|
| BLAKE2b-256 |
0925f406ed581846d8b9e4742cd517bbb2568715710c777f63a55dd0a006a6a6
|
Provenance
The following attestation bundles were made for azure_pricing_mcp-0.1.1-py3-none-any.whl:
Publisher:
publish.yml on pimentelleo/azure-pricing-mcp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
azure_pricing_mcp-0.1.1-py3-none-any.whl -
Subject digest:
425323a616ec19bf18d8c94d5baa7399e0c48043a6541fa15015980bd9da0e76 - Sigstore transparency entry: 1595585687
- Sigstore integration time:
-
Permalink:
pimentelleo/azure-pricing-mcp@a0f2292ba0f62a12b066b9a4820d6a5565a3b5b4 -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/pimentelleo
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@a0f2292ba0f62a12b066b9a4820d6a5565a3b5b4 -
Trigger Event:
release
-
Statement type: