← Back to Polymarket docs

Polymarket — Tool Reference

Query Polymarket odds, volumes, and price history for thousands of real-world events

9 tools · auto-generated from the deployed toolkit

Your AI assistant discovers and invokes these tools through the MCP Server's meta tools — it calls execute_tool with the tool name and arguments below.

# get_event read

Read full event metadata and enriched child markets for a specific Polymarket event id.

Full description
Get full details for a specific Polymarket event by id.

Use this when you already know an event_id (from search_markets, a URL,
or a prior call) and want deterministic lookup without fuzzy keyword
matching. Returns the event's title, description, lifecycle timestamps,
and child markets with token IDs populated so you can chain into
get_orderbook or get_market_history without a second call. Use
search_outcome, sort_by, limit, offset, and include_fields to narrow large
multi-outcome events.

TYPICAL WORKFLOW:
1. search_markets("netanyahu") -> pick an event_id
2. get_event(event_id, search_outcome="Tucker") -> targeted detail + token
3. get_orderbook(yes_token_id) / get_market_history(yes_token_id)
Parameter Type Required Description
event_id string Yes Event ID from search_markets (e.g. '81557'). Numeric string.
search_outcome string | null No Optional case-insensitive substring filter for child market outcomes. Example: 'Tucker' returns only matching candidate/outcome markets.
sort_by "volume" | "price" | "volume_24h" No Sort child markets by total volume, Yes price, or 24h volume. Descending. Default: "volume"
limit integer | null No Maximum child markets to return after filtering and sorting.
offset integer No Number of child markets to skip after filtering and sorting. Default: 0
include_fields array<"outcome" | "market_id" | "yes_price" | "no_price" | "result" | "status" | "volume" | "volume_24h" | "volume_7d" | "liquidity" | "end_date" | "start_date" | "created_at" | "yes_token_id" | "no_token_id"> | null No Optional market fields to include in serialized child market results. Use this to reduce payloads when resolving token IDs.
Parameter schema (JSON)
{
  "description": "Parameters for get_event tool.",
  "properties": {
    "event_id": {
      "description": "Event ID from search_markets (e.g. '81557'). Numeric string.",
      "title": "Event Id",
      "type": "string"
    },
    "search_outcome": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Optional case-insensitive substring filter for child market outcomes. Example: 'Tucker' returns only matching candidate/outcome markets.",
      "title": "Search Outcome"
    },
    "sort_by": {
      "default": "volume",
      "description": "Sort child markets by total volume, Yes price, or 24h volume. Descending.",
      "enum": [
        "volume",
        "price",
        "volume_24h"
      ],
      "title": "Sort By",
      "type": "string"
    },
    "limit": {
      "anyOf": [
        {
          "maximum": 100,
          "minimum": 1,
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Maximum child markets to return after filtering and sorting.",
      "title": "Limit"
    },
    "offset": {
      "default": 0,
      "description": "Number of child markets to skip after filtering and sorting.",
      "minimum": 0,
      "title": "Offset",
      "type": "integer"
    },
    "include_fields": {
      "anyOf": [
        {
          "items": {
            "enum": [
              "outcome",
              "market_id",
              "yes_price",
              "no_price",
              "result",
              "status",
              "volume",
              "volume_24h",
              "volume_7d",
              "liquidity",
              "end_date",
              "start_date",
              "created_at",
              "yes_token_id",
              "no_token_id"
            ],
            "type": "string"
          },
          "type": "array"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Optional market fields to include in serialized child market results. Use this to reduce payloads when resolving token IDs.",
      "title": "Include Fields"
    }
  },
  "required": [
    "event_id"
  ],
  "title": "GetEventParams",
  "type": "object",
  "additionalProperties": false
}
Result schema (JSON)
{
  "$defs": {
    "MarketOutcome": {
      "description": "Individual market outcome within an event.",
      "properties": {
        "outcome": {
          "description": "The outcome/question for this market",
          "title": "Outcome",
          "type": "string"
        },
        "market_id": {
          "description": "Condition ID for API operations",
          "title": "Market Id",
          "type": "string"
        },
        "yes_price": {
          "description": "Current Yes token price/probability (0-1)",
          "title": "Yes Price",
          "type": "number"
        },
        "no_price": {
          "description": "Current No token price/probability (0-1)",
          "title": "No Price",
          "type": "number"
        },
        "result": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Resolution outcome: 'Yes', 'No', or null for unsettled markets",
          "title": "Result"
        },
        "status": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Market status: 'active', 'closed', or 'settled'",
          "title": "Status"
        },
        "volume": {
          "default": 0,
          "description": "Total trading volume for this market in USD",
          "title": "Volume",
          "type": "number"
        },
        "volume_24h": {
          "default": 0,
          "description": "Trailing 24h trading volume for this market in USD",
          "title": "Volume 24H",
          "type": "number"
        },
        "volume_7d": {
          "default": 0,
          "description": "Trailing 7d trading volume for this market in USD",
          "title": "Volume 7D",
          "type": "number"
        },
        "liquidity": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": 0,
          "description": "Current liquidity in USD. Omitted from compact search results.",
          "title": "Liquidity"
        },
        "end_date": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Market deadline date (ISO format, e.g. '2025-12-31')",
          "title": "End Date"
        },
        "start_date": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Market trading start date (ISO format). Useful for filtering young markets.",
          "title": "Start Date"
        },
        "created_at": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Timestamp the market was created on Polymarket (ISO-8601).",
          "title": "Created At"
        },
        "yes_token_id": {
          "description": "Token ID for Yes outcome (for orderbook/history queries)",
          "title": "Yes Token Id",
          "type": "string"
        },
        "no_token_id": {
          "description": "Token ID for No outcome (for orderbook/history queries)",
          "title": "No Token Id",
          "type": "string"
        }
      },
      "required": [
        "outcome",
        "market_id",
        "yes_price",
        "no_price",
        "yes_token_id",
        "no_token_id"
      ],
      "title": "MarketOutcome",
      "type": "object"
    }
  },
  "description": "Result of get_event tool.\n\nReturns full details for a single event (title, description, timestamps, and\nevery child market with enriched token IDs). Use when you have an event_id\nfrom a prior search and want deterministic lookup without keyword matching.",
  "properties": {
    "success": {
      "description": "Whether the operation succeeded",
      "title": "Success",
      "type": "boolean"
    },
    "event_id": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The event ID that was queried",
      "title": "Event Id"
    },
    "event_title": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Event title",
      "title": "Event Title"
    },
    "event_slug": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "URL slug for user-facing links",
      "title": "Event Slug"
    },
    "description": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Event description text",
      "title": "Description"
    },
    "total_volume": {
      "default": 0,
      "description": "Total trading volume across all markets",
      "title": "Total Volume",
      "type": "number"
    },
    "volume_24h": {
      "default": 0,
      "description": "Trailing 24h trading volume across all markets",
      "title": "Volume 24H",
      "type": "number"
    },
    "volume_7d": {
      "default": 0,
      "description": "Trailing 7d trading volume across all markets",
      "title": "Volume 7D",
      "type": "number"
    },
    "start_date": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Event trading start date (ISO-8601)",
      "title": "Start Date"
    },
    "created_at": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Timestamp the event was created (ISO-8601)",
      "title": "Created At"
    },
    "end_date": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Event end date (ISO-8601), if set",
      "title": "End Date"
    },
    "markets": {
      "description": "Child markets, enriched with yes_token_id and no_token_id",
      "items": {
        "$ref": "#/$defs/MarketOutcome"
      },
      "title": "Markets",
      "type": "array"
    },
    "error": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Error message if operation failed",
      "title": "Error"
    }
  },
  "required": [
    "success"
  ],
  "title": "GetEventResult",
  "type": "object"
}

