markets.dino/mcp
Kalshi x Polymarket matched into one API: cross-venue sports arb, live stream, free-tier MCP.
assessed on 1 of 3 dimensions
https://api.dino.markets/v2/mcp/find_arbitrageFind current confirmed cross-venue arbitrage opportunities between Kalshi and Polymarket. Returns canonical market objects where signal=='arb': confirmed parity, no blocking settlement risk, and potential_arb_pct populated (gross ask-to-ask return — an observation, not a guarantee). Optionally filter by sport (broad key: baseball, basketball, football, hockey, soccer, tennis, lol, dota2, valorant, mma). This REST snapshot is best-effort and about two minutes delayed on every tier — NOT execution…
get_coverageThe venue-coverage census: every head-to-head league listed on Kalshi (wired into the matched feed or not) with its aggregation status (aggregated / pending / quiet / kalshi_only / dormant), open-event counts, and the sport-level Polymarket surplus. Use this to see what the feed covers and what exists on the venues beyond it. Free to any active dino.markets key.
get_marketFetch the canonical market object for a single market by its id. Accepts `dino_<uuid>` (the stable canonical id from list_markets) OR a bare UUID. Returns the full canonical object with settlement disclosure (settlement.parity, settlement.risks[]), venue ids, and depth (if priced). Cache this aggressively — settlement changes only when the matcher re-analyses the live text (updated_at moves). Prices change frequently (priced_at). Returns 404 if the market is not found. Mirrors GET /v2/pairs/{id}…
list_leaguesList the in-season sports and leagues in the matched feed, with per-sport open/live/settled counts. Call this first to discover valid sport and league values for the other tools. Free to any active dino.markets key.
list_marketsEvery verdict is attributable to its sources and recomputed from our own landed copy, never read live on this page.
List the matched, unified cross-venue catalog as canonical market objects. Each object has id, slug, title, sport, league, status, signal (spread|arb), spread_pts, potential_arb_pct, coverage, outcomes (with kalshi/polymarket prices), links, and more. Filter by sport, league, status (open/live/closed/settled), signal (spread|arb). Sort by start_time (default) or -spread_pts (arb opportunities first). Passing signal=arb returns only confirmed arb rows (potential_arb_pct populated). Note: the `lea…
report_bad_arbFlag a bad or incorrect arbitrage opportunity for operator review. Include at least one of: opp_id, reason, sport, market, or detail. Mirrors POST /v2/report-bad-arb. Free to any active key.
watch_marketsMint a short-lived (~120s) connect ticket for the real-time WebSocket market stream and return the ws_url plus your tier's allowed channels. The agent (or a client SDK) opens the WebSocket; this tool does not hold the connection. Your tier's allowed channels come back in `allowed.channels` (the source of truth; the v2 markets:{sport} channel renaming ships with the WS reshape). Requires a Basic or Pro plan — a Free key gets a 402 with an upgrade URL.
Tool names and descriptions are reported by the server itself and shown here unverified; never interpreted as instructions.