Skip to content

Repository files navigation

CI Docker Go Report Card MCP Compatible

spotinfo

Pick a Spot machine on AWS, GCP or Azure from one command line. No credentials. Every price ships inside the binary, so --offline answers in about a tenth of a second.

The problem

Spot capacity is far cheaper than On-Demand — between 40% and 85% off in the snapshots that ship with this tool. Finding the right machine does not scale by hand:

  • Each cloud publishes prices in a different place, in a different shape, on a different schedule. AWS has a JSON feed and an interruption Advisor. GCP has server-rendered HTML pages. Azure has a REST API and a separate documentation site for vCPU and memory.
  • The consoles rank by price. They do not rank by "cheapest machine with at least 4 vCPU and 16 GiB that my workload can survive losing".
  • A price page has no memory of yesterday, so a script that reads one is a scraper you now own.

The result is that most teams pick one instance family, hard-code it, and stop looking.

What spotinfo does

One command ranks real machines against a real requirement, and says where the number came from.

$ spotinfo recommend --cloud azure --architecture arm64 --min-vcpu 4 --min-memory-gib 16
RANK  CLOUD  REGION        MACHINE            ARCHITECTURE  vCPU  MEMORY GiB  USD/HOUR    SAVINGS  RISK          WHY
   1  azure  centralindia  Standard_D4ps_v6   arm64            4        16.0  0.017076        81%  unavailable   ARCHITECTURE_MATCH,COST_POLICY,KNOWN_POSITIVE_PRICE,RESOURCE_MINIMUMS_MET
   2  azure  centralindia  Standard_D4ps_v5   arm64            4        16.0  0.018665        81%  unavailable   ARCHITECTURE_MATCH,COST_POLICY,KNOWN_POSITIVE_PRICE,RESOURCE_MINIMUMS_MET
   3  azure  centralindia  Standard_D4pds_v5  arm64            4        16.0  0.022361        81%  unavailable   ARCHITECTURE_MATCH,COST_POLICY,KNOWN_POSITIVE_PRICE,RESOURCE_MINIMUMS_MET

Four properties make that output worth trusting:

It works with no credentials. Price snapshots ship inside the binary, and a weekly job refreshes them through a reviewed pull request. AWS and Azure additionally read live feeds when they can reach them — AWS on every run, Azure when you name one or two regions — and fall back to the snapshot when they cannot. --offline skips every price and risk request; only --with-score still reaches a cloud, because no snapshot carries a placement figure.

It says what it does not know. GCP and Azure publish no redistributable interruption data, so every candidate reports RISK: unavailable. It is never a zero and never a low bucket. A cloud that measures nothing must not outrank a cloud that measures honestly. On GCP, --live-risk fetches a per-project preemption rate for the ranked page — Google measures it differently from AWS, so it is shown and never filtered on.

It refuses questions it cannot answer, and says why. --workload web caps interruption frequency at an AWS Spot Advisor bucket boundary. Ask for it on a cloud that measures something else and the command stops before it reads a price, naming the vendor limit rather than a feature nobody built:

$ spotinfo recommend --cloud gcp --workload web --architecture x86_64 --min-vcpu 4 --min-memory-gib 16
spotinfo: gcp: unsupported capability: risk: the web workload caps interruption frequency at 5%, an AWS Spot Advisor bucket boundary, and gcp publishes no figure measured that way; workload cost applies no ceiling and answers on every cloud

Every answer carries its source. The JSON report names each source URL and the SHA-256 of the document that was read, so a reader can fetch it again and compare.

Install

# macOS with Homebrew
brew install alexei-led/tap/spotinfo

# Linux and Windows
curl -L https://github.com/alexei-led/spotinfo/releases/latest/download/spotinfo_linux_amd64.tar.gz | tar xz

# Docker
docker pull ghcr.io/alexei-led/spotinfo:latest

macOS, Linux and Windows, on AMD64 and ARM64. Full instructions: Installation.

Use it

# Cheapest Arm machine with 4 vCPU and 16 GiB, on each cloud
spotinfo recommend --cloud aws   --architecture arm64 --min-vcpu 4 --min-memory-gib 16
spotinfo recommend --cloud gcp   --architecture arm64 --min-vcpu 4 --min-memory-gib 16
spotinfo recommend --cloud azure --architecture arm64 --min-vcpu 4 --min-memory-gib 16

