Public leaderboard

Public assessment

proplineapi/propline-mcp (propline-mcp)

propline-mcp · v0.17.1 · scanned

What changed in the harness

Selection accuracy 100→100, token cost up 7%, unconfirmed writes 0%→0%.

Category breakdown

Where the score comes from.

Earned points across the four signals Gradable measures. Safety and Legibility are scored out of 30; Economics and Discoverability are scored out of 20.

01Safety

0.0 / 30

0.0 out of 30
02Legibility

24.5 / 30

24.5 out of 30
03Economics

17.4 / 20

17.4 out of 20
04Discoverability

10.6 / 20

10.6 out of 20

Highest-impact fix

Estimated gain +30 points

Add explicit identity and permission preflight tools

Expose machine-readable principal/tenant confirmation and a non-mutating permission check so agents can verify both before destructive actions.

Description evidence

Defects and rewrites.

13 defects found across the exposed tool descriptions. Suggested rewrites make purpose, inputs, boundaries, and returns easier for an agent to understand.

Tool Defect types Suggested rewrite
propline_list_event_markets
params_unexplained no_return_description
List the market types (e.g. h2h, spreads, totals, player_points, pitcher_strikeouts) available for a specific event. Pass sport_key (a valid key from propline_list_sports) and event_id (the event id returned by propline_list_events). Returns the set of market keys that event carries, so you know which prop markets to request with propline_get_odds.
propline_get_odds
params_unexplained
Get live odds for a sport. sport_key is a valid key from propline_list_sports (e.g. baseball_mlb, basketball_nba). If event_id is supplied, returns full per-event props for that event; otherwise returns bulk game-line odds for the whole sport. Pass markets as a comma-separated list (e.g. 'h2h,spreads,totals' or 'player_points,player_rebounds'). Response includes a bookmakers[] array across every book that carries the requested markets (currently up to 13: Bovada, DraftKings, FanDuel, Pinnacle, BetMGM, BetRivers, Unibet, Underdog, PrizePicks, Kalshi, Polymarket, Matchbook, Smarkets — coverage varies by sport). Underdog Fantasy outcomes carry a payout_multiplier (DFS boost/discount factor; null = standard pick, e.g. 1.5 = boost, 0.75 = discount) — skip non-null values when comparing DFS lines to sportsbook consensus.
propline_get_odds_history
params_unexplained
Hobby+ endpoint. Returns the historical line-movement snapshot series for an event (every recorded price/point change per outcome over the event's lifetime). sport_key is a valid key from propline_list_sports; event_id is the event id returned by propline_list_events; markets is a comma-separated list of market keys (e.g. 'h2h,spreads,totals', 'player_points') — omit to fetch all markets. Free tier returns market structure with redacted snapshots and an upgrade pointer. Supports period-historical filters: from/to (absolute ISO), relative_from/relative_to (offsets to commence_time like '-3h' or '0'), interval downsample ('30s'/'1m'/'5m'/'15m'/'30m'/'1h'), and changes_only=true to drop unchanged adjacent snapshots.
propline_get_odds_closing
params_unexplained
Hobby+ endpoint. Returns the closing line per (book, market, outcome) for an event — the last snapshot at or before commence_time. sport_key is a valid key from propline_list_sports; event_id is the event id returned by propline_list_events; markets is a comma-separated list of market keys (e.g. 'h2h,spreads,totals') — omit to fetch all markets. Canonical CLV-tracking helper; one call returns the data point your bet should be measured against, instead of fetching full history and post-processing. Each outcome carries a closing_at field with the snapshot's recorded_at. Free tier returns redacted structure with upgrade pointer.
propline_get_scores
params_unexplained
Free-tier endpoint. Returns recent and live game scores plus status (scheduled, live, final) for a sport. sport_key is a valid key from propline_list_sports (e.g. baseball_mlb, basketball_nba). Useful for: 'is this game over yet, what was the final score'.
propline_get_event_stats
params_unexplained
Book-agnostic raw box-score stats for a completed event. Pass sport_key (a valid key from propline_list_sports) and event_id (the id of a completed event from propline_list_events). Returns per-player stats (e.g. strikeouts, hits, points, rebounds, shots-on-goal) decoupled from any sportsbook's lines. Free tier.
propline_get_event_results
params_unexplained
Pro-tier endpoint. Returns graded prop outcomes for a completed event — every Over/Under marked won, lost, push, or void with the actual stat value next to the line. Pass sport_key (a valid key from propline_list_sports) and event_id (the id of a completed event from propline_list_events). The single most distinctive feature vs the-odds-api: they don't grade props at any tier. Free tier returns the same structure with resolution and actual_value redacted plus an upgrade pointer.
propline_get_event_context
params_unexplained
Game context for an event — the conditions a prop settles under. Pass sport_key (a valid key from propline_list_sports) and event_id (an event id from propline_list_events). MLB: probable starting pitchers and their throwing hand (L/R/S — platoon-split context for every batter prop), a confirmed-lineup flag, the home-plate umpire, and first-pitch weather (temperature, wind, precipitation) at outdoor / open-roof venues (indoor venues return weather=null). NFL & NCAAF: the venue and kickoff weather. The same block is embedded in get_event_results, so every graded prop carries its conditions — unique to PropLine. Free tier. 404 when no context is on file for the event yet.
propline_get_event_movement
params_unexplained
Line movement + steam detection from the snapshot tick history. Pass sport_key (a valid key from propline_list_sports) and event_id (an event id from propline_list_events). Per (book, market, outcome): opening line, latest line, signed implied-probability shift, point shift, direction. The steam[] array flags outcomes that multiple books moved the same direction — the classic sharp-money signal, computed across all 16 books PropLine polls. When a book moves the line itself, that outcome's prob_shift is null and direction is 'line_moved' (excluded from the steam signal). No pull-only odds API can produce this. Hobby+ full; free tier redacted.
propline_get_player_history
params_unexplained
Player prop history across recent games. Pass sport_key (a valid key from propline_list_sports) and player_name. Returns each prior prop this player took with line, prices, resolution, and actual value. Pro tier returns full data; free tier returns redacted resolution/actual_value with an upgrade pointer.
propline_get_player_trends
params_unexplained
Hit-rate trends / last-N-games over rate for a player — unique to PropLine's prop-resolution data. Pass sport_key (a valid key from propline_list_sports) and player_name. For each market the player has graded history in, returns over/under/push splits across the last 5/10/20/50 graded games, current streak, average actual stat, and the recent line. This is the 'did X go over in N of his last M games?' surface. Omit `market` for all markets, or pass one to scope (e.g. 'player_points', 'batter_hits').
propline_get_event_ev
params_unexplained
Pro-tier endpoint. Returns cross-book +EV per outcome for an event. Pass sport_key (a valid key from propline_list_sports), event_id (an event id from propline_list_events), and optionally markets — a comma-separated list of market keys to evaluate (omit for all markets). We anchor on Pinnacle's sharp line, remove vig, derive a no-vig fair line, and compute EV% per book at the same line. Outcomes are sorted with +EV plays floated to the top of each line group. PrizePicks is excluded from EV math (DFS payouts aren't comparable to per-book prices).
propline_get_best_line
params_unexplained
Cross-book line shopping (Hobby+ for prices; free tier gets the full structure with book identities + best-first ranking but prices nulled and redacted:true). Pass sport_key (a valid key from propline_list_sports) and event_id (an event id from propline_list_events). For every (market, player, line) tuple on an event, returns the single best American price across all comparable books, plus an all_prices array sorted best-first (one row per book, each with last_update). Companion to propline_get_event_ev: /ev says whether a price beats the no-vig fair line; best-line says which book pays the most. DFS pick'em books (PrizePicks, Sleeper, Dabble) are excluded; Underdog only at clean two-way lines. Optional bookmakers filter to shop only the books the user holds accounts at.

