Polymarket research MCP server and trading bot framework for cricket markets with live pricing, orderbook data, and market analysis tools
The server has 10 tools with generally clear names and moderate descriptions. Tool naming follows verb-noun patterns (get_*, list_*, search_*, analyze_). However, parameter descriptions are minimal or absent in several tools, input schemas lack depth (missing required constraints, enums, and ranges), and output schemas are not documented. Error handling guidance is absent. The cricket-specific tools (tools 7-10) are underdescribed and lack clarity on their interdependencies. Overall: serviceable for read-only market research, but falls short of production-grade quality due to incomplete schemas and missing error recovery guidance.
Analyze a betting opportunity by computing expected value. Give your estimated probability and the current market price to see if there's an edge worth betting on. Also computes Kelly criterion fraction for optimal bet sizing.
List all valid sports market types on Polymarket. Includes cricket-specific types like cricket_toss_winner, cricket_completed_match, cricket_most_sixes, etc. Useful for understanding what you can bet on.
Get full details for a specific cricket match by its event slug. Returns all sub-markets (moneyline, toss winner, completed match, etc.) with current odds, volume, and token IDs needed for price/orderbook queries. The slug is found in the Polymarket URL: polymarket.com/event/<slug>
Get current odds / implied probability for a specific market token. Pass a clobTokenId (from get_match results). Returns buy price, sell price, and midpoint as implied probabilities.
Get full orderbook depth (all bids and asks) for a market token. Shows where the money is sitting -- useful for understanding liquidity, support/resistance levels, and potential slippage.
Output schemas are not documented. Tools return data structures but describe them only in narrative text (e.g., 'Returns buy price, sell price, and midpoint'). LLMs cannot reliably extract fields without a formal schema.
Parameter descriptions are minimal or absent in several tools. E.g., 'interval' in get_price_history has a description but lacks guidance on what '1m', '5m', etc. actually measure (minutes? days?). 'fidelity' is even more opaque, the description says 'Resolution in minutes' but does not explain the relationship to 'interval' or how they interact.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 56 | <=2025-11-25 | v2 |
Get historical price movement for a market token. Shows how odds have shifted over time -- critical for understanding market sentiment and finding value. Returns timestamped price points.
Get the bid-ask spread for a market token. A tight spread means high liquidity; a wide spread means you'll pay more to enter/exit. Returns spread in absolute and percentage terms.
List all cricket leagues/series available on Polymarket. Returns league name, sport code, series_id (needed for match queries), and resolution source.
List active/upcoming cricket matches on Polymarket. Optionally filter by series_id (from list_cricket_leagues). Returns match title, slug, volume, odds for each match. Set include_closed=true to also see finished matches.
Search for events/markets by text query. Searches across event titles and slugs. Use this to find specific matches or topics.
No input validation or constraint documentation. Parameters like 'your_probability' and 'market_price' in analyze_odds accept 0 - 1 floats, but there is no mention of boundaries, what happens if you pass 1.5 or -0.1, or whether 0 and 1 are inclusive. Similar gaps for 'limit' in search_events and list_cricket_matches (max acceptable value?).
No error handling or recovery guidance. If a token_id is invalid, if a series_id does not exist, or if the API is temporarily unavailable, the tool descriptions do not say what error the LLM will receive or how to recover. This forces the LLM to guess and retry blindly.
Cricket tools lack inter-tool guidance. list_cricket_leagues returns series_id values that list_cricket_matches and get_match accept, but the descriptions do not explicitly state 'call list_cricket_leagues first to find a series_id, then pass it to list_cricket_matches'. This forces agents to discover the relationship through trial and error.
get_market_types has an empty parameter object with no description of what it returns. The description says 'List all valid sports market types' but provides no detail on the structure: is it an array of strings? An array of objects with name/id/description? What are the possible values?