loading…
Search for a command to run...
loading…
An 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
An 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.
MCP server for NFL data (2013–2025), powered by nflreadpy and DuckDB. Query play-by-play, rosters, injuries, stats, and more using natural language in Claude Code, VS Code, or Claude Desktop.
Ask Claude questions like:
pip install nfl-mcp # or: uvx nfl-mcp
nfl-mcp init # configure, load data, and start the server
init walks you through setup and offers to start the server immediately when done. No database server to install. No credentials to manage. Data is stored locally in DuckDB.
Run the server in the cloud as an Azure Container App with one click:
The button opens the Azure portal's Custom deployment blade prefilled from infra/azuredeploy.json. Pick a resource group, then Create. It provisions a Container Apps Environment, a Log Analytics workspace, and the Container App (public HTTPS ingress on port 8000). When the deployment finishes, the mcpUrl output is your endpoint — point any MCP client at https://<app>.<region>.azurecontainerapps.io/mcp.
The data is baked into the image. The full DuckDB database is built into the container image at build time, so the app serves read-only with no runtime ingest — it starts instantly, never re-downloads data, needs no external storage, and runs comfortably on
0.5vCPU /1Gi. To refresh the data, rebuild the image (re-run the publish workflow); the Publish container image workflow also rebuilds weekly. The replica is pinned to a single instance (minReplicas = maxReplicas = 1).
One-time setup before the button works:
ghcr.io/ebhattad/nfl-mcp (it runs weekly, on each GitHub release, or manually via Actions → Run workflow). The build ingests all default datasets, so it takes longer than a normal image build.nfl-mcp → Package settings → Change visibility → Public. The ARM template pulls the image without credentials, so it must be public.nfl-mcp init
The wizard will:
Options:
--skip-ingest Configure without loading data
init offers to start the server for you. If you need to start it manually later:
nfl-mcp serve
nfl-mcp serve --port 9000
nfl-mcp serve --host 0.0.0.0
The server uses the MCP Streamable HTTP transport. Point any MCP client at http://<host>:<port>/mcp.
Note: The server must be running for your IDE to connect. Run
nfl-mcp servein a terminal and keep it open.
nfl-mcp doctor
Checks database connectivity, loaded data, and IDE configuration.
If you skipped IDE setup during init, or need to reconfigure:
nfl-mcp setup-client # auto-detect clients
nfl-mcp setup-client --client vscode # VS Code only
nfl-mcp setup-client --client claude-desktop
Or configure manually. Add to .vscode/mcp.json (VS Code):
{
"servers": {
"nfl": {
"url": "http://localhost:8000/mcp"
}
}
}
Add to ~/Library/Application Support/Claude/claude_desktop_config.json (Claude Desktop):
{
"mcpServers": {
"nfl": {
"url": "http://localhost:8000/mcp"
}
}
}
nfl-mcp init Interactive setup wizard
nfl-mcp serve Start the MCP server (Streamable HTTP, default port 8000)
nfl-mcp ingest Load NFL data into the database
nfl-mcp setup-client Configure IDE MCP clients
nfl-mcp doctor Health check
nfl-mcp serve
nfl-mcp serve --port 9000
nfl-mcp serve --host 0.0.0.0
nfl-mcp ingest # default datasets, all available seasons
nfl-mcp ingest --dataset all # every dataset
nfl-mcp ingest --dataset schedules # one specific dataset
nfl-mcp ingest --dataset pbp --dataset injuries # multiple datasets
nfl-mcp ingest --start 2020 --end 2024 # limit to a season range
nfl-mcp ingest --fresh # re-ingest even if already loaded
nfl-mcp ingest --list # show all available dataset names
Ingest is idempotent — re-running skips datasets and seasons already in the database.
All data is sourced from nflverse via nflreadpy and stored locally in DuckDB.
| Table | Default | Coverage |
|---|---|---|
plays |
✓ | 1999–present |
schedules |
✓ | 1999–present |
rosters |
✓ | 1920–present |
player_stats |
✓ | 1999–present |
team_stats_raw |
✓ | 1999–present |
injuries |
✓ | 2009–present |
snap_counts |
✓ | 2012–present |
teams |
✓ | current |
players |
✓ | all-time |
contracts |
✓ | historical |
trades |
✓ | historical |
depth_charts |
2001–present | |
rosters_weekly |
2002–present | |
ff_opportunity |
2006–present | |
officials |
2015–present | |
nextgen_stats_* |
2016–present | |
participation |
2016–2024 | |
pfr_advstats_* |
2018–present | |
ftn_charting |
2022–present | |
draft_picks |
1980–present | |
combine |
all-time | |
ff_playerids |
current | |
ff_rankings_draft |
current | |
ff_rankings_week |
current |
nfl-mcp ingest --dataset all # load everything
nfl-mcp ingest --list # see all dataset names
| Tool | Description |
|---|---|
nfl_schema |
Database schema reference — compact summary by default, pass category for detail |
nfl_status |
Database health: total plays, loaded seasons, available tables |
nfl_query |
Raw SQL SELECT for custom queries (500 row cap, 10s timeout) |
nfl_search_plays |
Find plays by player, team, season, season type, situation, touchdowns, etc. |
nfl_team_stats |
Pre-aggregated team offense, defense, and situational stats |
nfl_player_stats |
Player stats by season and season type — passing, rushing, or receiving |
nfl_compare |
Side-by-side comparison of two teams or two players |
nfl_schedule |
Game schedule and results — scores, spread, weather, coaches |
nfl_roster |
Team roster by season and position |
nfl_injuries |
Player injury report status by team, week, and designation |
nfl_snap_counts |
Offensive, defensive, and special teams snap counts per player |
nfl_fantasy_opportunity |
Target share, air yards share, carry share per player per week (2006–present, requires ff_opportunity dataset) |
nfl_catalog |
List all loaded tables with row counts and last refresh time |
playsepa — expected points added (the best single-play quality metric)wpa — win probability addedposteam / defteam — offensive/defensive team abbreviationspasser_player_name / rusher_player_name / receiver_player_nameplay_type — 'pass' | 'run' | 'field_goal' | 'punt' | 'kickoff' | ...desc — raw play description (use ILIKE for text search)git clone https://github.com/ebhattad/nfl-mcp
cd nfl-mcp
pip install -e ".[dev]"
nfl-mcp ingest --dataset all --start 2024 --end 2024
nfl-mcp serve # server available at http://localhost:8000/mcp
pytest
pytest -m unit # unit tests
pytest -m integration # integration tests (requires loaded DB)
nfl-mcp doctor is the fastest way to verify config, database, and client setup.nfl-mcp ingest to ensure data is loaded.NFL_MCP_DB_PATH=/path/to/nflread.duckdb.nfl-mcp ingest is safe — it skips anything already loaded.MIT
Run in your terminal:
claude mcp add nfl-mcp -- npx CSA PROJECT - FZCO © 2026 IFZA Business Park, DDP, Premises Number 31174 - 001
Security
Low riskAutomated heuristic from public metadata — not a security guarantee.