nfl-stats-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@nfl-stats-mcpShow me Saquon Barkley's 2024 game log."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
🏈 nfl-stats-mcp
An MCP server that lets Claude (or any MCP client) answer real NFL questions with real data: 25+ years of play-by-play and player stats from nflverse, updated weekly during the season.
You: Which QBs have been best on 3rd-and-long across the 2024 and 2025 seasons?
Claude: calls
situational_stats(downs=[3], min_yards_to_go=7, play_kind="pass", group_by="passer", seasons=[2024, 2025], min_plays=100)Brock Purdy leads with +0.31 EPA per dropback on 3rd-and-7+ (102 plays, 45% success rate, 0 INTs), followed by Jared Goff (+0.18) and Drake Maye (+0.15)…
Why this exists
LLMs are great at football talk but unreliable with football numbers. They hallucinate stats, mix up seasons and can't compute anything situational. This server gives the model a small set of well-described, read-only tools over a trustworthy dataset, so it can look things up instead of guessing.
Related MCP server: NFL Data MCP Server
Tools
Tool | What it answers |
| EPA/play, success rate and yards/play for any game situation: down & distance, red zone, quarter, score, two-minute drill, shotgun… Grouped by passer, rusher, receiver, offense or defense. |
| Top-N players for any counting stat ( |
| One player's season totals or game log, with empty categories removed. |
| A team's schedule, results, record, point spreads and venues. |
| Disambiguates names ("Josh Allen" the QB vs. the edge rusher). |
| Every stat name the other tools accept. |
Example questions
"Who leads the league in receiving yards per game among tight ends this year?"
"How good is the Lions' offense in the red zone vs. last season?"
"Show me Saquon Barkley's game log for 2024."
"Which defenses are best at stopping the run on early downs when leading?"
"What's the Chiefs' record against the spread this season?"
Quick start
Requires Python 3.10+.
git clone https://github.com/alexbrogan10/nfl-stats-mcp.git
cd nfl-stats-mcp
python -m venv .venv
.venv/Scripts/activate # Windows; use `source .venv/bin/activate` on macOS/Linux
pip install -e ".[dev]"Use it in Claude Code
claude mcp add nfl-stats -- /absolute/path/to/nfl-stats-mcp/.venv/Scripts/nfl-stats-mcpUse it in Claude Desktop
Add this to claude_desktop_config.json (Settings → Developer → Edit Config):
{
"mcpServers": {
"nfl-stats": {
"command": "C:/path/to/nfl-stats-mcp/.venv/Scripts/nfl-stats-mcp.exe"
}
}
}On macOS/Linux the command is /path/to/nfl-stats-mcp/.venv/bin/nfl-stats-mcp.
Try it without Claude
mcp dev src/nfl_stats_mcp/server.pyThis opens the MCP Inspector, where you can call each tool by hand.
Design notes
Pure query layer.
queries.pyis plain Polars with no I/O, so every stat calculation is unit-tested against small hand-built frames.server.pyonly handles validation, threading and MCP plumbing.Tool descriptions are the prompt. Parameter docs explain football semantics (
max_yards_to_endzone: 20 = red zone,max_half_seconds_remaining: 120 = two-minute drill), so the model maps natural language to filters correctly.Errors the model can recover from. Ambiguous names return candidate players with IDs, unknown stats point to
list_stats, and bad team abbreviations list the valid ones. They come back as tool errors, not crashes, so Claude can retry on its own.Honest rate stats. Leaderboards for rates use the NFL's per-team-game minimums (14 attempts, 6.25 carries…), so a backup's 3-for-3 day never tops "completion %".
Lazy, cached loading. Each season downloads on first use and stays in memory, and only the ~30 play-by-play columns the tools need are kept (out of ~370).
Works behind TLS-inspecting proxies. It uses the OS certificate store via
truststore, so downloads work on machines with antivirus HTTPS scanning or corporate proxies.
Development
pytest # fast offline tests (fixtures, plus an in-process MCP client)
pytest -m live # smoke tests against real nflverse data (needs network)Roadmap
Eval suite: natural-language questions with known answers, scored against Claude's tool use
Next Gen Stats & snap counts tools
Team-level aggregates (
team_stats) and against-the-spread recordsPublish to PyPI so it runs with
uvx nfl-stats-mcp
Data & credits
All data comes from the nflverse project via
nflreadpy. Please follow their licensing
and credit them if you build on this. This project is not affiliated with the NFL.
License
MIT
Available Tools
6 toolsfind_playerARead-only
Search for players by name. Returns ids, positions and teams to disambiguate.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Full or partial player name, e.g. 'Mahomes'. | |
| seasons | No | Seasons to include, e.g. [2024, 2025]. 1999 or later. Defaults to the current season. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, so the safety profile is covered. The description adds that the call returns multiple candidate players (ids, positions, teams) for disambiguation, which usefully signals a possibly multi-result, ambiguity-resolving response. It says nothing about matching behavior (partial vs exact) beyond the schema's own note.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, zero filler, with the resource and the name-based scope front-loaded ahead of the return-value note.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description needn't detail return shape, and annotations cover safety. What remains thin is workflow context — that this is the lookup to run before player_stats or situational_stats, and how to handle multiple returned candidates — but nothing essential for calling it is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with both the name (including a 'Mahomes' example) and seasons parameters fully documented in the schema. The description's 'by name' restates rather than extends this, and it contributes nothing on the seasons parameter, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Search) and resource (players) with the key qualifier 'by name', which separates it cleanly from the stats-oriented siblings. It stops short of naming a sibling it displaces, so an agent must infer the handoff to player_stats on its own.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or when-not clause appears; the usage is only implied by 'to disambiguate', which hints this is a resolution step before a stats call. The agent can reasonably infer the workflow, but nothing states it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
leaderboardARead-only
Rank players by a stat over one or more seasons (totals are summed across seasons).
| Name | Required | Description | Default |
|---|---|---|---|
| stat | Yes | A counting stat (e.g. 'passing_yards', 'receiving_tds') or rate stat (e.g. 'yards_per_carry'). See list_stats. | |
| limit | No | ||
| seasons | No | Seasons to include, e.g. [2024, 2025]. 1999 or later. Defaults to the current season. | |
| per_game | No | Divide counting stats by games played. | |
| position | No | Filter by position or group, e.g. QB, RB, WR, TE, K. | |
| ascending | No | True to list the lowest values first. | |
| min_games | No | ||
| min_volume | No | Override the qualifier for rate stats (e.g. minimum attempts). Defaults to the NFL's per-team-game minimums. | |
| season_type | No | REG = regular season, POST = playoffs, ALL = both. | REG |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds useful behavioral context by saying totals are summed across seasons, but it omits other relevant behavior such as qualifier handling for rate stats and per-game interactions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single well-formed sentence with no filler. The core action and aggregation rule are front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema and 78% schema description coverage, the definition does not need to explain return values or most parameters. The description supplies the key aggregation rule, though it leaves the sibling-routing context to other tools or schema hints.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is high at 78%, so parameter semantics are mostly handled by the schema. The description only adds meaning around multi-season aggregation, without explaining other parameters such as limit, ascending, or min_volume beyond what the schema already says.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb and resource: ranking players by a stat across seasons. It does not name or distinguish itself from sibling tools such as player_stats or situational_stats, so sibling differentiation is missing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for leaderboard rankings, but gives no explicit when-to-use or when-not-to-use guidance versus alternatives. The schema mentions list_stats for stat names, but the description itself does not route the agent among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_statsARead-only
List the stat names accepted by leaderboard and returned by player_stats.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds only the relational fact that these stat names are shared with `leaderboard` and `player_stats`; it does not add behavioral details like rate limits, auth requirements, or whether the list is static. That modest added context fits a 3 given the annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One front-loaded sentence with no wasted words. It delivers the core purpose and the sibling relationship immediately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read-only list tool with an output schema, the description supplies the needed context: what the list contains and how it relates to `leaderboard` and `player_stats`. The only missing piece is explicit usage guidance, which keeps it from being fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters, so the baseline is 4. Schema description coverage is 100% and there are no parameters to document, so the description need not add anything further.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'List' and resource 'stat names', and it explicitly ties the list to two sibling tools (`leaderboard`, `player_stats`), so an agent can distinguish it from find_player, situational_stats, etc. It leaves no ambiguity about what the tool returns.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It names the related sibling tools and implies the list is the vocabulary for those endpoints, which gives clear context. However, it does not explicitly say 'use this before calling leaderboard' or when not to use it, nor does it state alternatives beyond the relational mention.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
player_statsBRead-only
Box-score stats for one player (passing, rushing, receiving, defense, kicking, fantasy).
Includes rate stats such as completion_pct and yards_per_carry. Empty stat categories are omitted.
| Name | Required | Description | Default |
|---|---|---|---|
| by | No | Season totals, or a game-by-game log. | season |
| player | Yes | Player name or nflverse player_id. | |
| seasons | No | Seasons to include, e.g. [2024, 2025]. 1999 or later. Defaults to the current season. | |
| season_type | No | REG = regular season, POST = playoffs, ALL = both. | REG |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, so safety is covered. The description adds one genuinely useful trait beyond that: empty stat categories are omitted from results, and rate stats like completion_pct are included — both shape how an agent should interpret output. It says nothing about volume, ordering, or what happens when a player has no data at all.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the purpose before the two supporting notes about rate stats and omitted categories. No filler or repetition of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 needn't be explained, and all four parameters are fully documented in the schema. The remaining gap is positioning among the five sibling stat tools, which the description never addresses for a tool whose name alone is ambiguous.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter (by, player, seasons, season_type) is already documented in the schema, including enum meanings and the '1999 or later' constraint. The description adds no parameter-level detail beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the resource (box-score stats for one player) and enumerates the stat families returned (passing, rushing, receiving, defense, kicking, fantasy), which is concrete and specific. It stops short of distinguishing itself from siblings like situational_stats or leaderboard, so an agent must infer the boundary from names alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to pick this over situational_stats, list_stats, or leaderboard, and no mention of prerequisites or typical call patterns. The agent is left to infer usage purely from the tool name and the stat-family list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
situational_statsARead-only
Play-by-play efficiency (EPA/play, success rate, yards/play) for any game situation.
Examples: QBs on 3rd-and-long, red-zone rushing by team, defenses in the two-minute drill, one player's EPA when trailing in the 4th quarter.
| Name | Required | Description | Default |
|---|---|---|---|
| downs | No | e.g. [3] or [3, 4]. | |
| limit | No | ||
| weeks | No | ||
| player | No | Only plays involving this player (name or player_id). | |
| defense | No | Team on defense. | |
| offense | No | Team with the ball. | |
| seasons | No | Seasons to include, e.g. [2024, 2025]. 1999 or later. Defaults to the current season. | |
| shotgun | No | ||
| sort_by | No | Metric to rank by. | epa_per_play |
| group_by | No | Rank passers/rushers/receivers/offenses/defenses, or 'none' for one aggregate row. | none |
| quarters | No | 1-4, 5 = overtime. | |
| ascending | No | ||
| min_plays | No | Minimum plays per group to be ranked. | |
| play_kind | No | pass (incl. sacks), rush (incl. scrambles), or all. | all |
| season_type | No | REG = regular season, POST = playoffs, ALL = both. | REG |
| max_score_diff | No | ||
| min_score_diff | No | Offense score minus defense score, e.g. -8 for 'down one score or less'. | |
| max_yards_to_go | No | ||
| min_yards_to_go | No | ||
| max_yards_to_endzone | No | 20 = red zone, 10 = inside the 10, 5 = goal line. | |
| max_half_seconds_remaining | No | 120 = two-minute drill. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds the metric vocabulary but says nothing about defaults that materially change results (current season, min_plays=20 qualifying threshold, limit=15, REG-only), nor about ranking behavior when group_by is used. It also cannot lean on the output schema for these filtering defaults.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence defines the tool, followed by a tight example block that earns its space by demonstrating situational filtering. Slightly inefficient in that the examples restate situations already implied by parameter names, but there is no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 explained. However, for a 21-parameter tool with several undocumented filters and non-obvious defaults (min_plays gating, season defaulting, group_by ranking vs. single aggregate row), the description leaves meaningful gaps an agent must discover by trial.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
At 67% schema coverage, the schema carries most of the load and the baseline of 3 applies. The description's only parameter-adjacent contribution is naming which metrics appear in output (EPA/play, success rate, yards/play), which loosely matches sort_by values; it adds nothing for the undocumented params such as shotgun, weeks, max_score_diff, min_yards_to_go, ascending, and limit.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb-and-resource framing: per-play efficiency metrics (EPA/play, success rate, yards/play) sliced by game situation. An agent can tell this is an aggregation/ranking tool rather than a lookup, but it never names or contrasts the siblings (player_stats, list_stats, leaderboard), so differentiation is inferred rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The four examples ('QBs on 3rd-and-long', 'red-zone rushing by team', 'defenses in the two-minute drill', 'one player's EPA when trailing in the 4th quarter') map directly onto parameters like downs, max_yards_to_endzone, max_half_seconds_remaining, and min_score_diff, giving concrete usage context. What is missing is any negative guidance or explicit routing versus player_stats/leaderboard for similar efficiency questions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
team_scheduleBRead-only
A team's schedule with results, scores, record, point spread and venue.
| Name | Required | Description | Default |
|---|---|---|---|
| team | Yes | Team abbreviation, e.g. KC, PHI, LA. | |
| season | No | Defaults to the current season. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety and external-data profile is covered. The description adds the useful detail that results, scores, record, point spread and venue are included, but says nothing about season scoping nuances, ordering, or completeness, and an output schema already covers return shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single compact sentence with no padding, and the core resource is front-loaded. It is a noun-phrase fragment rather than a complete sentence, which slightly reduces clarity but keeps it tight.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and full schema coverage, the description needn't explain return values or parameters. However, given a competitive sibling set of stats tools, it is thin on how this tool is chosen over the alternatives, leaving a guidance gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: the team abbreviation format and the season default-to-current behavior are documented in the schema itself. The description adds no parameter-level meaning beyond that, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies a specific resource (a team's schedule) and enumerates what it contains: results, scores, record, point spread and venue. It lacks an explicit verb ('retrieve/get'), but the resource is precise enough to distinguish it from data-centric siblings like player_stats and leaderboard.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this tool, no prerequisites, and no mention of alternatives among siblings such as situational_stats or player_stats. The agent must infer usage entirely from the resource name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
6 tool updates
v0.1.0- First observed
find_player - First observed
leaderboard - First observed
list_stats - First observed
player_stats - First observed
situational_stats - First observed
team_schedule
TDQS
Scored across 6 tools
Each tool has a clearly distinct purpose: player lookup, player box-score stats, stat leaderboards, situational efficiency, team schedules, and stat-name discovery. The boundaries between player_stats, leaderboard, and situational_stats are especially clear despite all being stats-related.
All names use snake_case and are readable, but the conventions are mixed: find_player and list_stats use verb_noun, while player_stats, team_schedule, and situational_stats use noun phrases, and leaderboard is a bare noun. A more consistent action/resource naming pattern would improve predictability.
Six tools is well-scoped for an NFL stats server and each tool covers a distinct workflow. There is no obvious filler or unnecessary tool.
The set covers player lookup, player stats, leaderboards, situational stats, and schedules, but notable gaps remain around team-level aggregate stats, standings, and game-level box scores. Agents asking common NFL questions like team rankings or standings would hit dead ends.
Maintenance
Related MCP Connectors
- NFL MCPOAuthcom.nflmcp
NFL analytics tools for AI agents: stats, fantasy, injuries, schedules, and advanced analysis.
nflverse — NFL play-by-play, player and team stats, schedules and injury
NFL player props by sportsbook since 2023, plus play-by-play with EPA, stats and odds. REST and MCP.
Live sports stats and pre-computed analysis for AI assistants across NBA, MLB, NFL, and NHL.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceAn MCP server that provides access to over 12 years of NFL play-by-play data through a local DuckDB database. It enables users to query player performance, team statistics, and situational efficiency metrics like EPA and WPA using natural language.34 PyPI9MIT
- FlicenseBqualityDmaintenanceProvides NFL player statistics from 2015-2024, enabling player lookups, comparisons, and position leaderboards via natural language.4-
- AlicenseNot gradedqualityBmaintenanceEnables Claude to interact with Sleeper fantasy football leagues via MCP tools for roster, waiver, matchup, and transaction queries, plus a dashboard for daily reports, live scoring, and game-day alerts.70 npmMIT
- AlicenseNot gradedqualityAmaintenanceProvides verified NFL stats (2016–2025) and Sleeper league context through an MCP server, with tools for querying metrics, comparing entities, verifying claims, and accessing league data.MIT