Skip to main content
Glama

Prediction Markets Quant

NFL Win Probability Calculator

nfl_win_probability
Read-only

Use for "who wins Chiefs vs 49ers" and "what does a -7 spread mean". Pass homeTeam + awayTeam (or game, or one team) for our QB-gated model line (raw power ratings if unscheduled), or a spread (home favored negative). Returns win, cover and over/under probability, the projected score and our own total; neutral-site games get no home edge.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
gameNoOr name the game in one string — "Bills vs Chiefs", "BUF@KC", "Buffalo at Kansas City". The schedule decides which side is home.
totalNoGame total (over/under points) — this is the LINE you want tested, not our projection. Defaults to the model’s league-average total if omitted. Our own projected total comes back as `model_total` regardless of what you pass here (teams mode only).
spreadNoPoint spread from the home team's perspective — home favored is NEGATIVE (e.g. -6.5). Provide this OR homeTeam+awayTeam.
awayTeamNoAway team — same formats as homeTeam (SF, 49ers, San Francisco 49ers). Used with homeTeam.
homeTeamNoHome team — abbrev (KC), nickname (Chiefs), full name (Kansas City Chiefs) or city (Kansas City) all work. Auto-derives the spread from PMP power ratings.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
basisNoHow the spread was derived.
qb_gateNoPASS/ADJUSTED/FORK (quote both fork_lines)/HOLD (no number).
sourcesNo
over_pctNoProbability the game goes over `total`, %.
tell_userNoShow this sentence to the user first.
this_weekNoThis week's games as { homeTeam, awayTeam } (when no game was named).
timestampNo
model_totalNoOur own projected total (teams mode).
needs_inputNo
spread_homeNoExpected home margin in points — positive = home favored (the input `spread` uses the opposite sign). Same value as expected_home_margin.
away_win_pctNoAway win probability, %.
example_callNo
home_win_pctNoHome win probability, %.
data_freshnessNo
home_cover_pctNoHome cover probability, %.
interpreted_asNoWhich teams the inputs were read as.
expected_home_marginNoExpected home margin in points — positive = home favored.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / total / description
      Previous value: -"Game total (over/under points) — this is the LINE you want tested, not our projection. Defaults to the fitted league baseline (NFL_MODEL_CONSTANTS.TOTAL_BASELINE) if omitted. Our own projected total comes back as `model_total` regardless of what you pass here (teams mode only)."New value: +"Game total (over/under points) — this is the LINE you want tested, not our projection. Defaults to the model’s league-average total if omitted. Our own projected total comes back as `model_total` regardless of what you pass here (teams mode only)."
  2. Changed1 schema field changed
    • addedOutput schema / properties / qb_gate
      Added value: +{
      +  "description": "PASS/ADJUSTED/FORK (quote both fork_lines)/HOLD (no number)."
      +}
  3. Changed2 schema fields changed
    • addedOutput schema / properties / expected_home_margin
      Added value: +{
      +  "description": "Expected home margin in points — positive = home favored."
      +}
    • changedOutput schema / properties / spread_home / description
      Previous value: -"Expected home margin in points — positive = home favored (the input `spread` uses the opposite sign)."New value: +"Expected home margin in points — positive = home favored (the input `spread` uses the opposite sign). Same value as expected_home_margin."
  4. Changed1 schema field changed
    • changedOutput schema / properties / spread_home / description
      Previous value: -"Spread used, home side (favored negative)."New value: +"Expected home margin in points — positive = home favored (the input `spread` uses the opposite sign)."
  5. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "$schema": "https://json-schema.org/draft/2020-12/schema",
      +  "additionalProperties": {},
      +  "properties": {
      +    "away_win_pct": {
      +      "description": "Away win probability, %."
      +    },
      +    "basis": {
      +      "description": "How the spread was derived."
      +    },
      +    "data_freshness": {},
      +    "example_call": {},
      +    "home_cover_pct": {
      +      "description": "Home cover probability, %."
      +    },
      +    "home_win_pct": {
      +      "description": "Home win probability, %."
      +    },
      +    "interpreted_as": {
      +      "description": "Which teams the inputs were read as."
      +    },
      +    "model_total": {
      +      "description": "Our own projected total (teams mode)."
      +    },
      +    "needs_input": {},
      +    "over_pct": {
      +      "description": "Probability the game goes over `total`, %."
      +    },
      +    "sources": {},
      +    "spread_home": {
      +      "description": "Spread used, home side (favored negative)."
      +    },
      +    "tell_user": {
      +      "description": "Show this sentence to the user first.",
      +      "type": "string"
      +    },
      +    "this_week": {
      +      "description": "This week's games as { homeTeam, awayTeam } (when no game was named)."
      +    },
      +    "timestamp": {
      +      "type": "string"
      +    }
      +  },
      +  "type": "object"
      +}
  6. Changed1 schema field changed
    • addedInput schema / properties / game
      Added value: +{
      +  "description": "Or name the game in one string — \"Bills vs Chiefs\", \"BUF@KC\", \"Buffalo at Kansas City\". The schedule decides which side is home.",
      +  "type": "string"
      +}
  7. Changed1 schema field changed
    • changedInput schema / properties / total / description
      Previous value: -"Game total (over/under points) — this is the LINE you want tested, not our projection. Defaults to the league baseline (44) if omitted. Our own projected total comes back as `model_total` regardless of what you pass here (teams mode only)."New value: +"Game total (over/under points) — this is the LINE you want tested, not our projection. Defaults to the fitted league baseline (NFL_MODEL_CONSTANTS.TOTAL_BASELINE) if omitted. Our own projected total comes back as `model_total` regardless of what you pass here (teams mode only)."
  8. Changed1 schema field changed
    • changedInput schema / properties / total / description
      Previous value: -"Game total (over/under points). Defaults to the league baseline (44) if omitted."New value: +"Game total (over/under points) — this is the LINE you want tested, not our projection. Defaults to the league baseline (44) if omitted. Our own projected total comes back as `model_total` regardless of what you pass here (teams mode only)."
  9. First observed

