Public leaderboard

Public assessment

proplineapi/propline-mcp (propline-mcp)

propline-mcp · v0.17.1 · scanned

What changed in the harness

Selection accuracy 98→98, token cost up 6%, unconfirmed writes 100%→100%.

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

30.0 / 30

30.0 out of 30
02Legibility

24.7 / 30

24.7 out of 30
03Economics

17.4 / 20

17.4 out of 20
04Discoverability

11.2 / 20

11.2 out of 20

Highest-impact fix

Estimated gain +9 points

Make target tools discoverable on the first call

Clarify tool names, decision boundaries, and required argument schemas so an agent can choose and construct the target call without exploratory steps.

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
Returns the list of market keys (e.g. h2h, spreads, totals, player_points, pitcher_strikeouts) available for a specific event. Requires sport_key (from propline_list_sports, e.g. baseball_mlb) and event_id (from propline_list_events). Useful when you don't know which prop markets a given event carries.
propline_get_odds
params_unexplained
Get live odds. Requires sport_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. Requires sport_key (from propline_list_sports) and event_id (from propline_list_events); optional markets is a comma-separated list of market keys to scope the history (defaults to full-game markets). Returns the historical line-movement snapshot series for that event (every recorded price/point change per outcome over the event's lifetime). 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. Requires sport_key (from propline_list_sports) and event_id (from propline_list_events); optional markets is a comma-separated list of market keys to scope the result (defaults to full-game markets). Returns the closing line per (book, market, outcome) for that event — the last snapshot at or before commence_time. 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. Requires sport_key (from propline_list_sports, e.g. baseball_mlb). Returns recent and live game scores plus status (scheduled, live, final) for that sport. 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. Requires sport_key (from propline_list_sports) and event_id (from propline_list_events, must be a completed event). 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. Requires sport_key (from propline_list_sports) and event_id (from propline_list_events, must be a completed event). Returns graded prop outcomes for that event — every Over/Under marked won, lost, push, or void with the actual stat value next to the line. 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, given sport_key (from propline_list_sports) and event_id (from propline_list_events) — the conditions a prop settles under. 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 for an event. Requires sport_key (from propline_list_sports) and 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. Requires sport_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, given sport_key (from propline_list_sports) and player_name — unique to PropLine's prop-resolution data. 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. Requires sport_key (from propline_list_sports) and event_id (from propline_list_events); optional markets is a comma-separated list of market keys to scope the result. Returns cross-book +EV per outcome for that event. 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). Requires sport_key (from propline_list_sports) and event_id (from propline_list_events). For every (market, player, line) tuple on the 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.

7 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_history propline_get_odds_closing medium Both are Hobby+ per-event line-movement endpoints taking identical params; a task like 'what was the closing/last line for this game' could plausibly be routed to the full history tool instead of the dedicated closing-line tool, or vice versa.
propline_get_odds_history propline_export_odds_history medium Both return historical odds snapshots for a sport/event; a request like 'get me all the historical odds data for this sport' could be misrouted to the per-event tool instead of the bulk CSV export, especially since both share 'history' and overlapping filter concepts.
propline_get_event_stats propline_get_event_results medium Both return post-game per-player data for a completed event; a vague task like 'how did this player do in the game' could be routed to raw box-score stats instead of graded prop outcomes (or vice versa) since both are keyed by sport_key/event_id with no other params.
propline_get_player_history propline_get_player_trends medium Both take sport_key/player_name/markets and describe a player's past prop performance; a task like 'has this player been hitting the over lately' could go to either the raw game-by-game history or the aggregated hit-rate trends tool.
propline_get_event_context propline_get_event_movement low Share only 'event/get' tokens with very different purposes (game conditions vs line movement), but a loosely worded 'what's going on with this event' could nudge an agent toward the wrong one.
propline_get_futures propline_get_resolution_summary low Both are free-tier aggregate endpoints, but their subject matter (futures odds vs grading-volume stats) is distinct enough that confusion is unlikely except for very vague 'give me an overview' requests.
propline_get_odds propline_get_best_line low Both fetch pricing for an event/sport; a request like 'get me the best odds for this game' could plausibly be sent to get_odds instead of the dedicated best-line shopping tool.

Compare the field

One score is useful.
The evidence makes it actionable.

Back to the leaderboard