skills/polymarket/SKILL.md
Polymarket sports prediction markets — live odds, prices, order books, events, series, and market search. No auth required. Covers NFL, NBA, MLB, football (EPL, UCL, La Liga), tennis, cricket, MMA, esports. Supports moneyline, spreads, totals, and player props. Use when: user asks about sports betting odds, prediction markets, win probabilities, market sentiment, or "who is favored to win" questions. Don't use when: user asks about actual match results, scores, or statistics — use the sport-specific skill: football-data (soccer), nfl-data (NFL), nba-data (NBA), wnba-data (WNBA), nhl-data (NHL), mlb-data (MLB), tennis-data (tennis), golf-data (golf), cricket-data (cricket), cfb-data (college football), cbb-data (college basketball), or fastf1 (F1). Don't use for historical match data. Don't use for news — use sports-news instead. Don't confuse with Kalshi — Polymarket focuses on crypto-native prediction markets with deeper sports coverage; Kalshi is a US-regulated exchange with different market structure.
npx skillsauth add machina-sports/sports-skills polymarketInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Before writing queries, consult references/api-reference.md for sport codes, command parameters, and price format.
Prefer the CLI — it avoids Python import path issues:
sports-skills polymarket search_markets --sport=nba --sports_market_types=moneyline
sports-skills polymarket get_todays_events --sport=epl
sports-skills polymarket search_markets --sport=epl --query="Leeds" --sports_market_types=moneyline
sports-skills polymarket get_sports_config
Python SDK (alternative):
from sports_skills import polymarket
polymarket.search_markets(sport='nba', sports_market_types='moneyline')
polymarket.get_todays_events(sport='epl')
polymarket.search_markets(sport='epl', query='Leeds')
polymarket.get_sports_config()
CRITICAL: Before calling any market endpoint, verify:
sport parameter is always passed to search_markets and get_todays_events for single-game markets.token_id (CLOB), not market_id (Gamma). Call get_market_details first to get clobTokenIds.Without the sport parameter:
WRONG: search_markets(query="Leeds") → 0 results
RIGHT: search_markets(sport='epl', query='Leeds') → returns all Leeds markets
Core commands (no dependencies, no API keys): All read commands work out of the box.
Trading commands require py_clob_client:
pip install sports-skills[polymarket]
Additionally requires a configured wallet:
export POLYMARKET_PRIVATE_KEY=0x...
search_markets --sport=nba (or epl, nfl, bun, etc.)get_market_prices --token_id=<clob_token_id>.get_todays_events --sport=epl — returns events sorted by start date.clob_token_id from outcomes, then get_market_prices.search_markets --sport=nba --query="Lakers" --sports_market_types=moneylineget_market_prices --token_id=<id> for live CLOB prices.search_markets --sport=nba.clob_token_id from the outcomes.get_price_history --token_id=<id> --interval=1w| Command | Description |
|---|---|
| get_sports_config | Available sport codes |
| get_todays_events | Today's events for a league |
| search_markets | Find markets by sport, keyword, and type |
| get_sports_markets | Browse all sports markets |
| get_sports_events | Browse sports events |
| get_series | List series (leagues) |
| get_market_details | Single market details |
| get_event_details | Single event details |
| get_market_prices | Current CLOB prices |
| get_order_book | Full order book |
| get_price_history | Historical prices |
| get_last_trade_price | Most recent trade |
See references/api-reference.md for full parameter lists and return shapes.
Example 1: Tonight's NBA favorites User says: "Who's favored in tonight's NBA games?" Actions:
search_markets(sport='nba', sports_market_types='moneyline')
Result: Each matchup with implied win probabilities (price = probability)Example 2: Team-specific odds User says: "Show me Leeds vs Man City odds" Actions:
search_markets(sport='epl', query='Leeds', sports_market_types='moneyline')
Result: Leeds moneyline market with outcome pricesExample 3: Today's EPL events User says: "What EPL matches are on today?" Actions:
get_todays_events(sport='epl')
Result: Today's EPL events with nested markets (moneyline, spreads, totals, props)Example 4: League winner futures User says: "Who will win the Premier League?" Actions:
search_markets(query='Premier League') — returns futuresExample 5: Bundesliga odds User says: "Show me Bundesliga odds for Dortmund vs Bayern" Actions:
search_markets(sport='bun', query='Dortmund', sports_market_types='moneyline')
Result: Dortmund/Bayern moneyline market with outcome pricescli_search_markets~~ — does not exist. Use search_markets instead.cli_sports_list~~ — does not exist. Use get_sports_config instead.get_market_odds~~ / ~~get_odds~~ / ~~get_current_odds~~ — prices ARE probabilities. Use get_market_prices(token_id=...).get_implied_probability~~ — the price IS the implied probability.get_markets~~ — use get_sports_markets (browse) or search_markets (search).get_team_schedule~~ — this is a football-data command, not polymarket.If a command is not listed in references/api-reference.md, it does not exist.
Error: search_markets returns 0 results
Cause: The sport parameter is missing — without it, search only checks high-volume markets and misses single-game events
Solution: Always pass sport='<code>' to search_markets. Check references/api-reference.md for valid sport codes
Error: get_market_prices fails or returns wrong data
Cause: market_id (Gamma) was used instead of token_id (CLOB)
Solution: Call get_market_details(market_id=<id>) first to get the CLOB clobTokenIds, then use those with get_market_prices
Error: Prices seem stale or unchanged
Cause: Low-liquidity market — may have wide spreads and infrequent trades
Solution: Check get_last_trade_price(token_id=<id>) for the most recent actual trade price
Error: Trading commands fail
Cause: py_clob_client is not installed or wallet is not configured
Solution: Run pip install sports-skills[polymarket] and set POLYMARKET_PRIVATE_KEY environment variable
tools
Premium FIFA World Cup 2026 market & match intelligence — a hosted, read-only layer that fuses official match truth (fixtures, standings, squads, injuries, player performance) with live prediction markets (Kalshi + Polymarket: prices, order books, price history, movers, cross-venue edges) and AI-grounded context (prematch briefs, move explanations, fan/social pulse). Every entity carries a canonical machina URN cross-walked across api-football, sportradar, opta, entain and ESPN, so a market resolves to a fixture resolves to two teams. This skill is prompt-only and premium: it routes the agent to the hosted World Cup Intelligence project (a per-project Machina MCP server) via `machina-cli`. It runs no code locally and ships no API keys. Use when: the user wants World Cup 2026 odds + match context together, asks "what moved and why", wants a grounded market brief or fan-sentiment read on a fixture, or needs one stable id that joins markets ↔ fixtures ↔ teams across providers. Don't use when: the user wants free snapshot data from public APIs (use the `football-data`, `kalshi`, `polymarket`, or `markets` skills), or wants to place a bet/trade — this layer is read-only intelligence and never executes orders.
development
Sports metadata via TheSportsDB free API (key=3). Team logos and badges, player photos, stadium info, league info, and biographical data across 100+ leagues. No API key required, zero config. Use when: user asks for a team logo, crest, badge, banner, jersey, kit, player photo or headshot, stadium info, club description, or wants to search for teams or players by name across sports. Good for enriching responses from other skills with images and visual identifiers. Don't use when: user asks for scores, standings, fixtures, stats, or odds — use the sport-specific skill instead: football-data (soccer), nfl-data (NFL), nba-data (NBA), wnba-data (WNBA), nhl-data (NHL), mlb-data (MLB), tennis-data (tennis), golf-data (golf), cricket-data (cricket), cfb-data (college football), cbb-data (college basketball), fastf1 (F1), volleyball-data (Dutch volleyball), xctf-data (NCAA XC/TF). Don't use for prediction markets — use polymarket or kalshi.
development
Cricket data via ESPN public endpoints and Cricsheet open data — live-ish series scoreboards, standings, match summaries and news (ESPN), plus historical ball-by-ball, player stats, and player registry (Cricsheet, ODC-BY 1.0). Zero config, no API keys. Use when: user asks about cricket scores, IPL/BBL/PSL/international series, points tables, match details, cricket news, ball-by-ball history, or player career stats. Don't use when: user asks about other sports — use football-data (soccer), nfl-data (NFL), nba-data (NBA), wnba-data (WNBA), nhl-data (NHL), mlb-data (MLB), tennis-data (tennis), golf-data (golf), cfb-data (college football), cbb-data (college basketball), or fastf1 (F1). For betting odds use polymarket or kalshi. For general news use sports-news. Don't use for ICC rankings — no free source exists (v1 limitation).
development
NCAA cross country and track & field athlete data via TFRRS (tfrrs.org) and news via The Stride Report. Fetch athlete profiles including all personal records (PRs), eligibility year, school, full season-by-season results history, and XC/TF news. Zero config, no API keys. Use when: user asks about NCAA cross country, NCAA track and field, college running, TFRRS athlete profiles, personal records, PRs, XC or TF season results, individual athlete performance history, or XC/TF news. Don't use when: user asks about professional track, Diamond League, or other sports — use nfl-data, nba-data, wnba-data, nhl-data, mlb-data, golf-data, cricket-data, cfb-data, cbb-data, tennis-data, fastf1, or volleyball-data. For betting use polymarket or kalshi.