Everything an agent — or the person wiring one up — needs to discover, connect to, and pay Cabrini. Human-friendly product pages live on the homepage; this page is the technical source of truth.
Cabrini describes itself over every major agent discovery standard. All of these are free:
Cabrini runs a streamable-HTTP MCP server at https://cabrini.ai/mcp. For Claude Code:
Or in any MCP client config that supports HTTP transports:
| Tool | Arguments | Price |
|---|---|---|
query_minute_bars | ticker, date, interval? | $0.025 |
list_tickers | date | $0.005 |
query_range | ticker, start, end | $0.01/day |
query_batch | tickers[], date | $0.02/ticker |
query_daily | ticker, start, end | $0.001/year |
scan_market | date, criteria | $0.10 |
get_company | ticker | $0.005 |
get_fundamentals | ticker | $0.02 |
get_insiders | ticker | $0.02 |
get_filings | ticker, types?, sections? | $0.01 / $0.05 w. sections |
get_bars | ticker, interval, date/start/end | $0.015/day |
get_brief | ticker, lookback_days | $0.25 |
get_pricing | — | free |
get_stats | — | free |
Intraday bar endpoints accept interval (3, 6, 9, 12, 15, 30, 60, or 240 minutes; default 3) and, like the daily endpoint, "adjusted": true for split-adjusted prices. Fundamentals and insider data come from SEC EDGAR filings, refreshed nightly.
isError: true whose structuredContent is an x402 PaymentRequired object. Sign it and retry the same tools/call with the payload in params._meta["x402/payment"]; the result comes back with settlement details in result._meta["x402/payment-response"]. This is the x402 MCP transport binding — the HTTP flow below remains available and costs the same.tools/list prices every paid tool in its _meta, so an agent can budget from the catalog without a probe call.
x402 v2, USDC on Base mainnet (eip155:8453). The full cycle:
Intraday endpoints — /v1/query, /v1/range, /v1/batch, /v1/bars — return absolute prices and normalised change on every bar, plus raw volume and transaction counts.
pct_x = (bar_x − day_open) / day_open, so 0.0012 is +0.12%. Read close when you want the level; read pct_close when you are comparing across tickers or dates, where levels are not comparable. Both are in the same response — you never need a second call for either.
POST /v1/daily rolls these up to the session — open, high, low, close, volume, transactions and VWAP — and is the cheapest way to cover long histories.
One caveat: day_open is the first bar of the session and includes pre-market, so the percentages are measured from that rather than a third party’s 09:30 open, which can differ by a percent or two. The absolute prices are unaffected.
Volatility is precomputed so you don’t have to derive it. Every intraday response carries a day-level range_pct, and /v1/daily adds true_range_pct per day:
true_range_pct is the standard true range — it includes the overnight gap, range_pct does not. Both span the full session in our data, including pre- and post-market prints, so they read wider than a regular-session-only range.
Check the shape for free before paying anything: GET /v1/sample returns real bars in exactly this format, no payment and no parameters.
| Topic | Detail |
|---|---|
| Rate limit | 30/min per IP unpaid; 120/min on /mcp. No limit on paid (x402-settled) requests. |
| Output format | Intraday bars carry absolute OHLC and fractional change from the daily open; /v1/daily adds session aggregates + VWAP |
| Free sample | GET /v1/sample — real bars, no payment, no parameters |
| Health | GET /health — check before retry loops |
| No data | 404 means weekend, holiday, or ticker not yet listed — don't pay-retry |
| Idempotency | Identical request + valid payment always returns the same data |
| Timestamps | Nanoseconds since Unix epoch, UTC |
| Pricing source | GET /v1/pricing is authoritative and machine-readable, free |
The agent card at /.well-known/agent-card.json advertises capabilities (market-data, historical-prices, intraday-bars, fundamentals, sec-filings) and declares x402 as the authentication scheme. A2A clients should treat Cabrini as a data-provider agent with per-request payment and no session state.