polymarket-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@polymarket-mcp search for markets about AI regulation"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Polymarket MCP Server (read-only)
A read-only MCP server exposing Polymarket's public prediction-market data. Search markets, read live odds and order books, pull historical probability time-series, and inspect public wallet positions — all over public, unauthenticated endpoints.
Read-only by design. No order placement, cancellation, signing, wallets, or private keys. No API keys, no environment variables, zero secrets.
Tools
Tool | What it does |
| Natural-language search across events / markets / tags. |
| Browse & filter markets (volume, liquidity, dates, tags). |
| Full detail for one market by id, slug, or condition_id. |
| Browse & filter events (groups of markets). |
| Event detail with all child markets. |
| What's hot right now (top markets by 24h volume). |
| Freshest CLOB midpoint / bid / ask / spread for an outcome token. |
| Live order book (top N levels) for an outcome token. |
| Historical probability time-series for an outcome token. |
| Public current holdings for a wallet. |
| Recent on-chain activity for a wallet. |
| Top holders per outcome token for a market. |
| Total portfolio value (USDC) for a wallet. |
| Recommended: live odds for one market in a single call. |
Every tool is annotated readOnlyHint=True, openWorldHint=True.
Key concepts
Prices are probabilities. Outcome prices are floats in
[0, 1](e.g.0.41= 41%). Tools also surface a human-readableprobability_pct.token_idvsconditionId. CLOB pricing/book/history tools key on a CLOB token id (one per outcome, from a market'sclobTokenIds) — not a slug or conditionId. The Data API'scondition_ididentifies the market itself.Freshness. Gamma discovery data can lag the live CLOB book by a few seconds. For the freshest odds use
polymarket_get_live_price/polymarket_market_snapshot(CLOB midpoint).
Related MCP server: polyrouter-mcp
Install
Requires uv (Python 3.11+).
Published to PyPI as mcp-polymarket:
# Run on demand (no install):
uvx mcp-polymarket
# Or install as a persistent tool:
uv tool install mcp-polymarketRegistration
No environment variables or API keys are required.
Claude Code (CLI)
claude mcp add polymarket -- uvx mcp-polymarketClaude Desktop
Add to claude_desktop_config.json:
{
"mcpServers": {
"polymarket": {
"command": "uvx",
"args": ["mcp-polymarket"]
}
}
}Development
From a checkout of this repo:
uv sync # install deps
uv run mcp-polymarket # run the server (stdio)
uv run python tests/smoke_test.py # live smoke test (hits the public API)Inspect the tool schemas and annotations:
npx @modelcontextprotocol/inspector uvx mcp-polymarketPublishing
Releases are published to PyPI automatically via
Trusted Publishing — no API tokens are
stored. The workflow in .github/workflows/publish.yml runs uv build and uploads
the artifacts whenever a GitHub Release is published. To cut a release:
# bump `version` in pyproject.toml, commit, then:
gh release create v0.1.0 --generate-notesSelf-hosting over HTTP (optional)
In addition to the default stdio transport, the server can run over streamable-HTTP:
uv run polymarket-mcp --http --host 0.0.0.0 --port 8000
# served at http://<host>:<port>/mcpEvaluation
evaluation.xml contains stable, verifiable, read-only questions exercising multi-tool
workflows (search → market → price history → live price, etc.).
Available Tools
14 toolspolymarket_get_eventARead-only
Event detail with all child markets (parsed outcomes/prices/tokenIds).
Useful for multi-candidate / neg-risk events. Provide an id or a slug.
Inputs: id, slug. Returns: id, ticker, slug, title, +8 more
polymarket_get_live_priceARead-only
Freshest live odds for one outcome token from the CLOB.
token_id is a CLOB token id (one of a market's clobTokenIds) — NOT a slug
or conditionId. Returns midpoint, best bid/ask, spread, and probability_pct.
These are fresher than Gamma's cached prices.
Inputs: token_id (required). Returns: token_id, midpoint, best_bid, best_ask, +2 more
polymarket_get_marketARead-only
Resolve one market in full detail by id, slug, OR condition_id (provide one).
Args: id: Numeric Gamma market id (e.g. "507034"). A "0x..." value is treated as a condition id. slug: Market slug (e.g. "will-trump-win-the-2024-us-presidential-election"). condition_id: On-chain condition id ("0x...").
Inputs: id, slug, condition_id. Returns: id, question, slug, condition_id, +19 more
polymarket_get_market_holdersARead-only
Top holders per outcome token for a market.
Args:
condition_id: The market's on-chain condition id ("0x..."). (Maps to the
Data API's market param.)
limit: Top-N holders per token, capped at 20 by the API.
Inputs: condition_id (required), limit. Returns: condition_id, tokens
polymarket_get_order_bookARead-only
Live order book for one outcome token: best bid/ask, midpoint, spread, top levels.
token_id is a CLOB token id. depth caps the number of price levels per side
(default 10, max 50). Level prices/sizes are parsed to floats.
Inputs: token_id (required), depth. Returns: token_id, market_condition_id, best_bid, best_ask, +4 more
polymarket_get_price_historyARead-only
Historical probability time-series for one outcome token.
token_id is a CLOB token id (it maps to the misleadingly-named market param).
Args: interval: One of "1h", "6h", "1d", "1w", "1m" (1 month), "max", "all". Ignored when an explicit start_ts/end_ts range is given. fidelity: Resolution in minutes. Defaults to a safe value per interval (wider ranges require a higher minimum). start_ts/end_ts: Optional unix-second bounds (override interval).
Long series are downsampled to <=500 points (flagged in the result).
Inputs: token_id (required), interval, fidelity, start_ts, +1 more. Returns: token_id, interval, count, downsampled, +2 more
polymarket_get_user_activityARead-only
Recent on-chain activity (trades, splits, merges, redeems...) for a wallet.
Args: wallet: EVM address (0x...). limit: 1-100 (default 20). type: Optional activity type, e.g. "TRADE", "SPLIT", "MERGE", "REDEEM", "REWARD".
Inputs: wallet (required), limit, type. Returns: result
polymarket_get_user_positionsARead-only
Public current holdings for a wallet address (0x...).
Args: wallet: EVM address, e.g. "0x...". limit: 1-100 (default 20). sort_by: One of CURRENT, CASHPNL, PERCENTPNL, TOKENS, INITIAL, PRICE, AVGPRICE, TITLE, RESOLVING (default CURRENT). Sorted descending.
Inputs: wallet (required), limit, sort_by. Returns: result
polymarket_get_user_valueARead-only
Total current value (USDC) of a wallet's Polymarket positions.
Args: wallet: EVM address (0x...).
Inputs: wallet (required). Returns: user, value
polymarket_list_eventsARead-only
Browse and filter events (groups of related markets). Same shape as list_markets.
Note: events use volume_min/liquidity_min (NOT the _num_ infix that markets use).
Inputs: active, closed, tag_id, order, +9 more. Returns: result
polymarket_list_marketsARead-only
Browse and filter markets. Defaults to active, open markets by 24h volume.
Args:
active: Best-effort active filter (Gamma honors it though it's under-documented).
closed: Include resolved/closed markets (default False).
tag_id: Single numeric tag id to filter by.
order: Sort field, e.g. "volume24hr", "liquidity_num", "volume_num", "endDate".
ascending: Sort ascending (default False = highest first).
volume_num_min: Minimum total volume (note the _num_ infix for markets).
liquidity_num_min: Minimum liquidity.
start_date_min/start_date_max/end_date_min/end_date_max: ISO-8601 bounds.
limit: 1-100 (default 20). offset: paging offset.
Inputs: active, closed, tag_id, order, +9 more. Returns: result
polymarket_market_snapshotARead-only
Live odds for one market in a single call (the recommended starting point).
Resolves a market (by slug, or by searching free text and picking the most liquid
match), then fetches the freshest CLOB midpoint for each outcome token. Gamma's
cached price can lag the live book — live_midpoint is the freshest value.
Provide a slug (preferred) or a free-text query.
Inputs: slug, query. Returns: question, slug, condition_id, volume24hr, +4 more
polymarket_searchARead-only
Natural-language search across Polymarket events, markets, and tags.
The primary entry point for "find me markets about X". Each returned event includes a short list of its markets with parsed outcomes and probabilities.
Args: query: Free text, e.g. "2024 election" or "bitcoin 100k". limit_per_type: Max results per type (events/tags), capped at 20. events_status: Optional status filter, e.g. "active". keep_closed_markets: Include closed markets in results (default False).
Inputs: query (required), limit_per_type, events_status, keep_closed_markets. Returns: events, tags, total_results
polymarket_trending_marketsARead-only
What's hot right now: active, open markets sorted by 24h volume (descending).
Inputs: limit. Returns: result
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 14 tools
Each tool targets a distinct data item (event, market, order book, price history, user activity, etc.) with precise descriptions that show clear differences. No two tools overlap in functionality.
All tools follow a consistent 'polymarket_verb_noun' pattern, e.g., get_event, list_markets, search. Verbs like get, list, search are used logically and uniformly.
14 tools cover all major read operations for a prediction market: browsing, searching, detailed views, prices, order books, user data. This is well-scoped for the domain.
The tool set provides comprehensive coverage for querying Polymarket: event/market discovery, live prices, historical data, order books, and user positions/value. No obvious gaps for read-only access.
Maintenance
Related MCP Connectors
Historical tick, order book and settlement data for Polymarket and Predict.fun crypto up/down markets, plus smart-money lists and backtest quotes, over a read-only MCP server.
Read-only Polymarket search, market details, order books, price history, and market cards.
Hosted MCP for Kalshi prediction markets: search, odds, order books, settlement rules, and trading.
Polymarket MCP — prediction-market data via Gamma + CLOB + Data public APIs.
Related MCP Servers
- FlicenseAqualityCmaintenanceAI-agent ready FastMCP server for Polymarket market discovery, wallet analytics, and public CLOB data, providing a read-only interface for querying markets, wallets, and order books.22-
- AlicenseNot gradedqualityCmaintenanceMCP server for querying and optionally trading across prediction markets (Polymarket, Kalshi, Limitless, Manifold) through a unified API.31MIT
- AlicenseBqualityCmaintenanceMCP server for Polymarket prediction markets enabling query of markets, events, narratives, arbitrage, and more via MCP or HTTP.9MIT
- AlicenseBqualityDmaintenanceMCP server to query Polymarket prediction market data via The Graph subgraphs and REST APIs, enabling AI agents to search markets, get live prices, order books, on-chain analytics, and trader profiles.32116 npmMIT