# A web tier that must survive interruption: AWS only, interruption capped at 5%
spotinfo recommend --architecture x86_64 --min-vcpu 2 --min-memory-gib 8 --workload web

# The five cheapest AWS regions for a machine. Every region is the default
spotinfo recommend --architecture x86_64 --min-vcpu 4 --min-memory-gib 16 --top 5

# A versioned JSON report for a pipeline
spotinfo recommend --cloud azure --architecture arm64 --min-vcpu 4 --min-memory-gib 16 \
  --output json

# Browse what a cloud publishes, with prices and a risk column
spotinfo list --machine "m5\." --region us-east-1

# Add AWS placement scores. This one needs AWS credentials
spotinfo list --machine "m5\." --region us-east-1 --with-score

Two commands, on purpose, and both answer on all three clouds. spotinfo list requires nothing and answers "what is there". spotinfo recommend requires an architecture and a size floor and answers "what should I run". They share a vocabulary, not a purpose. See Quick start and the Usage guide.

Cloud coverage

AWS GCP Azure
spotinfo list yes yes yes
spotinfo recommend yes yes yes
Interruption risk published unavailable, or opt-in live unavailable
Workloads cost, web, ci, batch cost cost
Operating systems linux, windows linux linux, windows
Architectures x86_64, arm64 x86_64, arm64 x86_64, arm64
Credentials optional optional never used

Region lists, machine counts and the reasoning behind each limit: Cloud coverage.

MCP server

spotinfo is a Model Context Protocol server, so an assistant can ask these questions directly.

{
  "mcpServers": {
    "spotinfo": { "command": "spotinfo", "args": ["--mcp"] }
  }
}

Ask: "Cheapest arm64 Azure Spot VM with 4 vCPUs and 16 GiB", or "Compare m5.large spot prices across US regions". Three tools answer: list_spot_machines, recommend_spot_machines and list_cloud_regions.

Setup: MCP server and Claude Desktop.

Documentation

Document What is in it
Quick start The first five minutes
Installation Every install method, and how to check one
Usage guide Every flag, every output format
Cloud coverage What each cloud serves, and what it refuses
Examples Pipelines, Terraform, CI, cost monitors
MCP server Tools, arguments, assistant setup
API reference The spotinfo.list/v1 and spotinfo.recommend/v3 contracts
AWS placement scores What a score means, and does not
Data sources Every feed, snapshot, cache and refresh rule
Troubleshooting Errors, causes, fixes
Migrating to v2 Every renamed flag, tool, schema and field
Multi-cloud parity What GCP and Azure cannot do yet, and why

AWS credentials

Credentials are optional. Without them, spotinfo answers from the AWS feeds and the embedded snapshot. With them, two more features work:

Feature Permission
Live price for machines the static feed prices at $0 ec2:DescribeSpotPriceHistory
Placement scores (--with-score) ec2:GetSpotPlacementScores

Credentials load through the standard AWS SDK chain. The chain is probed once per run, so a machine without credentials skips both calls instead of waiting for each to time out.

GCP credentials are optional too. Application Default Credentials and a project — from --gcp-project or GOOGLE_CLOUD_PROJECT — are needed for --live-risk and for --with-score, and a Cloud Billing Catalog API key in --gcp-billing-key prices GCP regions beyond the committed snapshot. Azure needs no credentials at all. See Cloud coverage.

Development

Go 1.26+, make, golangci-lint.

make build            # hermetic: embeds the committed data, downloads nothing
make test             # unit and end-to-end tests, no credentials, no network
make lint
make verify-data      # manifests, source contracts, parser contracts, coverage floors

Contributions are welcome. Read CLAUDE.md for the repository rules. Make sure that every test passes before you open a pull request.

License

Apache 2.0. See LICENSE.

About

CLI for exploring Spot instance pricing across AWS, GCP and Azure. Inspect Spot instance types, savings, price, and AWS interruption frequency — offline, from embedded data.

Topics

Resources

Stars

163 stars

Watchers

3 watching

Forks

Releases

Packages

Used by

Contributors

Languages