Distill
Cited answers to US public-data questions: sales tax at an address, what Medicare pays for a code, which Part D plans cover a drug, drug acquisition costs, OFAC crypto-address checks. Free tier, then x402.
ホスト型 MCP サーバー
npx add-mcp 'https://data.spencermcw.com/mcp'Claude Code、Codex、Cursor などにインストールできます
ドキュメント
Distill
Distill sells pre-computed answers to narrow factual questions to AI agents, per call, over x402 (HTTP 402 and a USDC payment on Base). Every answer carries its sources, an as_of time, a computed confidence and the method version that produced it. No account, API key or signup.
Covers: Sales tax · Hospital prices · Medicare fee schedule and Part D · Drug acquisition cost (NADAC) · OFAC sanctions screening.
Use Distill from your agent in 3 lines
Free tier, no wallet (any HTTP client, any fetch tool):
curl 'https://data.spencermcw.com/v1/tax/sales-rate?zip=98101-3143&free=1'
A few free answers a day per IP, in the short summary view. ?free=1 does what the header Distill-Free-Tier: use does; in a browser, https://data.spencermcw.com/try/v1/tax/sales-rate?zip=98101-3143 shows the same answer as a page. Without either, a paid route answers 402 with its x402 payment requirements.
Paid, with @x402/fetch (Node):
import { wrapFetchWithPaymentFromConfig } from '@x402/fetch'
import { ExactEvmScheme } from '@x402/evm'
import { privateKeyToAccount } from 'viem/accounts'
const account = privateKeyToAccount(process.env.BUYER_KEY)
const pay = wrapFetchWithPaymentFromConfig(fetch, { schemes: [{ network: 'eip155:8453', client: new ExactEvmScheme(account) }] })
const res = await pay('https://data.spencermcw.com/v1/tax/sales-rate?zip=98101-3143')
console.log((await res.json()).data)
eip155:8453 is Base mainnet: each call moves real USDC from the key’s wallet, at the price the 402 states. Use a wallet that holds only a few dollars, and try the free tier first.
MCP (Claude, Cursor, any streamable-HTTP client):
{
"mcpServers": {
"distill": {
"type": "http",
"url": "https://data.spencermcw.com/mcp"
}
}
}
Claude Code: claude mcp add --transport http distill https://data.spencermcw.com/mcp. An unpaid tool call takes the free tier while it lasts; after that it returns the x402 payment requirements.
Sales tax
Sales-tax rates in the 24 Streamlined Sales Tax states, read from each state’s own rate and boundary files: by ZIP+4, ZIP or street address, with every jurisdiction’s rate, the period it holds, and a quarterly change feed. Every answer cites the state files by URL and sha256.
- GET /v1/tax/sales-rate: What is the sales tax rate at this US address, ZIP+4 or ZIP? The combined rate and each state, county, city and district rate in the 24 Streamlined Sales Tax states (WA, OH, MI, NJ, TN, …), computed by Distill from each state’s SST rate and boundary files. Refreshed quarterly (manual batch). Data as of 2026-10-21, last checked 2026-10-21 (24 days ago). $0.005 per call (x402, exact: GET https://data.spencermcw.com/v1/tax/sales-rate?zip=98101-3143&date=2026-10-19). Free tier: 3 free calls a day per IP, at most 3 rows per answer, with ?free=1 on the URL, a /try/ page, or the header Distill-Free-Tier: use (without one an unpaid call answers 402). Summary view about 3,000 tokens; view=full for every row. MCP tool
tax_sales_rate. - POST /v1/tax/sales-rate/batch: What sales tax applies to each of these orders? Combined and per-jurisdiction rates for up to 100 US addresses, ZIP+4s or ZIPs in one call, 24 Streamlined Sales Tax states, computed by Distill from each state’s SST rate and boundary files. Refreshed quarterly (manual batch). Data as of 2026-10-21, last checked 2026-10-21 (24 days ago). $0.1 per call (x402, exact). Free tier: 3 free calls a day per IP, at most 3 rows per answer, with ?free=1 on the URL, a /try/ page, or the header Distill-Free-Tier: use (without one an unpaid call answers 402). Summary view about 3,000 tokens; view=full for every row. MCP tool
tax_sales_rate_batch. - GET /v1/tax/changes: Which US sales tax rates or boundaries changed this quarter? Rate, ZIP+4 and boundary change records for the 24 Streamlined Sales Tax states, computed by Distill from each state’s SST files. Refreshed quarterly (manual batch). Data as of 2026-10-21, last checked 2026-10-21 (24 days ago). $0.05 per call (x402, exact: GET https://data.spencermcw.com/v1/tax/changes?state=WA&entity=rate&limit=1). Free tier: 3 free calls a day per IP, at most 3 rows per answer, with ?free=1 on the URL, a /try/ page, or the header Distill-Free-Tier: use (without one an unpaid call answers 402). Summary view about 3,000 tokens; view=full for every row. MCP tool
tax_changes.
Hospital prices
Posted standard charges from the machine-readable files US hospitals must publish under 45 CFR 180 (Colorado first): for a CPT, HCPCS or MS-DRG code near a ZIP code, each hospital’s gross charge, discounted cash price and every payer and plan’s negotiated rate, with payers canonicalized; a payer comparison, a hospital comparison and a change feed, refreshed monthly. Every answer cites the hospital’s file by URL and sha256. Posted rates, not a quote; not medical or financial advice. CPT codes come without their AMA descriptors.
- GET /v1/hospital/prices: What does a procedure cost at hospitals near this ZIP? Cash price, gross charge and every insurer’s negotiated rate for a CPT, HCPCS or MS-DRG code at Colorado hospitals, normalized by Distill from the hospitals’ federally required price files. Refreshed monthly (manual batch). Data as of 2026-10-19, last checked 2026-10-20 (26 days ago). $0.02 per call (x402, exact: GET https://data.spencermcw.com/v1/hospital/prices?code=A4550&zip=81052&radius_miles=10&payer=medicare&limit=1). Free tier: 3 free calls a day per IP, at most 3 rows per answer, with ?free=1 on the URL, a /try/ page, or the header Distill-Free-Tier: use (without one an unpaid call answers 402). Summary view about 3,000 tokens; view=full for every row. MCP tool
hospital_prices. - GET /v1/hospital/compare: How do these hospitals compare on price for one procedure? Cash, gross and negotiated-rate statistics for a CPT, HCPCS or MS-DRG code at up to 10 Colorado hospitals, normalized by Distill from their price-transparency files. Refreshed monthly (manual batch). Data as of 2026-10-19, last checked 2026-10-20 (26 days ago). $0.02 per call (x402, exact: GET https://data.spencermcw.com/v1/hospital/compare?code=470&hospitals=co-060001%2Cco-061323&payer=aetna). Free tier: 3 free calls a day per IP, at most 3 rows per answer, with ?free=1 on the URL, a /try/ page, or the header Distill-Free-Tier: use (without one an unpaid call answers 402). Summary view about 3,000 tokens; view=full for every row. MCP tool
hospital_compare. - GET /v1/hospital/payers: What has each insurer negotiated for a procedure in this area? Negotiated prices by canonical payer (Aetna, Cigna, UnitedHealthcare, Medicare Advantage, …) and plan type for one code near a Colorado ZIP, computed by Distill from hospital price-transparency files. Refreshed monthly (manual batch). Data as of 2026-10-19, last checked 2026-10-20 (26 days ago). $0.02 per call (x402, exact: GET https://data.spencermcw.com/v1/hospital/payers?code=470&zip=80631&radius_miles=15&plan_type=commercial). Free tier: 3 free calls a day per IP, at most 3 rows per answer, with ?free=1 on the URL, a /try/ page, or the header Distill-Free-Tier: use (without one an unpaid call answers 402). Summary view about 3,000 tokens; view=full for every row. MCP tool
hospital_payers. - GET /v1/hospital/changes: What changed in hospital prices since a date? Colorado hospital price, payer-rate, file and status change records, computed by Distill by diffing the hospitals’ price-transparency files. Refreshed monthly (manual batch). Data as of 2026-10-19, last checked 2026-10-20 (26 days ago). $0.05 per call (x402, exact: GET https://data.spencermcw.com/v1/hospital/changes?limit=1). Free tier: 3 free calls a day per IP, at most 3 rows per answer, with ?free=1 on the URL, a /try/ page, or the header Distill-Free-Tier: use (without one an unpaid call answers 402). Summary view about 3,000 tokens; view=full for every row. MCP tool
hospital_changes.
Medicare fee schedule and Part D
Medicare Physician Fee Schedule reference prices computed from CMS’s own quarterly relative value, GPCI and conversion-factor files (2025A on): for a HCPCS or CPT code at a ZIP, ZIP+4 or Medicare locality, the facility and non-facility allowed amounts, the RVUs behind them, the OPPS cap and the same amounts in every release; one code across every locality; and a quarterly change feed. Every amount agrees with CMS’s carrier payment files to the cent, and every answer cites the CMS files by URL and sha256. CPT codes come without their AMA descriptors. Also Medicare Part D: which drug plans sold in a county cover a drug (by RxCUI), with tier, prior authorization, step therapy, quantity limits, premiums and cost sharing, for the current plan year and the next (open enrollment), from CMS’s monthly formulary files, with a monthly change feed.
- GET /v1/medicare/pfs/rate: What does Medicare pay for this CPT or HCPCS code at this ZIP? Physician Fee Schedule facility and non-facility allowed amounts with the RVUs and GPCIs behind them, any US ZIP or Medicare locality, 2025 on, computed by Distill from CMS’s quarterly RVU files. Refreshed quarterly (manual batch). Data as of 2026-10-21, last checked 2026-10-21 (24 days ago). $0.01 per call (x402, exact: GET https://data.spencermcw.com/v1/medicare/pfs/rate?code=99213&zip=80218). Free tier: 3 free calls a day per IP, at most 3 rows per answer, with ?free=1 on the URL, a /try/ page, or the header Distill-Free-Tier: use (without one an unpaid call answers 402). Summary view about 3,000 tokens; view=full for every row. MCP tool
medicare_pfs_rate. - GET /v1/medicare/pfs/localities: How does Medicare’s allowed amount for one code vary across the US? Physician Fee Schedule amounts in all 109 Medicare localities (or one state’s) with the national amount and range, computed by Distill from CMS’s RVU and GPCI files. Refreshed quarterly (manual batch). Data as of 2026-10-21, last checked 2026-10-21 (24 days ago). $0.02 per call (x402, exact: GET https://data.spencermcw.com/v1/medicare/pfs/localities?code=70551&state=NY). Free tier: 3 free calls a day per IP, at most 3 rows per answer, with ?free=1 on the URL, a /try/ page, or the header Distill-Free-Tier: use (without one an unpaid call answers 402). Summary view about 3,000 tokens; view=full for every row. MCP tool
medicare_pfs_localities. - GET /v1/medicare/pfs/changes: What changed in the Medicare Physician Fee Schedule this quarter? RVU, status, conversion-factor, GPCI and OPPS-cap change records between CMS releases, 2025 on, computed by Distill from CMS’s RVU files. Refreshed quarterly (manual batch). Data as of 2026-10-21, last checked 2026-10-21 (24 days ago). $0.05 per call (x402, exact: GET https://data.spencermcw.com/v1/medicare/pfs/changes?code=99213&release=2026A&entity=rvu). Free tier: 3 free calls a day per IP, at most 3 rows per answer, with ?free=1 on the URL, a /try/ page, or the header Distill-Free-Tier: use (without one an unpaid call answers 402). Summary view about 3,000 tokens; view=full for every row. MCP tool
medicare_pfs_changes. - GET /v1/medicare/partd/coverage: Which Medicare Part D plans in this county cover this drug, at what tier and cost? Every PDP and Medicare Advantage drug plan with tier, prior authorization, step therapy, quantity limit, premium and copay, plan years 2026 and 2027, computed by Distill from CMS’s monthly formulary files. Refreshed monthly (scheduled). Data as of 2026-10-08, last checked 2026-10-21 (24 days ago). $0.02 per call (x402, exact: GET https://data.spencermcw.com/v1/medicare/partd/coverage?rxcui=617311&state=CO&county=Denver&plan_year=2027&limit=2). Free tier: 3 free calls a day per IP, at most 3 rows per answer, with ?free=1 on the URL, a /try/ page, or the header Distill-Free-Tier: use (without one an unpaid call answers 402). Summary view about 3,000 tokens; view=full for every row. MCP tool
medicare_partd_coverage. - GET /v1/medicare/partd/plan: What does this Medicare Part D plan cost and cover? Premium, deductible, service area, cost sharing by tier and one drug’s terms for a contract-plan-segment id, computed by Distill from CMS’s monthly formulary files. Refreshed monthly (scheduled). Data as of 2026-10-08, last checked 2026-10-21 (24 days ago). $0.01 per call (x402, exact: GET https://data.spencermcw.com/v1/medicare/partd/plan?plan=H0028-063-000&plan_year=2027&rxcui=617311). Free tier: 3 free calls a day per IP, at most 3 rows per answer, with ?free=1 on the URL, a /try/ page, or the header Distill-Free-Tier: use (without one an unpaid call answers 402). Summary view about 3,000 tokens; view=full for every row. MCP tool
medicare_partd_plan. - GET /v1/medicare/partd/changes: Which Medicare Part D formularies changed this month? Drugs added or dropped, tier, prior-authorization, step-therapy and quantity-limit changes and plan premium changes, computed by Distill from CMS’s monthly formulary files. Refreshed monthly (scheduled). Data as of 2026-10-08, last checked 2026-10-21 (24 days ago). $0.05 per call (x402, exact: GET https://data.spencermcw.com/v1/medicare/partd/changes?key=2723345&entity=formulary&limit=2). Free tier: 3 free calls a day per IP, at most 3 rows per answer, with ?free=1 on the URL, a /try/ page, or the header Distill-Free-Tier: use (without one an unpaid call answers 402). Summary view about 3,000 tokens; view=full for every row. MCP tool
medicare_partd_changes.
Drug acquisition cost (NADAC)
CMS’s National Average Drug Acquisition Cost from the weekly data.medicaid.gov files (2025 on): one NDC’s current per-unit cost and price history, a drug-name search, and a weekly change feed with CMS’s reason for each change. A survey average of what pharmacies pay, not a retail price.
- GET /v1/drug/nadac: What do US pharmacies pay for this drug? CMS’s National Average Drug Acquisition Cost (NADAC) per unit for an NDC, the generic’s NADAC for a brand and the weekly price history since January 2025, from CMS’s NADAC files on data.medicaid.gov. Refreshed weekly (scheduled). Data as of 2026-11-04, last checked 2026-11-08 (6 days ago). $0.01 per call (x402, exact: GET https://data.spencermcw.com/v1/drug/nadac?ndc=00378410591). Free tier: 3 free calls a day per IP, at most 3 rows per answer, with ?free=1 on the URL, a /try/ page, or the header Distill-Free-Tier: use (without one an unpaid call answers 402). Summary view about 3,000 tokens; view=full for every row. MCP tool
drug_nadac. - GET /v1/drug/nadac/search: Which NDCs match this drug name, and what do pharmacies pay for them? NADAC search by name (e.g. “atorvastatin 40”) with NDC counts and current per-unit cost ranges, from CMS’s weekly NADAC file. Refreshed weekly (scheduled). Data as of 2026-11-04, last checked 2026-11-08 (6 days ago). $0.01 per call (x402, exact: GET https://data.spencermcw.com/v1/drug/nadac/search?name=atorvastatin+40). Free tier: 3 free calls a day per IP, at most 3 rows per answer, with ?free=1 on the URL, a /try/ page, or the header Distill-Free-Tier: use (without one an unpaid call answers 402). Summary view about 3,000 tokens; view=full for every row. MCP tool
drug_nadac_search. - GET /v1/drug/nadac/changes: Which drug acquisition costs changed this week? NADAC per-unit cost changes and NDCs added or dropped, with CMS’s stated reason, 2025 on, from CMS’s weekly NADAC files. Refreshed weekly (scheduled). Data as of 2026-11-04, last checked 2026-11-08 (6 days ago). $0.05 per call (x402, exact: GET https://data.spencermcw.com/v1/drug/nadac/changes?ndc=00378410591&limit=2). Free tier: 3 free calls a day per IP, at most 3 rows per answer, with ?free=1 on the URL, a /try/ page, or the header Distill-Free-Tier: use (without one an unpaid call answers 402). Summary view about 3,000 tokens; view=full for every row. MCP tool
drug_nadac_changes.
OFAC sanctions screening
Crypto addresses on OFAC’s Specially Designated Nationals list, read daily from OFAC’s own SDN.XML: whether an address (Bitcoin, Ethereum and every EVM chain, Tron, Solana, Monero and more) is listed, under which SDN entry, program and asset, as of which publication; up to 100 addresses a call; and a per-publication change feed of addresses added and removed. Facts with the list date, not a compliance determination. Queried addresses are not stored.
- GET /v1/sanctions/address: Is this crypto address on OFAC’s SDN sanctions list? SDN entry, program, asset and list date for Bitcoin, Ethereum and EVM, Tron, Solana and other addresses, checked by Distill against OFAC’s own SDN file. Refreshed daily (scheduled). Data as of 2026-11-13, last checked 2026-11-14 (today). $0.005 per call (x402, exact: GET https://data.spencermcw.com/v1/sanctions/address?address=0x098B716B8Aaf21512996dC57EB0615e2383E2f96). Free tier: 3 free calls a day per IP, at most 3 rows per answer, with ?free=1 on the URL, a /try/ page, or the header Distill-Free-Tier: use (without one an unpaid call answers 402). Summary view about 3,000 tokens; view=full for every row. MCP tool
sanctions_address. - POST /v1/sanctions/address/batch: Are any of these crypto addresses on OFAC’s SDN sanctions list? Up to 100 addresses screened in one call, checked by Distill against OFAC’s own SDN file. Refreshed daily (scheduled). Data as of 2026-11-13, last checked 2026-11-14 (today). $0.05 per call (x402, exact). Free tier: 3 free calls a day per IP, at most 3 rows per answer, with ?free=1 on the URL, a /try/ page, or the header Distill-Free-Tier: use (without one an unpaid call answers 402). Summary view about 3,000 tokens; view=full for every row. MCP tool
sanctions_address_batch. - GET /v1/sanctions/changes: Which crypto addresses did OFAC add to or remove from the SDN list? Per-publication change records (added, removed, entry updated), computed by Distill from OFAC’s own SDN files. Refreshed daily (scheduled). Data as of 2026-11-13, last checked 2026-11-14 (today). $0.02 per call (x402, exact: GET https://data.spencermcw.com/v1/sanctions/changes?since=2026-10-21T00%3A00%3A00Z). Free tier: 3 free calls a day per IP, at most 3 rows per answer, with ?free=1 on the URL, a /try/ page, or the header Distill-Free-Tier: use (without one an unpaid call answers 402). Summary view about 3,000 tokens; view=full for every row. MCP tool
sanctions_changes.
Freshness status
How fresh each dataset is right now, read from live answers: as_of, last check, cadence, next expected update and confidence. Free; also at /status.
- GET /v1/status: How fresh is each Distill dataset right now? For every dataset: the as_of and last check its answers carry, the refresh cadence, the next expected update, its current confidence and whether it is late. Refreshed daily (live freshness: /status). Free. Summary view about 2,500 tokens; view=full for every row. MCP tool
distill_status.
How to pay
Paid routes use x402 v2. Call the route; it answers 402 with the payment requirements in the PAYMENT-REQUIRED header (base64 JSON, also the body): USDC on Base, the exact amount (or, for upto routes, a ceiling). Retry with the signed payment payload in PAYMENT-SIGNATURE. The answer comes with the settlement receipt in PAYMENT-RESPONSE. Settlement happens only after the answer is computed, so a failed answer is never charged. Any x402 client works, for example @x402/fetch.
Over MCP (https://data.spencermcw.com/mcp, streamable HTTP, stateless) the same objects travel in _meta: an unpaid call to a paid tool (with no free tier, or once it is used or skipped) returns isError with the x402 PaymentRequired object as structuredContent; retry with the PaymentPayload in _meta["x402/payment"]; the receipt is in _meta["x402/payment-response"]. This is the @x402/mcp convention.
Some paid routes have a small free tier per IP (3 calls a day per vertical, with fewer rows; each route says); free answers use the same envelope with price_paid: null. Over HTTP the free tier is opt-in, and needs no header: add ?free=1 to the route URL, or open https://data.spencermcw.com/try/v1/... (the same route under /try: JSON for an agent, an HTML page for a browser), or send the header Distill-Free-Tier: use. Without one of them, an unpaid call to a paid route answers 402, before its input is checked, and the 402 body's free field says how to get the free answer; once the day's free calls are used up, ?free=1 and the header get the 402 too. Over MCP an unpaid call takes the free tier while it lasts, counted per IP address; calls through Claude's connectors (Anthropic's published outbound IP ranges) share one daily free allowance per family instead; send _meta["distill/free-tier"]: "skip" to get the payment-required result instead.
Answers are short by default where that matters: a free answer, a /try/ page and an MCP tool call give the summary view (the answer a model needs, within each route's token budget, listed below); a paid HTTP call gives the full view. ?view=full or ?view=summary picks one (MCP: the view argument). Every answer starts with headline, one plain-language line.
Freshness: https://data.spencermcw.com/status (and /status.json, the free route GET /v1/status, the MCP tool distill_status) lists each dataset's as_of, last check, next expected update and current confidence, read from live answers.
Every answer
Every answer, free or paid, is one JSON envelope: headline (one line that answers the question), data (the route-specific answer), sources (url, fetched_at, sha256, publisher, license for every source used), as_of (the freshness of the underlying data), confidence (0 to 1, computed by the formula each route documents), method_version (bumped on any change to how the answer is made), price_paid (null when free), notices (disclaimers), view (summary or full) and request_id.
Distill sells posted facts and computed aggregates, never medical, financial or tax advice.
Machine-readable
- OpenAPI 3.1: every route's input and output schemas, examples,
x-priceandx-payment - MCP server: the most-used tools, a free distill_status tool and prompts, streamable HTTP; https://data.spencermcw.com/mcp?profile=full lists one tool per route
- Status: how fresh each dataset is now
- llms-full.txt: this file with every schema and example
Optional
- Terms: no warranty; liability limited to the amount paid for the call
- Privacy: what is stored (salted hashes and counts, never an IP address, a payer address or a lookup's inputs), who else sees what, and for how long
- Changelog: route, price and method changes
- Distill-Bot: how Distill fetches its sources