Serveur MCP

ParlayAPI

io.github.JacobiusMakes/parlayapi
Données et analytique Autres Public et accessible MCP 2025-11-25

Ce que fait ce MCP

Aggregates sports odds and player props across bookmakers and calculates best lines, consensus prices, arbitrage, expected value, middles, and bet verdicts.

parlayapi_account_info
Get info about the API key currently in use: tier, credits remaining, billing period.
Schéma d’entrée
{'type': 'object', 'title': 'parlayapi_account_infoArguments', 'properties': {}}
Schéma de sortie
{'type': 'object', 'title': 'parlayapi_account_infoDictOutput', 'additionalProperties': True}
parlayapi_best_bets
What should I bet right now? Ranked +EV plays for a sport. The discovery counterpart to parlayapi_verdict: scans the whole board, grades every candidate with the same no-vig engine, keeps only bets that are +EV at a book the user can bet at, and ranks them by edge. Also returns edge_alerts (books showing a price far off the market). Player props only, priced by several books, prediction markets and game moneylines excluded (for a game line, use parlayapi_verdict). Scoped to the user's books. Args: sport_key: e.g. "baseball_mlb". region: us (default) | eu | uk | au | ca. books: exact CSV of books you can bet at (overrides region). limit: max plays to return (default 20). min_edge: minimum edge %% vs the no-vig fair line (default 2.0).
Schéma d’entrée
{'type': 'object', 'title': 'parlayapi_best_betsArguments', 'required': ['sport_key'], 'properties': {'books': {'type': 'string', 'title': 'Books', 'default': ''}, 'limit': {'type': 'integer', 'title': 'Limit', 'default': 20}, 'region': {'type': 'string', 'title': 'Region', 'default': ''}, 'min_edge': {'type': 'number', 'title': 'Min Edge', 'default': 2.0}, 'sport_key': {'type': 'string', 'title': 'Sport Key'}}}
Schéma de sortie
{'type': 'object', 'title': 'parlayapi_best_betsDictOutput', 'additionalProperties': True}
parlayapi_best_line
Find the best (highest) price for each outcome across bookmakers. Useful for line-shopping bots. Returns one row per game / market / side with the bookmaker offering the best price. Args: sport_key: e.g. "baseball_mlb" market: h2h | spreads | totals bookmakers: Restrict the search to these books (optional).
Schéma d’entrée
{'type': 'object', 'title': 'parlayapi_best_lineArguments', 'required': ['sport_key'], 'properties': {'market': {'type': 'string', 'title': 'Market', 'default': 'h2h'}, 'sport_key': {'type': 'string', 'title': 'Sport Key'}, 'bookmakers': {'type': 'string', 'title': 'Bookmakers', 'default': ''}}}
Schéma de sortie
{'type': 'object', 'title': 'parlayapi_best_lineDictOutput', 'additionalProperties': True}
parlayapi_book_coverage
Return public per-book coverage gates. No API key required. This is the proof surface for whether each source survives freshness, normalization, database, REST-shape, and stream-shape checks.
Schéma d’entrée
{'type': 'object', 'title': 'parlayapi_book_coverageArguments', 'properties': {'include_warn': {'type': 'boolean', 'title': 'Include Warn', 'default': True}, 'window_minutes': {'type': 'integer', 'title': 'Window Minutes', 'default': 15}}}
Schéma de sortie
{'type': 'object', 'title': 'parlayapi_book_coverageDictOutput', 'additionalProperties': True}
parlayapi_checkout_link
Generate a Stripe Checkout URL the user can click to upgrade. Tiers: starter ($5), pro ($20), business ($40), enterprise ($100), scale ($200). All are monthly subscriptions.
Schéma d’entrée
{'type': 'object', 'title': 'parlayapi_checkout_linkArguments', 'required': ['email'], 'properties': {'tier': {'type': 'string', 'title': 'Tier', 'default': 'pro'}, 'email': {'type': 'string', 'title': 'Email'}}}
Schéma de sortie
{'type': 'object', 'title': 'parlayapi_checkout_linkDictOutput', 'additionalProperties': True}
parlayapi_consensus
Get consensus (average) odds across all bookmakers per market. Returns average, best, and worst price per (event, market, player, line), a sharp baseline for line-shopping. Soccer and other 3-way markets return separate home, draw, and away consensus rows. Args: sport_key: e.g. "baseball_mlb", "soccer_epl". markets: Comma-separated market_keys (optional), e.g. "moneyline,totals".
Schéma d’entrée
{'type': 'object', 'title': 'parlayapi_consensusArguments', 'required': ['sport_key'], 'properties': {'markets': {'type': 'string', 'title': 'Markets', 'default': ''}, 'sport_key': {'type': 'string', 'title': 'Sport Key'}}}
Schéma de sortie
{'type': 'object', 'title': 'parlayapi_consensusDictOutput', 'additionalProperties': True}
parlayapi_find_arbitrage
Find guaranteed-profit arbitrage opportunities across bookmakers. Scans every event and returns bets where the combined implied probability across the books is under 100%, so betting each side locks in profit regardless of outcome. Soccer and other 3-way (home/draw/away) markets are fully supported, including arbs anchored on the draw. Args: sport_key: e.g. "baseball_mlb", "soccer_epl". min_profit: Minimum profit % to include (e.g. 1.5 for 1.5%). Default 0. exclude_exchanges: Drop arbs anchored on an exchange (novig/prophetx), whose asks can be no-volume. Default False. markets: Comma-separated market_keys to limit the scan (optional), e.g. "h2h,spreads,totals".
Schéma d’entrée
{'type': 'object', 'title': 'parlayapi_find_arbitrageArguments', 'required': ['sport_key'], 'properties': {'markets': {'type': 'string', 'title': 'Markets', 'default': ''}, 'sport_key': {'type': 'string', 'title': 'Sport Key'}, 'min_profit': {'type': 'number', 'title': 'Min Profit', 'default': 0.0}, 'exclude_exchanges': {'type': 'boolean', 'title': 'Exclude Exchanges', 'default': False}}}
Schéma de sortie
{'type': 'object', 'title': 'parlayapi_find_arbitrageDictOutput', 'additionalProperties': True}
parlayapi_find_ev
Find positive-EV bets vs a sharp book's no-vig fair line. Compares every soft book's price against the no-vig fair probability derived from a sharp book (default Pinnacle); rows where a soft book offers better odds than the sharp fair price are +EV. Three-way soccer markets use a dedicated no-vig pass over home/draw/away, so +EV on the draw surfaces too. Args: sport_key: e.g. "baseball_mlb", "soccer_epl". sharp_book: Sharp baseline book. Default "pinnacle". min_edge: Minimum edge % to include (e.g. 3 for 3%). Default 2. markets: Comma-separated market_keys (optional).
Schéma d’entrée
{'type': 'object', 'title': 'parlayapi_find_evArguments', 'required': ['sport_key'], 'properties': {'markets': {'type': 'string', 'title': 'Markets', 'default': ''}, 'min_edge': {'type': 'number', 'title': 'Min Edge', 'default': 2.0}, 'sport_key': {'type': 'string', 'title': 'Sport Key'}, 'sharp_book': {'type': 'string', 'title': 'Sharp Book', 'default': 'pinnacle'}}}
Schéma de sortie
{'type': 'object', 'title': 'parlayapi_find_evDictOutput', 'additionalProperties': True}
parlayapi_find_middles
Find cross-book middle opportunities. A middle takes the Over at a low line on one book and the Under at a higher line on another, so a window of whole numbers cashes BOTH bets (e.g. Over 7.5 at one book, Under 9.5 at another means 8 or 9 wins both). Scans game totals, spreads, AND player-total props (points, rebounds, strikeouts, ...). Each result carries the window, the numbers that hit, and per-$100 economics: profit_if_hit and net_if_above/below_window. Args: sport_key: e.g. "baseball_mlb", "basketball_nba". min_gap: Minimum window width in points/runs/goals. Default 1.0. markets: Comma-separated market_keys to limit the scan (optional), e.g. "totals" or "player_points". include_props: Include player-total props alongside game lines. Default True.
Schéma d’entrée
{'type': 'object', 'title': 'parlayapi_find_middlesArguments', 'required': ['sport_key'], 'properties': {'markets': {'type': 'string', 'title': 'Markets', 'default': ''}, 'min_gap': {'type': 'number', 'title': 'Min Gap', 'default': 1.0}, 'sport_key': {'type': 'string', 'title': 'Sport Key'}, 'include_props': {'type': 'boolean', 'title': 'Include Props', 'default': True}}}
Schéma de sortie
{'type': 'object', 'title': 'parlayapi_find_middlesDictOutput', 'additionalProperties': True}
parlayapi_get_odds
Get game-level odds for a sport from all configured bookmakers. Args: sport_key: e.g. "baseball_mlb", "soccer_epl" markets: Comma-separated. h2h, spreads, totals. regions: us, us2, uk, eu, fr, au, ca, mx, latam, br, asia. Comma-separated for multiple. bookmakers: Comma-separated bookmaker keys (optional). Examples: pinnacle, draftkings, fanduel, bovada, caesars. odds_format: decimal | american
Schéma d’entrée
{'type': 'object', 'title': 'parlayapi_get_oddsArguments', 'required': ['sport_key'], 'properties': {'markets': {'type': 'string', 'title': 'Markets', 'default': 'h2h'}, 'regions': {'type': 'string', 'title': 'Regions', 'default': 'us'}, 'sport_key': {'type': 'string', 'title': 'Sport Key'}, 'bookmakers': {'type': 'string', 'title': 'Bookmakers', 'default': ''}, 'odds_format': {'type': 'string', 'title': 'Odds Format', 'default': 'decimal'}}}
Schéma de sortie
{'type': 'object', 'title': 'parlayapi_get_oddsDictOutput', 'additionalProperties': True}
parlayapi_get_pricing
Return the current public pricing table. No API key required. Use this when an agent needs to explain which tier unlocks a workflow before sending a checkout link.
Schéma d’entrée
{'type': 'object', 'title': 'parlayapi_get_pricingArguments', 'properties': {}}
Schéma de sortie
{'type': 'object', 'title': 'parlayapi_get_pricingDictOutput', 'additionalProperties': True}
parlayapi_get_props
Get player prop odds for a sport. Args: sport_key: e.g. "baseball_mlb", "basketball_nba" markets: Comma-separated prop market keys (optional). Examples: player_points, player_rebounds, player_strikeouts, player_passing_yards, player_total_bases. bookmakers: Comma-separated. Examples: prizepicks, underdog, sleeper, draftkings, fanduel. player: Filter to props mentioning this player name. include_futures: Include season-long futures (default False).
Schéma d’entrée
{'type': 'object', 'title': 'parlayapi_get_propsArguments', 'required': ['sport_key'], 'properties': {'player': {'type': 'string', 'title': 'Player', 'default': ''}, 'markets': {'type': 'string', 'title': 'Markets', 'default': ''}, 'sport_key': {'type': 'string', 'title': 'Sport Key'}, 'bookmakers': {'type': 'string', 'title': 'Bookmakers', 'default': ''}, 'include_futures': {'type': 'boolean', 'title': 'Include Futures', 'default': False}}}
Schéma de sortie
{'type': 'object', 'title': 'parlayapi_get_propsDictOutput', 'additionalProperties': True}
parlayapi_list_sports
List available sport keys. Use these in subsequent calls. Examples: baseball_mlb, basketball_nba, americanfootball_nfl, icehockey_nhl, soccer_epl, mma_ufc, esports_lol, table_tennis_*.
Schéma d’entrée
{'type': 'object', 'title': 'parlayapi_list_sportsArguments', 'properties': {'active_only': {'type': 'boolean', 'title': 'Active Only', 'default': True}}}
Schéma de sortie
{'type': 'object', 'title': 'parlayapi_list_sportsOutput', 'required': ['result'], 'properties': {'result': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}, 'title': 'Result'}}}
parlayapi_live_command_center
Return the public best-line command center payload. No API key required. Shows current games, participating books, and best available real prices on the /live dashboard preview. This is a discovery and demo surface, not a substitute for the paid odds endpoints.
Schéma d’entrée
{'type': 'object', 'title': 'parlayapi_live_command_centerArguments', 'properties': {'limit': {'type': 'integer', 'title': 'Limit', 'default': 12}, 'sport_key': {'type': 'string', 'title': 'Sport Key', 'default': ''}}}
Schéma de sortie
{'type': 'object', 'title': 'parlayapi_live_command_centerDictOutput', 'additionalProperties': True}
parlayapi_live_search
Search live teams, players, and sport keys. No API key required. Useful when the user asks for a team, player, or league by natural-language name and the agent needs the exact sport_key to call next.
Schéma d’entrée
{'type': 'object', 'title': 'parlayapi_live_searchArguments', 'required': ['q'], 'properties': {'q': {'type': 'string', 'title': 'Q'}, 'limit': {'type': 'integer', 'title': 'Limit', 'default': 25}}}
Schéma de sortie
{'type': 'object', 'title': 'parlayapi_live_searchDictOutput', 'additionalProperties': True}
parlayapi_live_sports
List currently active live sports on the retail /live surface. No API key required. Returns sport keys plus live event and book counts so agents can discover what is active right now.
Schéma d’entrée
{'type': 'object', 'title': 'parlayapi_live_sportsArguments', 'properties': {}}
Schéma de sortie
{'type': 'object', 'title': 'parlayapi_live_sportsOutput', 'required': ['result'], 'properties': {'result': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}, 'title': 'Result'}}}
parlayapi_magic_link
Email a magic-login link for an existing ParlayAPI account. Always returns ok=true regardless of whether the email exists, to prevent account enumeration. The user receives the link by email.
Schéma d’entrée
{'type': 'object', 'title': 'parlayapi_magic_linkArguments', 'required': ['email'], 'properties': {'email': {'type': 'string', 'title': 'Email'}}}
Schéma de sortie
{'type': 'object', 'title': 'parlayapi_magic_linkDictOutput', 'additionalProperties': True}
parlayapi_parlay_verdict
Grade a multi-leg parlay: should you bet it, and at which book? Give 2 to 12 legs (each shaped like a parlayapi_verdict bet) and get the combined no-vig fair price, the single best BOOK to place the whole slip at (a real parlay is one slip, not best-of-each), the parlay's EV, the weakest leg, same-game correlation warnings, and (with stake) the payout. Best-price is scoped to books the user can bet at (set once via parlayapi_set_bettable_books, or pass region/books here). Args: legs: list of leg objects, e.g. [{"sport": "baseball_mlb", "home": "Detroit Tigers", "away": "Kansas City Royals", "market": "h2h", "side": "Detroit Tigers"}, {"sport": "baseball_mlb", "team": "Detroit Tigers", "market": "totals", "side": "over", "line": 8.5}] Each leg: sport, market (h2h/spreads/totals or a player-prop key), side (team, or over/under), home+away or team, player (for props), line. region: us (default) | eu | uk | au | ca. books: exact CSV of books you can bet at (overrides region). stake: optional stake amount, to compute the payout if it hits. book: optional, also report the parlay price at this specific book.
Schéma d’entrée
{'type': 'object', 'title': 'parlayapi_parlay_verdictArguments', 'required': ['legs'], 'properties': {'book': {'type': 'string', 'title': 'Book', 'default': ''}, 'legs': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}, 'title': 'Legs'}, 'books': {'type': 'string', 'title': 'Books', 'default': ''}, 'kelly': {'type': 'number', 'title': 'Kelly', 'default': 0.5}, 'stake': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'title': 'Stake', 'default': None}, 'region': {'type': 'string', 'title': 'Region', 'default': ''}, 'bankroll': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'title': 'Bankroll', 'default': None}}}
Schéma de sortie
{'type': 'object', 'title': 'parlayapi_parlay_verdictDictOutput', 'additionalProperties': True}
parlayapi_set_bettable_books
Remember which books the user can bet at, so parlayapi_verdict scopes its best-price and shop recommendations to them automatically (no need to pass region/books every call). Call this once when a user tells you where they bet ("I'm in the US on DraftKings and FanDuel"). Pass region OR an exact books list. Args: region: us | eu | uk | au | ca. books: exact CSV of book keys, e.g. "draftkings,fanduel,novig". Overrides region.
Schéma d’entrée
{'type': 'object', 'title': 'parlayapi_set_bettable_booksArguments', 'properties': {'books': {'type': 'string', 'title': 'Books', 'default': ''}, 'region': {'type': 'string', 'title': 'Region', 'default': ''}}}
Schéma de sortie
{'type': 'object', 'title': 'parlayapi_set_bettable_booksDictOutput', 'additionalProperties': True}
parlayapi_signup
Create a free-tier ParlayAPI account for the given email. Returns the API key, a magic-login URL the user can click to access their dashboard, and a Stripe upgrade URL. Idempotent: if the email already has an account, returns exists=true with the login URL only (the existing API key is intentionally NOT exposed for security). Use this when a user wants to start building with ParlayAPI and does not have a key yet. After signup, ask the user to add the returned api_key to their MCP server config under PARLAYAPI_KEY, then restart the MCP client to pick it up. Args: email: User's email address. intended_use: Optional one-line description of what they're building. Used for analytics. agent_id: Identifier for the agent making the call. Defaults to "mcp-client".
Schéma d’entrée
{'type': 'object', 'title': 'parlayapi_signupArguments', 'required': ['email'], 'properties': {'email': {'type': 'string', 'title': 'Email'}, 'agent_id': {'type': 'string', 'title': 'Agent Id', 'default': 'mcp-client'}, 'intended_use': {'type': 'string', 'title': 'Intended Use', 'default': ''}}}
Schéma de sortie
{'type': 'object', 'title': 'parlayapi_signupDictOutput', 'additionalProperties': True}
parlayapi_source_quality
Return public per-source freshness and quality metadata. No API key required. Use this to prove that rows are flowing from each source before choosing books for a customer workflow.
Schéma d’entrée
{'type': 'object', 'title': 'parlayapi_source_qualityArguments', 'properties': {'limit': {'type': 'integer', 'title': 'Limit', 'default': 40}, 'minutes': {'type': 'integer', 'title': 'Minutes', 'default': 10}}}
Schéma de sortie
{'type': 'object', 'title': 'parlayapi_source_qualityDictOutput', 'additionalProperties': True}
parlayapi_verdict
Should I bet this? One-call verdict for a specific bet. Returns the no-vig fair price for the exact bet, the best available price and which book has it, how the user's price (if given) grades as EV, a line-shopping nudge, and a plain-English call: BET / LEAN / FAIR / PASS (or NO_DATA). Use this when a user asks whether a specific bet is worth making, or whether they're getting a good number, instead of stitching /ev + /consensus + /best-line yourself. The best-price / shop recommendation is scoped to books the user can bet at (default US, so a US bettor is never told to use a euro book). Set it once with parlayapi_set_bettable_books and it is remembered per key, or pass region / books here per call. Args: sport: sport_key, e.g. "baseball_mlb". side: the team you'd bet (h2h / spreads), or "over" / "under" (totals / props). market: h2h | spreads | totals | a player-prop key (player_hits, player_points, ...). home, away: the two teams, to identify the game. Or pass `team` with one name. team: one team name to find the game (alternative to home + away). player: player name (required for player-prop markets). line: the number for spreads, totals, or props. book: the book you'd bet at (grades that book's current price). price: the price you're offered (American like -110, or decimal like 1.91). Overrides `book`, use it to grade a specific number in hand. region: where you can bet: us (default) | eu | uk | au | ca. books: exact CSV of books you can bet at (overrides region; use for state-level geo-blocks, e.g. "draftkings,fanduel,novig"). bankroll: the user's bankroll; when the bet is +EV, returns a suggested Kelly stake amount ("bet it, ~$X"). kelly: Kelly fraction (default 0.5 = half-Kelly, the bankroll-safe standard). The response also carries an `edge_alert` when a book shows a price far better than the market (a possible soft error worth grabbing, or a stale line to verify) that the normal best-price guard would otherwise hide.
Schéma d’entrée
{'type': 'object', 'title': 'parlayapi_verdictArguments', 'required': ['sport', 'side'], 'properties': {'away': {'type': 'string', 'title': 'Away', 'default': ''}, 'book': {'type': 'string', 'title': 'Book', 'default': ''}, 'home': {'type': 'string', 'title': 'Home', 'default': ''}, 'line': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'title': 'Line', 'default': None}, 'side': {'type': 'string', 'title': 'Side'}, 'team': {'type': 'string', 'title': 'Team', 'default': ''}, 'books': {'type': 'string', 'title': 'Books', 'default': ''}, 'kelly': {'type': 'number', 'title': 'Kelly', 'default': 0.5}, 'price': {'type': 'string', 'title': 'Price', 'default': ''}, 'sport': {'type': 'string', 'title': 'Sport'}, 'market': {'type': 'string', 'title': 'Market', 'default': 'h2h'}, 'player': {'type': 'string', 'title': 'Player', 'default': ''}, 'region': {'type': 'string', 'title': 'Region', 'default': ''}, 'bankroll': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'title': 'Bankroll', 'default': None}}}
Schéma de sortie
{'type': 'object', 'title': 'parlayapi_verdictDictOutput', 'additionalProperties': True}
Ajouté
parlayapi_find_middles
17 September 2026 12:42
Ajouté
parlayapi_consensus
17 September 2026 12:42
Ajouté
parlayapi_find_ev
17 September 2026 12:42
Ajouté
parlayapi_find_arbitrage
17 September 2026 12:42
Ajouté
parlayapi_account_info
17 September 2026 12:42
Ajouté
parlayapi_best_bets
17 September 2026 12:42
Ajouté
parlayapi_parlay_verdict
17 September 2026 12:42
Ajouté
parlayapi_set_bettable_books
17 September 2026 12:42
Ajouté
parlayapi_verdict
17 September 2026 12:42
Ajouté
parlayapi_best_line
17 September 2026 12:42
Ajouté
parlayapi_get_props
17 September 2026 12:42
Ajouté
parlayapi_get_odds
17 September 2026 12:42
Ajouté
parlayapi_list_sports
17 September 2026 12:42
Ajouté
parlayapi_book_coverage
17 September 2026 12:42
Ajouté
parlayapi_source_quality
17 September 2026 12:42
Ajouté
parlayapi_live_command_center
17 September 2026 12:42
Ajouté
parlayapi_live_search
17 September 2026 12:42
Ajouté
parlayapi_live_sports
17 September 2026 12:42
Ajouté
parlayapi_get_pricing
17 September 2026 12:42
Ajouté
parlayapi_magic_link
17 September 2026 12:42
Ajouté
parlayapi_checkout_link
17 September 2026 12:42
Ajouté
parlayapi_signup
17 September 2026 12:42