# get_market_changes read

Compute % and absolute price/volume change over 1h/24h/7d/30d windows for a Polymarket outcome token.

Full description
Compute price (and volume_24h) change over named windows.

Resolves token_id → condition_id+side via the market-data API, then
queries that API's `/changes` endpoint. NO-side tokens are reported
with their complementary probability (1 - YES) so abs/pct match the
side the caller is holding.

`windows` is a comma-separated subset of: 1h, 24h, 7d, 30d.
Parameter Type Required Description
token_id string Yes Token ID from get_market_details response
windows string No Comma-separated subset of: 1h, 24h, 7d, 30d Default: "1h,24h,7d,30d"
Parameter schema (JSON)
{
  "description": "Parameters for get_market_changes tool.",
  "properties": {
    "token_id": {
      "description": "Token ID from get_market_details response",
      "title": "Token Id",
      "type": "string"
    },
    "windows": {
      "default": "1h,24h,7d,30d",
      "description": "Comma-separated subset of: 1h, 24h, 7d, 30d",
      "title": "Windows",
      "type": "string"
    }
  },
  "required": [
    "token_id"
  ],
  "title": "GetMarketChangesParams",
  "type": "object",
  "additionalProperties": false
}
Result schema (JSON)
{
  "$defs": {
    "WindowChange": {
      "description": "% and absolute change for a single named window.",
      "properties": {
        "window": {
          "description": "One of: 1h, 24h, 7d, 30d",
          "title": "Window",
          "type": "string"
        },
        "samples": {
          "description": "Number of cagg buckets in the window",
          "title": "Samples",
          "type": "integer"
        },
        "open": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Open"
        },
        "close": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Close"
        },
        "price_abs": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "close - open",
          "title": "Price Abs"
        },
        "price_pct": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "100 * (close - open) / open",
          "title": "Price Pct"
        },
        "volume_24h_abs": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Volume 24H Abs"
        },
        "volume_24h_pct": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Volume 24H Pct"
        }
      },
      "required": [
        "window",
        "samples"
      ],
      "title": "WindowChange",
      "type": "object"
    }
  },
  "description": "Result of get_market_changes tool.",
  "properties": {
    "success": {
      "title": "Success",
      "type": "boolean"
    },
    "market_id": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Polymarket condition_id resolved from token_id",
      "title": "Market Id"
    },
    "side": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "\"yes\" or \"no\" — which outcome the requested token represents",
      "title": "Side"
    },
    "windows": {
      "items": {
        "$ref": "#/$defs/WindowChange"
      },
      "title": "Windows",
      "type": "array"
    },
    "error": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Error"
    }
  },
  "required": [
    "success"
  ],
  "title": "GetMarketChangesResult",
  "type": "object"
}

# get_market_details read

Get detailed metadata for a specific Polymarket market including description and end date.

Full description
Get detailed market information including description and end date.

NOTE: For most workflows, you don't need this tool. search_markets already returns
yes_token_id and no_token_id, so you can go directly to get_orderbook or get_market_history.

USE THIS TOOL WHEN YOU NEED:
- Market description text
- Market end date
- Market question (full text)
- Market slug for URLs

TYPICAL WORKFLOW (this tool NOT needed):
1. search_markets("election") -> returns markets with yes_token_id and no_token_id
2. get_orderbook(yes_token_id) -> get order depth

