Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

PropLine — Sports Betting Odds & Prop Resolution

NPM · PROPLINE-MCP · 2 COMPONENTS

Live odds, cross-book +EV and graded player-prop results across 37 books. Hosted endpoint included.

0 this week 91 Trust /100

Last scanned (9 hours ago)

Scores higher than 94% of npm servers

Category Entertainment and Games

Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →

Supply Chain Security98
  • No malware found by supply-chain analysis.Pass
  • No known CVEs affecting this package version or its production dependencies.Pass
  • No install/post-install scripts declared.Pass
  • 30 of 92 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency97
  • Source repository is publicly reachable at the declared URL. View diagnostics → Pass
  • Cryptographically verified build provenance (signed, bound to proplineapi/propline-mcp). View diagnostics → Pass
  • Clear OSI-approved license (MIT).Pass
  • Actively maintained (last published 7 days ago).Pass
  • Disclosure check failed: no security disclosure policy was found in the source repository. See how to fix → Fail
Schema Quality & AI Usability61
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 10698 tokens (~248/item across 43 items; 43 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management100
  • No destabilizing schema changes in the last 30 days.Pass
Tool Coverage92
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 76% of tool parameters carry a description.Partial
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • We read all 43 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
  • An AI judge read all 43 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 3 Nov 26 0
    • Security disclosure: unverified → fail ▼ functional
  • 2 Nov 26 0
    • Security disclosure: fail → unverified ▼ functional
  • 29 Oct 26 0
    • Schema quality: 9439 → 10698 ▼ functional
    • Package version: 0.18.3 → 0.55.0 functional
  • 22 Oct 26 0
    • Stability: 0.97 → pass security
  • 21 Oct 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 93 to 97. That category is still filling its 30-day observation window: 28 days of observed history at the previous scan, 29 at this one. The score rises as the window fills, whether or not the server changes.

  • 20 Oct 26 −1
    • Stability: pass → 0.93 functional
  • 19 Oct 26 0
    • Tool safety: pass → unverified ▼ security
    • Stability: pass → unverified ▼ security
    • Capabilities: pass → unverified ▼ functional
    • Tool coverage: 100 → unverified ▼ functional
    • Package version: 0.50.1 → 0.51.0 functional
  • 17 Oct 26 +3
    • Stability: 0.80 → pass security
    • Package version: 0.18.3 → 0.50.1 functional
Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 5 Nov 2026 · Analysed npm/propline-mcp@0.55.0

Provenance Verified

A signed build attestation was found and verified, binding this exact artifact to the source repository it claims to come from.

Result Verified
Ecosystem npm
Reason Verified
Discovered via Registry attestation endpoint
Source repo proplineapi/propline-mcp
Certificate issuer https://token.actions.githubusercontent.com
Certificate SAN https://github.com/proplineapi/propline-mcp/.github/workflows/publish.yml@refs/tags/v0.55.0
Rekor log index 3553640804
Predicate type SLSA build provenance https://slsa.dev/provenance/v1
Subject digest sha512:e9d1b6cfe64337e85d59531161a048ca93bb2cfa23c02964dfe0e0dafc76ff09d6ee80807df6c5b83f4f31941ced6f81c3b36ad77003dcccfcbaa3787

Background: How many MCP packages publish verified provenance →

Dependencies 92 packages
Packages resolved 92
Stale 30
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 43 exposed · ~10,698 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
propline_create_free_api_key ~175

Create a free personal PropLine API key for the user and EMAIL it to them. Use this when the user wants their own key — e.g. they hit a shared-demo-key rate limit, a paid field came back redacted, or they ask how to get a key. Only call it with an email address the user explicitly gave you for this purpose in this conversation; never guess, reuse one from elsewhere, or sign up a third party. The key is never returned here — it goes to that inbox, with instructions to reconnect this assistant using it. Free tier: 1,000 requests/day, no card. If the address already has a key, the key is re-sent (at most once a day).

NameTypeReqDescription
emailstringyesThe user's own email address, as they gave it.

No output schema declared.

No examples provided.

propline_export_odds_history ~274

Backfill-pass / Enterprise only. Bulk line-movement tick history as CSV — every recorded odds snapshot (price + line, per book, including period markets) across a whole sport, one row per (outcome, snapshot). This is the raw firehose no subscription tier can bulk-pull (Pro/Streaming use propline_get_odds_history per event instead). REQUIRES a since/until window to keep the pull bounded — the full archive runs to gigabytes per sport. The result is capped to the first 200 rows for context safety; for the full dataset use the /v1/exports/odds-history endpoint directly with curl/SDK and stream to disk. Non-entitled keys get a 403 with an upgrade pointer.

NameTypeReqDescription
bookmakerstring–Optional bookmaker filter
marketstring–Optional market key filter
sincestringyesISO datetime lower bound on recorded_at (required, e.g. 2026-04-01T00:00:00Z). Keep the window narrow.
sport_keystringyesSport key, e.g. baseball_mlb
untilstringyesISO datetime upper bound on recorded_at (required, e.g. 2026-05-01T00:00:00Z).

No output schema declared.

No examples provided.

propline_get_best_line ~306

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). 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, ParlayPlay, DraftKings Pick6) are excluded; Underdog only at clean two-way lines. Optional bookmakers filter to shop only the books the user holds accounts at.

