markets
Markets orchestration — connects ESPN live schedules with Kalshi and Polymarket prediction markets. Unified dashboards, odds comparison, entity search, and bet evaluation across platforms. Use when: user wants to see prediction market odds alongside ESPN game schedules, compare odds across platforms
By machina-sports · 766 installs
npx skills add machina-sports/sports-skills --skill markets
Source repository · Upstream listing
Markets Orchestration
Bridges ESPN live schedules (NBA, NFL, MLB, NHL, WNBA, CFB, CBB) with Kalshi and Polymarket prediction markets. Before writing queries, consult references/api reference.md for supported sport codes, command parameters, and price normalization formats.
Quick Start
Python SDK:
CRITICAL: Before Any Query
CRITICAL: Before calling any orchestration command, verify:
A sport code is provided for sport aware commands ( get todays markets , compare odds , get sport markets , evaluate market ).
Price sources are identified correctly before normalization: espn = American odds, polymarket = 0 1 probability, kalshi = 0 100 integer.
Important Notes
Sport context is passed through. sport=nba maps automatically to the correct Polymarket sport code and Kalshi series ticker.
Both platforms use sport aware search. Polymarket uses sport → series id; Kalshi uses KXNBA , KXNFL , etc.
Prices are normalized. Everything is converted to implied probability for comparison.
Workflows
Today's NBA Dashboard
Returns each game with ESPN info, DraftKings odds, matching Kalshi markets, and matching Polymarket markets.
Find Arb on a Specific Game
1. Get the ESPN event ID: get sport schedule sport=nba
2. Compare odds: compare odds sport=nba event id=<id
3. If arbitrage detected, response includes allocation percentages and guaranteed ROI.
Full Bet Evaluation
1. evaluate market sport=nba event id=<id
2. Fetches ESPN odds and matching prediction market price
3. Pipes through betting.evaluate bet : devig → edge → Kelly
4. Returns fair probability, edge, EV, Kelly fraction, and recommendation
Same Game on Both Venues
1. match markets sport=mlb date=2026 06 06
2. Each match pairs the Kalshi event (with market tickers) and the Polymarket event (with moneyline token IDs) for the same game — joined deterministically on date + team codes, fuzzy title match as fallback.
3. Feed kalshi.market tickers[i] and polymarket.markets[i].token ids[j] straight into get market price to compare prices.
Price Movement Over Time
1. get market price venue=kalshi ticker=<ticker at time=2026 05 01 for a single point in time price (both yes / no sides, 0 1).
2. get price history venue=kalshi ticker=<ticker interval=1d for the full series — same {timestamp, price} shape on either venue.
Examples
Example 1: Today's games with prediction market odds
User says: "What NBA games are on today and what are the prediction market odds?"
Actions:
1. Call get todays markets(sport="nba")
Result: Unified dashboard with each game's ESPN info and Kalshi/Polymarket prices
Example 2: Cross platform team search
User says: "Find me Lakers markets on Kalshi and Polymarket"
Actions:
1. Call search entity(query="Lakers", sport="nba")
Result: All Lakers markets across both exchanges with prices and volume
Example 3: Odds comparison for a specific game
User says: "Compare the odds for this Celtics game across ESPN and Polymarket"
Actions:
1. Get event id from get sport schedule(sport="nba")
2. Call compare odds(sport="nba", event id="<id ")
Result: Normalized side by side comparison with automatic arbitrage check
Example 4: Full market evaluation
User says: "Is there edge on the Chiefs game?"
Actions:
1. Get event id from get sport schedule(sport="nfl")
2. Call evaluate market(sport="nfl", event id="<id ")
Result: Fair probability, edge percentage, EV, Kelly fraction, and bet recommendation
Example 5: Browse all markets for a sport
User says: "Show me all NFL prediction markets"
Actions:
1. Call get sport markets(sport="nfl")
Result: All open NFL markets across Kalshi and Polymarket
Example 6: Price conversion
User says: "Convert a Polymarket price of 65 cents to American odds"
Actions:
1. Call normalize price(price=0.65, source="polymarket")
Result: Common structure with implied probability (0.65), American odds ( 185.7), and decimal (1.54)
Example 7: Pair a game across venues
User says: "Find the Mets game on both Kalshi and Polymarket"
Actions:
1. Call match markets(sport="mlb", date="<game date ")
Result: The game paired across venues — Kalshi market tickers and Polymarket moneyline token IDs side by side
Example 8: Historical price
User says: "What was France's World Cup price a month ago?"
Actions:
1. Call get market price(venue="kalshi", ticker="KXMENWORLDCUP 26 FR", at time="2026 05 03T12:00:00+00:00")
Result: Yes/no prices (0 1) as of that moment; use get price history for the full curve
Commands that DO NOT exist — never call these
~~ get odds ~~ — does not exist. Use compare odds to see odds across sources.
~~ search markets ~~ — does not exist on the markets module. Use search entity instead.
~~ get schedule ~~ — does not exist. Use get sport schedule instead.
If a command is not listed in references/api reference.md , it does not exist.
Troubleshooting
Error: No markets returned for a sport
Cause: Sport code may be missing or incorrect
Solution: Check references/api reference.md for valid sport codes. Use the exact code (e.g., nba , epl , laliga )
Error: compare odds returns no data for an event
Cause: The event id is incorrect or the game has not been indexed yet
Solution: Call get sport schedule(sport=...) to retrieve the correct event id first
Error: One source shows warnings in the response
Cause: Kalshi or Polymarket is temporarily unavailable
Solution: The module returns partial results — use what is available. Retry the unavailable source separately using the kalshi or polymarket skill directly
Error: normalize price returns unexpected American odds value
Cause: Wrong source parameter — Kalshi uses 0 100 integers, Polymarket uses 0 1 decimals
Solution: Verify the source. Kalshi price of 65 requires source="kalshi" , Polymarket price of 0.65 requires source="polymarket"