Wire FLOPS into your agent, pipeline, or dashboard
Settlement-grade GPU compute price data via a 9-tool MCP server, an auth-free REST surface, and a stdlib-only Python SDK. Receipts are SHA-256 + content-addressed — every response is verifiable end-to-end without trusting the server.
The agent path. flopsindex-mcp v0.4.0 on PyPI exposes 10 tools over MCP — every published value is one tool call away. Hosted alternative at https://app.flopsindex.com/mcp.
Install
pip install flopsindex-mcp
Wire to your host
// ~/.config/claude-code/mcp.json (or Cursor settings)
{
"mcpServers": {
"flopsindex": {
"command": "flopsindex-mcp",
"env": { "FLOPS_API_KEY": "your-key" }
}
}
}
Tool surface
| tool | what it does |
|---|---|
| price | current value for a slug |
| ts | time-series in a range |
| search | NL-to-slug resolver |
| catalog | full index list, partner-gated |
| methodology | version + math for a slug |
| recompute | receipt + replay link |
| spread | two legs · z-score · pct-rank |
| compute_margin | spark-spread per SKU × region |
| verify | verify a receipt hash |
| gpu_capex | reference street price per SKU |
spread tool-call payload to clipboard. Paste into Claude/Cursor and the agent answers off the same canonical source.
Track-D public surface — auth-free LIVE indices for prototyping, llms.txt discovery, and agent.json contract.
The five public endpoints
GET /v1/price/{slug} current value
GET /v1/ts/{slug}?range=7d time-series
GET /v1/search?q=H100 NL-to-slug
GET /v1/methodology/{slug} methodology surface
GET /v1/audit/recompute/{rid} receipt verifier
Example response
$ curl https://app.flopsindex.com/v1/price/FLOPS-H100-OD
{
"slug": "FLOPS-H100-OD",
"value": 6.155,
"tier": "LIVE",
"confidence": "HIGH",
"unit": "USD/GPU-hr",
"as_of": "2026-05-18T13:00:00Z",
"methodology_version": "flops-h100-od@v0.9",
"observations_hash": "sha256:f7c2…b91a",
"k_anon": 5,
"num_sources": 7
}
Full catalog, history, custom indices, spreads, compute-margin, recompute audit substrate. Send X-FLOPS-Api-Key: $KEY.
The endpoints engineers reach for
GET /v1/catalog
GET /v1/indices/{id}/values?range=30d
GET /v1/derived/spread?a_gpu_model=H100&a_index_type=on_demand&...
GET /v1/derived/compute-margin?sku=h100_sxm5®ion=us_west
GET /v1/refdata/gpu-capex/{sku} # 3-tier cascade: T2 federal > T1 ebay × 1.15 > T3 seed
GET /v1/refdata/gpu-capex/{sku}/observations # raw rows behind the LIVE primary (IOSCO 17 drill-down)
GET /v1/refdata/gpu-capex/{sku}/secondary # eBay completed-listings credible bounds
POST /v1/me/keys/sub # mint agent sub-key
GET /v1/audit/recompute/{run_id} # IOSCO replay receipt
Idempotency
Non-GET endpoints accept Idempotency-Key: <uuid>. Replay within 24h returns the cached response; outside that window the key is fresh. Safe for agent retries.
pip install flopsindex
from flopsindex import FlopsClient
c = FlopsClient(api_key="...") # or use $FLOPS_API_KEY
c.price("FLOPS-H100-OD") # public
c.ts("FLOPS-H100-OD", range="30d") # public
c.catalog() # partner
c.spread("H100", "on_demand", "B200", "on_demand", range="30d")
c.compute_margin(sku="h100_sxm5", region="us_west")
c.verify(run_id="...") # receipt replay
Excel / Sheets cells
Same data, formula syntax. See the finance onboarding for the cell catalog.
How do I get an API key?
/admin. Otherwise email team@flopsindex.com with your use case — turnaround is typically same-day.What does a receipt verifier actually do?
GET /v1/audit/recompute/{run_id} replays the published value from canonical inputs and returns {"status": "green|yellow|red", "expected": x, "computed": y, "delta_bps": z}. Green ≤1bp / Yellow ≤50bp / Red >50bp. The Recompute Audit panel on F13 GOVRN renders the daily run.Are the public endpoints rate-limited?
X-FLOPS-Api-Key for partner tier. 429 responses carry Retry-After. Hammer-respect is documented in /.well-known/agent.json.Sub-keys for agent fanout — how do they work?
POST /v1/me/keys/sub mints a child key with label + ttl_hours. Use one sub-key per agent so revocation has a narrow blast radius. DELETE /v1/me/keys/sub/{id} revokes immediately.Where's the OpenAPI spec?
/openapi.json serves the full schema. Each router lives in src/delivery/*_router.py; the methodology surface is under /v1/methodology/*.How does the methodology version work for replays?
flci-h100@v0.9). The recompute job replays using that version's math even if the current version has advanced. Methodology versions are immutable.