EXTENDED WORKFLOW (when you need more details):
1. search_markets("election") -> get market_id
2. get_market_details(market_id) -> get description, end_date, question
Parameter Type Required Description
condition_id string Yes Condition ID (hex) from search_markets response (market_id field)
Parameter schema (JSON)
{
  "description": "Parameters for get_market_details tool.\n\nUse this tool to get extended market information (description, end date, etc.).\nNote: Token IDs are already included in search_markets results, so this tool\nis only needed when you require additional market metadata.",
  "properties": {
    "condition_id": {
      "description": "Condition ID (hex) from search_markets response (market_id field)",
      "title": "Condition Id",
      "type": "string"
    }
  },
  "required": [
    "condition_id"
  ],
  "title": "GetMarketDetailsParams",
  "type": "object",
  "additionalProperties": false
}
Result schema (JSON)
{
  "$defs": {
    "TokenInfo": {
      "description": "Token information for a market outcome.",
      "properties": {
        "token_id": {
          "description": "Token ID (asset ID) for orderbook/history queries",
          "title": "Token Id",
          "type": "string"
        },
        "outcome": {
          "description": "The outcome this token represents (e.g., 'Yes', 'No')",
          "title": "Outcome",
          "type": "string"
        },
        "price": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Current price/probability (0-1)",
          "title": "Price"
        }
      },
      "required": [
        "token_id",
        "outcome"
      ],
      "title": "TokenInfo",
      "type": "object"
    }
  },
  "description": "Result of get_market_details tool.\n\nReturns extended market information including description, end date, and question.\nNote: Token IDs are already available in search_markets results via yes_token_id\nand no_token_id fields, so this tool is primarily for fetching market metadata.",
  "properties": {
    "success": {
      "description": "Whether the operation succeeded",
      "title": "Success",
      "type": "boolean"
    },
    "condition_id": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The condition ID that was queried",
      "title": "Condition Id"
    },
    "question": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The market question",
      "title": "Question"
    },
    "tokens": {
      "description": "List of tokens with their IDs - use these for orderbook/history queries",
      "items": {
        "$ref": "#/$defs/TokenInfo"
      },
      "title": "Tokens",
      "type": "array"
    },
    "market_slug": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "URL slug for the market",
      "title": "Market Slug"
    },
    "description": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Market description",
      "title": "Description"
    },
    "end_date": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Market end date",
      "title": "End Date"
    },
    "error": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Error message if operation failed",
      "title": "Error"
    }
  },
  "required": [
    "success"
  ],
  "title": "GetMarketDetailsResult",
  "type": "object"
}

# get_market_history read

Read historical price/probability buckets (5m/1h/1d) for a Polymarket outcome token.

Full description
Get historical price/probability data for a market.

Use token_id from search_markets/get_event, or pass market_slug,
candidate_name, or event_id + outcome_substring and this tool resolves the
Yes token internally. Returns time-series data sorted ascending by
timestamp.

Backed primarily by the toolforest-market-data API: the underlying ingester
writes a snapshot every cycle and rolls them up into 5m / 1h / 1d buckets.
If the requested window starts before our stored history, the tool fills
only that older missing prefix from Polymarket CLOB /prices-history.
Stored buckets include trailing 24h venue volume where available. Per-bucket
dollar volume is surfaced only when the market-data API supplies it; CLOB
fallback points are price-only.

Parameters:
- interval: Named time range ending now. Ignored when start_ts is set.
- fidelity: Minimum minutes between points. ≤5 → 5m bucket, ≤60 → 1h,
  otherwise 1d. The bucket grain caps how dense the result can be.
  One call returns at most 2000 points: roughly 6.9 days at 5m,
  83 days at 1h, or 5.5 years at 1d. Older missing prefixes may be
  filled from CLOB in 14-day chunks up to 30 chunks, still subject to
  the 2000-point response cap.
- start_ts / end_ts: Optional Unix-seconds window. `end_ts` requires
  `start_ts`; defaults to now when only start_ts is set.

