# MCPFax Macro & Market Intelligence Per-call macro, rates, FX, crypto, on-chain, DeFi and prediction-market data for AI agents, from free public sources (FRED, US Treasury, ECB via Frankfurter, Coinbase, Base RPC, DefiLlama, Polymarket, Manifold Markets). Paid via x402 (USDC on Base). Base URL: https://mcpfax-markets.bowling-anthony.workers.dev MCP Streamable HTTP: https://mcpfax-markets.bowling-anthony.workers.dev/mcp OpenAPI 3.1: https://mcpfax-markets.bowling-anthony.workers.dev/openapi.json MCP Registry manifest: https://mcpfax-markets.bowling-anthony.workers.dev/server.json ## Paid endpoints - GET /macro?as_of=2026-08-11 ($0.003) — DATED SNAPSHOT of Fed funds, CPI, core PCE, unemployment and M2 from FRED. - GET /rates?as_of=2026-08-11 ($0.003) — DATED SNAPSHOT of US Treasury 2/10/30Y yields, 10s2s curve spread and the 30Y mortgage rate. - GET /fx?base=USD&symbols=EUR,GBP,JPY&as_of=2026-08-11 ($0.001) — ECB reference foreign-exchange cross rates. - GET /crypto?symbols=BTC,ETH ($0.001) — Coinbase spot prices for up to ten assets. - GET /stablecoin ($0.001) — USDC, USDT and DAI spot price and peg deviation in basis points. - GET /gas ($0.001) — Live Base mainnet gas price from JSON-RPC. - GET /defi/protocols?chain=Base&category=Lending&search=aave&limit=20 ($0.002) — DefiLlama protocol universe ranked by TVL, filterable by chain, category or name. - GET /defi/protocol?slug=aave-v3 ($0.001) — One DefiLlama protocol: TVL, per-chain TVL, category, chains and links. - GET /defi/chains?search=Base&limit=25 ($0.001) — DefiLlama TVL per blockchain, ranked, with the cross-chain total. - GET /defi/yields?chain=Base&project=aave-v3&symbol=USDC&min_tvl_usd=1000000&stablecoin_only=true&limit=20 ($0.002) — DefiLlama yield pools with APY, TVL and the stable pool identifier. - GET /defi/token-prices?coins=base:0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913,coingecko:ethereum&search_width=6h ($0.001) — DefiLlama prices for arbitrary on-chain tokens addressed as chain:address. - GET /polymarket/markets?limit=10&order=volumeNum&ascending=false&closed=false ($0.001) — Live Polymarket markets with outcome prices, volume and liquidity. - GET /polymarket/events?limit=5&markets_per_event=5&ascending=false&closed=false ($0.001) — Polymarket events (market groups) with volume, open interest and member markets. - GET /polymarket/market?id=908713&slug=fed-rate-hike-in-2026&condition_id=0x80b3af88…9744d82b&depth=5 ($0.002) — One Polymarket market with the live CLOB order book for each outcome. - GET /polymarket/trades?market=0x80b3af88…9744d82b&limit=20 ($0.001) — Recent public trade prints for one Polymarket market. - GET /polymarket/leaderboard?metric=volume&window=7d&limit=10 ($0.001) — Top Polymarket traders by traded volume or realised profit over a window. - GET /manifold/markets?search=bitcoin&limit=10&sort=score&filter=open ($0.001) — Manifold Markets questions with crowd probability. PLAY-money venue. - GET /prediction-markets/search?q=fed rate&limit_per_venue=5&venues=polymarket,manifold ($0.002) — Find a prediction market by question text across Polymarket and Manifold. - POST /mcp — MCP server (us_macro_indicators, us_treasury_yields, fx_reference_rates, crypto_spot_prices, stablecoin_peg_deviation, base_gas_price, defi_protocols, defi_protocol, defi_chains, defi_yields, defi_token_prices, polymarket_markets, polymarket_events, polymarket_market, polymarket_trades, polymarket_leaderboard, manifold_markets, prediction_market_search); tools/call is priced identically to its HTTP route ## Free GET /health, GET /llms.txt, GET /openapi.json, GET /server.json, and MCP initialize + ping + tools/list. Real upstream data only — an upstream failure returns an honest error, never a guessed number, and is never billed. /macro, /rates and /fx are served from a stored snapshot (FRED blocks Cloudflare Workers); each response carries snapshot.captured_at and snapshot.age_hours, and a stale snapshot is refused rather than sold. Every other route reads its upstream live at request time and discloses its cache age in the response. An absent figure is returned as null, never as 0 and never as an imputed value. A call that delivers nothing settles nothing. ## Snapshot history is append-only Every refresh of /macro, /rates and /fx is appended to a per-key observation record; a refresh never overwrites the previous observation. Pass ?as_of=YYYY-MM-DD (or a full ISO timestamp) to any of the three to buy the capture that was in effect then. A historical read is labelled snapshot.is_historical_read=true and is deliberately not subject to the 48h freshness limit. Every response reports history.observations_held and history.first_captured_at, and GET /health reports the same per key; if a date predates the record the call is refused and nothing is charged, because history is never back-filled. A stale /macro or /rates snapshot is a HUMAN-ACTION blocker, not an outage: FRED cannot be reached from a Cloudflare Worker without a key, so the refusal names the exact operator fix (set the FRED_API_KEY secret, or run products/markets-api/ingest.py from a host that can reach FRED). ## Deliberately not sold Kalshi: api.elections.kalshi.com answered this Worker with HTTP 429 on 12 of 12 attempts from the Cloudflare edge (its per-IP limit against Cloudflare's shared egress address), so no Kalshi tool exists rather than one that sells an upstream error. Metaculus: its API returns HTTP 403 for unauthenticated callers.