Skip to main content
Glama

Lumify Sports Intelligence

list_forecasts

Read-onlyIdempotent

Daily board of forecasted wagers from Lumify's model — a prediction, not a beat-the-market claim (no OOS/independence gate; see list_ev for the gated main-line +EV claim). Player props (rate model) on MLB, NCAAF, NFL, NBA, NCAAB, NHL. High-confidence main-line picks on tennis, NFL, NCAAF, MLB, and soccer: one side per moneyline / spread / total when the uncertainty band does not include a coin flip. Tennis moneyline is ranking Bradley-Terry; tennis spreads/totals are a Normal-approx games model. Other sports use the published assessment probability. Each wager has p_hit, conviction, and posted books prices. Use list_ev to scan main lines by sharp-fair price gap; use this tool to scan high-probability forecasts. reliability is emerging on v0. 1 credit; empty slate is still 200. How + field catalog: https://lumify.ai/docs/forecasts Worked wager: https://lumify.ai/docs/understanding-odds#forecasts

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
dateNoUTC slate date YYYY-MM-DD. Defaults to today UTC.
limitNoMax wagers (1–100). Default 25.
sportYesSport slug: mlb, ncaaf, nfl, nba, ncaab, nhl, tennis, or soccer.
marketNoMain-line family filter (h2h, spreads, or totals). Main-line sports publish a high-confidence side of each family when the lean clears the coin-flip gate. Ignored on prop-only sports (nba, ncaab, nhl).

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
dateNoUTC slate date (YYYY-MM-DD).
sportNoSport slug this slate was scored for.
totalNoCount of wagers on this page.
wagersNoSelected forecasted wagers, highest conviction first. Read p_hit as P(the picked outcome — side on prop rows, bet_type on main-line rows — hits); conviction is the board rank. How + field catalog: https://lumify.ai/docs/forecasts
reliabilityNoDefault badge on this slate. v0 ships emerging; each wager repeats the same field.
model_versionNoScorer version (forecast-v0).

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed3 schema fields changed
    • changedInput schema / properties / market / description
      Previous value: -"Main-line family filter (h2h, spreads, or totals). Tennis publishes all three (moneyline, game-handicap, total-games). Ignored on prop-only sports."New value: +"Main-line family filter (h2h, spreads, or totals). Main-line sports publish a high-confidence side of each family when the lean clears the coin-flip gate. Ignored on prop-only sports (nba, ncaab, nhl)."
    • changedInput schema / properties / sport / description
      Previous value: -"Sport slug: mlb, ncaaf, nfl, nba, ncaab, nhl, or tennis."New value: +"Sport slug: mlb, ncaaf, nfl, nba, ncaab, nhl, tennis, or soccer."
    • changedOutput schema / properties / wagers / items / properties / research / description
      Previous value: -"Optional Deep Research overlay when the background job has written a row for this wager — every wager on the daily board (selected: true), plus other high-probability wagers (p_hit ≥ 0.80) in the catalog: {stance, conviction, note}. stance is validate / neutral / invalidate. note is the wager-level why. Validate / invalidate rows always carry a note. Validate nudges p_hit up by at most 0.03 and lifts conviction. Invalidate drops the wager from forecasts[] and the daily board — it is not a recommended pick. The chosen side stays. Null means read p_hit from the rate model alone."New value: +"Optional Deep Research overlay when the background job has written a row for this wager — every wager on the daily board (selected: true), plus other high-probability wagers (p_hit ≥ 0.80) in the catalog: {stance, conviction, note}. stance is validate / neutral / invalidate. note is the wager-level why — on a selected main-line row it is also copied to bets[].narrative. Validate / invalidate rows always carry a note. Validate nudges p_hit up by at most 0.03 and lifts conviction. Invalidate drops the wager from forecasts[] and the daily board — it is not a recommended pick. The chosen side stays. Null means read p_hit from the rate model alone."
  2. Changed1 schema field changed
    • changedOutput schema / properties / wagers / items / properties / market / description
      Previous value: -"Player-prop rows: prop category (counting stats). MLB: strikeouts_pitcher, hits, rbis, runs, strikeouts_batter, hits_allowed, earned_runs, outs_recorded. NFL/NCAAF: passing/rushing/receiving_yards, receptions, passing_tds, rushing_tds, touchdowns (anytime-TD combo: rushing + receiving + defensive TDs). NBA/NCAAB: points, rebounds, assists, steals, blocks, threes_made. NHL: goals, hockey_assists, shots_on_goal. Main-line rows (bet_type set): the main-line family — h2h, spreads, or totals."New value: +"Player-prop rows: prop category (counting stats). MLB: strikeouts_pitcher, hits, rbis, runs, strikeouts_batter, hits_allowed, earned_runs, outs_recorded. NFL/NCAAF: passing/rushing/receiving_yards, receptions, passing_tds, rushing_tds, touchdowns (anytime-TD combo: rushing + receiving + defensive TDs), rush_rec_yards, pass_rush_yards. NBA/NCAAB: points, rebounds, assists, steals, blocks, threes_made. NHL: goals, hockey_assists, shots_on_goal. Main-line rows (bet_type set): the main-line family — h2h, spreads, or totals."
  3. Changed1 schema field changed
    • changedOutput schema / properties / wagers / items / properties / research / description
      Previous value: -"Optional Deep Research overlay on high-probability wagers (p_hit ≥ 0.80): {stance, conviction, note}. stance is validate / neutral / invalidate. note is the wager-level why. Validate / invalidate rows always carry a note. Validate nudges p_hit up by at most 0.03 and lifts conviction. Invalidate drops the wager from forecasts[] and the daily board — it is not a recommended pick. The chosen side stays. Null means read p_hit from the rate model alone."New value: +"Optional Deep Research overlay when the background job has written a row for this wager — every wager on the daily board (selected: true), plus other high-probability wagers (p_hit ≥ 0.80) in the catalog: {stance, conviction, note}. stance is validate / neutral / invalidate. note is the wager-level why. Validate / invalidate rows always carry a note. Validate nudges p_hit up by at most 0.03 and lifts conviction. Invalidate drops the wager from forecasts[] and the daily board — it is not a recommended pick. The chosen side stays. Null means read p_hit from the rate model alone."
  4. Added
  5. Removed
  6. Changed1 schema field changed
    • changedOutput schema / properties / wagers / items / properties / research / description
      Previous value: -"Optional Deep Research overlay on high-probability wagers (p_hit ≥ 0.80): {stance, conviction, note}. stance is validate / neutral / invalidate. note is the wager-level why. Validate / invalidate rows always carry a note. Validate nudges p_hit up by at most 0.03 and lifts conviction; invalidate does the reverse. The chosen side stays. Null means read p_hit from the rate model alone."New value: +"Optional Deep Research overlay on high-probability wagers (p_hit ≥ 0.80): {stance, conviction, note}. stance is validate / neutral / invalidate. note is the wager-level why. Validate / invalidate rows always carry a note. Validate nudges p_hit up by at most 0.03 and lifts conviction. Invalidate drops the wager from forecasts[] and the daily board — it is not a recommended pick. The chosen side stays. Null means read p_hit from the rate model alone."
  7. Changed1 schema field changed
    • changedOutput schema / properties / wagers / items / properties / market / description
      Previous value: -"Player-prop rows: prop category (1:1 counting stats). MLB: strikeouts_pitcher, hits, rbis, runs, strikeouts_batter, hits_allowed, earned_runs, outs_recorded. NFL/NCAAF: passing/rushing/receiving_yards, receptions. NBA/NCAAB: points, rebounds, assists, steals, blocks, threes_made. NHL: goals, hockey_assists, shots_on_goal. Main-line rows (bet_type set): the main-line family — h2h, spreads, or totals."New value: +"Player-prop rows: prop category (counting stats). MLB: strikeouts_pitcher, hits, rbis, runs, strikeouts_batter, hits_allowed, earned_runs, outs_recorded. NFL/NCAAF: passing/rushing/receiving_yards, receptions, passing_tds, rushing_tds, touchdowns (anytime-TD combo: rushing + receiving + defensive TDs). NBA/NCAAB: points, rebounds, assists, steals, blocks, threes_made. NHL: goals, hockey_assists, shots_on_goal. Main-line rows (bet_type set): the main-line family — h2h, spreads, or totals."
  8. Changed1 schema field changed
    • changedOutput schema / properties / wagers / items / properties / market / description
      Previous value: -"Player-prop rows: Owls prop category (1:1 counting stats). MLB: strikeouts_pitcher, hits, rbis, runs, strikeouts_batter, hits_allowed, earned_runs, outs_recorded. NFL/NCAAF: passing/rushing/receiving_yards, receptions. NBA/NCAAB: points, rebounds, assists, steals, blocks, threes_made. NHL: goals, hockey_assists, shots_on_goal. Main-line rows (bet_type set): the main-line family — h2h, spreads, or totals."New value: +"Player-prop rows: prop category (1:1 counting stats). MLB: strikeouts_pitcher, hits, rbis, runs, strikeouts_batter, hits_allowed, earned_runs, outs_recorded. NFL/NCAAF: passing/rushing/receiving_yards, receptions. NBA/NCAAB: points, rebounds, assists, steals, blocks, threes_made. NHL: goals, hockey_assists, shots_on_goal. Main-line rows (bet_type set): the main-line family — h2h, spreads, or totals."
  9. Changed2 schema fields changed
    • changedInput schema / properties / market / description
      Previous value: -"Main-line family filter (h2h, spreads, or totals). Tennis publishes h2h only. Ignored on prop-only sports."New value: +"Main-line family filter (h2h, spreads, or totals). Tennis publishes all three (moneyline, game-handicap, total-games). Ignored on prop-only sports."
    • changedOutput schema / properties / wagers / items / properties / bet_type / description
      Previous value: -"Main-line token when this row is a main-line forecast — ML_P1/ML_P2/ML_HOME/ML_AWAY/ML_DRAW, SPREAD_P1/SPREAD_P2/SPREAD_HOME/SPREAD_AWAY, or OVER/UNDER (same vocabulary as get_intelligence bets[].bet_type and list_ev). Null on player-prop rows — that's the discriminator between the two row shapes. Tennis moneyline rows set ML_P1 / ML_P2."New value: +"Main-line token when this row is a main-line forecast — ML_P1/ML_P2/ML_HOME/ML_AWAY/ML_DRAW, SPREAD_P1/SPREAD_P2/SPREAD_HOME/SPREAD_AWAY, or OVER/UNDER (same vocabulary as get_intelligence bets[].bet_type and list_ev). Null on player-prop rows — that's the discriminator between the two row shapes. Tennis sets ML_P1/ML_P2 (moneyline), SPREAD_P1/SPREAD_P2 (game handicap), and OVER/UNDER (total games)."
  10. Changed3 schema fields changed
    • changedInput schema / properties / market / description
      Previous value: -"Main-line family filter (h2h, spreads, or totals) for a sport's main-line forecast rows, once one exists. No sport publishes main-line forecasts today, so this has no effect yet. Ignored on prop-only sports."New value: +"Main-line family filter (h2h, spreads, or totals). Tennis publishes h2h only. Ignored on prop-only sports."
    • changedInput schema / properties / sport / description
      Previous value: -"Sport slug: mlb, ncaaf, nfl, nba, ncaab, or nhl."New value: +"Sport slug: mlb, ncaaf, nfl, nba, ncaab, nhl, or tennis."
    • changedOutput schema / properties / wagers / items / properties / bet_type / description
      Previous value: -"Main-line token when this row is a main-line forecast — ML_P1/ML_P2/ML_HOME/ML_AWAY/ML_DRAW, SPREAD_P1/SPREAD_P2/SPREAD_HOME/SPREAD_AWAY, or OVER/UNDER (same vocabulary as get_intelligence bets[].bet_type and list_ev). Null on player-prop rows — that's the discriminator between the two row shapes. No sport ships a non-null bet_type here yet."New value: +"Main-line token when this row is a main-line forecast — ML_P1/ML_P2/ML_HOME/ML_AWAY/ML_DRAW, SPREAD_P1/SPREAD_P2/SPREAD_HOME/SPREAD_AWAY, or OVER/UNDER (same vocabulary as get_intelligence bets[].bet_type and list_ev). Null on player-prop rows — that's the discriminator between the two row shapes. Tennis moneyline rows set ML_P1 / ML_P2."
  11. Changed20 schema fields changed
    • addedInput schema / properties / market
      Added value: +{
      +  "description": "Main-line family filter (h2h, spreads, or totals) for a sport's main-line forecast rows, once one exists. No sport publishes main-line forecasts today, so this has no effect yet. Ignored on prop-only sports.",
      +  "enum": [
      +    "h2h",
      +    "spreads",
      +    "totals"
      +  ],
      +  "type": "string"
      +}
    • changedOutput schema / properties / wagers / description
      Previous value: -"Selected forecasted wagers, highest conviction first. Read p_hit as P(side hits the posted line); conviction is the board rank. How + field catalog: https://lumify.ai/docs/forecasts"New value: +"Selected forecasted wagers, highest conviction first. Read p_hit as P(the picked outcome — side on prop rows, bet_type on main-line rows — hits); conviction is the board rank. How + field catalog: https://lumify.ai/docs/forecasts"
    • addedOutput schema / properties / wagers / items / properties / bet_type
      Added value: +{
      +  "description": "Main-line token when this row is a main-line forecast — ML_P1/ML_P2/ML_HOME/ML_AWAY/ML_DRAW, SPREAD_P1/SPREAD_P2/SPREAD_HOME/SPREAD_AWAY, or OVER/UNDER (same vocabulary as get_intelligence bets[].bet_type and list_ev). Null on player-prop rows — that's the discriminator between the two row shapes. No sport ships a non-null bet_type here yet.",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • changedOutput schema / properties / wagers / items / properties / books / description
      Previous value: -"American price for the chosen side, keyed by bookmaker slug (e.g. {draftkings: -453}). Posted market price for the side the model picked."New value: +"American price for the picked outcome, keyed by bookmaker slug (e.g. {draftkings: -453}). Posted market price for the side/bet_type the model picked."
    • changedOutput schema / properties / wagers / items / properties / drivers / description
      Previous value: -"Signed contributions that moved p_hit. Read input as the player's measured rate and effect as how far that rate lifts the chosen side versus a league-mean player."New value: +"Signed contributions that moved p_hit. Read input as the measured rate/rating behind the pick and effect as how far it lifts the chosen outcome versus a baseline."
    • changedOutput schema / properties / wagers / items / properties / drivers / items / properties / effect / description
      Previous value: -"Signed shift in p_hit versus a league-mean player on the same line. 0.0 on yardage markets."New value: +"Signed shift in p_hit versus a baseline case on the same line. 0.0 on yardage markets."
    • changedOutput schema / properties / wagers / items / properties / drivers / items / properties / id / description
      Previous value: -"e.g. player.l10_rate — the recent-form rate that fed Poisson."New value: +"Prop rows: typically player.l10_rate — the recent-form rate that fed Poisson. Main-line rows would use a different namespace once a main-line forecast model ships."
    • changedOutput schema / properties / wagers / items / properties / drivers / items / properties / input / description
      Previous value: -"Measured rate in counting-stat units per game after shrinkage."New value: +"Measured rate/rating behind this driver, in native units."
    • changedOutput schema / properties / wagers / items / properties / line / description
      Previous value: -"Posted Over/Under main line the model was scored against."New value: +"Posted line the model was scored against. Prop and totals main-line rows: Over/Under number. Spreads main-line rows: the spread number. Null on h2h/moneyline rows."
    • changedOutput schema / properties / wagers / items / properties / line / type
      Previous value: -"number"New value: +[
      +  "number",
      +  "null"
      +]
    • changedOutput schema / properties / wagers / items / properties / market / description
      Previous value: -"Owls prop category (1:1 counting stats). MLB: strikeouts_pitcher, hits, rbis, runs, strikeouts_batter, hits_allowed, earned_runs, outs_recorded. NFL/NCAAF: passing/rushing/receiving_yards, receptions. NBA/NCAAB: points, rebounds, assists, steals, blocks, threes_made. NHL: goals, hockey_assists, shots_on_goal."New value: +"Player-prop rows: Owls prop category (1:1 counting stats). MLB: strikeouts_pitcher, hits, rbis, runs, strikeouts_batter, hits_allowed, earned_runs, outs_recorded. NFL/NCAAF: passing/rushing/receiving_yards, receptions. NBA/NCAAB: points, rebounds, assists, steals, blocks, threes_made. NHL: goals, hockey_assists, shots_on_goal. Main-line rows (bet_type set): the main-line family — h2h, spreads, or totals."
    • changedOutput schema / properties / wagers / items / properties / p_hit / description
      Previous value: -"Model probability (0–1) that side hits line, from the player's shrunken counting-stat rate (Poisson vs the posted Over/Under). Optional research may nudge this by at most ±0.03; the side stays."New value: +"Model probability (0–1) that the picked outcome (side on prop rows, bet_type on main-line rows) hits. Prop rows: built from the player's shrunken counting-stat rate (Poisson vs the posted Over/Under). Optional research may nudge a prop's p_hit by at most ±0.03; the chosen side stays the same."
    • changedOutput schema / properties / wagers / items / properties / player / description
      Previous value: -"Player display name from the priced line."New value: +"Player display name from the priced line. Null on main-line rows with no player attribution (bet_type is a match-level token like OVER/UNDER/ML_DRAW)."
    • changedOutput schema / properties / wagers / items / properties / player / type
      Previous value: -"string"New value: +[
      +  "string",
      +  "null"
      +]
    • changedOutput schema / properties / wagers / items / properties / player_id / description
      Previous value: -"Lumify player ID. Bound by exact / Jr-stripped name match."New value: +"Lumify player ID. Bound by exact / Jr-stripped name match. Null on main-line rows with no player attribution."
    • changedOutput schema / properties / wagers / items / properties / player_id / type
      Previous value: -"integer"New value: +[
      +  "integer",
      +  "null"
      +]
    • addedOutput schema / properties / wagers / items / properties / player_role
      Added value: +{
      +  "description": "'home'/'away' for team sports or 'p1'/'p2' for head-to-head sports, set only alongside a non-null bet_type. Null for player-prop rows and for match-level main-line tokens (OVER, UNDER, ML_DRAW).",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • changedOutput schema / properties / wagers / items / properties / research / description
      Previous value: -"Optional Deep Research overlay: {stance, conviction, note}. stance is validate / neutral / invalidate. Validate nudges p_hit up by at most 0.03 and lifts conviction; invalidate does the reverse. The chosen side stays. Null means read p_hit from the rate model alone."New value: +"Optional Deep Research overlay on high-probability wagers (p_hit ≥ 0.80): {stance, conviction, note}. stance is validate / neutral / invalidate. note is the wager-level why. Validate / invalidate rows always carry a note. Validate nudges p_hit up by at most 0.03 and lifts conviction; invalidate does the reverse. The chosen side stays. Null means read p_hit from the rate model alone."
    • changedOutput schema / properties / wagers / items / properties / side / description
      Previous value: -"'over' or 'under' — the more likely side given the player's shrunken rate versus line."New value: +"Prop rows: 'over' or 'under' — the more likely side given the player's shrunken rate versus line. Null on main-line rows — read the picked outcome from bet_type instead."
    • changedOutput schema / properties / wagers / items / properties / side / type
      Previous value: -"string"New value: +[
      +  "string",
      +  "null"
      +]
  12. Added

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the tool read-only, idempotent, and non-destructive. The description adds meaningful behavioral context beyond that: it clarifies this is not an OOS/independence-gated claim, notes that reliability is emerging on v0, states the cost as 1 credit, and reveals that an empty slate still returns 200. It also explains that market filtering is ignored on prop-only sports, which is a subtle behavior an agent needs to know.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but information-rich. It front-loads the core purpose and sibling differentiation, then adds behavioral and model context. A few sentences about model methodology (e.g., Bradley-Terry) are more than strictly necessary for invocation, but they support trust calibration healthy for a forecasting tool. Overall it earns each sentence, though it is longer than a minimal definition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with an output schema and minimal required parameters, this description is remarkably complete. It covers purpose, scope, sport coverage, market behavior, field expectations (p_hit, conviction, posted books prices), cost, empty-slate behavior, and links to full documentation. There are no obvious gaps that would prevent an agent from invoking it correctly or choosing it over list_ev.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already has 100% description coverage, so the baseline is 3. The description adds useful semantics beyond the schema by enumerating which sports have player props vs. main-line picks)Skip? Actually, the description names sports and market applicability, and clarifies the meaning of market for prop-only sports. This adds value over the plain schema descriptions, justifying a 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the tool as a daily board of forecasted wagers from Lumify's model, specifying the exact resource being listed. It also distinguishes itself from list_ev by explaining that this is a high-probability forecast tool, not a beat-the-market claim. This makes the purpose unambiguous and differentiates it from the closest sibling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says when to use this tool: 'use this tool to scan high-probability forecasts' and contrasts it with list_ev for sharp-fair price gap scanning. It also explains the coverage by sport and market type, and clarifies that market is ignored on prop-only sports. This is strong, actionable guidance for an agent deciding between tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.