Your coding agent, connected to 26 years of market data
MarketParquet speaks MCP. Claude Code, Codex CLI, Cursor — any MCP-capable agent — can answer market questions by running DuckDB SQL server-side against the archive. No downloads, no data wrangling.
agent > query_sql(etf, daily, 2022-01-01 .. 2022-12-31) ... 251 files scanned
agent > SPY's 2022 max drawdown was -25.4%, bottoming on Oct 12.
Register free and create a
bt_ key on your account page. Any key can connect and
browse the catalog.
One command or a few config lines — pick your client below. The endpoint speaks MCP Streamable HTTP.
Your agent explores symbols, pulls bars, and aggregates with full DuckDB SQL — server-side, against the parquet archive.
[ Setup ]
> Claude Code
claude mcp add --transport http marketparquet \
https://marketparquet.com/labs/mcp \
--header "Authorization: Bearer bt_YOUR_KEY"
> Codex CLI (~/.codex/config.toml)
[mcp_servers.marketparquet]
url = "https://marketparquet.com/labs/mcp"
http_headers = { Authorization = "Bearer bt_YOUR_KEY" }
> Cursor (.cursor/mcp.json)
{
"mcpServers": {
"marketparquet": {
"url": "https://marketparquet.com/labs/mcp",
"headers": { "Authorization": "Bearer bt_YOUR_KEY" }
}
}
}
> opencode (opencode.json)
{
"mcp": {
"marketparquet": {
"type": "remote",
"url": "https://marketparquet.com/labs/mcp",
"headers": { "Authorization": "Bearer bt_YOUR_KEY" }
}
}
}
> Kimi CLI (~/.kimi/mcp.json)
{
"mcpServers": {
"marketparquet": {
"url": "https://marketparquet.com/labs/mcp",
"headers": { "Authorization": "Bearer bt_YOUR_KEY" }
}
}
}
> Any MCP client
endpoint: https://marketparquet.com/labs/mcp (MCP Streamable HTTP) header: Authorization: Bearer bt_YOUR_KEY
Replace bt_YOUR_KEY with a key from your
account page.
[ Tools ]
list_datasetsany keyEvery dataset (asset class × timeframe) with file counts, date coverage, and your key's access window. Agents call it first.
list_symbolskeep currentSearch the ~30,000-ticker universe — stocks, ETFs, futures, delisted included — with first/last trade date per symbol.
get_barskeep currentOHLCV for one symbol over a date range, 1-minute to daily. The quick look before a deeper query.
query_sqlkeep currentRead-only DuckDB SQL over a bars view — window
functions, QUALIFY, corr(), date_trunc — run server-side against
the parquet archive.
get_download_urlkeep currentA presigned parquet file when the agent needs one file locally. Counts as a normal download.
get_download_urlskeep currentPresigned URLs for a whole date range — up to 400 daily or 25 intraday files per call. The bulk path to local backtesting.
[ One tool call, real answers ]
WITH eq AS (
SELECT date, close,
max(close) OVER (ORDER BY date) AS peak
FROM bars WHERE symbol = 'SPY')
SELECT round(min(close / peak - 1) * 100, 2) AS max_drawdown_pct FROM eq;
-- -25.4% (trough 2022-10-12), computed over 251 daily files
SELECT symbol, date,
round(volume / avg(volume) OVER w, 1) AS spike
FROM bars
WINDOW w AS (PARTITION BY symbol ORDER BY date ROWS 20 PRECEDING)
QUALIFY spike > 8 ORDER BY spike DESC LIMIT 10;
[ Full backtests ]
query_sql is for research — capped, aggregated, server-side. Real backtests run on your machine, and your agent drives the whole loop:
Explore symbols and test ideas with query_sql —
server-side SQL, nothing to download yet.
get_download_urls hands your agent presigned URLs
for the whole backtest window; it downloads them in parallel.
The agent writes and runs the backtest against local parquet — pandas, Polars, vectorbt, DuckDB — with no query caps at all.
agent > query_sql(...) -- sanity-checks the signal server-side
agent > get_download_urls(etf, daily, 2005-01-01 .. 2026-07-21) x 14 chunks
agent > xargs -P8 curl ... -- ~5,400 files to ./data/
agent > python backtest.py -- full path-dependent engine, local
agent > CAGR 9.8%, max DD -22%, 14 round trips. Full tearsheet in results/
[ Pricing ]
The same subscription that rolls your archive forward each
trading day unlocks every MCP data tool. Any valid API key can
connect and call list_datasets without it.
[ Limits & fair use ]
- Read-only: a single SELECT/WITH statement per query
- Per query: 320 daily files or 8 intraday files, 200 result rows, 90s wall clock
- Bulk downloads: 400 daily / 25 intraday presigned files per get_download_urls call — chunk longer ranges; local work has no caps
- Standard API rate limits apply (600 req/min on paid plans)
- Date ranges are clamped to your plan's access window
- MCP Streamable HTTP, protocol 2025-06-18 — early-access surface, tool schemas may evolve
Questions? FAQ or [email protected]