{"id":571964,"recorded_at":"2026-10-27T22:35:14.414424Z","observed_at":"2026-10-27T22:35:14.414330Z","subject_kind":"endpoint","subject":"a2cb122c-d9aa-4369-8d7c-bd668a74d1bd","kind":"mcp.tools","method":"probe.mcp/1","body":{"count":22,"tools":[{"description":"Get info about the API key currently in use: tier, credits\n    remaining, billing period.\n    ","inputSchema":{"properties":{},"title":"parlayapi_account_infoArguments","type":"object"},"name":"parlayapi_account_info"},{"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    ","inputSchema":{"properties":{"books":{"default":"","title":"Books","type":"string"},"limit":{"default":20,"title":"Limit","type":"integer"},"min_edge":{"default":2.0,"title":"Min Edge","type":"number"},"region":{"default":"","title":"Region","type":"string"},"sport_key":{"title":"Sport Key","type":"string"}},"required":["sport_key"],"title":"parlayapi_best_betsArguments","type":"object"},"name":"parlayapi_best_bets"},{"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    ","inputSchema":{"properties":{"bookmakers":{"default":"","title":"Bookmakers","type":"string"},"market":{"default":"h2h","title":"Market","type":"string"},"sport_key":{"title":"Sport Key","type":"string"}},"required":["sport_key"],"title":"parlayapi_best_lineArguments","type":"object"},"name":"parlayapi_best_line"},{"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    ","inputSchema":{"properties":{"include_warn":{"default":true,"title":"Include Warn","type":"boolean"},"window_minutes":{"default":15,"title":"Window Minutes","type":"integer"}},"title":"parlayapi_book_coverageArguments","type":"object"},"name":"parlayapi_book_coverage"},{"description":"Request an owner-authenticated checkout URL or an email-link flow.\n\n    A configured key is forwarded for the backend to verify account ownership.\n    With no matching key, the backend returns an email-flow acknowledgement\n    rather than a checkout URL. That response does not confirm email delivery.\n    Tiers: starter, pro, business, enterprise, scale. For current prices, call\n    parlayapi_get_pricing.\n    ","inputSchema":{"properties":{"email":{"title":"Email","type":"string"},"tier":{"default":"pro","title":"Tier","type":"string"}},"required":["email"],"title":"parlayapi_checkout_linkArguments","type":"object"},"name":"parlayapi_checkout_link"},{"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    ","inputSchema":{"properties":{"markets":{"default":"","title":"Markets","type":"string"},"sport_key":{"title":"Sport Key","type":"string"}},"required":["sport_key"],"title":"parlayapi_consensusArguments","type":"object"},"name":"parlayapi_consensus"},{"description":"Find cross-book arbitrage candidates from current quoted prices.\n\n    Scans every event for quoted prices whose combined implied probability\n    is under 100%. Results are candidates, not guaranteed executable profit:\n    prices can move or be unavailable, and limits, latency, commissions,\n    voids, settlement rules, or stake constraints can change the outcome.\n    Soccer and other 3-way (home/draw/away) markets are supported, including\n    candidates 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    ","inputSchema":{"properties":{"exclude_exchanges":{"default":false,"title":"Exclude Exchanges","type":"boolean"},"markets":{"default":"","title":"Markets","type":"string"},"min_profit":{"default":0.0,"title":"Min Profit","type":"number"},"sport_key":{"title":"Sport Key","type":"string"}},"required":["sport_key"],"title":"parlayapi_find_arbitrageArguments","type":"object"},"name":"parlayapi_find_arbitrage"},{"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    ","inputSchema":{"properties":{"markets":{"default":"","title":"Markets","type":"string"},"min_edge":{"default":2.0,"title":"Min Edge","type":"number"},"sharp_book":{"default":"pinnacle","title":"Sharp Book","type":"string"},"sport_key":{"title":"Sport Key","type":"string"}},"required":["sport_key"],"title":"parlayapi_find_evArguments","type":"object"},"name":"parlayapi_find_ev"},{"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    ","inputSchema":{"properties":{"include_props":{"default":true,"title":"Include Props","type":"boolean"},"markets":{"default":"","title":"Markets","type":"string"},"min_gap":{"default":1.0,"title":"Min Gap","type":"number"},"sport_key":{"title":"Sport Key","type":"string"}},"required":["sport_key"],"title":"parlayapi_find_middlesArguments","type":"object"},"name":"parlayapi_find_middles"},{"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    ","inputSchema":{"properties":{"bookmakers":{"default":"","title":"Bookmakers","type":"string"},"markets":{"default":"h2h","title":"Markets","type":"string"},"odds_format":{"default":"decimal","title":"Odds Format","type":"string"},"regions":{"default":"us","title":"Regions","type":"string"},"sport_key":{"title":"Sport Key","type":"string"}},"required":["sport_key"],"title":"parlayapi_get_oddsArguments","type":"object"},"name":"parlayapi_get_odds"},{"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    ","inputSchema":{"properties":{},"title":"parlayapi_get_pricingArguments","type":"object"},"name":"parlayapi_get_pricing"},{"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    ","inputSchema":{"properties":{"bookmakers":{"default":"","title":"Bookmakers","type":"string"},"include_futures":{"default":false,"title":"Include Futures","type":"boolean"},"markets":{"default":"","title":"Markets","type":"string"},"player":{"default":"","title":"Player","type":"string"},"sport_key":{"title":"Sport Key","type":"string"}},"required":["sport_key"],"title":"parlayapi_get_propsArguments","type":"object"},"name":"parlayapi_get_props"},{"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    ","inputSchema":{"properties":{"active_only":{"default":true,"title":"Active Only","type":"boolean"}},"title":"parlayapi_list_sportsArguments","type":"object"},"name":"parlayapi_list_sports"},{"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    ","inputSchema":{"properties":{"limit":{"default":12,"title":"Limit","type":"integer"},"sport_key":{"default":"","title":"Sport Key","type":"string"}},"title":"parlayapi_live_command_centerArguments","type":"object"},"name":"parlayapi_live_command_center"},{"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    ","inputSchema":{"properties":{"limit":{"default":25,"title":"Limit","type":"integer"},"q":{"title":"Q","type":"string"}},"required":["q"],"title":"parlayapi_live_searchArguments","type":"object"},"name":"parlayapi_live_search"},{"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    ","inputSchema":{"properties":{},"title":"parlayapi_live_sportsArguments","type":"object"},"name":"parlayapi_live_sports"},{"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    ","inputSchema":{"properties":{"email":{"title":"Email","type":"string"}},"required":["email"],"title":"parlayapi_magic_linkArguments","type":"object"},"name":"parlayapi_magic_link"},{"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    ","inputSchema":{"properties":{"bankroll":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"title":"Bankroll"},"book":{"default":"","title":"Book","type":"string"},"books":{"default":"","title":"Books","type":"string"},"kelly":{"default":0.5,"title":"Kelly","type":"number"},"legs":{"items":{"additionalProperties":true,"type":"object"},"title":"Legs","type":"array"},"region":{"default":"","title":"Region","type":"string"},"stake":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"title":"Stake"}},"required":["legs"],"title":"parlayapi_parlay_verdictArguments","type":"object"},"name":"parlayapi_parlay_verdict"},{"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    ","inputSchema":{"properties":{"books":{"default":"","title":"Books","type":"string"},"region":{"default":"","title":"Region","type":"string"}},"title":"parlayapi_set_bettable_booksArguments","type":"object"},"name":"parlayapi_set_bettable_books"},{"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    ","inputSchema":{"properties":{"agent_id":{"default":"mcp-client","title":"Agent Id","type":"string"},"email":{"title":"Email","type":"string"},"intended_use":{"default":"","title":"Intended Use","type":"string"}},"required":["email"],"title":"parlayapi_signupArguments","type":"object"},"name":"parlayapi_signup"},{"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    ","inputSchema":{"properties":{"limit":{"default":40,"title":"Limit","type":"integer"},"minutes":{"default":10,"title":"Minutes","type":"integer"}},"title":"parlayapi_source_qualityArguments","type":"object"},"name":"parlayapi_source_quality"},{"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    ","inputSchema":{"properties":{"away":{"default":"","title":"Away","type":"string"},"bankroll":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"title":"Bankroll"},"book":{"default":"","title":"Book","type":"string"},"books":{"default":"","title":"Books","type":"string"},"home":{"default":"","title":"Home","type":"string"},"kelly":{"default":0.5,"title":"Kelly","type":"number"},"line":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"title":"Line"},"market":{"default":"h2h","title":"Market","type":"string"},"player":{"default":"","title":"Player","type":"string"},"price":{"default":"","title":"Price","type":"string"},"region":{"default":"","title":"Region","type":"string"},"side":{"title":"Side","type":"string"},"sport":{"title":"Sport","type":"string"},"team":{"default":"","title":"Team","type":"string"}},"required":["sport","side"],"title":"parlayapi_verdictArguments","type":"object"},"name":"parlayapi_verdict"}]},"body_sha256":"724c91d1af46d769178509597552c721204aa0049d123e453dcff5b4e4d2bc70","prev_id":null,"leaf":"0xbfcba293a9d4d97e39f7f2b4d62da749eb3fe83c63048d687d9f8d143780852e","leaf_text":"{\"body\":\"724c91d1af46d769178509597552c721204aa0049d123e453dcff5b4e4d2bc70\",\"id\":571964,\"kind\":\"mcp.tools\",\"method\":\"probe.mcp/1\",\"observed_us\":1793140514414330,\"prev\":null,\"subject\":\"a2cb122c-d9aa-4369-8d7c-bd668a74d1bd\",\"subject_kind\":\"endpoint\"}","day":{"day":"2026-10-27","leaves":273461,"root":"0xdd77e5e99da32c3f154180d63e3c3e6fe11e896a2c6896412ef6b5c4bcf7e795","chained":"0x23bb4dfd09f55c15ac3962f53578e02c6114d5bfd9bb451cf8794fb6e2817ef4","anchor_chain":"eip155:5042002","anchor_tx":"0xb2ebd83aafeb765a0ce66e76aefb133ed06606c98038fd56191e2bcd1dcb77b4","anchor_block":69414147},"proof":["0xbfcbdbd25f4daedbf8153d7e35e6312a27aea1056fdcfcd4de2144a6cb623c74","0xdf8397ca4df2124ba293c36702d262423e08e06e8fde1a192690ae93bd806d1d","0x8920b1f96bccd6b20aec41df11284e3377b681bcde8e7c9433015d12f789d4bd","0x4199c0d440c9a80a89364177442d49cf1b24cc0f8e3ad623829f317159a30f40","0x7aec0c208d6a4bf206c9f1f4137a6a94bc78f83b4600f52db4ee9357e1a21f9f","0x4fe6d247ed641b3eb482b82799eb8010a21330b57626c0ab5b51ebc75eea778e","0x6ec8ae9c83c19a85aafc79007bd9bdb6963a859c1f29382a2a63d1bf88b6248a","0x236339c8675f3d10dd4314238afe91221ba49daf66c1dc6b239e2dd01f17af8b","0xdb9ada22557bd40a510737cddf7a6367b8873f0024d6c525882b7dd422d7e862","0xb5fae21243b8e42c37159af7bb9f4daf1fb6274634672a408ec1dcfbc0486940","0x7ff6a586e9498a807b90cc0724f36067102a7bfb70c439f694c884710ed4910a","0xa9bcdb8be937595e637058d98ed979d02cbac590262daa97def86c50ca63628b","0xb4800af1fe2ae822adba5c087faf1dc0bc2d7c9de2e3e602a2b65aefc1d53c94","0xa453d1738637a5c663802d07ce095aa340c80d53a4288ae277a72e265868ce4e","0x73341bb09dd901ca47f26173883431496e3d98d6b0fb5b89f36218126d46c5d4","0xa94627de1af0e823832e05a9069b304ecccb8c0cdb8f9cfc4f2039bfb9799dc5","0xdf1105afdc109de3c09a98fc8a3864159ad964e6f49b635c105a27a1e1f14310","0x2bf8151e5f157dd183b9de6fa00469551932a7a6e3f33a694895000ac9061197","0x9fc354c0ea3efc3f1b6548bb77ea902a50f2c9647647ea61592efce2bd795699"]}