propline-mcp 0.35.4 → 0.36.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/http.js +12 -5
- package/dist/http.js.map +1 -1
- package/dist/index.js +12 -5
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -31,7 +31,7 @@ The model uses these tools transparently:
|
|
|
31
31
|
| `propline_get_odds_history` | Hobby+: snapshot history per outcome; supports `period` (q1/h1/…) plus time-window filters (from/to, relative_from/relative_to, interval, changes_only) |
|
|
32
32
|
| `propline_get_odds_closing` | Hobby+: opening **and** closing line per (book, market, outcome) — CLV helper. Accepts `period` to scope to a specific game period. |
|
|
33
33
|
| `propline_grade_clv` | Hobby+: grade **placed** bets against their closing lines. Returns closing price, de-vigged closing fair (`fair_source` = sharpest book at close, not yours), `clv_pct` (price-vs-price, vig-blind) **and** `ev_vs_close_pct` (the honest number), plus the graded result once the game settles. Fail-closed matching; unstarted events come back `closing_is_final: false` and are excluded from the averages. |
|
|
34
|
-
| `propline_price_sgp` | Hobby+: price a same-game parlay at the **book's own** correlated odds (FanDuel, BetOnline, LowVig). Returns `sgp_price`, `independent_price` (product of the live single-leg prices) and `correlation_factor` (their ratio). Legs are named exactly as `/odds` names an outcome; matching is fail-closed. |
|
|
34
|
+
| `propline_price_sgp` | Hobby+: price a same-game parlay at the **book's own** correlated odds (FanDuel, DraftKings, BetOnline, LowVig — or `bookmaker: "all"` for every book side by side with `best_bookmaker`). Returns `sgp_price`, `independent_price` (product of the live single-leg prices) and `correlation_factor` (their ratio). Legs are named exactly as `/odds` names an outcome; matching is fail-closed. |
|
|
35
35
|
| `propline_export_odds_history` | Backfill-pass / Enterprise: bulk line-movement tick history (every snapshot, per book) for a sport. Requires a `since`/`until` window; result capped to 200 rows (use the REST endpoint directly for the full file). |
|
|
36
36
|
| `propline_get_futures` | Season-long futures — championship/division/conference winners, MVP + awards, season win totals — across Bovada/FanDuel/DraftKings/Pinnacle/Kalshi (free) |
|
|
37
37
|
| `propline_get_scores` | Game scores + status (free) |
|
|
@@ -46,7 +46,7 @@ The model uses these tools transparently:
|
|
|
46
46
|
| `propline_get_player_history` | Player prop history with resolution |
|
|
47
47
|
| `propline_get_player_games` | Player game log — recent games with every raw box-score stat per game, one call instead of one per event; `opponent` gives head-to-head (last N *meetings*). Raw-stat archive, so it includes games no book priced |
|
|
48
48
|
| `propline_get_player_trends` | Hit-rate trends — over/under/push splits over last 5/10/20/50 graded games, streak, avg actual (optional `dfs_odds_type` to scope to a PrizePicks flavor) |
|
|
49
|
-
| `propline_get_event_ev` | Pro: cross-book +EV with no-vig fair lines |
|
|
49
|
+
| `propline_get_event_ev` | Pro: cross-book +EV with no-vig fair lines (`devig`: multiplicative or shin) |
|
|
50
50
|
| `propline_get_event_projections` | Hobby+: market-implied consensus projection per (market, player) |
|
|
51
51
|
| `propline_get_best_line` | Hobby+: cross-book line shopping — best price per (market, player, line) across all comparable books, `all_prices` sorted best-first; optional `bookmakers` filter |
|
|
52
52
|
| `propline_list_webhooks` | Streaming Lite+: list webhook subscriptions (read-only, secrets masked) |
|
package/dist/http.js
CHANGED
|
@@ -259,7 +259,8 @@ var PropLineClient = class {
|
|
|
259
259
|
getEventEv(sportKey, eventId, opts = {}) {
|
|
260
260
|
return this.request(`/v1/sports/${sportKey}/events/${eventId}/ev`, {
|
|
261
261
|
markets: opts.markets,
|
|
262
|
-
bookmakers: opts.bookmakers
|
|
262
|
+
bookmakers: opts.bookmakers,
|
|
263
|
+
devig: opts.devig
|
|
263
264
|
});
|
|
264
265
|
}
|
|
265
266
|
getEventProjections(sportKey, eventId, opts = {}) {
|
|
@@ -299,7 +300,7 @@ var PropLineClient = class {
|
|
|
299
300
|
};
|
|
300
301
|
|
|
301
302
|
// src/server.ts
|
|
302
|
-
var VERSION = "0.
|
|
303
|
+
var VERSION = "0.36.0";
|
|
303
304
|
var DEMO_KEY = "be2b8487fcfacb1fbc292a8aa925a84c";
|
|
304
305
|
var apiKey = process.env.PROPLINE_API_KEY;
|
|
305
306
|
var baseUrl = process.env.PROPLINE_BASE_URL;
|
|
@@ -597,7 +598,7 @@ var tools = [
|
|
|
597
598
|
{
|
|
598
599
|
name: "propline_price_sgp",
|
|
599
600
|
title: "Price a same-game parlay at the book's own odds",
|
|
600
|
-
description: "Hobby+ endpoint. Prices a same-game parlay at the BOOK'S OWN correlated odds \u2014 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)
|
|
601
|
+
description: "Hobby+ endpoint. Prices a same-game parlay at the BOOK'S OWN correlated odds \u2014 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 \u2014 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) \u2014 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 \u2014 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) \u2014 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.",
|
|
601
602
|
inputSchema: {
|
|
602
603
|
type: "object",
|
|
603
604
|
properties: {
|
|
@@ -605,7 +606,7 @@ var tools = [
|
|
|
605
606
|
event_id: { type: ["string", "number"] },
|
|
606
607
|
bookmaker: {
|
|
607
608
|
type: "string",
|
|
608
|
-
description: "fanduel (default), betonlineag or
|
|
609
|
+
description: "fanduel (default), draftkings, betonlineag, lowvig, or all (every book side by side)."
|
|
609
610
|
},
|
|
610
611
|
legs: {
|
|
611
612
|
type: "array",
|
|
@@ -1001,6 +1002,11 @@ var tools = [
|
|
|
1001
1002
|
min_ev_pct: {
|
|
1002
1003
|
type: "number",
|
|
1003
1004
|
description: "Filter to outcomes with EV \u2265 this percent (e.g. 2.0)."
|
|
1005
|
+
},
|
|
1006
|
+
devig: {
|
|
1007
|
+
type: "string",
|
|
1008
|
+
enum: ["multiplicative", "shin"],
|
|
1009
|
+
description: "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 and corrects the favourite-longshot bias \u2014 use it when the user asks about longshot props (anytime TD, first scorer). The response echoes devig_method; say which method the numbers came from."
|
|
1004
1010
|
}
|
|
1005
1011
|
},
|
|
1006
1012
|
required: ["sport_key", "event_id"],
|
|
@@ -1012,7 +1018,8 @@ var tools = [
|
|
|
1012
1018
|
args.event_id,
|
|
1013
1019
|
{
|
|
1014
1020
|
markets: args.markets,
|
|
1015
|
-
bookmakers: args.bookmakers
|
|
1021
|
+
bookmakers: args.bookmakers,
|
|
1022
|
+
devig: args.devig
|
|
1016
1023
|
}
|
|
1017
1024
|
);
|
|
1018
1025
|
return filterByMinEv(res, args.min_ev_pct);
|