When the API response is `truncated=True` (more points exist older than
the first returned point), this tool surfaces it as `truncated=True`
and sets `continue_from` to the earliest returned Unix timestamp.
Re-invoke with `end_ts = continue_from - 1` to page backwards.
Parameter Type Required Description
token_id string | null No Outcome token ID from search_markets/get_event. If omitted, use one of the resolver inputs.
market_slug string | null No Polymarket market URL slug to resolve internally to its Yes token ID.
candidate_name string | null No Candidate/outcome text to resolve via search_markets, e.g. 'Tucker Carlson'.
event_id string | null No Event ID used with outcome_substring to resolve one child market.
outcome_substring string | null No Case-insensitive child market outcome substring used with event_id.
interval "1h" | "6h" | "1d" | "1w" | "1m" | "max" No Time range to fetch: 1h, 6h, 1d (day), 1w (week), 1m (month), max (full history). Ignored when start_ts is set. Default: "max"
fidelity integer No Minimum spacing between returned points, in minutes. Common values: 60 (hourly), 1440 (daily), 10080 (weekly), 43200 (monthly). Acts as a floor. Stored market-data buckets are regular where available; older CLOB fallback ranges may return fewer points than fidelity suggests. Default: 60
start_ts integer | null No Optional start timestamp (Unix seconds). When set, overrides `interval` and paginates the full [start_ts, end_ts] window.
end_ts integer | null No Optional end timestamp (Unix seconds). Defaults to now when `start_ts` is set. Pass `continue_from - 1` from a truncated result to page backwards.
Parameter schema (JSON)
{
  "description": "Parameters for get_market_history tool.",
  "properties": {
    "token_id": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Outcome token ID from search_markets/get_event. If omitted, use one of the resolver inputs.",
      "title": "Token Id"
    },
    "market_slug": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Polymarket market URL slug to resolve internally to its Yes token ID.",
      "title": "Market Slug"
    },
    "candidate_name": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Candidate/outcome text to resolve via search_markets, e.g. 'Tucker Carlson'.",
      "title": "Candidate Name"
    },
    "event_id": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Event ID used with outcome_substring to resolve one child market.",
      "title": "Event Id"
    },
    "outcome_substring": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Case-insensitive child market outcome substring used with event_id.",
      "title": "Outcome Substring"
    },
    "interval": {
      "default": "max",
      "description": "Time range to fetch: 1h, 6h, 1d (day), 1w (week), 1m (month), max (full history). Ignored when start_ts is set.",
      "enum": [
        "1h",
        "6h",
        "1d",
        "1w",
        "1m",
        "max"
      ],
      "title": "Interval",
      "type": "string"
    },
    "fidelity": {
      "default": 60,
      "description": "Minimum spacing between returned points, in minutes. Common values: 60 (hourly), 1440 (daily), 10080 (weekly), 43200 (monthly). Acts as a floor. Stored market-data buckets are regular where available; older CLOB fallback ranges may return fewer points than fidelity suggests.",
      "minimum": 1,
      "title": "Fidelity",
      "type": "integer"
    },
    "start_ts": {
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Optional start timestamp (Unix seconds). When set, overrides `interval` and paginates the full [start_ts, end_ts] window.",
      "title": "Start Ts"
    },
    "end_ts": {
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Optional end timestamp (Unix seconds). Defaults to now when `start_ts` is set. Pass `continue_from - 1` from a truncated result to page backwards.",
      "title": "End Ts"
    }
  },
  "title": "GetMarketHistoryParams",
  "type": "object",
  "additionalProperties": false
}
Result schema (JSON)
{
  "$defs": {
    "DataGap": {
      "description": "Missing expected bucket range in a history response.",
      "properties": {
        "start": {
          "description": "Gap start timestamp, ISO-8601 UTC",
          "title": "Start",
          "type": "string"
        },
        "end": {
          "description": "Gap end timestamp, ISO-8601 UTC",
          "title": "End",
          "type": "string"
        },
        "start_ts": {
          "description": "Gap start Unix timestamp",
          "title": "Start Ts",
          "type": "integer"
        },
        "end_ts": {
          "description": "Gap end Unix timestamp",
          "title": "End Ts",
          "type": "integer"
        }
      },
      "required": [
        "start",
        "end",
        "start_ts",
        "end_ts"
      ],
      "title": "DataGap",
      "type": "object"
    },
    "PricePoint": {
      "description": "Single point in price history.",
      "properties": {
        "timestamp": {
          "description": "Unix timestamp",
          "title": "Timestamp",
          "type": "integer"
        },
        "date": {
          "description": "ISO-8601 date (UTC) derived from timestamp, e.g. '2025-11-14'",
          "title": "Date",
          "type": "string"
        },
        "price": {
          "description": "Price/probability at this time",
          "title": "Price",
          "type": "number"
        },
        "volume": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Dollar volume traded in this bucket when supplied by the market-data API. Currently null for older CLOB fallback points.",
          "title": "Volume"
        },
        "volume_24h": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Venue-reported trailing 24h volume observed in this bucket. This is not the same as bucket volume.",
          "title": "Volume 24H"
        }
      },
      "required": [
        "timestamp",
        "date",
        "price"
      ],
      "title": "PricePoint",
      "type": "object"
    }
  },
  "description": "Result of get_market_history tool.",
  "properties": {
    "success": {
      "description": "Whether the operation succeeded",
      "title": "Success",
      "type": "boolean"
    },
    "history": {
      "description": "Historical price data, sorted ascending by timestamp",
      "items": {
        "$ref": "#/$defs/PricePoint"
      },
      "title": "History",
      "type": "array"
    },
    "count": {
      "default": 0,
      "description": "Number of data points returned",
      "title": "Count",
      "type": "integer"
    },
    "truncated": {
      "default": false,
      "description": "True when the result was capped by MAX_HISTORY_POINTS_PER_CALL. More data may be available earlier than `continue_from`.",
      "title": "Truncated",
      "type": "boolean"
    },
    "continue_from": {
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "When truncated=True, the earliest returned Unix timestamp. Re-invoke with end_ts = continue_from - 1 to page further back.",
      "title": "Continue From"
    },
    "note": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Optional human-readable note (e.g., how to continue when truncated).",
      "title": "Note"
    },
    "data_gaps": {
      "description": "Detected missing expected buckets within the returned history. Empty means no gap was detected in the returned slice; it does not prove older data exists before the first returned point.",
      "items": {
        "$ref": "#/$defs/DataGap"
      },
      "title": "Data Gaps",
      "type": "array"
    },
    "error": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Error message if operation failed",
      "title": "Error"
    }
  },
  "required": [
    "success"
  ],
  "title": "GetMarketHistoryResult",
  "type": "object"
}

# get_movers read

List top Polymarket volume movers over 1h/24h or price movers over 1h/24h/7d.

Full description
Return top Polymarket markets ranked by volume or price change.

For kind="volume", ranks by relative volume over the selected window using
the market-data API's baseline comparison. Volume movers currently support
1h and 24h windows. For kind="price", ranks by price percentage change over
the same window; price movers support 1h, 24h, and 7d.

Direction for price:
  - up   = top gainers (price_pct DESC)
  - down = top losers  (price_pct ASC)
  - both = ranked by absolute change |price_pct|

