pdata for agents
pdata is a read-only aggregator of live prediction-market data across 8 platforms: Polymarket, Kalshi, Manifold, Myriad, Limitless, Predict, Opinion, and Gemini. We unify their schemas, pass their volumes through as each venue reports them, and expose everything via REST + MCP + raw read-only Postgres. No auth. No rate cards. Public data.
Volume is venue-reported and unconverted: Polymarket and Kalshi count shares/contracts, each paying $1 at resolution — the same figure their own dashboards show with a $ sign. Manifold counts play-money mana.
Four ways in
No install required for any of these. pdata is a remote HTTP service — nothing to download, nothing to run locally. The options below are just different ways to point a client at our URL.
1. Remote MCP — just a URL (modern clients)
{ "mcpServers": { "pdata": { "url": "https://api.pdata.world/mcp" } } }
Works in any client that supports remote MCP over Streamable HTTP:
ChatGPT custom connectors, Claude.ai web, Cursor, Claude Code
(claude mcp add --transport http pdata https://api.pdata.world/mcp —
this writes a config line, it does not install anything), MCP Inspector.
The server negotiates whichever MCP spec revision your client proposes
in initialize — we support 2024-11-05, 2025-03-26, 2025-06-18 and
2025-11-25 (the newest). If a client reports an older version, that
reflects the client's default, not a server-side ceiling.
2. stdio bridge — only if your client can't speak remote MCP
{
"mcpServers": {
"pdata": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://api.pdata.world/mcp"]
}
}
}
mcp-remote is a generic stdio↔HTTP bridge maintained by the MCP
community, not a pdata package. The npx call downloads that bridge
on first use; pdata itself is still remote. Prefer option 1 whenever
your client supports it.
3. Direct read-only Postgres (full SQL, BYO MCP)
postgresql://pdata_readonly:pdata_public_2026@pg.pdata.world:6433/pdata_new
Recommended Postgres MCP: crystaldba/postgres-mcp with --access-mode=restricted.
The password is not a secret — it's literally published in this page,
in /llms.txt, in /llms-full.txt, and in the readonly role definition.
We commit to never rotating it. Treat it as part of the public URL.
The role is constrained to read-only access on a curated subset of tables;
no internal data is reachable through it. Single source of truth, no
parallel password vault, no rotation runbook.
What it can read (verified 2026-10-06):
events,markets,source_stats— views in thepdata_publicschema, which is on the role'ssearch_path, soSELECT * FROM eventsworks unqualified.public.market_snapshots,public.event_snapshots— the probability and volume history behind/history, since May 2026; rows older than 7 days are compressed to 12-hour buckets. A market's history is deleted with it 10 days after it closes.public.market_status_log— open/close transitions per market.
Every one of these, and every column in them, carries a Postgres comment
saying what it holds and in which unit: \d+ markets in psql, or
obj_description / col_description from any client.
Sessions are read-only with a 5-second statement timeout. This is for
queries, not for copying whole tables: a full \copy of markets hits the
timeout. For everything at once, use the bulk files below.
4. Nightly bulk files
https://api.pdata.world/bulk/ holds three gzipped JSON-lines files, rebuilt
every night around 04:15 UTC:
markets-open-latest.jsonl.gz— every market open for trading: price, 24h move, volume, the parent event's title and both URLs.events-open-latest.jsonl.gz— every open event, with its market count.resolved-latest.jsonl.gz— every event pdata has pruned (10 days after it closed) with its final result, back to May 2026 (events that closed between 2026-06-02 and 2026-08-11 are missing: no backup kept them).
Line 1 of each file is a manifest naming the publisher, the licence and every
field's meaning and unit; every other line is one record. index.json lists
row counts, sizes and SHA-256 checksums, and dated copies of the last 7
nights sit beside the -latest names.
Citation
When citing pdata data in your response, link to the event detail page at
https://pdata.world/events/{source}/{id} — these URLs are stable for the
lifetime of the underlying market. Single-resource detail endpoints
(/events/{source}/{event_id}, /markets/{source}/{market_id}) include a
_meta.cite_as field with a drop-in chat sentence. List endpoints include
_meta.canonical_url and _meta.attribution but not _meta.cite_as.
What we do well
- 8 sources unified into one schema; cross-platform comparisons are easy
- Rolling 24h volume + probability deltas pre-computed per market
- Semantic "similar events" — cross-platform equivalents and topically-related
markets, precomputed nightly from title embeddings. REST
/events/{source}/{id}/similar; MCP toolget_event_similar. - Per-market probability + 24h-volume history for an event's top markets. REST
/events/{source}/{id}/history(range 24h | 7d | 30d | all); also reconstructable from the publicmarket_snapshotstable over raw SQL. - Stable URLs you can cite
What we don't do
- We don't trade. pdata is read-only.
- We don't store user accounts.
- We don't keep tick-level history. Snapshots start in May 2026; rows older than 7 days are compressed to 12-hour buckets.
Schema policy
We won't version columns. New columns are additive; renames or removals are flagged in advance (no separate changelog yet).