Skip to main content

Open source MCP server for accurate public and effective cloud pricing (AWS, GCP, Azure)

Project description

OpenCloudCosts MCP

An open source MCP server that gives AI assistants accurate cloud pricing data for AWS, GCP, and Azure.

License: MIT

Supports both public list pricing (no credentials needed for AWS and Azure; GCP requires a free API key) and effective/bespoke pricing (post-discount: Reserved Instances, Savings Plans, CUDs, EDPs).

Key Use Cases

  • "What is the on-demand price of an m5.xlarge in us-east-1 vs ap-southeast-2, and what's the % delta?"
  • "Give me a TCO estimate for this architecture: 3x m5.xlarge + 1x 500GB gp3 EBS in us-east-1"
  • "What's the cost per user if I run this stack for 50,000 MAUs?"
  • "List all c6g instances in eu-west-1 with >= 8 vCPUs"
  • "What's my effective hourly rate on m5.xlarge after Savings Plans?"

Tools

Tool Description
Pricing Lookup
Tool Description
get_compute_price Price for a specific instance type in a region
get_storage_price EBS/S3/GCS storage pricing
get_service_price Generic pricing for any AWS service — CloudWatch, data transfer, RDS, Lambda, ELB, Route53, DynamoDB, EFS, and 250+ others
get_prices_batch Prices for multiple instance types in one call (concurrent)
compare_compute_prices Compare same instance across multiple regions with optional baseline deltas
search_pricing Search pricing catalog by keyword — any service, not just EC2

Effective & Discount Pricing

Tool Description
get_effective_price Effective rate after account discounts (requires credentials)
get_discount_summary All active RIs and Savings Plans with utilization %

Discovery

Tool Description
list_services All 260+ AWS services with pricing data
list_regions All regions with friendly names
list_instance_types Available instance types with vCPU/memory filters
check_availability Is a SKU available in a region?

Region Analysis

Tool Description
find_cheapest_region Cheapest region for an instance type with optional baseline deltas
find_available_regions Every region where an instance exists — prices, region names, deltas

Cost Estimation

Tool Description
estimate_bom TCO for a Bill of Materials
estimate_unit_economics Cost per user/request/transaction

Cache

Tool Description
refresh_cache Invalidate pricing cache
cache_stats Cache entry counts and DB size

See docs/tools.md for full parameter reference and docs/finops-guide.md for usage examples.

Setup