Selection evidence

Confusable tool pairs.

8 pairs where similar names or overlapping descriptions may send an agent toward the wrong tool.

Tool A Tool B Confidence Why they collide
propline_get_odds propline_get_odds_closing high User phrasing like 'what are the final/closing odds for this game' maps to both (both are odds endpoints), and get_odds is the generic catch-all while folks rarely say the exact word 'closing'; agent can easily return live odds instead of the settlement line.
propline_get_odds propline_get_odds_history medium Tasks like 'show how the odds moved' or 'what were the odds earlier today' could be served by either live odds or the history series; without the explicit word 'history', the generic get_odds is the likely wrong pick.
propline_get_odds_history propline_get_odds_closing medium Both return historical line data for an event; 'what did the line close at' can be answered by full history, so an agent may pull the heavy history tool instead of the dedicated closing-line helper (or vice versa for 'get the odds history').
propline_get_odds propline_get_best_line medium 'What's the best odds/price on this game' overlaps both: get_odds returns every book's prices while get_best_line returns the single best price; agent may call the bulk odds endpoint when the user wants line shopping, or best_line when they just wanted odds.
propline_get_event_stats propline_get_event_results medium Both are per-event, completed-game endpoints returning player stat values; 'what were the stats/results for that game' is ambiguous, so the agent may fetch raw box scores instead of graded prop outcomes.
propline_get_player_history propline_get_player_trends medium Both answer player-focused questions like 'has Jokic been hitting overs lately' — one returns past props with resolutions, the other hit-rate trends; the natural-language task doesn't disambiguate which surface to use.
propline_get_odds_history propline_export_odds_history low A task like 'pull the odds history for the season' is ambiguous between the per-event snapshot series and the bulk CSV firehose; 'export' in the tool name is a strong cue but not always present in user phrasing.
propline_list_events propline_list_event_markets low Both begin with 'list…events' and share the 'event' token; a task like 'what can I bet on for tonight's game' could trigger the event list instead of the market list, though the description for markets is fairly clear.

Compare the field

One score is useful.
The evidence makes it actionable.

Back to the leaderboard