Skip to main content
Glama

prediction_markets_markets_by_topic

Retrieve top prediction markets for a specific topic on Polymarket using a topic slug, returning JSON data with market titles, volumes, and outcome probabilities.

Instructions

Call after you have a Polymarket topic slug (from the user or prediction_markets_trending_topics) and need the top markets under it.

Parameters

topic_slug : str Identifier such as "trump-presidency". limit : int, default 10 Number of markets to return, ranked by 24-hour volume (desc).

Returns

str JSON array of objects with the schema: [ { "title": "Trump to win 2024?", "volume": 123456.78, "outcomes": [ {"option": "Yes", "probability": 0.42}, {"option": "No", "probability": 0.58} ] }, … ] Parse with json.loads.

Input Schema

NameRequiredDescriptionDefault
limitNo
topic_slugYes

Input Schema (JSON Schema)

{ "properties": { "limit": { "default": 10, "title": "Limit", "type": "integer" }, "topic_slug": { "title": "Topic Slug", "type": "string" } }, "required": [ "topic_slug" ], "type": "object" }

Implementation Reference

  • main.py:27-60 (handler)
    MCP tool handler function for prediction_markets_markets_by_topic. Decorated with @mcp.tool for registration. Fetches markets using poly.markets_by_topic and returns JSON string.
    @mcp.tool async def prediction_markets_markets_by_topic(topic_slug: str, limit: int = 10) -> str: """ Call after you have a Polymarket topic slug (from the user or `prediction_markets_trending_topics`) and need the top markets under it. Parameters ---------- topic_slug : str Identifier such as "trump-presidency". limit : int, default 10 Number of markets to return, ranked by 24-hour volume (desc). Returns ------- str JSON array of objects with the schema: [ { "title": "Trump to win 2024?", "volume": 123456.78, "outcomes": [ {"option": "Yes", "probability": 0.42}, {"option": "No", "probability": 0.58} ] }, … ] Parse with `json.loads`. """ markets = await poly.markets_by_topic(topic_slug, limit) return json.dumps([m.model_dump() for m in markets])
  • Pydantic models defining the structure of market outcomes and markets returned by the tool.
    class MarketOutcome(BaseModel): option: str probability: float class Markets(BaseModel): title: str volume: float outcomes: list[MarketOutcome]
  • Helper function that scrapes Polymarket webpage to derive topic slug and queries the API for markets by topic, returning structured Markets objects.
    async def markets_by_topic(tab_name: str, limit: int = 10) -> list[Markets]: async with async_playwright() as p: browser = await p.chromium.launch(headless=True) page = await browser.new_page() await page.goto("https://polymarket.com", wait_until="domcontentloaded") tab = page.get_by_role("tab", name=tab_name) slug_full = await tab.get_attribute( "aria-controls" ) # e.g. radix-:r6p:-content-big-beautiful-bill if not slug_full: raise ValueError(f"Tab '{tab_name}' not found or has no slug.") tag_slug = slug_full.split("-content-")[-1] # → 'big-beautiful-bill' # build the API URL base = "https://gamma-api.polymarket.com/events/pagination" query = dict( limit=limit, active="true", archived="false", tag_slug=tag_slug, closed="false", order="volume24hr", ascending="false", offset=0, ) url = f"{base}?{urlencode(query)}" data = requests.get(url, timeout=15).json()["data"] res: list[Markets] = [] for e in data: try: outcomes = [ MarketOutcome( option=outcome, probability=float(price), ) for outcome, price in zip( json.loads(e["markets"][0]["outcomes"]), json.loads(e["markets"][0]["outcomePrices"]), ) ] res.append( Markets(title=e["title"], volume=e["volume"], outcomes=outcomes) ) except Exception as ex: print(e["markets"][0]) raise ex return res
  • main.py:27-27 (registration)
    The @mcp.tool decorator registers the function as an MCP tool.
    @mcp.tool

Other Tools

Related Tools

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/fernandezpablo85/polymarket-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server