Prerequisites

  • uv installed (curl -LsSf https://astral.sh/uv/install.sh | sh)
  • AWS credentials (optional — public pricing works without them)

Clone & configure

git clone https://github.com/x7even/cloudcostsmcp opencloudcosts
cd opencloudcosts
cp .env.example .env
# Edit .env if you want effective pricing / Cost Explorer

Test it works

uv run pytest

Run the server

uv run opencloudcosts

Run as HTTP server

HTTP transport enables shared/remote deployments — one server, many clients.

# Localhost only (default)
uv run opencloudcosts --transport http --port 8080

# Bind to all interfaces (e.g. for Docker or remote access)
uv run opencloudcosts --transport http --host 0.0.0.0 --port 8080

Environment variable equivalents: OCC_HTTP_HOST and OCC_HTTP_PORT.

Connect to Claude Code via .mcp.json:

{
  "mcpServers": {
    "cloudcost": {
      "transport": "http",
      "url": "http://localhost:8080/mcp/v1"
    }
  }
}

Docker

docker build -t opencloudcosts .
docker run -p 8080:8080 \
  -e OCC_GCP_API_KEY=AIza... \
  -v ~/.aws:/root/.aws:ro \
  opencloudcosts

The container starts in HTTP transport mode by default (bound to 0.0.0.0:8080). Pass cloud credentials via -e flags or mount your AWS credentials directory.

Connect to Claude Code

Add to your project's .mcp.json:

{
  "mcpServers": {
    "cloudcost": {
      "command": "uv",
      "args": ["run", "--directory", "/path/to/opencloudcosts", "opencloudcosts"],
      "env": {
        "AWS_PROFILE": "default",
        "OCC_GCP_API_KEY": "AIza..."
      }
    }
  }
}

Or to ~/.claude/settings.json for global access:

{
  "mcpServers": {
    "cloudcost": {
      "command": "uv",
      "args": ["run", "--directory", "/path/to/opencloudcosts", "opencloudcosts"]
    }
  }
}

Test with MCP Inspector

npx @modelcontextprotocol/inspector uv run --directory /path/to/opencloudcosts opencloudcosts

AWS Credentials

Feature Credentials needed
Public pricing (EC2, EBS, RDS list prices) None
Effective pricing (RI / SP discounts) AWS credentials + OCC_AWS_ENABLE_COST_EXPLORER=true

Minimal IAM policy for public pricing:

{
  "Effect": "Allow",
  "Action": ["pricing:GetProducts", "pricing:DescribeServices", "pricing:GetAttributeValues"],
  "Resource": "*"
}

Add these for effective pricing:

"ce:GetCostAndUsage", "savingsplans:DescribeSavingsPlans", "savingsplans:DescribeSavingsPlanRates"

Configuration

All settings via environment variables (prefix OCC_) or .env file:

Variable Default Description
OCC_CACHE_TTL_HOURS 24 Public price cache TTL
OCC_AWS_ENABLE_COST_EXPLORER false Enable effective pricing (costs $0.01/call)
OCC_DEFAULT_REGIONS us-east-1,us-west-2 Default regions
AWS_PROFILE (default chain) AWS credentials profile

Caching

Prices are cached in SQLite at ~/.cache/opencloudcosts/pricing.db. Public list prices are cached for 24 hours — AWS pricing changes infrequently. Use the refresh_cache tool to force a refresh.

GCP Setup

Unlike AWS (which has public bulk pricing endpoints), GCP's pricing API always requires at least a free API key. No credit card or billing account is needed.

Option A — Free API key (recommended, 2 min setup):

  1. Go to console.cloud.google.com/apis/credentials
  2. Create a Project if you don't have one (free)
  3. Click Create Credentials → API key
  4. Set the key:
export OCC_GCP_API_KEY=AIza...

Or add OCC_GCP_API_KEY=AIza... to your .env file.

Option B — Application Default Credentials (if you already use gcloud):

gcloud auth application-default login
# or set GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account.json

GCP instance type format: {family}-{series}-{vcpus} e.g. n2-standard-4, e2-highmem-8, c2-standard-16

Azure Setup

Azure pricing is fully public — no credentials, API key, or subscription needed.

# No configuration needed — works out of the box
uv run opencloudcosts

Azure instance type format: ARM SKU names e.g. Standard_D4s_v3, Standard_E8s_v3, Standard_B2ms

Azure pricing terms: on_demand (default), reserved_1yr, reserved_3yr, spot

Azure regions: ARM region names e.g. eastus, westeurope, southeastasia (use list_regions for full list)

GCP pricing terms: on_demand (default), spot (preemptible), cud_1yr, cud_3yr

Phases

  • Phase 1 ✅ AWS public pricing (EC2, EBS, list instances)
  • Phase 2 ✅ AWS effective pricing (Cost Explorer, Savings Plans, Reserved Instances)
  • Phase 3 ✅ GCP public pricing (Compute Engine families, Persistent Disk, CUDs)
  • Phase 4 ✅ Azure public pricing (Retail Prices API, no credentials)
  • Phase 4 ✅ Streamable-HTTP transport (--transport http), Dockerfile
  • Phase 4 ✅ Spot price history tool (get_spot_history), GCP Windows pricing
  • Phase 5: GCP effective pricing (BigQuery billing export)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

opencloudcosts-0.7.0.tar.gz (193.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

opencloudcosts-0.7.0-py3-none-any.whl (68.8 kB view details)

Uploaded Python 3

File details

Details for the file opencloudcosts-0.7.0.tar.gz.

File metadata

  • Download URL: opencloudcosts-0.7.0.tar.gz
  • Upload date:
  • Size: 193.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for opencloudcosts-0.7.0.tar.gz
Algorithm Hash digest
SHA256 64fc367ad5f368836b393486a0036488dec828a639cddb56e86f5caed4e3e50c
MD5 be2857dae160d8e79f8f07b1992f9491
BLAKE2b-256 73a78e30c357cd520f55d2313faa61d9643723b5560fbc5a8a62528db806a501

See more details on using hashes here.

Provenance

The following attestation bundles were made for opencloudcosts-0.7.0.tar.gz:

Publisher: workflow.yml on x7even/cloudcostsmcp

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file opencloudcosts-0.7.0-py3-none-any.whl.

File metadata

  • Download URL: opencloudcosts-0.7.0-py3-none-any.whl
  • Upload date:
  • Size: 68.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for opencloudcosts-0.7.0-py3-none-any.whl
Algorithm Hash digest
SHA256 21d65ffb6ca47df8cb42cca88b02fd6062864028f54f93dadda51fb94b78b373
MD5 16634d78205ba47b9c1b19cea9d44a93
BLAKE2b-256 1de9cc32fc6bebef30693a72b61440fd736def4e8c5dc71d85a45ac264d093f5

See more details on using hashes here.

Provenance

The following attestation bundles were made for opencloudcosts-0.7.0-py3-none-any.whl:

Publisher: workflow.yml on x7even/cloudcostsmcp

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page