{"name":"io.github.JacobiusMakes/parlayapi","slug":"jacobiusmakes-parlayapi","title":"ParlayAPI","description":"Sports odds, player props and source coverage for AI assistants. Connect with your own API key.","url":"https://mcp.market/server/jacobiusmakes-parlayapi","rating":null,"grade":"A","score":86,"certified":false,"status":"active","category":"other","tags":[],"presence":{"score":33,"stars":0,"forks":0,"downloads_week":86,"last_push_at":"2026-09-18T22:04:45.000Z","license":"MIT"},"uptime":{"percent":100,"checks":6,"ok":6,"last_checked_at":"2026-09-20T21:41:38.926Z","last_ok_at":"2026-09-20T21:41:38.926Z","latency_ms":512},"claimed":false,"transport":"mixed","callable_via_gateway":true,"default_price_micros":0,"repository":"https://github.com/JacobiusMakes/parlay-api-mcp","website":"https://parlay-api.com/mcp","version":"0.3.7","remotes":[{"type":"streamable-http","url":"https://parlay-api.com/mcp/http","headers":[{"description":"Bearer <your ParlayAPI key>. Optional for public discovery and pricing; use your own key for account data and full odds access.","isSecret":true,"name":"Authorization"}]}],"packages":[{"registryType":"pypi","identifier":"parlayapi-mcp","version":"0.3.7","transport":{"type":"stdio"},"environmentVariables":[{"description":"Your ParlayAPI key. Optional for public discovery and pricing; required for account data and full odds access.","isSecret":true,"name":"PARLAYAPI_KEY"}]}],"tools":[{"name":"parlayapi_account_info","description":"Get info about the API key currently in use: tier, credits\n    remaining, billing period.\n    ","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"title":"parlayapi_account_infoArguments"}},{"name":"parlayapi_best_bets","description":"What should I bet right now? Ranked +EV plays for a sport.\n\n    The discovery counterpart to parlayapi_verdict: scans the whole board,\n    grades every candidate with the same no-vig engine, keeps only bets that\n    are +EV at a book the user can bet at, and ranks them by edge. Also returns\n    edge_alerts (books showing a price far off the market). Player props only,\n    priced by several books, prediction markets and game moneylines excluded\n    (for a game line, use parlayapi_verdict). Scoped to the user's books.\n\n    Args:\n        sport_key: e.g. \"baseball_mlb\".\n        region: us (default) | eu | uk | au | ca.\n        books: exact CSV of books you can bet at (overrides region).\n        limit: max plays to return (default 20).\n        min_edge: minimum edge %% vs the no-vig fair line (default 2.0).\n    ","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"sport_key":{"title":"Sport Key","type":"string"},"region":{"default":"","title":"Region","type":"string"},"books":{"default":"","title":"Books","type":"string"},"limit":{"default":20,"title":"Limit","type":"integer"},"min_edge":{"default":2,"title":"Min Edge","type":"number"}},"required":["sport_key"],"title":"parlayapi_best_betsArguments"}},{"name":"parlayapi_best_line","description":"Find the best (highest) price for each outcome across bookmakers.\n\n    Useful for line-shopping bots. Returns one row per game / market /\n    side with the bookmaker offering the best price.\n\n    Args:\n        sport_key: e.g. \"baseball_mlb\"\n        market: h2h | spreads | totals\n        bookmakers: Restrict the search to these books (optional).\n    ","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"sport_key":{"title":"Sport Key","type":"string"},"market":{"default":"h2h","title":"Market","type":"string"},"bookmakers":{"default":"","title":"Bookmakers","type":"string"}},"required":["sport_key"],"title":"parlayapi_best_lineArguments"}},{"name":"parlayapi_book_coverage","description":"Return public per-book coverage gates.\n\n    No API key required. This is the proof surface for whether each\n    source survives freshness, normalization, database, REST-shape, and\n    stream-shape checks.\n    ","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"window_minutes":{"default":15,"title":"Window Minutes","type":"integer"},"include_warn":{"default":true,"title":"Include Warn","type":"boolean"}},"title":"parlayapi_book_coverageArguments"}},{"name":"parlayapi_checkout_link","description":"Generate a Stripe Checkout URL the user can click to upgrade.\n\n    Tiers: starter ($5), pro ($20), business ($40), enterprise ($100),\n    scale ($200). All are monthly subscriptions.\n    ","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"email":{"title":"Email","type":"string"},"tier":{"default":"pro","title":"Tier","type":"string"}},"required":["email"],"title":"parlayapi_checkout_linkArguments"}},{"name":"parlayapi_consensus","description":"Get consensus (average) odds across all bookmakers per market.\n\n    Returns average, best, and worst price per (event, market, player,\n    line), a sharp baseline for line-shopping. Soccer and other 3-way\n    markets return separate home, draw, and away consensus rows.\n\n    Args:\n        sport_key: e.g. \"baseball_mlb\", \"soccer_epl\".\n        markets: Comma-separated market_keys (optional), e.g. \"moneyline,totals\".\n    ","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"sport_key":{"title":"Sport Key","type":"string"},"markets":{"default":"","title":"Markets","type":"string"}},"required":["sport_key"],"title":"parlayapi_consensusArguments"}},{"name":"parlayapi_find_arbitrage","description":"Find guaranteed-profit arbitrage opportunities across bookmakers.\n\n    Scans every event and returns bets where the combined implied\n    probability across the books is under 100%, so betting each side locks\n    in profit regardless of outcome. Soccer and other 3-way (home/draw/away)\n    markets are fully supported, including arbs anchored on the draw.\n\n    Args:\n        sport_key: e.g. \"baseball_mlb\", \"soccer_epl\".\n        min_profit: Minimum profit % to include (e.g. 1.5 for 1.5%). Default 0.\n        exclude_exchanges: Drop arbs anchored on an exchange (novig/prophetx),\n            whose asks can be no-volume. Default False.\n        markets: Comma-separated market_keys to limit the scan (optional),\n            e.g. \"h2h,spreads,totals\".\n    ","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"sport_key":{"title":"Sport Key","type":"string"},"min_profit":{"default":0,"title":"Min Profit","type":"number"},"exclude_exchanges":{"default":false,"title":"Exclude Exchanges","type":"boolean"},"markets":{"default":"","title":"Markets","type":"string"}},"required":["sport_key"],"title":"parlayapi_find_arbitrageArguments"}},{"name":"parlayapi_find_ev","description":"Find positive-EV bets vs a sharp book's no-vig fair line.\n\n    Compares every soft book's price against the no-vig fair probability\n    derived from a sharp book (default Pinnacle); rows where a soft book\n    offers better odds than the sharp fair price are +EV. Three-way soccer\n    markets use a dedicated no-vig pass over home/draw/away, so +EV on the\n    draw surfaces too.\n\n    Args:\n        sport_key: e.g. \"baseball_mlb\", \"soccer_epl\".\n        sharp_book: Sharp baseline book. Default \"pinnacle\".\n        min_edge: Minimum edge % to include (e.g. 3 for 3%). Default 2.\n        markets: Comma-separated market_keys (optional).\n    ","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"sport_key":{"title":"Sport Key","type":"string"},"sharp_book":{"default":"pinnacle","title":"Sharp Book","type":"string"},"min_edge":{"default":2,"title":"Min Edge","type":"number"},"markets":{"default":"","title":"Markets","type":"string"}},"required":["sport_key"],"title":"parlayapi_find_evArguments"}},{"name":"parlayapi_find_middles","description":"Find cross-book middle opportunities.\n\n    A middle takes the Over at a low line on one book and the Under at a\n    higher line on another, so a window of whole numbers cashes BOTH bets\n    (e.g. Over 7.5 at one book, Under 9.5 at another means 8 or 9 wins both).\n    Scans game totals, spreads, AND player-total props (points, rebounds,\n    strikeouts, ...). Each result carries the window, the numbers that hit,\n    and per-$100 economics: profit_if_hit and net_if_above/below_window.\n\n    Args:\n        sport_key: e.g. \"baseball_mlb\", \"basketball_nba\".\n        min_gap: Minimum window width in points/runs/goals. Default 1.0.\n        markets: Comma-separated market_keys to limit the scan (optional),\n            e.g. \"totals\" or \"player_points\".\n        include_props: Include player-total props alongside game lines. Default True.\n    ","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"sport_key":{"title":"Sport Key","type":"string"},"min_gap":{"default":1,"title":"Min Gap","type":"number"},"markets":{"default":"","title":"Markets","type":"string"},"include_props":{"default":true,"title":"Include Props","type":"boolean"}},"required":["sport_key"],"title":"parlayapi_find_middlesArguments"}},{"name":"parlayapi_get_odds","description":"Get game-level odds for a sport from all configured bookmakers.\n\n    Args:\n        sport_key: e.g. \"baseball_mlb\", \"soccer_epl\"\n        markets: Comma-separated. h2h, spreads, totals.\n        regions: us, us2, uk, eu, fr, au, ca, mx, latam, br, asia. Comma-separated for multiple.\n        bookmakers: Comma-separated bookmaker keys (optional).\n            Examples: pinnacle, draftkings, fanduel, bovada, caesars.\n        odds_format: decimal | american\n    ","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"sport_key":{"title":"Sport Key","type":"string"},"markets":{"default":"h2h","title":"Markets","type":"string"},"regions":{"default":"us","title":"Regions","type":"string"},"bookmakers":{"default":"","title":"Bookmakers","type":"string"},"odds_format":{"default":"decimal","title":"Odds Format","type":"string"}},"required":["sport_key"],"title":"parlayapi_get_oddsArguments"}},{"name":"parlayapi_get_pricing","description":"Return the current public pricing table.\n\n    No API key required. Use this when an agent needs to explain which\n    tier unlocks a workflow before sending a checkout link.\n    ","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"title":"parlayapi_get_pricingArguments"}},{"name":"parlayapi_get_props","description":"Get player prop odds for a sport.\n\n    Args:\n        sport_key: e.g. \"baseball_mlb\", \"basketball_nba\"\n        markets: Comma-separated prop market keys (optional).\n            Examples: player_points, player_rebounds, player_strikeouts,\n            player_passing_yards, player_total_bases.\n        bookmakers: Comma-separated. Examples: prizepicks, underdog,\n            sleeper, draftkings, fanduel.\n        player: Filter to props mentioning this player name.\n        include_futures: Include season-long futures (default False).\n    ","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"sport_key":{"title":"Sport Key","type":"string"},"markets":{"default":"","title":"Markets","type":"string"},"bookmakers":{"default":"","title":"Bookmakers","type":"string"},"player":{"default":"","title":"Player","type":"string"},"include_futures":{"default":false,"title":"Include Futures","type":"boolean"}},"required":["sport_key"],"title":"parlayapi_get_propsArguments"}},{"name":"parlayapi_list_sports","description":"List available sport keys. Use these in subsequent calls.\n\n    Examples: baseball_mlb, basketball_nba, americanfootball_nfl,\n    icehockey_nhl, soccer_epl, mma_ufc, esports_lol, table_tennis_*.\n    ","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"active_only":{"default":true,"title":"Active Only","type":"boolean"}},"title":"parlayapi_list_sportsArguments"}},{"name":"parlayapi_live_command_center","description":"Return the public best-line command center payload.\n\n    No API key required. Shows current games, participating books, and\n    best available real prices on the /live dashboard preview. This is\n    a discovery and demo surface, not a substitute for the paid odds\n    endpoints.\n    ","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"sport_key":{"default":"","title":"Sport Key","type":"string"},"limit":{"default":12,"title":"Limit","type":"integer"}},"title":"parlayapi_live_command_centerArguments"}},{"name":"parlayapi_live_search","description":"Search live teams, players, and sport keys.\n\n    No API key required. Useful when the user asks for a team, player,\n    or league by natural-language name and the agent needs the exact\n    sport_key to call next.\n    ","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"q":{"title":"Q","type":"string"},"limit":{"default":25,"title":"Limit","type":"integer"}},"required":["q"],"title":"parlayapi_live_searchArguments"}},{"name":"parlayapi_live_sports","description":"List currently active live sports on the retail /live surface.\n\n    No API key required. Returns sport keys plus live event and book\n    counts so agents can discover what is active right now.\n    ","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"title":"parlayapi_live_sportsArguments"}},{"name":"parlayapi_magic_link","description":"Email a magic-login link for an existing ParlayAPI account.\n\n    Always returns ok=true regardless of whether the email exists, to\n    prevent account enumeration. The user receives the link by email.\n    ","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"email":{"title":"Email","type":"string"}},"required":["email"],"title":"parlayapi_magic_linkArguments"}},{"name":"parlayapi_parlay_verdict","description":"Grade a multi-leg parlay: should you bet it, and at which book?\n\n    Give 2 to 12 legs (each shaped like a parlayapi_verdict bet) and get the\n    combined no-vig fair price, the single best BOOK to place the whole slip at\n    (a real parlay is one slip, not best-of-each), the parlay's EV, the weakest\n    leg, same-game correlation warnings, and (with stake) the payout. Best-price\n    is scoped to books the user can bet at (set once via\n    parlayapi_set_bettable_books, or pass region/books here).\n\n    Args:\n        legs: list of leg objects, e.g.\n            [{\"sport\": \"baseball_mlb\", \"home\": \"Detroit Tigers\",\n              \"away\": \"Kansas City Royals\", \"market\": \"h2h\", \"side\": \"Detroit Tigers\"},\n             {\"sport\": \"baseball_mlb\", \"team\": \"Detroit Tigers\",\n              \"market\": \"totals\", \"side\": \"over\", \"line\": 8.5}]\n            Each leg: sport, market (h2h/spreads/totals or a player-prop key),\n            side (team, or over/under), home+away or team, player (for props), line.\n        region: us (default) | eu | uk | au | ca.\n        books: exact CSV of books you can bet at (overrides region).\n        stake: optional stake amount, to compute the payout if it hits.\n        book: optional, also report the parlay price at this specific book.\n    ","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"legs":{"items":{"additionalProperties":true,"type":"object"},"title":"Legs","type":"array"},"region":{"default":"","title":"Region","type":"string"},"books":{"default":"","title":"Books","type":"string"},"stake":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"title":"Stake"},"book":{"default":"","title":"Book","type":"string"},"bankroll":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"title":"Bankroll"},"kelly":{"default":0.5,"title":"Kelly","type":"number"}},"required":["legs"],"title":"parlayapi_parlay_verdictArguments"}},{"name":"parlayapi_set_bettable_books","description":"Remember which books the user can bet at, so parlayapi_verdict scopes its\n    best-price and shop recommendations to them automatically (no need to pass\n    region/books every call).\n\n    Call this once when a user tells you where they bet (\"I'm in the US on\n    DraftKings and FanDuel\"). Pass region OR an exact books list.\n\n    Args:\n        region: us | eu | uk | au | ca.\n        books: exact CSV of book keys, e.g. \"draftkings,fanduel,novig\". Overrides region.\n    ","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"region":{"default":"","title":"Region","type":"string"},"books":{"default":"","title":"Books","type":"string"}},"title":"parlayapi_set_bettable_booksArguments"}},{"name":"parlayapi_signup","description":"Create a free-tier ParlayAPI account for the given email.\n\n    Returns the API key, a magic-login URL the user can click to access\n    their dashboard, and a Stripe upgrade URL. Idempotent: if the email\n    already has an account, returns exists=true with the login URL only\n    (the existing API key is intentionally NOT exposed for security).\n\n    Use this when a user wants to start building with ParlayAPI and\n    does not have a key yet. After signup, ask the user to add the\n    returned api_key to their MCP server config under PARLAYAPI_KEY,\n    then restart the MCP client to pick it up.\n\n    Args:\n        email: User's email address.\n        intended_use: Optional one-line description of what they're\n            building. Used for analytics.\n        agent_id: Identifier for the agent making the call. Defaults\n            to \"mcp-client\".\n    ","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"email":{"title":"Email","type":"string"},"intended_use":{"default":"","title":"Intended Use","type":"string"},"agent_id":{"default":"mcp-client","title":"Agent Id","type":"string"}},"required":["email"],"title":"parlayapi_signupArguments"}},{"name":"parlayapi_source_quality","description":"Return public per-source freshness and quality metadata.\n\n    No API key required. Use this to prove that rows are flowing from\n    each source before choosing books for a customer workflow.\n    ","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"minutes":{"default":10,"title":"Minutes","type":"integer"},"limit":{"default":40,"title":"Limit","type":"integer"}},"title":"parlayapi_source_qualityArguments"}},{"name":"parlayapi_verdict","description":"Should I bet this? One-call verdict for a specific bet.\n\n    Returns the no-vig fair price for the exact bet, the best available price\n    and which book has it, how the user's price (if given) grades as EV, a\n    line-shopping nudge, and a plain-English call: BET / LEAN / FAIR / PASS\n    (or NO_DATA). Use this when a user asks whether a specific bet is worth\n    making, or whether they're getting a good number, instead of stitching\n    /ev + /consensus + /best-line yourself.\n\n    The best-price / shop recommendation is scoped to books the user can bet\n    at (default US, so a US bettor is never told to use a euro book). Set it\n    once with parlayapi_set_bettable_books and it is remembered per key, or\n    pass region / books here per call.\n\n    Args:\n        sport: sport_key, e.g. \"baseball_mlb\".\n        side: the team you'd bet (h2h / spreads), or \"over\" / \"under\" (totals / props).\n        market: h2h | spreads | totals | a player-prop key (player_hits, player_points, ...).\n        home, away: the two teams, to identify the game. Or pass `team` with one name.\n        team: one team name to find the game (alternative to home + away).\n        player: player name (required for player-prop markets).\n        line: the number for spreads, totals, or props.\n        book: the book you'd bet at (grades that book's current price).\n        price: the price you're offered (American like -110, or decimal like 1.91).\n            Overrides `book`, use it to grade a specific number in hand.\n        region: where you can bet: us (default) | eu | uk | au | ca.\n        books: exact CSV of books you can bet at (overrides region; use for\n            state-level geo-blocks, e.g. \"draftkings,fanduel,novig\").\n        bankroll: the user's bankroll; when the bet is +EV, returns a suggested\n            Kelly stake amount (\"bet it, ~$X\").\n        kelly: Kelly fraction (default 0.5 = half-Kelly, the bankroll-safe standard).\n\n    The response also carries an `edge_alert` when a book shows a price far\n    better than the market (a possible soft error worth grabbing, or a stale\n    line to verify) that the normal best-price guard would otherwise hide.\n    ","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"sport":{"title":"Sport","type":"string"},"side":{"title":"Side","type":"string"},"market":{"default":"h2h","title":"Market","type":"string"},"home":{"default":"","title":"Home","type":"string"},"away":{"default":"","title":"Away","type":"string"},"team":{"default":"","title":"Team","type":"string"},"player":{"default":"","title":"Player","type":"string"},"line":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"title":"Line"},"book":{"default":"","title":"Book","type":"string"},"price":{"default":"","title":"Price","type":"string"},"region":{"default":"","title":"Region","type":"string"},"books":{"default":"","title":"Books","type":"string"},"bankroll":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"title":"Bankroll"},"kelly":{"default":0.5,"title":"Kelly","type":"number"}},"required":["sport","side"],"title":"parlayapi_verdictArguments"}}],"scan":{"score":86,"grade":"A","scanned_at":"2026-09-20T00:27:32.685Z","report":{"scannerVersion":"0.1.9","scannedAt":"2026-09-20T00:27:32.677Z","components":{"code":{"score":25,"max":25,"notes":["17 source files scanned"]},"reliability":{"score":17,"max":20,"notes":["remote reachable in 2170ms"]},"poisoning":{"score":13,"max":15,"notes":["22 tool descriptions checked"]},"auth":{"score":8,"max":15,"notes":["API key sent as a header"]},"maintenance":{"score":15,"max":15,"notes":["last push 1 days ago"]},"identity":{"score":8,"max":10,"notes":["registry namespace matches repository owner","GitHub account older than a year"]}},"findings":[{"id":"poison.long-description","severity":"low","component":"poisoning","title":"Unusually long tool description (over 2,000 characters)","evidence":"tool 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. …"}],"inputs":{"probes":[{"url":"https://parlay-api.com/mcp/http","reachable":true,"authRequired":false,"latencyMs":2170,"serverInfo":{"name":"parlayapi","version":""}}],"packages":[{"registryType":"pypi","identifier":"parlayapi-mcp","version":"0.3.7","found":true,"weeklyDownloads":86,"license":"MIT","dependencyCount":2,"publishedAt":"2026-09-07T12:46:10.352760Z","repositoryUrl":"https://github.com/JacobiusMakes/parlay-api-mcp"}],"repo":{"found":true,"owner":"JacobiusMakes","repo":"parlay-api-mcp","archived":false,"pushedAt":"2026-09-18T22:04:45Z","stars":0,"forks":0,"openIssues":1,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/201665664?v=4","ownerCreatedAt":"2025-03-03T23:29:10Z","license":"MIT"},"icon":{"url":"https://parlay-api.com/favicon.svg","source":"site"},"presence":{"stars":0,"forks":0,"downloadsWeek":86,"license":"MIT","lastPushAt":"2026-09-18T22:04:45.000Z","score":33}}}},"grade_history":[],"reviews":[]}