Each mover carries its condition_id. Defaults to active markets only; pass
status="" to include resolved/closed. Movers include Yes/No token IDs when
they can be resolved, so callers can chain directly into orderbook/history
tools. Use query for keyword/topic filtering, and list_mover_categories to
discover valid category names for category/categories filters.
Parameter Type Required Description
kind "volume" | "price" No Rank by relative volume ('volume') or price move ('price'). Default: "volume"
window "1h" | "24h" | "7d" No Window to rank movers over. Use 24h for one day. Default: "1h"
direction "up" | "down" | "both" No For price: up/down/both price changes. For volume: up returns highest relative volume; down returns lowest; both ranks by absolute relative volume. Default: "up"
category string | null No Optional single market category filter. Prefer categories for multiple values.
categories array<string> | null No Optional set of market categories to include, e.g. ['Politics', 'Elections']. Empty means no include filter.
exclude_categories array<string> | null No Market categories to exclude. Defaults to ['Sports'] because sports markets are short-lived and often dominate movers noise. Pass [] to include sports.
query string | null No Optional keyword/topic filter applied before ranking. Matches market title or description, e.g. 'Iran' or 'election'.
min_volume_24h number No Minimum 24h volume filter used to suppress thin markets. Default: 500
limit integer No Max movers to return (1..200). Default: 20
status string | null No Filter to a single market_metadata.status value (default 'active' to exclude resolved/closed markets). Pass an empty string to include all. Default: "active"
Parameter schema (JSON)
{
  "description": "Parameters for get_movers tool.",
  "properties": {
    "kind": {
      "default": "volume",
      "description": "Rank by relative volume ('volume') or price move ('price').",
      "enum": [
        "volume",
        "price"
      ],
      "title": "Kind",
      "type": "string"
    },
    "window": {
      "default": "1h",
      "description": "Window to rank movers over. Use 24h for one day.",
      "enum": [
        "1h",
        "24h",
        "7d"
      ],
      "title": "Window",
      "type": "string"
    },
    "direction": {
      "default": "up",
      "description": "For price: up/down/both price changes. For volume: up returns highest relative volume; down returns lowest; both ranks by absolute relative volume.",
      "enum": [
        "up",
        "down",
        "both"
      ],
      "title": "Direction",
      "type": "string"
    },
    "category": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Optional single market category filter. Prefer categories for multiple values.",
      "title": "Category"
    },
    "categories": {
      "anyOf": [
        {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Optional set of market categories to include, e.g. ['Politics', 'Elections']. Empty means no include filter.",
      "title": "Categories"
    },
    "exclude_categories": {
      "anyOf": [
        {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Market categories to exclude. Defaults to ['Sports'] because sports markets are short-lived and often dominate movers noise. Pass [] to include sports.",
      "title": "Exclude Categories"
    },
    "query": {
      "anyOf": [
        {
          "maxLength": 200,
          "minLength": 1,
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Optional keyword/topic filter applied before ranking. Matches market title or description, e.g. 'Iran' or 'election'.",
      "title": "Query"
    },
    "min_volume_24h": {
      "default": 500,
      "description": "Minimum 24h volume filter used to suppress thin markets.",
      "minimum": 0,
      "title": "Min Volume 24H",
      "type": "number"
    },
    "limit": {
      "default": 20,
      "description": "Max movers to return (1..200).",
      "maximum": 200,
      "minimum": 1,
      "title": "Limit",
      "type": "integer"
    },
    "status": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": "active",
      "description": "Filter to a single market_metadata.status value (default 'active' to exclude resolved/closed markets). Pass an empty string to include all.",
      "title": "Status"
    }
  },
  "title": "GetMoversParams",
  "type": "object",
  "additionalProperties": false
}
Result schema (JSON)
{
  "$defs": {
    "MoverInfo": {
      "description": "One market's volume or price change over the requested window.",
      "properties": {
        "venue": {
          "title": "Venue",
          "type": "string"
        },
        "market_id": {
          "description": "Polymarket condition_id",
          "title": "Market Id",
          "type": "string"
        },
        "yes_token_id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Token ID for the Yes outcome, for orderbook/history queries",
          "title": "Yes Token Id"
        },
        "no_token_id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Token ID for the No outcome, for orderbook/history queries",
          "title": "No Token Id"
        },
        "title": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Title"
        },
        "category": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Category"
        },
        "status": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Status"
        },
        "samples": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Samples"
        },
        "open": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Open"
        },
        "close": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Close"
        },
        "price_abs": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Price Abs"
        },
        "price_pct": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Price Pct"
        },
        "window_vol": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Window Vol"
        },
        "baseline_per_window": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Baseline Per Window"
        },
        "rvol": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Rvol"
        }
      },
      "required": [
        "venue",
        "market_id"
      ],
      "title": "MoverInfo",
      "type": "object"
    }
  },
  "description": "Result of get_movers tool.",
  "properties": {
    "success": {
      "title": "Success",
      "type": "boolean"
    },
    "kind": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Kind"
    },
    "window": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Window"
    },
    "direction": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Direction"
    },
    "limit": {
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Limit"
    },
    "baseline_window": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Baseline Window"
    },
    "baseline_complete": {
      "anyOf": [
        {
          "type": "boolean"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Baseline Complete"
    },
    "warning": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Warning"
    },
    "movers": {
      "items": {
        "$ref": "#/$defs/MoverInfo"
      },
      "title": "Movers",
      "type": "array"
    },
    "count": {
      "default": 0,
      "title": "Count",
      "type": "integer"
    },
    "error": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Error"
    }
  },
  "required": [
    "success"
  ],
  "title": "GetMoversResult",
  "type": "object"
}

# get_orderbook read

Read the current market orderbook with bid/ask depth, top levels, and summary liquidity statistics.

Full description
Get the current orderbook (bid/ask depth) for a market.

Use token_id from get_market_details response. Returns current
bids, asks, and summary statistics. Results are limited to 10 levels
per side to optimize for LLM token usage.

