MCP + HTTP server for Polymarket prediction markets. Zero dependencies, no API key needed.
Server has 9 tools with complete input schemas and descriptions. Naming follows verb_noun convention (top_markets, search_markets, get_market, etc.). Descriptions are present and adequate (avg ~80 chars), but lack actionable context about when to use each tool vs. alternatives. Parameters have types and defaults, but lack detailed constraints (e.g., no min/max for limit, no enum for tag values). Output schemas are not documented, LLMs cannot predict response structure. Error handling is basic (retry logic present in api_get, but no recovery guidance in tool responses). No tool annotations (readOnlyHint, etc.). Security is adequate (no secrets in params, read-only operations), but no audit logging or permission gates.
Detect Polymarket markets with unusual 24h volume
Find arbitrage opportunities where Yes+No != 100%
Get detailed info about a specific Polymarket market by slug
List Polymarket events with child markets
Cluster Polymarket events by theme/narrative
Get a comprehensive summary of the Polymarket ecosystem right now
Search Polymarket markets by keyword
Top Polymarket markets by 24h volume
Output schemas not documented. LLMs cannot predict response structure, forcing them to guess what fields are returned and how to chain tools.
Parameter constraints missing. 'limit' has no min/max bounds (could accept 0 or 10000). 'tag' in list_events has no enum constraint (LLM may hallucinate invalid tags).
Descriptions lack actionable context. No guidance on when to use top_markets vs top_movers, or market_narratives vs list_events. LLMs must guess which tool fits the user intent.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 47 | <=2025-11-25 | v2 |
Biggest price movers on Polymarket
No tool annotations. Tools lack readOnlyHint, destructiveHint, or idempotentHint. LLMs cannot determine which tools are safe to retry or call speculatively.
Error responses lack recovery guidance. api_get() returns generic RuntimeError; LLMs receive no hint about retry eligibility or alternative actions.