NameTypeReqDescription
bookmakersstring–Comma-separated book keys (e.g. 'draftkings,fanduel') to shop only those books.
event_idstring|numberyes–
include_linksboolean–When true, every price row carries a link — that book's public event-page URL, the click-out for 'go bet this'. Books without a verified URL template return null. Also adds app_link — a mobile app-op…
marketsstring–Comma-separated market keys (e.g. 'pitcher_strikeouts,h2h').
sport_keystringyes–

No output schema declared.

No examples provided.

propline_get_book_accuracy ~186

Free-tier endpoint. How well each sportsbook prices player props: each book's closing prop prices are de-vigged and scored (Brier) against the real result and against the other books on the same line. Per book: props scored, brier, consensus_brier, skill_bp (> 0 = closer to the result than the market average) with a 95% interval, verdict (beats_market / trails_market / in_line) and margin_pct (average overround), plus by_sport and by_market breakdowns. Useful for: 'which book prices props most accurately', 'which book has the lowest margin'. A pricing report, never a profit claim or betting edge.

NameTypeReqDescription
daysnumber–Look-back window, 7-120. Defaults to 30.
sportstring–Optional sport key, e.g. baseball_mlb.

No output schema declared.

No examples provided.

propline_get_dfs_payouts ~204

Free-tier reference math. Returns the PrizePicks Power Play (all legs must hit) and Flex Play (partial payouts) entry payout schedule for 2-6 legs, plus the per-leg breakeven win probability for each play. Pass leg_win_prob (e.g. 0.58) to also get expected_return (per $1) and is_plus_ev per play — the slip-level breakeven. Useful for: 'what hit rate do I need to beat a 4-pick PrizePicks Power play', 'is a 3-leg flex +EV at 60% per leg'. NOTE: standard published payouts only — demon/goblin per-pick modifiers aren't in PrizePicks's feed (see the disclaimer field); breakeven assumes independent legs.

NameTypeReqDescription
leg_win_probnumber–Optional assumed per-leg win probability in [0,1]. Adds expected_return + is_plus_ev to each play.

No output schema declared.

No examples provided.

propline_get_event_context ~157

Game context for an event — 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.

NameTypeReqDescription
event_idstring|numberyes–
sport_keystringyes–

No output schema declared.

No examples provided.

propline_get_event_ev ~521

Pro-tier endpoint. Returns cross-book +EV per outcome for an event. We anchor on a sharp book, 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). The anchor is chosen PER LINE in the order pinnacle → polymarket → kalshi → bovada → smarkets, and each line's fair_source names the one used — report the anchor from fair_source per line, never assume Pinnacle anchored all of them. Optional bookmakers filter prices to the books the user holds accounts at; it never changes the anchor, so filtering to DraftKings still measures DraftKings against Pinnacle.

NameTypeReqDescription
bookmakersstring–Comma-separated book keys (e.g. 'draftkings,fanduel') to price only the user's books. Narrows prices, not the anchor.
devigstring–How the anchor's vig is removed. 'multiplicative' (default) divides each implied probability by the booksum; 'shin' solves Shin's insider-trading model, which loads the overround onto the longshot an…
event_idstring|numberyes–
fair_sourcestring–Optional anchor override: one book or a comma-separated list tried IN ORDER per line, from pinnacle, polymarket, kalshi, bovada, smarkets (anything else is a 400). Lines none of them anchor are dropp…
marketsstring––
max_ageinteger–Optional, seconds. Drops quoted prices the book has not delivered within that many seconds (each outcome carries last_update). The fair line is unaffected.
min_ev_pctnumber–Filter to outcomes with EV ≥ this percent (e.g. 2.0).
sport_keystringyes–

No output schema declared.

No examples provided.

propline_get_event_ids ~130

Free-tier endpoint. Id crosswalk for one sport: one object per event from 3 days ago to 30 days ahead with PropLine's event id, commence_time, teams (+ team keys/ids), espn_event_id, mlb_game_pk, merged_from_event_ids, and each sportsbook's own event id + link under books. Useful for: 'join PropLine events onto ESPN / the MLB Stats API / a sportsbook's own feed', 'what is DraftKings' id for this game'.

NameTypeReqDescription
sport_keystringyesSport key, e.g. baseball_mlb.

No output schema declared.

No examples provided.

propline_get_event_movement ~470

Line movement + steam detection from the snapshot tick history. 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 37 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. Each outcome carries outcome_id (the id /odds and webhooks use); steam rows carry team (team totals) plus open_point/latest_point. Hobby+ full; free tier redacted.