Response includes:
- summary: Quick reference stats (best_bid, best_ask, spread, midpoint, total liquidity)
- bids: Top 10 bid levels sorted by price (highest first)
- asks: Top 10 ask levels sorted by price (lowest first)
Parameter Type Required Description
token_id string Yes Token ID from get_market_details response
Parameter schema (JSON)
{
  "description": "Parameters for get_orderbook tool.",
  "properties": {
    "token_id": {
      "description": "Token ID from get_market_details response",
      "title": "Token Id",
      "type": "string"
    }
  },
  "required": [
    "token_id"
  ],
  "title": "GetOrderbookParams",
  "type": "object",
  "additionalProperties": false
}
Result schema (JSON)
{
  "$defs": {
    "OrderbookLevel": {
      "description": "Single level in the orderbook.",
      "properties": {
        "price": {
          "description": "Price level (0-1 probability)",
          "title": "Price",
          "type": "number"
        },
        "size": {
          "description": "Size at this price level",
          "title": "Size",
          "type": "number"
        }
      },
      "required": [
        "price",
        "size"
      ],
      "title": "OrderbookLevel",
      "type": "object"
    },
    "OrderbookSummary": {
      "description": "Summary statistics for the orderbook.",
      "properties": {
        "best_bid": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Highest bid price",
          "title": "Best Bid"
        },
        "best_ask": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Lowest ask price",
          "title": "Best Ask"
        },
        "spread": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Bid-ask spread (best_ask - best_bid)",
          "title": "Spread"
        },
        "midpoint": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Midpoint price ((best_bid + best_ask) / 2)",
          "title": "Midpoint"
        },
        "total_bid_liquidity": {
          "default": 0,
          "description": "Total size across all bid levels",
          "title": "Total Bid Liquidity",
          "type": "number"
        },
        "total_ask_liquidity": {
          "default": 0,
          "description": "Total size across all ask levels",
          "title": "Total Ask Liquidity",
          "type": "number"
        }
      },
      "title": "OrderbookSummary",
      "type": "object"
    }
  },
  "description": "Result of get_orderbook tool.",
  "properties": {
    "success": {
      "description": "Whether the operation succeeded",
      "title": "Success",
      "type": "boolean"
    },
    "summary": {
      "anyOf": [
        {
          "$ref": "#/$defs/OrderbookSummary"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Summary statistics for quick reference"
    },
    "bids": {
      "description": "Buy orders (bids), limited to top 10 levels",
      "items": {
        "$ref": "#/$defs/OrderbookLevel"
      },
      "title": "Bids",
      "type": "array"
    },
    "asks": {
      "description": "Sell orders (asks), limited to top 10 levels",
      "items": {
        "$ref": "#/$defs/OrderbookLevel"
      },
      "title": "Asks",
      "type": "array"
    },
    "error": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Error message if operation failed",
      "title": "Error"
    }
  },
  "required": [
    "success"
  ],
  "title": "GetOrderbookResult",
  "type": "object"
}

# list_mover_categories read

List Polymarket categories available for get_movers filters.

Full description
List Polymarket market-data categories available for get_movers filters.

Use these category names with get_movers(category=...) or
get_movers(categories=[...]).
Parameter Type Required Description
status string | null No Filter to a single market_metadata.status value. Defaults to 'active'. Pass an empty string to include all statuses. Default: "active"
Parameter schema (JSON)
{
  "description": "Parameters for list_mover_categories tool.",
  "properties": {
    "status": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": "active",
      "description": "Filter to a single market_metadata.status value. Defaults to 'active'. Pass an empty string to include all statuses.",
      "title": "Status"
    }
  },
  "title": "ListMoverCategoriesParams",
  "type": "object",
  "additionalProperties": false
}
Result schema (JSON)
{
  "$defs": {
    "MoverCategorySummary": {
      "description": "Category available for market-data mover filters.",
      "properties": {
        "category": {
          "description": "Category name to pass to get_movers",
          "title": "Category",
          "type": "string"
        },
        "market_count": {
          "default": 0,
          "description": "Number of market metadata rows in this category",
          "title": "Market Count",
          "type": "integer"
        }
      },
      "required": [
        "category"
      ],
      "title": "MoverCategorySummary",
      "type": "object"
    }
  },
  "description": "Result of list_mover_categories tool.",
  "properties": {
    "success": {
      "description": "Whether the operation succeeded",
      "title": "Success",
      "type": "boolean"
    },
    "categories": {
      "description": "Mover categories sorted by market count",
      "items": {
        "$ref": "#/$defs/MoverCategorySummary"
      },
      "title": "Categories",
      "type": "array"
    },
    "count": {
      "default": 0,
      "description": "Number of categories",
      "title": "Count",
      "type": "integer"
    },
    "error": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Error message if operation failed",
      "title": "Error"
    }
  },
  "required": [
    "success"
  ],
  "title": "ListMoverCategoriesResult",
  "type": "object"
}

# list_tags read

List Polymarket event tags available for search_markets filters.

Full description
List Polymarket event tags available for search_markets tag filters.

Use tag labels or slugs returned here with search_markets(tag=...) or
search_markets(tags=[...]). Polymarket tags are provider-defined and more
granular than canonical categories; prefer them for direct Polymarket
discovery, and use movers category filters for cross-venue mover scans.
Parameter Type Required Description
query string | null No Optional case-insensitive substring filter for tag label or slug.
limit integer No Maximum number of Polymarket tags to return. Default: 100
Parameter schema (JSON)
{
  "description": "Parameters for list_tags tool.",
  "properties": {
    "query": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Optional case-insensitive substring filter for tag label or slug.",
      "title": "Query"
    },
    "limit": {
      "default": 100,
      "description": "Maximum number of Polymarket tags to return.",
      "maximum": 500,
      "minimum": 1,
      "title": "Limit",
      "type": "integer"
    }
  },
  "title": "ListTagsParams",
  "type": "object",
  "additionalProperties": false
}
Result schema (JSON)
{
  "$defs": {
    "PolymarketTagSummary": {
      "description": "Polymarket event tag available for search_markets filters.",
      "properties": {
        "label": {
          "description": "Human-readable Polymarket tag label.",
          "title": "Label",
          "type": "string"
        },
        "slug": {
          "description": "Polymarket tag slug accepted by search_markets tag filters.",
          "title": "Slug",
          "type": "string"
        },
        "tag_id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Polymarket Gamma tag id, if present.",
          "title": "Tag Id"
        }
      },
      "required": [
        "label",
        "slug"
      ],
      "title": "PolymarketTagSummary",
      "type": "object"
    }
  },
  "description": "Result of list_tags tool.",
  "properties": {
    "success": {
      "description": "Whether the operation succeeded",
      "title": "Success",
      "type": "boolean"
    },
    "tags": {
      "description": "Polymarket event tags. Use label or slug with search_markets tag filters.",
      "items": {
        "$ref": "#/$defs/PolymarketTagSummary"
      },
      "title": "Tags",
      "type": "array"
    },
    "count": {
      "default": 0,
      "description": "Number of tags returned",
      "title": "Count",
      "type": "integer"
    },
    "error": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Error message if operation failed",
      "title": "Error"
    }
  },
  "required": [
    "success"
  ],
  "title": "ListTagsResult",
  "type": "object"
}

