Browse prediction markets, track positions, and place trades on Polymarket through AI.
A Model Context Protocol (MCP) server that exposes Polymarket's API for querying markets, events, orderbooks, and user activity — with optional trading via the CLOB API.
The Polymarket MCP Server provides full access to Polymarket's prediction market data and trading infrastructure:
Perfect for:
Returns a status object confirming the server is running and reachable.
Inputs: (none)
Output:
{
"status": "ok",
"server":
Returns a paginated list of Polymarket markets with question, status, and end date. No API key required.
Inputs:
- `limit` (integer, optional) — Maximum number of markets to return, 1–1000 (default: 100)
- `offset` (integer, optional) — Number of markets to skip for pagination (default: 0)
- `active` (boolean, optional) — Filter by active statusoutput:
{
"success": true,
"count": 10,
"markets": [
{
"id": "0xabc...",
"question": "Will X happen by 2025?",
"active": true,
"closed": false,
"end_date": "2025-12-31T00:00:00Z"
}
]
}Returns full details for a single market including condition ID, slug, tokens, and market type. No API key required.
Inputs:
- `market_id` (string, required) — Market ID to retrieveoutput:
{
"success": true,
"market": {
"id": "0xabc...",
"question": "Will X happen?",
"condition_id": "0xdef...",
"slug": "will-x-happen",
"end_date": "2025-12-31T00:00:00Z",
"active": true,
"closed": false,
"market_type": "binary",
"tokens": [...]
}
}Returns a paginated list of events. Events group related markets together (e.g. all markets for an election). No API key required.
Inputs:
- `limit` (integer, optional) — Maximum number of events to return, 1–1000 (default: 100)
- `offset` (integer, optional) — Number of events to skip for pagination (default: 0)output:
{
"success": true,
"count": 5,
"events": [
{
"id": "123",
"title": "2025 US Election",
"slug": "2025-us-election",
"start_date": "2025-01-01T00:00:00Z",
"end_date": "2025-11-05T00:00:00Z"
}
]
}Returns all open positions held by an Ethereum wallet address. No API key required.
Inputs:
- `user_address` (string, required) — Ethereum wallet address to queryoutput:
{
"success": true,
"user_address": "0x123...",
"count": 3,
"positions": [
{
"position_id": "pos_1",
"asset": "0xabc...",
"quantity": 100.0,
"average_price": 0.65,
"current_value": 72.50
}
]
}Returns the full trade history for an Ethereum wallet address, paginated. No API key required.
Inputs:
- `user_address` (string, required) — Ethereum wallet address to query
- `limit` (integer, optional) — Maximum number of trades to return, 1–1000 (default: 100)
- `offset` (integer, optional) — Number of trades to skip for pagination (default: 0)output:
{
"success": true,
"user_address": "0x123...",
"count": 25,
"trades": [
{
"id": "trade_1",
"market": "0xabc...",
"outcome": "YES",
"side": "BUY",
"size": 50.0,
"price": 0.62,
"timestamp": "2025-01-01T12:00:00Z"
}
]
}Returns the current bids and asks for a market from the central limit order book. No API key required.
Inputs:
- `market_id` (string, required) — Market ID to get orderbook foroutput:
{
"success": true,
"market": "0xabc...",
"bids": [[0.62, 500], [0.61, 1200]],
"asks": [[0.63, 300], [0.64, 800]],
"timestamp": "2025-01-01T12:00:00Z"
}Returns the midpoint price (average of best bid and best ask) for a market. No API key required.
Inputs:
- `market_id` (string, required) — Market ID to get midpoint foroutput:
{
"success": true,
"market": "0xabc...",
"midpoint": 0.625,
"timestamp": "2025-01-01T12:00:00Z"
}Creates a new limit order on Polymarket's central limit order book. Requires an API key with trading permissions.
Inputs:
- `market_id` (string, required) — Market ID to place order on
- `side` (string, required) — Order side: 'BUY' or 'SELL'
- `price` (float, required) — Order price in USD (0–1 for binary markets)
- `size` (float, required) — Order size in number of shares
- `token_id` (string, required) — Token ID for the market outcomeoutput:
{
"success": true,
"order_id": "order_abc123",
"market": "0xabc...",
"side": "BUY",
"price": 0.62,
"size": 100.0,
"status": "OPEN"
}Cancels an existing open order on the CLOB. Requires an API key with trading permissions.
Inputs:
- `order_id` (string, required) — ID of the order to canceloutput:
{
"success": true,
"order_id": "order_abc123",
"message": "Order cancelled successfully"
}Returns all open orders for the authenticated account, optionally filtered by market. Requires an API key.
Inputs:
- `market_id` (string, optional) — Filter orders by market IDoutput:
{
"success": true,
"count": 2,
"orders": [
{
"id": "order_abc123",
"market": "0xabc...",
"side": "BUY",
"price": 0.62,
"size": 100.0,
"status": "OPEN",
"created_at": "2025-01-01T12:00:00Z"
}
]
}limit — Maximum number of records to return per request (max 1000, default 100)offset — Number of records to skip; use with limit for paginationmarket_id — A market's on-chain condition ID or internal ID, returned by polymarket_get_marketsMarket ID:
ethereum condition ID (hex string)
Example: 0x1234567890abcdef...wallet Address:
ethereum address (checksummed or lowercase)
Example: 0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045price:
decimal between 0 and 1 representing implied probability
Example: 0.65 (65% probability = $0.65 per share)polymarket_create_order, polymarket_cancel_order, and polymarket_get_orders require an API keytoken_id is found in the tokens array of polymarket_get_market — each binary market has a YES and NO tokenside must be 'BUY' or 'SELL' (uppercase)api_key value when connecting your Polymarket credential in MewCPPolymarket's CLOB API uses a signature-based key derivation flow — keys are not issued through a web UI but generated by signing a message with your wallet.
Authorization: Bearer YOUR_API_KEY and X-Mewcp-Credential-Id: CREDENTIAL-ID headers are presentX-Mewcp-Credential-Id headerside is uppercase ('BUY' or 'SELL') and price is between 0 and 1{server-name}/mcp/{tool-name}