TDQS

A4/5.0
Behavior4/5

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

Annotations already establish readOnly/non-destructive/closed-world, so the bar is lower, and the description still adds real behavioral context: it is a QB-gated model, falls back to raw power ratings for unscheduled games, auto-derives the spread from PMP ratings, and gives neutral-site games no home edge. Those model-level traits go well beyond the annotation surface.

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 two sentences are front-loaded with the triggering example queries before the mechanics, and every clause (input combos, spread sign, return set, neutral-site rule) carries information. It is dense and heavily parenthetical, which costs a little readability, but nothing is filler.

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

Completeness4/5

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

An output schema exists so return values need not be described, yet the description still summarizes them and covers the key edge cases (unscheduled games, neutral sites, model_total vs supplied total). For a 5-param zero-required tool this is essentially complete, with only the absence of named-alternative routing keeping it from the top.

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?

Schema coverage is 100%, so the baseline is 3; the description earns more by clarifying the spread sign convention (home favored negative) and the OR-combination logic across homeTeam+awayTeam / game / single team / spread that the schema does not state as a decision. It adds combination guidance rather than merely restating field docs.

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

Purpose4/5

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

The description names a concrete verb+resource (NFL win probability), pairs it with two example user phrasings so intent-matching is trivial, and pins down the output family (win, cover, over/under probability, projected score). It implicitly separates itself from NFL power-rating siblings by calling this "our QB-gated model line," though it never names another tool explicitly.

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

Usage Guidelines4/5

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

It gives clear, actionable usage context: pass homeTeam+awayTeam, or game, or a single team, or a spread. The example queries ("who wins Chiefs vs 49ers", "what does a -7 spread mean") anchor when to reach for it. It stops short of any explicit when-not-to-use or named alternative, so it is strong context rather than full routing guidance.

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.