# search_markets read

Search Polymarket events and markets using keywords or event tags.

Full description
Search for Polymarket events and markets using keywords or event tags.

This tool interfaces with the Polymarket Gamma API to retrieve trading events.
It supports multi-term queries (e.g. "bitcoin 2025"), Polymarket event tags,
sorting, and pagination. Use tag/tags without query for tag-only discovery.

Returns a hierarchical list of Events containing their tradeable Markets.
Each event / market includes:
- yes_price / no_price: Both sides of the probability (markets only)
- result: 'Yes', 'No', or null — resolution outcome for settled markets
- status: 'active', 'closed', or 'settled'
- volume / volume_24h / volume_7d: Lifetime and recent trading volume
  for the market (event total_volume / volume_24h / volume_7d aggregate)
- start_date, created_at, end_date: Market/event lifecycle timestamps (ISO-8601) —
  useful for screening young vs. mature markets.
- tags / tag_slugs: Polymarket event tags for topical filtering.

COMPACT MODE (default: on):
- Results keep token IDs but omit liquidity to reduce payload size.
- Use compact=false when you need liquidity alongside token IDs.

FILTERING:
- Use 'status' to filter by event lifecycle: 'active', 'closed', or 'settled'.
  Omit to return all statuses.
- Use 'include_closed=False' to exclude closed/settled markets from results,
  showing only active markets.
- Use 'min_volume' to drop events below a total-volume threshold (e.g.
  min_volume=1000000 for $1M+ events). Applied client-side, so results
  may contain fewer than `limit` events after filtering.
- Use 'max_markets_per_event' to cap the number of markets returned inside
  each event. This prevents broad searches from returning very large nested
  event payloads. Set to null only when you need every market in each event.
- Use 'tag' or 'tags' to include Polymarket event tag labels/slugs.
  These filters are case-insensitive and match either labels or slugs.
- Use 'exclude_tags' to remove noisy event tags.
- Use 'sort="volume"' to surface the most liquid/popular markets first.

WORKFLOW:
1. search_markets("election") -> compact results with token IDs
2. get_orderbook(yes_token_id) or get_market_history(yes_token_id)

Use 'event_id' for API operations and 'event_slug' for user-facing links.

