pdata Prediction Markets
REMOTE · API.PDATA.WORLD · SCANNED SEP 25
Live prediction-market odds, volume and movers across 8 platforms. Read-only, no auth.
Available components
How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →
Endpoint Security63
- The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
- Authorisation not fully verified: no authorisation is required to call this server, and 14 tool(s) never declared a destructiveHint. The MCP spec treats an absent hint as destructive by default, so we cannot call this surface safe. See how to fix → View diagnostics → Unverified
- HTTPS is enforced; there's no plaintext access path. View diagnostics → Pass
- The HSTS (Strict-Transport-Security) header is present. View diagnostics → Pass
- DNSSEC check failed: this domain isn't protected by DNSSEC. See how to fix → View diagnostics → Fail
Transport & Reachability100
- Verified streamable-http transport via a live MCP handshake. View diagnostics → Pass
Schema Quality & AI Usability60
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 6761 tokens (~482/item across 14 items; 14 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management83
- Stability observed for 25 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 100% of tool parameters carry a description.Pass
- Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- We read all 14 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
- An AI judge read all 15 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
How do I install the pdata Prediction Markets MCP server?
pdata Prediction Markets is a hosted endpoint at https://api.pdata.world/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
remote · api.pdata.world
claude mcp add --transport http world-pdata-mcp 'https://api.pdata.world/mcp'
{
"mcpServers": {
"world-pdata-mcp": {
"url": "https://api.pdata.world/mcp"
}
}
} {
"servers": {
"world-pdata-mcp": {
"type": "http",
"url": "https://api.pdata.world/mcp"
}
}
} [mcp_servers.world-pdata-mcp] url = "https://api.pdata.world/mcp"
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"world-pdata-mcp": {
"type": "remote",
"url": "https://api.pdata.world/mcp",
"enabled": true
}
}
} openclaw mcp add world-pdata-mcp --url 'https://api.pdata.world/mcp' --transport streamable-http
mcp_servers:
world-pdata-mcp:
url: "https://api.pdata.world/mcp" {
"McpServers": {
"world-pdata-mcp": {
"Transport": "http",
"Url": "https://api.pdata.world/mcp"
}
}
} assistant mcp add world-pdata-mcp -t streamable-http -u 'https://api.pdata.world/mcp'
{
"mcpServers": {
"world-pdata-mcp": {
"type": "http",
"url": "https://api.pdata.world/mcp"
}
}
} The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 25 Sept 26 +1
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
- 23 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 73 to 77. That category is still filling its 30-day observation window: 22 days of observed history at the previous scan, 23 at this one. The score rises as the window fills, whether or not the server changes.
- 21 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 67 to 70. That category is still filling its 30-day observation window: 20 days of observed history at the previous scan, 21 at this one. The score rises as the window fills, whether or not the server changes.
- 19 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 60 to 63. That category is still filling its 30-day observation window: 18 days of observed history at the previous scan, 19 at this one. The score rises as the window fills, whether or not the server changes.
- 17 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 53 to 57. That category is still filling its 30-day observation window: 16 days of observed history at the previous scan, 17 at this one. The score rises as the window fills, whether or not the server changes.
- 14 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 43 to 47. That category is still filling its 30-day observation window: 13 days of observed history at the previous scan, 14 at this one. The score rises as the window fills, whether or not the server changes.
- 12 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 37 to 40. That category is still filling its 30-day observation window: 11 days of observed history at the previous scan, 12 at this one. The score rises as the window fills, whether or not the server changes.
- 10 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 30 to 33. That category is still filling its 30-day observation window: 9 days of observed history at the previous scan, 10 at this one. The score rises as the window fills, whether or not the server changes.
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 25 Sept 2026 · Probed https://api.pdata.world/mcp/ · Declared URL https://api.pdata.world/mcp
TLS valid
Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .
| Subject | Issuer | Valid from | Valid until | Key | Signature | Serial |
|---|---|---|---|---|---|---|
| CN=pdata.world | CN=WE1,O=Google Trust Services,C=US | 18 Sept 2026 | 17 Dec 2026 | ECDSA 256 | ECDSA-SHA256 | 8a6546a20e4b602c0e7c97c54d651fcf |
| SANs: pdata.world, *.pdata.world | ||||||
| CN=WE1,O=Google Trust Services,C=US (CA) | CN=GTS Root R4,O=Google Trust Services LLC,C=US | 13 Dec 2023 | 20 Feb 2029 | ECDSA 256 | ECDSA-SHA384 | 7ff31977972c224a76155d13b6d685e3 |
| CN=GTS Root R4,O=Google Trust Services LLC,C=US (CA) | CN=GlobalSign Root CA,OU=Root CA,O=GlobalSign nv-sa,C=BE | 15 Nov 2023 | 28 Jan 2028 | ECDSA 384 | SHA256-RSA | 7fe530bf331343bedd821610493d8a1b |
Background: What to check on a remote MCP endpoint →
DNSSEC insecure
Validation of api.pdata.world. — Not signed
| Zone | DS | Keys | Algorithms | Outcome |
|---|---|---|---|---|
| . | trust_anchor | 20326, 38696 | 8, 8 | Verified |
| world. | present | 13081 | 8 | Verified |
| pdata.world. | absent | Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation |
Authentication No authorisation required
The endpoint answered without asking for a token. Anyone who knows the URL can reach it.
| Result | No authorisation required |
|---|---|
| HTTP status | 200 |
| Header | Value |
|---|---|
| strict-transport-security | max-age=31536000; includeSubDomains |
| x-content-type-options | nosniff |
| x-frame-options | DENY |
| referrer-policy | strict-origin-when-cross-origin |
Background: How OAuth 2.1 works in the 2026 MCP spec →
Transports 3 probes
| Transport | URL | Outcome | Status | Location |
|---|---|---|---|---|
| streamable-http | https://api.pdata.world/mcp | Redirected | 307 | https://api.pdata.world/mcp/ |
| streamable-http · followed | https://api.pdata.world/mcp/ | Verified | 200 | |
| http (plaintext) | http://api.pdata.world/mcp | HTTPS enforced | 301 | https://api.pdata.world/mcp |
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
closing_soon ~957
Use when the user wants to see markets that will resolve within the next 36 hours. Returns markets sorted by close timestamp ascending. Filterable by `source=` and `categories=` (CSV). Excludes Limitless and price-derivative markets.
| Name | Type | Req | Description |
|---|---|---|---|
| active | – | – | Filter by `active` flag (true/false). |
| categories | – | – | Comma-separated category labels to include (OR) |
| categories_exclude | – | – | Comma-separated category labels to exclude |
| closed | – | – | Filter by `closed` flag (true/false). Open markets are `closed=false`. |
| countries | – | – | Comma-separated country names to include (OR). Full English names per the AI categorizer's prompt — e.g. 'United States', 'United Kingdom', 'European Union'. No allow-list — misspelled values silentl… |
| countries_exclude | – | – | Comma-separated country names to exclude. |
| country_match | string | – | How multiple `countries` combine: 'any' (default, OR — tagged with any selected country) or 'all' (AND — tagged with all of them, e.g. both Iran and Israel). Markets carry ≤3 country tags. |
| created_after | – | – | Filter to rows whose created_at >= this ISO 8601 datetime (first appearance in pdata's database). |
| created_before | – | – | Filter to rows whose created_at <= this ISO 8601 datetime. |
| ends_after | – | – | Filter to events whose end_date >= this ISO 8601 datetime (e.g. `2026-06-01T00:00:00Z`). |
| ends_before | – | – | Filter to events whose end_date <= this ISO 8601 datetime. |
| hide_ended | boolean | – | If true, hide markets/events whose end_date is in the past (end_date <= now()); rows with no end_date are kept. |
| hide_price_derivatives | boolean | – | If true, exclude events with is_price_derivative=TRUE |
| include_uncategorized | boolean | – | If true, the include clause also matches rows whose categories array is empty/NULL or contains only labels outside the canonical set (synthetic 'Other' bucket). |
| include_uncountried | boolean | – | If true, the include clause also matches rows whose countries array is empty/NULL — country-agnostic markets (synthetic 'No country' bucket). |
| limit | integer | – | Number of results to return (1-20; default 5). |
| prob_24h_change_max | – | – | Maximum 24h probability change (-1 to 1, signed). |
| prob_24h_change_min | – | – | Minimum 24h probability change (-1 to 1, signed). Use 0.15 for >=15pp positive moves. |
| probability_max | – | – | Maximum probability (0-1). |
| probability_min | – | – | Minimum probability (0-1). Filters to markets above this implied probability. |
| rank_max | – | – | Maximum rank score (numeric). |
| rank_min | – | – | Minimum rank score (numeric). Higher = more prominent. |
| search | – | – | Full-text search across title, description, slug. Case-insensitive substring match. |
| sort | – | – | Field name; prefix '-' for descending order (e.g. `-volume_24hr`). Common allowed values: `volume_24hr`, `normalized_vol_24hr`, `liquidity`, `end_date`, `closed_time`, `updated_at`. Markets endpoints… |
| source | – | – | Source name(s); single value or comma-separated list. Allowed: polymarket, kalshi, manifold, myriad, limitless, predict, opinion, gemini. |
| spread_max | – | – | Maximum bid-ask spread (0-1). Lower = more liquid. |
| spread_min | – | – | Minimum bid-ask spread (0-1). Higher = less liquid. |
| status | – | – | Comma-separated status list; any of {open, closing-soon, resolved} |
| volume_24h_change_max | – | – | Maximum 24h notional volume change (signed USD). |
| volume_24h_change_min | – | – | Minimum 24h notional volume change (signed USD; e.g. 1000 means +$1k vs prior 24h). |
| volume_24hr_max | – | – | Maximum 24h notional volume (USD). |
| volume_24hr_min | – | – | Minimum 24h notional volume (USD). Excludes low-activity markets. |
| volume_max | – | – | Maximum cumulative volume (USD). |
| volume_min | – | – | Minimum cumulative volume (USD). Excludes low-activity markets across full history. |
| Name | Type | Req | Description |
|---|---|---|---|
| _meta | object | yes | Agent metadata for list/aggregate responses (no cite_as). |
| items | array | yes | – |
| meta | object | yes | – |
No examples provided.
get_event ~190
Use when an agent needs the full detail of a single prediction-market event by its composite key (source + event_id). Returns the event with all of its child markets, latest probabilities, and metadata. The canonical URL `https://pdata.world/events/{source}/{event_id}` is stable for the lifetime of the underlying market. Events that closed more than 10 days ago are removed from the live tables; the same URL then returns a `kind: "tombstone"` object holding the title, close date and final outcome of each top market instead of the live `kind: "live"` object. Check `kind` before reading any other field.
| Name | Type | Req | Description |
|---|---|---|---|
| event_id | string | yes | Event ID native to the source. URL-encoded if it contains special chars. |
| source | string | yes | Platform ID: polymarket / kalshi / manifold / myriad / limitless / predict / opinion / gemini. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | – | yes | – |
No examples provided.
get_event_similar ~96
Use when an agent needs events similar to a given event — cross-platform equivalents and topically-related markets, precomputed nightly from title embeddings. Best-first; empty list (never an error) when no similarities are known yet.
| Name | Type | Req | Description |
|---|---|---|---|
| event_id | string | yes | Event id native to the source. |
| limit | integer | – | Max similar events to return. |
| source | string | yes | Platform id, e.g. kalshi. |
| Name | Type | Req | Description |
|---|---|---|---|
| _meta | – | – | – |
| event_id | string | yes | – |
| excluded | boolean | – | – |
| similar | array | – | – |
| source | string | yes | – |
No examples provided.
get_market ~121
Use when an agent needs the full detail of a single market by its composite key (source + market_id). Returns the market with its parent event reference, current probability, volume, 24h delta, and historical chart points. Includes a `_meta.cite_as` field that the agent can drop directly into its reply.
| Name | Type | Req | Description |
|---|---|---|---|
| market_id | string | yes | Market ID native to the source. Composite key with `source`. |
| source | string | yes | Platform ID: polymarket / kalshi / manifold / myriad / limitless / predict / opinion / gemini. |
| Name | Type | Req | Description |
|---|---|---|---|
| _meta | – | – | – |
| active | boolean | yes | – |
| added_at | – | – | – |
| categories | array | – | – |
| chart_24h | – | – | – |
| closed | boolean | yes | – |
| closed_time | – | – | – |
| countries | array | – | – |
| description | – | – | – |
| end_date | – | – | – |
| event_id | – | – | – |
| event_title | – | – | – |
| fetched_at | string | yes | – |
| group_item_title | – | – | – |
| icon | – | – | – |
| id | string | yes | – |
| image | – | – | – |
| liquidity | – | – | – |
| normalized_vol_24hr | – | – | – |
| normalized_volume | – | – | – |
| outcome_prices | array | – | – |
| outcomes | array | – | – |
| prob_24h_change | – | – | – |
| probability | – | – | – |
| question | – | – | – |
| slug | – | – | – |
| source | string | yes | – |
| spread | – | – | – |
| start_date | – | – | – |
| updated_at | string | yes | – |
| url | – | – | – |
| volume | – | – | – |
| volume_24h_change | – | – | – |
| volume_24hr | – | – | – |
No examples provided.
get_summary ~138
Use when an agent needs platform-level context before drilling into individual markets: one row per platform (Polymarket, Kalshi, Manifold, Myriad, Limitless, Predict, Opinion, Gemini) carrying 24h notional volume, active event and market counts, and that platform's category mix. Takes no parameters and returns the whole picture in one small response, which makes it the cheapest way to answer 'how big is X relative to Y' or 'which platform covers this topic'. Volumes are in each platform's native units — Manifold reports play-money mana, not USD — so do not sum across platforms without saying so.
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| _meta | – | – | – |
| grand_total_volume_24hr | number | yes | – |
| sources | array | yes | – |
No examples provided.
list_countries ~1,009
Use when an agent needs the list of country tags that markets have been tagged with. Returns the canonical country vocabulary with per-country market counts. Accepts the same filter params as `list_markets` (source, category, status, volume/probability ranges, search, …): the counts then reflect that filtered population, so this doubles as a facet endpoint. The country dimension itself is ignored when computing counts, so passing `country=` does not collapse the menu. Useful as the menu source for the `country=` filter on `list_events` / `list_markets` / `top_movers`.
| Name | Type | Req | Description |
|---|---|---|---|
| active | – | – | Filter by `active` flag (true/false). |
| categories | – | – | Comma-separated category labels to include (OR) |
| categories_exclude | – | – | Comma-separated category labels to exclude |
| closed | – | – | Filter by `closed` flag (true/false). Open markets are `closed=false`. |
| countries | – | – | Comma-separated country names to include (OR). Full English names per the AI categorizer's prompt — e.g. 'United States', 'United Kingdom', 'European Union'. No allow-list — misspelled values silentl… |
| countries_exclude | – | – | Comma-separated country names to exclude. |
| country_match | string | – | How multiple `countries` combine: 'any' (default, OR — tagged with any selected country) or 'all' (AND — tagged with all of them, e.g. both Iran and Israel). Markets carry ≤3 country tags. |
| created_after | – | – | Filter to rows whose created_at >= this ISO 8601 datetime (first appearance in pdata's database). |
| created_before | – | – | Filter to rows whose created_at <= this ISO 8601 datetime. |
| ends_after | – | – | Filter to events whose end_date >= this ISO 8601 datetime (e.g. `2026-06-01T00:00:00Z`). |
| ends_before | – | – | Filter to events whose end_date <= this ISO 8601 datetime. |
| hide_ended | boolean | – | If true, hide markets/events whose end_date is in the past (end_date <= now()); rows with no end_date are kept. |
| hide_price_derivatives | boolean | – | If true, exclude events with is_price_derivative=TRUE |
| include_uncategorized | boolean | – | If true, the include clause also matches rows whose categories array is empty/NULL or contains only labels outside the canonical set (synthetic 'Other' bucket). |
| include_uncountried | boolean | – | If true, the include clause also matches rows whose countries array is empty/NULL — country-agnostic markets (synthetic 'No country' bucket). |
| prob_24h_change_max | – | – | Maximum 24h probability change (-1 to 1, signed). |
| prob_24h_change_min | – | – | Minimum 24h probability change (-1 to 1, signed). Use 0.15 for >=15pp positive moves. |
| probability_max | – | – | Maximum probability (0-1). |
| probability_min | – | – | Minimum probability (0-1). Filters to markets above this implied probability. |
| rank_max | – | – | Maximum rank score (numeric). |
| rank_min | – | – | Minimum rank score (numeric). Higher = more prominent. |
| search | – | – | Full-text search across title, description, slug. Case-insensitive substring match. |
| sort | – | – | Field name; prefix '-' for descending order (e.g. `-volume_24hr`). Common allowed values: `volume_24hr`, `normalized_vol_24hr`, `liquidity`, `end_date`, `closed_time`, `updated_at`. Markets endpoints… |
| source | – | – | Source name(s); single value or comma-separated list. Allowed: polymarket, kalshi, manifold, myriad, limitless, predict, opinion, gemini. |
| spread_max | – | – | Maximum bid-ask spread (0-1). Lower = more liquid. |
| spread_min | – | – | Minimum bid-ask spread (0-1). Higher = less liquid. |
| status | – | – | Comma-separated status list; any of {open, closing-soon, resolved} |
| volume_24h_change_max | – | – | Maximum 24h notional volume change (signed USD). |
| volume_24h_change_min | – | – | Minimum 24h notional volume change (signed USD; e.g. 1000 means +$1k vs prior 24h). |
| volume_24hr_max | – | – | Maximum 24h notional volume (USD). |
| volume_24hr_min | – | – | Minimum 24h notional volume (USD). Excludes low-activity markets. |
| volume_max | – | – | Maximum cumulative volume (USD). |
| volume_min | – | – | Minimum cumulative volume (USD). Excludes low-activity markets across full history. |
| Name | Type | Req | Description |
|---|---|---|---|
| _meta | – | – | – |
| items | array | yes | – |
No examples provided.
list_events ~876
Use when an agent wants to browse, filter, or search prediction-market events across all 8 platforms. Returns paginated events with their child markets, prices, and platform metadata. Filterable by source (polymarket/kalshi/manifold/myriad/limitless/predict/opinion/gemini), category, country, status (open/closed), and full-text search via `search`. Sortable by `volume_24hr`, `normalized_vol_24hr`, `liquidity`, `end_date`, or `closed_time` (prefix `-` for descending). Cap `page_size` ≤ 50 to keep responses small enough for LLM context windows.
| Name | Type | Req | Description |
|---|---|---|---|
| active | – | – | Filter by `active` flag (true/false). |
| categories | – | – | Comma-separated category labels to include (OR) |
| categories_exclude | – | – | Comma-separated category labels to exclude |
| closed | – | – | Filter by `closed` flag (true/false). Open markets are `closed=false`. |
| countries | – | – | Comma-separated country names to include (OR). Full English names per the AI categorizer's prompt — e.g. 'United States', 'United Kingdom', 'European Union'. No allow-list — misspelled values silentl… |
| countries_exclude | – | – | Comma-separated country names to exclude. |
| country_match | string | – | How multiple `countries` combine: 'any' (default, OR — tagged with any selected country) or 'all' (AND — tagged with all of them, e.g. both Iran and Israel). Markets carry ≤3 country tags. |
| created_after | – | – | Filter to rows whose created_at >= this ISO 8601 datetime (first appearance in pdata's database). |
| created_before | – | – | Filter to rows whose created_at <= this ISO 8601 datetime. |
| ends_after | – | – | Filter to events whose end_date >= this ISO 8601 datetime (e.g. `2026-06-01T00:00:00Z`). |
| ends_before | – | – | Filter to events whose end_date <= this ISO 8601 datetime. |
| hide_ended | boolean | – | If true, hide markets/events whose end_date is in the past (end_date <= now()); rows with no end_date are kept. |
| hide_price_derivatives | boolean | – | If true, exclude events with is_price_derivative=TRUE |
| include_uncategorized | boolean | – | If true, the include clause also matches rows whose categories array is empty/NULL or contains only labels outside the canonical set (synthetic 'Other' bucket). |
| include_uncountried | boolean | – | If true, the include clause also matches rows whose countries array is empty/NULL — country-agnostic markets (synthetic 'No country' bucket). |
| page | integer | – | Page number (1-indexed). |
| page_size | integer | – | Items per page (1-200; default 50). Pass page_size=5 for chat-style summaries. |
| rank_max | – | – | Maximum rank score (numeric). |
| rank_min | – | – | Minimum rank score (numeric). Higher = more prominent. |
| search | – | – | Full-text search across title, description, slug. Case-insensitive substring match. |
| sort | – | – | Field name; prefix '-' for descending order (e.g. `-volume_24hr`). Common allowed values: `volume_24hr`, `normalized_vol_24hr`, `liquidity`, `end_date`, `closed_time`, `updated_at`. Markets endpoints… |
| source | – | – | Source name(s); single value or comma-separated list. Allowed: polymarket, kalshi, manifold, myriad, limitless, predict, opinion, gemini. |
| status | – | – | Comma-separated status list; any of {open, closing-soon, resolved} |
| volume_24hr_max | – | – | Maximum 24h notional volume (USD). |
| volume_24hr_min | – | – | Minimum 24h notional volume (USD). Excludes low-activity markets. |
| volume_max | – | – | Maximum cumulative volume (USD). |
| volume_min | – | – | Minimum cumulative volume (USD). Excludes low-activity markets across full history. |
| Name | Type | Req | Description |
|---|---|---|---|
| _meta | object | yes | Agent metadata for list/aggregate responses (no cite_as). |
| items | array | yes | – |
| meta | object | yes | – |
No examples provided.
list_markets ~1,013
Use when the user wants to browse, filter, or sort individual markets (not events). Returns paginated markets with their probability, volume, source, parent event ID, and 24h delta. Filterable by source, country, category, status, and full-text `search`. Sortable by `volume_24hr` or `probability`. Cap `page_size` ≤ 50 for chat-friendly responses.
| Name | Type | Req | Description |
|---|---|---|---|
| active | – | – | Filter by `active` flag (true/false). |
| categories | – | – | Comma-separated category labels to include (OR) |
| categories_exclude | – | – | Comma-separated category labels to exclude |
| closed | – | – | Filter by `closed` flag (true/false). Open markets are `closed=false`. |
| countries | – | – | Comma-separated country names to include (OR). Full English names per the AI categorizer's prompt — e.g. 'United States', 'United Kingdom', 'European Union'. No allow-list — misspelled values silentl… |
| countries_exclude | – | – | Comma-separated country names to exclude. |
| country_match | string | – | How multiple `countries` combine: 'any' (default, OR — tagged with any selected country) or 'all' (AND — tagged with all of them, e.g. both Iran and Israel). Markets carry ≤3 country tags. |
| created_after | – | – | Filter to rows whose created_at >= this ISO 8601 datetime (first appearance in pdata's database). |
| created_before | – | – | Filter to rows whose created_at <= this ISO 8601 datetime. |
| ends_after | – | – | Filter to events whose end_date >= this ISO 8601 datetime (e.g. `2026-06-01T00:00:00Z`). |
| ends_before | – | – | Filter to events whose end_date <= this ISO 8601 datetime. |
| hide_ended | boolean | – | If true, hide markets/events whose end_date is in the past (end_date <= now()); rows with no end_date are kept. |
| hide_price_derivatives | boolean | – | If true, exclude events with is_price_derivative=TRUE |
| include_uncategorized | boolean | – | If true, the include clause also matches rows whose categories array is empty/NULL or contains only labels outside the canonical set (synthetic 'Other' bucket). |
| include_uncountried | boolean | – | If true, the include clause also matches rows whose countries array is empty/NULL — country-agnostic markets (synthetic 'No country' bucket). |
| page | integer | – | Page number (1-indexed). |
| page_size | integer | – | Items per page (1-200; default 50). Pass page_size=5 for chat-style summaries. |
| prob_24h_change_max | – | – | Maximum 24h probability change (-1 to 1, signed). |
| prob_24h_change_min | – | – | Minimum 24h probability change (-1 to 1, signed). Use 0.15 for >=15pp positive moves. |
| probability_max | – | – | Maximum probability (0-1). |
| probability_min | – | – | Minimum probability (0-1). Filters to markets above this implied probability. |
| rank_max | – | – | Maximum rank score (numeric). |
| rank_min | – | – | Minimum rank score (numeric). Higher = more prominent. |
| search | – | – | Full-text search across title, description, slug. Case-insensitive substring match. |
| sort | – | – | Field name; prefix '-' for descending order (e.g. `-volume_24hr`). Common allowed values: `volume_24hr`, `normalized_vol_24hr`, `liquidity`, `end_date`, `closed_time`, `updated_at`. Markets endpoints… |
| source | – | – | Source name(s); single value or comma-separated list. Allowed: polymarket, kalshi, manifold, myriad, limitless, predict, opinion, gemini. |
| spread_max | – | – | Maximum bid-ask spread (0-1). Lower = more liquid. |
| spread_min | – | – | Minimum bid-ask spread (0-1). Higher = less liquid. |
| status | – | – | Comma-separated status list; any of {open, closing-soon, resolved} |
| volume_24h_change_max | – | – | Maximum 24h notional volume change (signed USD). |
| volume_24h_change_min | – | – | Minimum 24h notional volume change (signed USD; e.g. 1000 means +$1k vs prior 24h). |
| volume_24hr_max | – | – | Maximum 24h notional volume (USD). |
| volume_24hr_min | – | – | Minimum 24h notional volume (USD). Excludes low-activity markets. |
| volume_max | – | – | Maximum cumulative volume (USD). |
| volume_min | – | – | Minimum cumulative volume (USD). Excludes low-activity markets across full history. |
| Name | Type | Req | Description |
|---|---|---|---|
| _meta | object | yes | Agent metadata for list/aggregate responses (no cite_as). |
| items | array | yes | – |
| meta | object | yes | – |
No examples provided.
list_news_movers ~556
Use when the user wants to see the news-feed view: markets that exhibited a probability spike in the chosen lookback window, scored by `|Δprob_pp| × log10(1+USD-equivalent volume)`. Refreshed every 5 min. The `window=` param selects the lookback: 24 (default, ≥15pp), 12 (≥12pp), or 2 (≥2h, ≥10pp); `prob_change` is measured over that window. Includes a `prob_history` array (24h bucketed trajectory) per row regardless of window. Filterable by `source=` and `categories=` (CSV). Soft flags (`is_entertainment`/`is_microprediction`/`is_crypto`/`is_sports`/`is_weather`) default OFF; opt in with `include_*=true`.
| Name | Type | Req | Description |
|---|---|---|---|
| categories | – | – | Category filter (CSV). Examples: 'Politics', 'Sports', 'Crypto', 'Weather'. Maps to events.categories assignments. |
| include_crypto | boolean | – | Include crypto price-derivative markets (default: excluded). |
| include_entertainment | boolean | – | Include entertainment markets (default: excluded for signal-to-noise). |
| include_microprediction | boolean | – | Include microprediction / hyperlocal markets (default: excluded). |
| include_resolved | boolean | – | Include resolved (closed) markets (default: excluded — news movers focus on live markets). |
| include_sports | boolean | – | Include sports markets (default: excluded). |
| include_weather | boolean | – | Include weather markets (default: excluded). |
| min_score | – | – | Minimum spike score. Higher = more notable spikes only. |
| ordering | string | – | Sort order. Allowed values: `vol` (volume-weighted score; default), `score` (raw spike score), `prob` (probability change magnitude). |
| page | integer | – | Page number (1-indexed). |
| page_size | integer | – | Items per page (1-200; default 50). |
| q | – | – | Full-text search across market title and event title. Case-insensitive substring match. |
| source | – | – | Platform ID(s); single value or comma-separated list. Allowed: polymarket, kalshi, manifold, myriad, limitless, predict, opinion, gemini. |
| window | integer | – | Lookback windows the carousel selector exposes (hours). An IntEnum (not Literal[2,12,24]) because FastAPI coerces a query STRING to an IntEnum member but NOT to an int literal — `?window=24` would 42… |
| Name | Type | Req | Description |
|---|---|---|---|
| _meta | – | – | – |
| count | integer | yes | – |
| last_refreshed_at | – | yes | – |
| page | integer | yes | – |
| page_size | integer | yes | – |
| results | array | yes | – |
No examples provided.
map_heat ~118
Use when you need a geographic snapshot of where prediction-market attention is concentrated. Returns per-country heat (capped news score, summed) for the current moment (`at=now`) or a past hour (`at=<ISO8601>`).
| Name | Type | Req | Description |
|---|---|---|---|
| at | string | – | 'now' (live cache) or an ISO-8601 timestamp for a past hourly frame. |
| source | – | – | Restrict to one source (only honored when at=now): polymarket, kalshi, manifold, myriad, limitless, predict, opinion, gemini. |
| Name | Type | Req | Description |
|---|---|---|---|
| _meta | object | yes | Agent metadata for list/aggregate responses (no cite_as). |
| as_of | string | yes | – |
| at | string | yes | 'now' or the resolved snapshot ISO timestamp. |
| frame | array | yes | – |
| reference | – | – | Display yardstick (p95 per-country heat, 30d). |
| source | – | – | – |
| total_heat | number | yes | – |
| total_heat_avg_30d | – | – | – |
No examples provided.
map_timeline ~58
Use when you need the hourly total-heat time series that drives the /map playback scrubber. History accretes from launch (no backfill).
| Name | Type | Req | Description |
|---|---|---|---|
| source | – | – | Reserved; playback history is source_scope='all' in v1. |
| Name | Type | Req | Description |
|---|---|---|---|
| _meta | object | yes | Agent metadata for list/aggregate responses (no cite_as). |
| series | array | yes | – |
| source | – | – | – |
No examples provided.
news_movers_by_category ~282
Use when the user wants the news feed bucketed by category. Returns the same data shape as `list_news_movers` but pre-grouped into the canonical 14-category vocabulary, with cluster grouping inside each bucket. Useful for 'what's moving in politics?' style queries.
| Name | Type | Req | Description |
|---|---|---|---|
| include_crypto | boolean | – | Include crypto price-derivative markets (default: excluded). |
| include_entertainment | boolean | – | Include entertainment markets (default: excluded for signal-to-noise). |
| include_microprediction | boolean | – | Include microprediction / hyperlocal markets (default: excluded). |
| include_resolved | boolean | – | Include resolved (closed) markets (default: excluded — news movers focus on live markets). |
| include_sports | boolean | – | Include sports markets (default: excluded). |
| include_weather | boolean | – | Include weather markets (default: excluded). |
| min_score | – | – | Minimum spike score. Higher = more notable spikes only. |
| per_category | integer | – | Max items per category bucket (1-50; default 11). |
| q | – | – | Full-text search across market title and event title. Case-insensitive substring match. |
| source | – | – | Platform ID(s); single value or comma-separated list. Allowed: polymarket, kalshi, manifold, myriad, limitless, predict, opinion, gemini. |
| Name | Type | Req | Description |
|---|---|---|---|
| _meta | – | – | – |
| by_category | object | yes | – |
| last_refreshed_at | – | yes | – |
No examples provided.
search_suggest ~236
Use when an agent has a name or phrase and needs the `(source, id)` of the matching event or market before calling another tool. Resolves free text against events AND markets in one call, best-first, and reports `total_events` / `total_markets` so the agent can tell a precise hit from an ambiguous one. Every row carries `event_path`, the internal link to use for follow-up lookups. Prefer this over running `list_events?search=` and `list_markets?search=` separately when the goal is identification rather than a filtered listing. Note: `headline` carries literal `<b>` highlight markup — quote `title` instead, or strip the tags.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | Maximum number of coalesced results to return (1-20, default 8). `total_events` / `total_markets` in the envelope are uncapped and reflect the full match count, not this limit. |
| q | string | yes | Free-text query, matched against event titles and market questions. Queries shorter than 2 characters deliberately return an empty result set rather than half the dataset. |
| Name | Type | Req | Description |
|---|---|---|---|
| _meta | – | – | – |
| results | array | yes | – |
| total_events | integer | yes | – |
| total_markets | integer | yes | – |
No examples provided.
top_movers ~977
Use when the user wants to see markets with the largest 24h probability swings. Returns the top N movers (default 5, max 20) ranked by absolute `prob_24h_change`. Filterable by source. Excludes Limitless and price-derivative markets by curation. Useful for 'what changed today?' style queries.
| Name | Type | Req | Description |
|---|---|---|---|
| active | – | – | Filter by `active` flag (true/false). |
| categories | – | – | Comma-separated category labels to include (OR) |
| categories_exclude | – | – | Comma-separated category labels to exclude |
| closed | – | – | Filter by `closed` flag (true/false). Open markets are `closed=false`. |
| countries | – | – | Comma-separated country names to include (OR). Full English names per the AI categorizer's prompt — e.g. 'United States', 'United Kingdom', 'European Union'. No allow-list — misspelled values silentl… |
| countries_exclude | – | – | Comma-separated country names to exclude. |
| country_match | string | – | How multiple `countries` combine: 'any' (default, OR — tagged with any selected country) or 'all' (AND — tagged with all of them, e.g. both Iran and Israel). Markets carry ≤3 country tags. |
| created_after | – | – | Filter to rows whose created_at >= this ISO 8601 datetime (first appearance in pdata's database). |
| created_before | – | – | Filter to rows whose created_at <= this ISO 8601 datetime. |
| ends_after | – | – | Filter to events whose end_date >= this ISO 8601 datetime (e.g. `2026-06-01T00:00:00Z`). |
| ends_before | – | – | Filter to events whose end_date <= this ISO 8601 datetime. |
| hide_ended | boolean | – | If true, hide markets/events whose end_date is in the past (end_date <= now()); rows with no end_date are kept. |
| hide_price_derivatives | boolean | – | If true, exclude events with is_price_derivative=TRUE |
| include_uncategorized | boolean | – | If true, the include clause also matches rows whose categories array is empty/NULL or contains only labels outside the canonical set (synthetic 'Other' bucket). |
| include_uncountried | boolean | – | If true, the include clause also matches rows whose countries array is empty/NULL — country-agnostic markets (synthetic 'No country' bucket). |
| limit | integer | – | Number of results to return (1-20; default 5). |
| prob_24h_change_max | – | – | Maximum 24h probability change (-1 to 1, signed). |
| prob_24h_change_min | – | – | Minimum 24h probability change (-1 to 1, signed). Use 0.15 for >=15pp positive moves. |
| probability_max | – | – | Maximum probability (0-1). |
| probability_min | – | – | Minimum probability (0-1). Filters to markets above this implied probability. |
| rank_max | – | – | Maximum rank score (numeric). |
| rank_min | – | – | Minimum rank score (numeric). Higher = more prominent. |
| search | – | – | Full-text search across title, description, slug. Case-insensitive substring match. |
| sort | – | – | Field name; prefix '-' for descending order (e.g. `-volume_24hr`). Common allowed values: `volume_24hr`, `normalized_vol_24hr`, `liquidity`, `end_date`, `closed_time`, `updated_at`. Markets endpoints… |
| source | – | – | Source name(s); single value or comma-separated list. Allowed: polymarket, kalshi, manifold, myriad, limitless, predict, opinion, gemini. |
| spread_max | – | – | Maximum bid-ask spread (0-1). Lower = more liquid. |
| spread_min | – | – | Minimum bid-ask spread (0-1). Higher = less liquid. |
| status | – | – | Comma-separated status list; any of {open, closing-soon, resolved} |
| volume_24h_change_max | – | – | Maximum 24h notional volume change (signed USD). |
| volume_24h_change_min | – | – | Minimum 24h notional volume change (signed USD; e.g. 1000 means +$1k vs prior 24h). |
| volume_24hr_max | – | – | Maximum 24h notional volume (USD). |
| volume_24hr_min | – | – | Minimum 24h notional volume (USD). Excludes low-activity markets. |
| volume_max | – | – | Maximum cumulative volume (USD). |
| volume_min | – | – | Minimum cumulative volume (USD). Excludes low-activity markets across full history. |
| Name | Type | Req | Description |
|---|---|---|---|
| _meta | object | yes | Agent metadata for list/aggregate responses (no cite_as). |
| items | array | yes | – |
| meta | object | yes | – |
No examples provided.
What is the pdata Prediction Markets MCP server?
pdata Prediction Markets is an MCP server listed in the public MCP registry as world.pdata/mcp. Live prediction-market odds, volume and movers across 8 platforms. Read-only, no auth. This page covers its hosted endpoint (https://api.pdata.world/mcp).
Is the pdata Prediction Markets MCP server safe to use?
pdata Prediction Markets scores 76 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the pdata Prediction Markets MCP server expose?
pdata Prediction Markets exposes 14 tools: list_events, get_event, get_event_similar, list_markets, get_market, and 9 more. Their descriptions and schemas cost roughly 6,627 tokens of context every time the server is loaded.
Does the pdata Prediction Markets MCP server require authentication?
No. We connected to pdata Prediction Markets without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.
Is the pdata Prediction Markets MCP server still maintained?
pdata Prediction Markets is still listed as active in the MCP registry. We last reached this channel on 25 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.