NameTypeReqDescription
bookmakersstring–Comma-separated subset of book keys (bovada, draftkings, fanduel, pinnacle, betmgm, betrivers, unibet, betway, hardrock, fanatics, betus, betonlineag, lowvig, onexbet, tab_au, rebet, fliff, courtside…
event_idstring|numberyes–
include_book_idsboolean–When true, each outcome also carries book_outcome_id — the book's own selection id.
marketsstring–Comma-separated market keys. Defaults to h2h,spreads,totals.
periodstring–Game-period filter (q1..q4, h1/h2, p1..p3, i1..i9, f3/f5/f7; comma-separated, or 'all'). Omit for full-game.
sincestring–Measure movement from this moment instead of each line's first quote: ISO-8601 timestamp or a negative offset from now ('-6h', '-30m', '-2d'). Steam then covers only moves inside the window.
sport_keystringyes–

No output schema declared.

No examples provided.

propline_get_event_projections ~182

Market-implied consensus projection per (market, player) for an event: the line where the no-vig P(over) crosses 50%, median across contributing sportsbooks. Use it to validate statistical or fantasy projections against the live market. These are MARKET-IMPLIED values derived purely from sportsbook prices — never a forecast, and no accuracy claim is made; present them as 'the market implies X', not 'PropLine projects X'. DFS pick'em pricing is excluded; each row carries books_contributing and a stable player_id (null until the player has graded). Hobby+ for values; free tier gets the structure redacted.

NameTypeReqDescription
event_idstring|numberyes–
marketsstring–Comma-separated market keys, e.g. 'player_pass_yds,player_receptions'.
sport_keystringyes–

No output schema declared.

No examples provided.

propline_get_event_results ~174

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. 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.

NameTypeReqDescription
bookmakersstring–Comma-separated book keys to restrict to (e.g. bovada). Default returns all books; an unfiltered MLB game can run several MB, so pass one book when that is enough.
event_idstring|numberyes–
marketsstring–Comma-separated market keys to restrict to (e.g. pitcher_strikeouts,batter_hits).
sport_keystringyes–

No output schema declared.

No examples provided.

propline_get_event_stats ~164

Book-agnostic raw box-score stats for an event. Returns per-player stats (e.g. strikeouts, hits, points, rebounds, shots-on-goal) decoupled from any sportsbook's lines. LIVE during games for major US sports (MLB + WNBA now; NFL, NCAAF, NBA, NHL at season start): while the event's status is in_progress, stats refresh ~every 90 seconds with cumulative in-game values — use this to answer 'how is this prop tracking right now'. Treat in-progress numbers as partial; at status=final they are the official box score. Other sports populate stats at game completion. Free tier.

NameTypeReqDescription
event_idstring|numberyes–
sport_keystringyes–

No output schema declared.

No examples provided.

propline_get_futures ~173

Free-tier endpoint. Returns season-long futures (outright) markets for a sport — championship/Super Bowl/division/conference winners, MVP and award winners, season win totals — aggregated across Bovada, FanDuel, DraftKings, Pinnacle, and Kalshi. One row per (futures event, book, market) with each team/player outcome and its price. Marquee markets (Super Bowl winner, MVP, division/conference) are quoted by multiple books for comparison; exotic markets are often single-book. Useful for: 'who are the Super Bowl favorites across books', 'NFL MVP odds', 'NBA championship futures'. Futures are unresolved (no settlement grade).

NameTypeReqDescription
sport_keystringyesSport key — e.g. football_nfl, basketball_nba, baseball_mlb.

No output schema declared.

No examples provided.

propline_get_golf_rounds ~227

Free-tier endpoint. A golfer's completed rounds, newest first, with strokes, score to par and hole counts (eagles, birdies, pars, bogeys, doubles), plus last-5/10/20 averages. Every player in the field, back to 2024; a round in progress is never included. Filter by tour (pga, dp_world, liv, lpga, korn_ferry, champions). Hole counts are null on DP World, LPGA and some LIV rounds. Useful for: 'Scheffler's last 10 rounds', 'how has Bryson scored on LIV lately'.

NameTypeReqDescription
limitnumber–Rounds to return, 1-200. Defaults to 20.
playerstringyesPlayer name (case/accents ignored) or ESPN athlete id.
sincestring–Optional YYYY-MM-DD lower bound.
tourstring–Optional comma-separated tours: pga, dp_world, liv, lpga, korn_ferry, champions. Omit for all.

No output schema declared.

No examples provided.

propline_get_golf_tournaments ~96

Free-tier endpoint. Golf tournaments we hold round data for, newest first, with player and round counts. Filter by tour (pga, dp_world, liv, lpga, korn_ferry, champions) and season.

NameTypeReqDescription
limitnumber–1-500. Defaults to 50.
seasonnumber–Optional season year.
tourstring–Optional comma-separated tours.

No output schema declared.

No examples provided.

propline_get_history_coverage ~79

Free-tier endpoint. When each book's odds history starts for a sport: history_start, game_lines_start, props_start, latest_event, event count, and whether the book is retired. Useful for: 'how far back do we have Fanatics MLB props'.

NameTypeReqDescription
sport_keystringyese.g. baseball_mlb.

No output schema declared.

No examples provided.

propline_get_injuries ~192

Free-tier endpoint. The current injury report for NFL, NCAAF, NBA, WNBA, NHL or MLB: each listed player with status (Out, Questionable, Day-To-Day, 15-Day-IL...), status_code, injury, expected return and status_since (when the current status began). Source: ESPN, every 10 minutes. Useful for: 'who is out for the Chiefs', 'which NBA players are questionable tonight' — check it before trusting a player prop.

NameTypeReqDescription
sport_keystringyesfootball_nfl, football_ncaaf, basketball_nba, basketball_wnba, hockey_nhl or baseball_mlb.
statusstring–Optional comma-separated status codes: out, doubtful, questionable, probable, day_to_day, injured_list, suspended, other.
teamstring–Optional team name or abbreviation, e.g. KC.

No output schema declared.

No examples provided.

propline_get_injury_history ~141

Free-tier endpoint. Every injury status change in a sport over the last 1-90 days, newest first: old_status -> new_status with the time we saw it (new_status null = came off the report). History starts 2026-10-18. Pair with odds history to see how lines moved on a ruling.

NameTypeReqDescription
daysnumber–1-90. Defaults to 7.
playerstring–Optional player name (substring match).
sport_keystringyesfootball_nfl, football_ncaaf, basketball_nba, basketball_wnba, hockey_nhl or baseball_mlb.

No output schema declared.

No examples provided.

propline_get_market_coverage ~169

Free-tier endpoint. Every market each book is pricing on a sport's games in the next N days, and on how many of those games. Returns the game count and, per book, game_lines and props entries {market, period, events, markets, last_update}. Useful for: 'which books have NFL player props posted', 'does FanDuel price this market yet'. Books post props at different times, so a low events count means not posted on every game yet.

NameTypeReqDescription
daysnumber–Games starting in the next N days, 1-7. Defaults to 3.
periodsboolean–Include quarter / half / inning markets. Defaults to false.
sport_keystringyese.g. football_nfl, baseball_mlb.

No output schema declared.

No examples provided.

propline_get_mlb_grand_salami ~147

Free-tier endpoint. Returns the synthetic daily MLB Grand Salami for a given UTC date — total runs scored across every MLB game on the slate plus each book's implied Grand Salami line (median of per-game primary totals across our MLB books incl. Pinnacle, Polymarket, Matchbook, Smarkets). No retail sportsbook quotes this as a single market. Useful for: 'what's the total run line for tonight's full MLB slate', 'did the Grand Salami go over yesterday', 'historical Grand Salami results for backtesting'.

NameTypeReqDescription
datestring–YYYY-MM-DD UTC date. Defaults to today (UTC) when omitted.

No output schema declared.

No examples provided.

propline_get_nhl_daily_goals_total ~152

Free-tier endpoint. Returns the synthetic daily NHL goals total (hockey's equivalent of the MLB Grand Salami) for a given US Eastern date — total goals scored across every NHL game on the slate (including OT/SO) plus each book's implied Daily Goals Total line (median of per-game primary totals across our NHL books). No retail sportsbook quotes this as a single market. Useful for: 'what's the total goal line for tonight's full NHL slate', 'did the Daily Goals Total go over yesterday', 'historical NHL daily-goals results for backtesting'.

NameTypeReqDescription
datestring–YYYY-MM-DD UTC date. Defaults to today (UTC) when omitted.

No output schema declared.

No examples provided.

propline_get_odds ~1,328

Get live odds. 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 37 — sportsbooks: Bovada, DraftKings, FanDuel, Pinnacle, BetMGM, BetRivers, Unibet, Betway, Hard Rock Bet, Fanatics, BetUS, BetOnline.ag, LowVig.ag, 1xBet, TAB AU, ReBet, Fliff, Courtside, Sportzino, Heritage Sports, Jazz Sports, YouWager, Thrillzz; DFS: PrizePicks, Underdog, Sleeper, Dabble, ParlayPlay, DraftKings Pick6; exchanges and prediction markets: Kalshi, Polymarket, Polymarket US, Matchbook, Smarkets, Novig, ProphetX, SX Bet — coverage varies by sport). Every market carries line_type: 'main', 'alternate' or 'milestone' (an N+ rung such as '3+ Strikeouts'); filter to line_type == 'main' for each book's primary line. Kalshi and Polymarket US rows also set line_type on each outcome. Underdog Fantasy outcomes carry a payout_multiplier on EVERY outcome (1.0 = standard pick, e.g. 1.5 = boost, 0.75 = discount; null means the book is not Underdog) — keep only payout_multiplier == 1.0 when comparing DFS lines to sportsbook consensus, since filtering on non-null would drop every Underdog line. Each market carries suspended_at: null while on the board, set when that book pulled the market pregame (late scratch, dropped market type) — its outcomes are then the last quoted legs, not a live price. Treat a suspended market as unbettable and, if several books show it for one player, as a probable scratch. Each BOOKMAKER carries pregame_only: true when the event is live and that book does not price it in play, so its prices are the last pregame quote and will never move again this game. suspended_at cannot show this — a book with no in-play feed is never polled once the game starts, so nothing goes missing to flag. Exclude…

NameTypeReqDescription
bookmakersstring–Comma-separated subset of book keys (bovada, draftkings, fanduel, pinnacle, betmgm, betrivers, unibet, betway, hardrock, fanatics, betus, betonlineag, lowvig, onexbet, tab_au, rebet, fliff, courtside…
event_idstring|number–Optional. If set, returns props for this event.
include_book_idsboolean–When true, each bookmaker block carries book_event_id and each outcome carries book_outcome_id — that book's OWN ids for the event and the priced selection, for joining onto a book's native feed by i…
include_depthboolean–When true, every outcome carries depth: up to three order-book levels beyond the served price, each {price (American), size (dollars)}. [] for books whose depth PropLine does not read (sportsbooks).
include_linksboolean–When true, each bookmaker block carries a link — that book's public event-page URL for click-out (Bovada/DraftKings/FanDuel/BetMGM/Kalshi/Polymarket/Smarkets; others null). Plain navigation, no affil…
marketsstring–Comma-separated market keys. Defaults to h2h on bulk; h2h,spreads,totals on event. Pass an explicit list to fetch player props (sport-specific — e.g. player_points,player_rebounds for NBA; pitcher_st…
periodstring–Game-period filter. Omitted = full-game markets only. Canonical codes: q1..q4 (quarters), h1/h2 (halves), p1..p3 (hockey periods), i1..i9 (innings), f3/f5/f7 (first N innings). Comma-separated for mu…
sport_keystringyes–

No output schema declared.

No examples provided.

propline_get_odds_closing ~484

Hobby+ endpoint. Returns the OPENING and CLOSING line per (book, market, outcome) for an event. Closing = the last snapshot at or before commence_time (price/point/closing_at); opening = the first snapshot PropLine holds for the outcome, however far before kickoff the book posted it (opening_price/opening_point/opening_at); pass opening_window to limit that lookback. Canonical CLV-tracking helper; one call returns both data points your bet should be measured against, instead of fetching full history and post-processing. Compare the POINTS as well as the prices — on spreads and totals the number moves as much as the price, so a price-only comparison mis-measures those markets. opening_age_seconds says how long before kickoff the opener was recorded: the archive starts 2026-04, so a small value means PropLine started polling late and this is not the book's true open. Free tier returns redacted structure with upgrade pointer.

NameTypeReqDescription
bookmakersstring–Comma-separated subset of book keys (bovada, draftkings, fanduel, pinnacle, betmgm, betrivers, unibet, betway, hardrock, fanatics, betus, betonlineag, lowvig, onexbet, tab_au, rebet, fliff, courtside…
event_idstring|numberyes–
marketsstring––
opening_windowstring|number–Limit the opening lookback to this many days before kickoff (1-3650), or 'all' (default: the first snapshot held). 14 matches the resolved-props export's opening columns.
periodstring–Game-period filter. Omitted = full-game markets only. Canonical codes (q1..q4, h1/h2, p1..p3, i1..i9, f3/f5/f7), comma-separated, or 'all'.
sport_keystringyes–

No output schema declared.

No examples provided.

propline_get_odds_history ~495

Hobby+ endpoint. Returns the historical line-movement snapshot series for an 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.

NameTypeReqDescription
bookmakersstring–Comma-separated subset of book keys (bovada, draftkings, fanduel, pinnacle, betmgm, betrivers, unibet, betway, hardrock, fanatics, betus, betonlineag, lowvig, onexbet, tab_au, rebet, fliff, courtside…
changes_onlyboolean–When true, drop snapshots whose (price, point) match the previous one.
event_idstring|numberyes–
fromstring–ISO timestamp; only include snapshots at or after. Mutually exclusive with relative_from.
intervalstring–Downsample bucket. Latest snapshot per bucket wins.
marketsstring––
periodstring–Game-period filter. Omitted = full-game markets only. Canonical codes (q1..q4, h1/h2, p1..p3, i1..i9, f3/f5/f7), comma-separated, or 'all'.
relative_fromstring–Offset to commence_time, e.g. '-3h', '-30m', '-90s'. Mutually exclusive with from.
relative_tostring–Offset to commence_time, e.g. '-1m' or '0'. Mutually exclusive with to.
sport_keystringyes–
tostring–ISO timestamp; only include snapshots at or before. Mutually exclusive with relative_to.

No output schema declared.

No examples provided.

propline_get_player_games ~422

A player's recent games with every raw box-score stat per game — one call instead of one request per event. Use this to answer 'how has X actually performed lately?' and to build L5/L10/L20, season splits and head-to-head yourself. Pass `opponent` for H2H (accepts a full name, nickname or abbreviation — 'Boston Red Sox', 'Red Sox', 'BOS'); the limit applies AFTER that filter, so opponent + limit=10 means the last 10 MEETINGS, not the Boston games among the last 10 games. H2H is not capped to the current season. IMPORTANT: this is the raw box-score archive, NOT graded-prop history — it covers every game with a box score on file, including games no sportsbook priced, so a 'last 10 games' window here really is the last 10 games (one built from propline_get_player_trends silently skips unpriced games). It carries no line, price or grade; use propline_get_player_trends for hit rates against a posted line. `player_team`/`opponent`/`is_home` are null when the player's side can't be identified, and always for individual sports (tennis, golf, UFC) — report them as unknown rather than guessing. Accepts a player_id in place of the name; the response carries player_id (null when the player has none yet).

NameTypeReqDescription
limitnumber–Games to return, 1-100. Default 20.
opponentstring–Optional head-to-head filter — team name, nickname or abbreviation.
player_namestringyesPlayer name as it appears in box scores — e.g. 'Aaron Judge', 'Nikola Jokic' — or a player_id from propline_search_players, e.g. 'mlb:592450'
sport_keystringyes–
stat_typestring–Optional comma-separated stat names to return; omit for all. Vocabulary is per-sport.

No output schema declared.

No examples provided.

propline_get_player_history ~248

Player prop history across recent games for one market. Returns each prior prop this player took with line, prices, resolution, actual value, is_main_line (the book's main line vs an alt-ladder rung) and line_moved_in_play. Pass main_line_only=true to drop alt rungs. Pro tier returns full data; free tier returns redacted resolution/actual_value with an upgrade pointer.

NameTypeReqDescription
limitnumber–Max number of past games (default 20, max 100)
main_line_onlyboolean–Only each book's main line (drops alt-ladder rungs). Omit for every line.
marketstring–Market key, e.g. 'pitcher_strikeouts' or 'player_points'
marketsstring–Deprecated alias: the first market of a comma-separated list is used when `market` is omitted
player_namestringyesPlayer name as it appears in box scores — e.g. 'Aaron Judge', 'Nikola Jokic' — or a player_id from propline_search_players, e.g. 'mlb:592450'
sport_keystringyes–

No output schema declared.

No examples provided.

propline_get_player_trends ~267

Hit-rate trends / last-N-games over rate for a player — 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').

NameTypeReqDescription
dfs_odds_typestring–Optional PrizePicks pick-em flavor. When set, the trend is computed against that flavor's PrizePicks line only (e.g. compare a player's goblin-line hit-rate vs his standard-line trend). Omit for the…
marketstring–Optional single market to scope trends to (e.g. 'player_points'). Omit for all markets.
player_namestringyesPlayer name as it appears in box scores — e.g. 'Aaron Judge', 'Nikola Jokic' — or a player_id from propline_search_players, e.g. 'mlb:592450'
sport_keystringyes–

No output schema declared.

No examples provided.

propline_get_referee_matches ~155

Free-tier endpoint. One referee's summary plus their matches, newest first, with each team's yellow and red cards (null until graded) and upcoming appointments. Same 32 soccer leagues as propline_get_referees. Get exact names from propline_get_referees.

NameTypeReqDescription
limitnumber–1-500. Defaults to 100.
namestringyesReferee name, e.g. Michael Oliver.
sincestring–Optional start date, YYYY-MM-DD.
sport_keystringyesA soccer league key, e.g. soccer_epl, soccer_la_liga, soccer_mls.
untilstring–Optional end date, YYYY-MM-DD.

No output schema declared.

No examples provided.

propline_get_referees ~189

Free-tier endpoint. Card stats per referee: graded matches, yellow and red cards, cards per match, last match and next appointment. 32 soccer leagues (Premier League, La Liga, Serie A, Bundesliga, Ligue 1, MLS, Championship, Eredivisie, Liga MX, Brasileirao, UEFA cups, Libertadores, Sudamericana and others); other sports 404 with available_sports. Useful for: 'which EPL referee gives the most cards', 'who is refereeing Arsenal next' — check it before a cards prop.

NameTypeReqDescription
searchstring–Optional referee name (substring match).
sincestring–Optional start date, YYYY-MM-DD.
sport_keystringyesA soccer league key, e.g. soccer_epl, soccer_la_liga, soccer_mls.
untilstring–Optional end date, YYYY-MM-DD.

No output schema declared.

No examples provided.

propline_get_resolution_summary ~109

Free-tier endpoint. Returns the factual volume of player props PropLine has graded against real box scores over the last N days (aggregated counts only): total graded/settled, games, sports covered, plus per-sport and top-market breakdowns. Useful for: 'how much graded prop data does PropLine have, what's the coverage'. A coverage proof, never a profitability claim.

NameTypeReqDescription
daysnumber–Look-back window, 1-90. Defaults to 30.

No output schema declared.

No examples provided.

propline_get_scores ~79

Free-tier endpoint. Returns recent and live game scores plus status (scheduled, live, final) for a sport. Useful for: 'is this game over yet, what was the final score'.

NameTypeReqDescription
days_fromnumber–How many past days of completed games to include. Defaults to 1.
sport_keystringyes–

No output schema declared.

No examples provided.

propline_get_webhook_deliveries ~184

Recent delivery attempts for one webhook (Streaming Lite tier and up), newest first — the debugging surface for 'why isn't my webhook firing'. Each row: status (pending/success/failed), HTTP response_code, attempts, delivered_at and the payload that was sent. A pending row with attempts > 0 is mid-retry-backoff; status 'failed' with response_code null means the endpoint was unreachable or timed out (8s). Page backwards through a deep queue with before_id = the smallest id on the previous page; a page shorter than limit is the last one.

NameTypeReqDescription
before_idnumber–Cursor: smallest delivery id from the previous page.
limitnumber–Rows per page, 1-200. Default 50.
webhook_idnumberyesWebhook id (from propline_list_webhooks).

No output schema declared.

No examples provided.

propline_grade_clv ~433

Hobby+ endpoint. Grades PLACED bets against their closing lines. Closing line value is the only durable proxy for whether a bettor has edge: did the price they took beat the number the market settled on? Send the bets and each comes back with its closing price, the de-vigged closing fair probability, CLV, and — once the game settles — the graded resolution and actual stat value, plus a portfolio summary. Stateless: nothing is stored. TWO CLV numbers are returned deliberately. clv_pct is price-vs-price: familiar and quotable, but VIG-BLIND, so it flatters a bet taken on the juicy side of a wide market. ev_vs_close_pct scores the price against the DE-VIGGED close and is the honest one — report that one when the user asks whether they got value. The de-vig anchors to the SHARPEST book quoting that line at close (fair_source), not the book they bet at, because de-vigging their own book always returns a negative number (they paid its hold). Bets whose event has not started carry closing_is_final=false, are counted in summary.pending, and are EXCLUDED from the summary averages: before kickoff the 'closing' price is just the latest price, so CLV is ~0 by construction — do not present those as results. Matching is fail-closed: a bet that cannot be pinned to exactly one stored outcome returns matched=false with an unmatched_reason instead of a wrong match, so surface those rows rather than silently dropping them. Max 500 bets per request. Free tier returns structure with every number nulled.

NameTypeReqDescription
betsarrayyesPlaced bets to grade. selection is the subject: player name for a prop, team name for a game line.
devigstring–How the closing anchor's vig is removed before closing_fair_prob / ev_vs_close_pct. 'multiplicative' (default) or 'shin' (loads the overround onto the longshot). Same vocabulary as propline_get_event…

No output schema declared.

No examples provided.

propline_list_event_markets ~72

List the market types available for a specific event (e.g. h2h, spreads, totals, player_points, pitcher_strikeouts). Useful when you don't know which prop markets a given event carries.

NameTypeReqDescription
event_idstring|numberyes–
sport_keystringyes–

No output schema declared.

No examples provided.

propline_list_events ~101

List upcoming events for a sport. Returns each event's id, home_team, away_team, commence_time. Use the returned event_id to drill into per-event odds, props, +EV, or results.

NameTypeReqDescription
liveboolean–If true, only return in-progress (live) events. Defaults to false.
sport_keystringyesSport key from propline_list_sports — e.g. baseball_mlb, basketball_nba

No output schema declared.

No examples provided.

propline_list_sports ~62

List all sports PropLine currently polls. Returns sport keys (e.g. baseball_mlb, basketball_nba, soccer_epl) along with human titles and active status. Use this first to discover what sport_key values are valid for the other tools.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

propline_list_webhooks ~130

List the API key's webhook subscriptions (Streaming Lite tier and up; other tiers get a 403 with an upgrade URL). Read-only: signing secrets are always masked, and this server deliberately has no create/update/delete tools — manage subscriptions via the REST API or SDKs. Each row shows url, subscribed events (line_movement, resolution, steam, market_suspended, ev), filters (incl. min_ev_pct / max_ev_pct / ev_fair_source for ev events) and active status. Use this first to find the webhook id for propline_get_webhook_deliveries.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

propline_lookup_event_ids ~178

Free-tier endpoint. Reverse id lookup: give a sportsbook's own event id (book + book_event_id, e.g. book='pinnacle'), an ESPN event id or an MLB gamePk and get PropLine's event back with its full id crosswalk, status, completed flag and final score. Any date. Up to 50 comma-separated ids; misses come back in not_found. Useful for: 'what was the result of Pinnacle event 1612345678', 'which PropLine event is this ESPN game'.

NameTypeReqDescription
bookstring–Book key, e.g. pinnacle, draftkings, kalshi.
book_event_idstring–That book's event id(s), comma-separated.
espn_event_idstring––
mlb_game_pkstring––

No output schema declared.

No examples provided.

propline_price_parlay ~191

Hobby+ endpoint. Fair price of a parlay across games (2-15 legs), from the same no-vig fair lines as propline_get_event_ev. Returns fair_price for the parlay, each leg's fair_price and best price + book, best_legs_price, books (every book that prices all the legs: the product of its leg prices, with ev_pct), and offered_ev_pct when price is given. The fair price ASSUMES INDEPENDENT LEGS: legs on the same event are flagged same_game — say so, and use propline_price_sgp for same-game parlays. A leg that matches no fair line returns a reason and the parlay is not priced. Never present the EV as a profit guarantee.

NameTypeReqDescription
devigstring––
legsarrayyes–
pricenumber–Parlay price offered (American).

No output schema declared.

No examples provided.

propline_price_sgp ~511

Hobby+ endpoint. Prices a same-game parlay at the BOOK'S OWN correlated odds — the price a FanDuel customer would be offered for that exact slip right now, not a model of it. bookmaker is fanduel (default, its own pricer), draftkings (its SGP widget's pricer), betonlineag / lowvig (the Sportcast engine both share, same builder price), or 'all' to quote every book on the same legs in one call — then the response is {quotes, errors, best_bookmaker}, and best_bookmaker is the book charging the smallest correlation reduction (use 'all' whenever the user asks which book to bet an SGP at). Send 2-10 legs from ONE event, each named exactly as propline_get_odds names an outcome: market key, name (team / Over / Under / player for YES-only props), description (the player on a two-way prop, '' for game lines), point (omit for h2h and YES-only props), period (omit for full game) and team for a TEAM total (omit for the game total; a totals leg with no team matches the game total only) — or book_outcome_id from includeBookIds (on betonlineag / lowvig that is Sportcast's settlement id, e.g. MatchWinner_Home). The response carries sgp_price (the book's parlay price), independent_price (the product of the live single-leg prices) and correlation_factor = their ratio: below 1 the book is charging for correlation, above 1 it is paying for anti-correlation — say which when presenting it. Matching is fail-closed: a leg that does not pin to exactly one stored outcome is a 422 leg_unmatched naming the leg (an Over with no point on an event with two total lines is refused, not guessed) — fix the leg, do not retry blindly. quoted=false means the book will not offer that combination as an SGP; refused legs carry the book's own failure_code. Free tier returns the matched legs with every price nulled.

NameTypeReqDescription
bookmakerstring–fanduel (default), draftkings, betonlineag, lowvig, or all (every book side by side).
event_idstring|numberyes–
legsarrayyesLegs named exactly as /odds names an outcome.
sport_keystringyese.g. baseball_mlb

No output schema declared.

No examples provided.

propline_replay_webhook_events ~325

Re-read a webhook subscription's events in order from a cursor — answers 'my endpoint was down, what did I miss?'. Every delivery carries an X-PropLine-Sequence header, a counter monotonic WITHIN one subscription; pass the highest one the user processed as since_seq. Do NOT use the delivery id as the cursor: that id is global across all subscriptions, so gaps in it are other customers' traffic and mean nothing. Events come back OLDEST FIRST (the opposite of propline_get_webhook_deliveries, which is a newest-first debugging log). Page by passing next_seq back as since_seq while has_more is true. ALWAYS check `truncated`: true means events after the cursor already aged out of retention (2 days, max 5,000 deliveries per subscription) and are unrecoverable — tell the user to resync from the REST endpoints rather than reporting them caught up. latest_seq is not subject to retention, so latest_seq - next_seq is an honest 'how far behind' even when the rows are gone. Sequence numbers always increase and never repeat but are NOT guaranteed to be dense — a skipped number is normal and is not evidence of loss.

NameTypeReqDescription
limitnumber–Events per page, 1-500. Default 100.
since_seqnumber–Read events after this sequence. Default 0 = from the oldest retained event (which on an established subscription will correctly report truncated: true).
webhook_idnumberyesWebhook id (from propline_list_webhooks).

No output schema declared.

No examples provided.

propline_search_players ~118

Find a player by name fragment and get their stable player_id (e.g. 'mlb:677951') plus every spelling the books use (known_names). Free tier. Pass the player_id as player_name to propline_get_player_history / propline_get_player_trends to avoid name-spelling ambiguity.

NameTypeReqDescription
limitnumber–Max players to return, 1-100. Default 25.
searchstringyesName fragment to match, e.g. 'judge'
sport_keystringyes–

No output schema declared.

No examples provided.

propline_settle_bets ~298

Hobby+ endpoint. Settles PLACED bets, singles or parlays, against final results: each comes back won, lost, push, void, half_won or half_lost, with actual_value (the stat or score it settled on), payout (stake included) and profit, plus a summary. The book and the line are free: a bet at a book PropLine does not carry, or at a line nobody posted, is graded by running PropLine's grader at that line (source='computed'); a named bookmaker whose outcome was stored at that exact line uses its own grade (source='stored'). Asian quarter lines (2.75, -0.25) settle as two half-stakes. result 'pending' means the game is not graded yet — say so, do not guess. 'unmatched' carries a reason (event_not_found, no_market_for_key, no_outcome_for_selection, ambiguous_selection, cannot_compute_at_line, invalid_bet): surface those rows. For a parlay pass legs (each with its own price); any lost leg loses it and pushed/voided legs drop out. Use propline_list_events or propline_get_scores to find event_id. Max 200 bets. Stateless. Free tier returns results as 'redacted'.

NameTypeReqDescription
betsarrayyesBets to settle. A single bet uses the leg fields directly; a parlay sets legs.

No output schema declared.

No examples provided.

Install

How do I install the PropLine — Sports Betting Odds & Prop Resolution MCP server?

PropLine — Sports Betting Odds & Prop Resolution runs locally as an npm package, launched with npx -y propline-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

npm · propline-mcp

# add to Claude Code
claude mcp add proplineapi-propline-mcp -- npx -y propline-mcp
Common questions

What is the PropLine — Sports Betting Odds & Prop Resolution MCP server?

PropLine — Sports Betting Odds & Prop Resolution is an MCP server listed in the public MCP registry as io.github.proplineapi/propline-mcp. Live odds, cross-book +EV and graded player-prop results across 37 books. Hosted endpoint included. This page covers its npm package (propline-mcp).

Is the PropLine — Sports Betting Odds & Prop Resolution MCP server safe to use?

PropLine — Sports Betting Odds & Prop Resolution scores 91 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 5 November 2026. It declares no install or post-install scripts. Its build provenance is signed and verified. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the PropLine — Sports Betting Odds & Prop Resolution MCP server expose?

PropLine — Sports Betting Odds & Prop Resolution exposes 43 tools: propline_list_sports, propline_list_events, propline_list_event_markets, propline_get_odds, propline_get_odds_history, and 38 more. Their descriptions and schemas cost roughly 10,698 tokens of context every time the server is loaded.

Is the PropLine — Sports Betting Odds & Prop Resolution MCP server still maintained?

PropLine — Sports Betting Odds & Prop Resolution is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

What licence is the PropLine — Sports Betting Odds & Prop Resolution MCP server under?

PropLine — Sports Betting Odds & Prop Resolution declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.