Skip to main content
Glama
MO2k4

azure-cost-mcp

by MO2k4
README.md
# azure-cost-mcp

![CI](https://github.com/MO2k4/azure-cost-mcp/actions/workflows/ci.yml/badge.svg)

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 |
| ----------------------------------- | ------------------------------------------------------------------------ | ------------- |
| `azure_search_prices`               | Search Azure retail prices with OData filters                            | No            |
| `azure_compare_vm_prices`           | Compare VM SKUs across regions (monthly matrix)                          | No            |
| `azure_find_cheapest_region`        | Find cheapest regions for a given SKU                                    | No            |
| `azure_compare_reservation_vs_payg` | PAYG vs 1-yr / 3-yr reservation with break-even                          | No            |
| `azure_estimate_architecture_cost`  | Estimate multi-component architecture monthly cost                       | No            |
| `azure_query_costs`                 | Query actual subscription spend (group by service, resource group, etc.) | Yes           |
| `azure_query_costs_by_resource`     | Top-N resources by spend with % of total                                 | Yes           |
| `azure_get_cost_forecast`           | Cost forecast for a period                                               | Yes           |
| `azure_list_budgets`                | List budgets with CRITICAL / WARNING / OK status                         | Yes           |

## Prerequisites

- Node.js 20+
- npm

## Build

```bash
npm install
npm run build
```

## Azure setup (for authenticated tools)

Create a service principal and assign the **Cost Management Reader** role:

```bash
# 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):

```json
{
  "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                       |
| ------------------------------- | -------------- | --------------------------------- |
| `AZURE_TENANT_ID`               | For auth tools | Azure AD tenant ID                |
| `AZURE_CLIENT_ID`               | For auth tools | Service principal application ID  |
| `AZURE_CLIENT_SECRET`           | For auth tools | Service principal secret          |
| `AZURE_SUBSCRIPTION_ID`         | For auth tools | Subscription to query             |
| `AZURE_RETAIL_DEFAULT_CURRENCY` | No             | Default currency (default: `USD`) |

## 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

```bash
npm test            # run tests
npm run test:watch  # watch mode
npm run lint        # ESLint
npm run format      # Prettier
```

TDQS

B3.4/5.0

Scored across 9 tools

Disambiguation4/5

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.

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness4/5

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

ActivityInactive
ResponsivenessNo issues