Note: Profiles are filtered out to optimize context usage; event tags are kept.
Parameter Type Required Description
query string | null No Keywords to search. Multiple terms allowed (e.g., 'fed rate hike'). Optional when tag or tags is supplied.
sort "liquidity" | "volume" | "startDate" | "createdAt" | "score" No Metric to sort by. 'score' = relevance Default: "score"
ascending boolean No Sort direction (default: descending) Default: false
limit integer No Maximum number of events to return Default: 20
page integer No Page number for pagination Default: 1
status "active" | "closed" | "settled" | null No Filter by event status: 'active' (currently trading), 'closed', or 'settled'. Omit to return all statuses.
include_closed boolean No Whether to include closed/settled markets in results. Set to false to see only active markets. Default: true
compact boolean No Return compact results (omits liquidity, keeps token IDs). Set to false if you need liquidity alongside token IDs. Default: true
min_volume number | null No Drop events whose total_volume (across all markets in the event) is below this threshold. Useful for screening to liquid markets (e.g. min_volume=1000000 for $1M+ events). Applied client-side after retrieval — result may contain fewer than `limit` events.
max_markets_per_event integer | null No Maximum number of markets to return inside each event. Use null to disable this cap when you need every market in large multi-market events. Default: 10
tag string | null No Optional single Polymarket event tag label or slug to include, e.g. 'Economy' or 'world-elections'. Prefer tags for multiple values.
tags array<string> | null No Optional set of Polymarket event tag labels/slugs to include. Events matching any included tag are returned. If query is omitted, search uses Gamma's tag endpoint and requires at least one tag.
exclude_tags array<string> | null No Optional Polymarket event tag labels/slugs to exclude.
Parameter schema (JSON)
{
  "description": "Parameters for search_markets tool.",
  "properties": {
    "query": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Keywords to search. Multiple terms allowed (e.g., 'fed rate hike'). Optional when tag or tags is supplied.",
      "title": "Query"
    },
    "sort": {
      "default": "score",
      "description": "Metric to sort by. 'score' = relevance",
      "enum": [
        "liquidity",
        "volume",
        "startDate",
        "createdAt",
        "score"
      ],
      "title": "Sort",
      "type": "string"
    },
    "ascending": {
      "default": false,
      "description": "Sort direction (default: descending)",
      "title": "Ascending",
      "type": "boolean"
    },
    "limit": {
      "default": 20,
      "description": "Maximum number of events to return",
      "maximum": 100,
      "minimum": 1,
      "title": "Limit",
      "type": "integer"
    },
    "page": {
      "default": 1,
      "description": "Page number for pagination",
      "minimum": 1,
      "title": "Page",
      "type": "integer"
    },
    "status": {
      "anyOf": [
        {
          "enum": [
            "active",
            "closed",
            "settled"
          ],
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Filter by event status: 'active' (currently trading), 'closed', or 'settled'. Omit to return all statuses.",
      "title": "Status"
    },
    "include_closed": {
      "default": true,
      "description": "Whether to include closed/settled markets in results. Set to false to see only active markets.",
      "title": "Include Closed",
      "type": "boolean"
    },
    "compact": {
      "default": true,
      "description": "Return compact results (omits liquidity, keeps token IDs). Set to false if you need liquidity alongside token IDs.",
      "title": "Compact",
      "type": "boolean"
    },
    "min_volume": {
      "anyOf": [
        {
          "minimum": 0,
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Drop events whose total_volume (across all markets in the event) is below this threshold. Useful for screening to liquid markets (e.g. min_volume=1000000 for $1M+ events). Applied client-side after retrieval — result may contain fewer than `limit` events.",
      "title": "Min Volume"
    },
    "max_markets_per_event": {
      "anyOf": [
        {
          "maximum": 100,
          "minimum": 1,
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "default": 10,
      "description": "Maximum number of markets to return inside each event. Use null to disable this cap when you need every market in large multi-market events.",
      "title": "Max Markets Per Event"
    },
    "tag": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Optional single Polymarket event tag label or slug to include, e.g. 'Economy' or 'world-elections'. Prefer tags for multiple values.",
      "title": "Tag"
    },
    "tags": {
      "anyOf": [
        {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Optional set of Polymarket event tag labels/slugs to include. Events matching any included tag are returned. If query is omitted, search uses Gamma's tag endpoint and requires at least one tag.",
      "title": "Tags"
    },
    "exclude_tags": {
      "anyOf": [
        {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Optional Polymarket event tag labels/slugs to exclude.",
      "title": "Exclude Tags"
    }
  },
  "title": "SearchMarketsParams",
  "type": "object",
  "additionalProperties": false
}
Result schema (JSON)
{
  "$defs": {
    "EventSummary": {
      "description": "Event containing related markets.",
      "properties": {
        "event_title": {
          "description": "Title of the event",
          "title": "Event Title",
          "type": "string"
        },
        "event_id": {
          "description": "Event ID for API operations",
          "title": "Event Id",
          "type": "string"
        },
        "event_slug": {
          "description": "URL slug for user-facing links",
          "title": "Event Slug",
          "type": "string"
        },
        "total_volume": {
          "default": 0,
          "description": "Total trading volume across all markets",
          "title": "Total Volume",
          "type": "number"
        },
        "volume_24h": {
          "default": 0,
          "description": "Trailing 24h trading volume across all markets",
          "title": "Volume 24H",
          "type": "number"
        },
        "volume_7d": {
          "default": 0,
          "description": "Trailing 7d trading volume across all markets",
          "title": "Volume 7D",
          "type": "number"
        },
        "start_date": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Event trading start date (ISO-8601). Useful for filtering young events.",
          "title": "Start Date"
        },
        "created_at": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Timestamp the event was created on Polymarket (ISO-8601).",
          "title": "Created At"
        },
        "tags": {
          "description": "Polymarket event tag labels, useful for topical filtering.",
          "items": {
            "type": "string"
          },
          "title": "Tags",
          "type": "array"
        },
        "tag_slugs": {
          "description": "Polymarket event tag slugs accepted by tag filters.",
          "items": {
            "type": "string"
          },
          "title": "Tag Slugs",
          "type": "array"
        },
        "markets": {
          "description": "List of tradeable markets within this event",
          "items": {
            "$ref": "#/$defs/MarketOutcome"
          },
          "title": "Markets",
          "type": "array"
        }
      },
      "required": [
        "event_title",
        "event_id",
        "event_slug"
      ],
      "title": "EventSummary",
      "type": "object"
    },
    "MarketOutcome": {
      "description": "Individual market outcome within an event.",
      "properties": {
        "outcome": {
          "description": "The outcome/question for this market",
          "title": "Outcome",
          "type": "string"
        },
        "market_id": {
          "description": "Condition ID for API operations",
          "title": "Market Id",
          "type": "string"
        },
        "yes_price": {
          "description": "Current Yes token price/probability (0-1)",
          "title": "Yes Price",
          "type": "number"
        },
        "no_price": {
          "description": "Current No token price/probability (0-1)",
          "title": "No Price",
          "type": "number"
        },
        "result": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Resolution outcome: 'Yes', 'No', or null for unsettled markets",
          "title": "Result"
        },
        "status": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Market status: 'active', 'closed', or 'settled'",
          "title": "Status"
        },
        "volume": {
          "default": 0,
          "description": "Total trading volume for this market in USD",
          "title": "Volume",
          "type": "number"
        },
        "volume_24h": {
          "default": 0,
          "description": "Trailing 24h trading volume for this market in USD",
          "title": "Volume 24H",
          "type": "number"
        },
        "volume_7d": {
          "default": 0,
          "description": "Trailing 7d trading volume for this market in USD",
          "title": "Volume 7D",
          "type": "number"
        },
        "liquidity": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": 0,
          "description": "Current liquidity in USD. Omitted from compact search results.",
          "title": "Liquidity"
        },
        "end_date": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Market deadline date (ISO format, e.g. '2025-12-31')",
          "title": "End Date"
        },
        "start_date": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Market trading start date (ISO format). Useful for filtering young markets.",
          "title": "Start Date"
        },
        "created_at": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Timestamp the market was created on Polymarket (ISO-8601).",
          "title": "Created At"
        },
        "yes_token_id": {
          "description": "Token ID for Yes outcome (for orderbook/history queries)",
          "title": "Yes Token Id",
          "type": "string"
        },
        "no_token_id": {
          "description": "Token ID for No outcome (for orderbook/history queries)",
          "title": "No Token Id",
          "type": "string"
        }
      },
      "required": [
        "outcome",
        "market_id",
        "yes_price",
        "no_price",
        "yes_token_id",
        "no_token_id"
      ],
      "title": "MarketOutcome",
      "type": "object"
    }
  },
  "description": "Result of search_markets tool.",
  "properties": {
    "success": {
      "description": "Whether the operation succeeded",
      "title": "Success",
      "type": "boolean"
    },
    "events": {
      "description": "List of events containing markets",
      "items": {
        "$ref": "#/$defs/EventSummary"
      },
      "title": "Events",
      "type": "array"
    },
    "count": {
      "default": 0,
      "description": "Number of events returned",
      "title": "Count",
      "type": "integer"
    },
    "has_more": {
      "default": false,
      "description": "Whether more results are available",
      "title": "Has More",
      "type": "boolean"
    },
    "error": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Error message if operation failed",
      "title": "Error"
    }
  },
  "required": [
    "success"
  ],
  "title": "SearchMarketsResult",
  "type": "object"
}