Polymarket US MCP server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| HOST | Yes | The server's bind address. Required on startup for the HTTP transport. | |
| PORT | Yes | The server's bind port. Required on startup for the HTTP transport. | |
| POLYMARKET_KEY_ID | Yes | Your Polymarket US key ID. | |
| POLYMARKET_SECRET_KEY | Yes | Your Polymarket US secret key. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| logging | {} |
| prompts | {
"listChanged": true
} |
| resources | {
"subscribe": false,
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_a_bucketed_ohlc_price_series_for_one_or_more_assetsA | Returns a dense, ascending OHLC candle series per requested asset between from and to, one candle per bucket. Buckets with no ticks are gap-filled: close is carried forward, open/high/low equal that close, and tick_count is 0. The server clamps rather than rejects: a to of 0 or in the future becomes now, and from is raised so the series holds at most 3600 candles. That count is the only size limit, so the widest window scales with the bucket: an hour at 1S, 60 hours at 1M, 150 days at 1H. The effective bounds are echoed on each series. Duplicate assets are deduped; the response holds one series per distinct asset. Match a series to a requested asset by its asset field, never by position: the order is not guaranteed, and the REST surface returns the series sorted by symbol because a repeated query parameter does not keep its order. An unknown symbol, or an asset whose markets are not available yet, fails the whole request with 404 (asset price history is not available). An available asset with no prices yet returns an empty series; an unknown class is rejected. |
| get_eventsC | Retrieve all events |
| get_event_by_slugC | Retrieve an event by its slug |
| get_event_by_idC | Retrieve a specific event by its ID |
| get_event_by_partner_external_idA | Resolve a partner external event ID (e.g. OpticOdds fixture ID) to the internal event and its mapped market sides |
| get_incentive_programsB | Returns active and historical incentive programs grouped by market. |
| get_your_incentive_earningsA | Returns rewards earned by the authenticated caller. Each entry sums all payouts for a single (market, date) pair, where date is in Eastern Time. |
| get_market_by_idC | Retrieve a specific market by its ID |
| get_market_by_slugC | Retrieve a specific market by its slug |
| get_marketsC | Retrieve all markets |
| get_market_bboB | Retrieve current market data (best bid/offer, stats) for a specific market by its slug in a lightweight format |
| get_market_bookB | Retrieve current market data (order book, stats) for a specific market by its slug |
| get_market_settlementC | Retrieve the settlement price for a specific market by its slug |
| create_orderB | LIVE ACCOUNT ACTION: Create a new order to enter into a market This operation may affect real funds or account state. |
| get_open_ordersB | Get all open orders for the authenticated user |
| cancel_all_open_ordersB | LIVE ACCOUNT ACTION: Cancel all open orders, optionally filtered by market slugs This operation may affect real funds or account state. |
| create_multiple_ordersA | LIVE ACCOUNT ACTION: Create up to 20 orders in a single request. If any entry fails request-shape validation, the whole batch is rejected by the gateway before reaching the exchange. Per-entry exchange outcomes (accept, fill, reject) are delivered on the order stream, not in this response. |
| cancel_multiple_ordersA | LIVE ACCOUNT ACTION: Cancel up to 20 orders in a single request. If any entry fails request-shape validation, the whole batch is rejected by the gateway before reaching the exchange. The exchange may silently ignore unknown |
| modify_multiple_ordersA | LIVE ACCOUNT ACTION: Modify up to 20 existing orders in a single request. Each entry is forwarded to the exchange as a cancel-replace. If any entry fails request-shape validation, the whole batch is rejected by the gateway before reaching the exchange. The exchange may silently ignore unknown |
| get_orderA | Get details for a specific order by its exchange-assigned ID |
| cancel_orderB | LIVE ACCOUNT ACTION: Cancel a specific order by its exchange-assigned ID This operation may affect real funds or account state. |
| modify_orderB | LIVE ACCOUNT ACTION: Modify an existing order in the marketplace. Allows changing price, quantity, time in force, and other parameters. This operation may affect real funds or account state. |
| preview_orderA | Preview an order before submission to validate parameters and see expected fills |
| close_position_orderA | LIVE ACCOUNT ACTION: Create an order to close an existing position in a market. This will sell all contracts held in the specified market. This operation may affect real funds or account state. |
| get_user_positionsB | Get user's trading positions across all markets or filtered by specific market |
| get_activitiesB | Get activities for a user including trades, position resolutions, and account balance changes |
| get_account_balancesA | Get user's current account balances including buying power, asset values, and pending transactions |
| get_price_historyA | Returns book-derived Yes and No display prices for one market. Use the market slug as Supported fixed profiles:
For a custom range, provide both Unix timestamps and use
The endpoint supports one market per request. Cache identical responses for at least 30 seconds, stagger refreshes across markets, and observe the 20 requests/second/IP public limit. For live updates after loading history, use the Markets WebSocket. |
| get_rfqsC | Returns RFQs matching the query filters. |
| create_rfqB | LIVE ACCOUNT ACTION: Creates a combo RFQ using the authenticated Retail account. This operation may affect real funds or account state. |
| get_quotesC | Returns quotes matching the query filters. |
| create_quoteA | LIVE ACCOUNT ACTION: Creates a quote using the authenticated Retail account. Every successful call returns a new quoteId, including replacements. See quote replacement. This operation may affect real funds or account state. |
| get_rfq_tradesA | Returns anonymous original fills where either order originated from an RFQ, newest first. Includes single instruments, combos, and later fills on resting orders. Repeat the same filters and limit with each cursor; an empty cursor ends the traversal. History is eventually visible. Requery overlapping time windows to find late arrivals and deduplicate by tradeId. Later corrections and busts do not amend these prints. |
| get_rfq_user_idB | Returns the public RFQ user ID for the authenticated participant. |
| delete_rfqC | LIVE ACCOUNT ACTION: Closes an open RFQ. This operation may affect real funds or account state. |
| delete_quoteB | LIVE ACCOUNT ACTION: Deletes a quote so it can no longer be accepted. This operation may affect real funds or account state. |
| accept_quoteC | LIVE ACCOUNT ACTION: Accepts one side of a quote. This operation may affect real funds or account state. |
| confirm_quoteC | LIVE ACCOUNT ACTION: Confirms an accepted quote during last look. This operation may affect real funds or account state. |
| searchC | Search for a given query |
| get_seriesC | Retrieve all series |
| get_series_by_idC | Retrieve a specific series by its ID |
| get_all_leaguesB | Retrieve leagues with pagination (max 50 per page) |
| get_league_by_slugA | Retrieve a league by its slug |
| get_events_by_league_slugA | Retrieve events for a league by its slug (e.g., 'nfl', 'nba'). Resolves the league to its active series and returns events. |
| get_all_sportsC | Retrieve all sports |
| get_sport_by_slugB | Retrieve a sport by its slug, with all leagues attached |
| get_events_by_sport_slugA | Retrieve events for a sport by its slug (e.g., 'football', 'basketball'). Fetches all leagues for the sport, collects their active series, and returns combined events. |
| get_sportsC | Fetch sports data |
| get_sports_playersB | Fetch sports players, filterable by abbreviation, name, id, team, or provider reference |
| get_sports_teamsC | Fetch sports teams data for enriching sports events |
| get_sports_teams_for_providerC | Fetch sports teams data for a specific provider |
| get_sports_eventsC | Retrieve events sections for a sport series (optional trending, optional live, and sport section). Same structure as home page. |
| get_tagsC | Get ranked tags with optional filtering |
| get_tag_by_slugC | Get a tag by its slug |
| get_tag_by_idC | Get a tag by its ID |
| get_events_for_a_tagA | Get events filtered by tag slug, sorted by volume descending by default |
| get_combosA | Returns the combo matching the exact symbol. |
| create_comboB | LIVE ACCOUNT ACTION: Creates or returns the combo instrument for the supplied legs. Each authenticated exchange participant may create up to 1,000 new combo instruments per week across all of its accounts. The quota resets Monday at 00:00 UTC. Returning an existing canonical combo does not consume the quota. This operation may affect real funds or account state. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 58 tools
The set contains many overlapping read tools: get_sports vs get_all_sports, get_events vs get_events_by_sport_slug/get_events_by_league_slug/get_events_for_a_tag, and get_price_history vs the bucketed OHLC tool. Descriptions add parameters, but an agent still faces multiple near-duplicate retrieval paths and must infer which variant to use.
Most names use snake_case with a clear verb (get_, create_, cancel_, modify_, delete_), which is predictable. There are minor deviations such as the extremely long get_a_bucketed_ohlc... name and inconsistent 'all' qualifiers (get_sports vs get_all_sports), but not mixed casing/styles.
58 tools is an extreme overload for an MCP surface; the calibration explicitly treats 50+ tools as a mismatch. Many retrieval variants and batch/lifecycle operations could be consolidated or exposed via parameters.
The surface covers the domain broadly: events/markets/series/sports/tags, price history/OHLC, order lifecycle (create/preview/modify/cancel/batch), RFQs/quotes/combos, and account/positions/activities/balances/incentives. Minor gaps remain around some alternate lookup keys and post-trade/order-history specifics, but core workflows are represented.