NFL Data MCP Server
Click on "Install 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 Data MCP ServerCompare Josh Allen and Patrick Mahomes' 2024 stats"
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 Data MCP Server
A Model Context Protocol (MCP) server that provides access to NFL player performance data from 2015-2024.
Features
Player Statistics: Get detailed season stats for any player by name and position
Player Comparison: Compare statistics between multiple players
Position Leaders: Find top performers at each position for specific metrics
Player Search: Search for players by name pattern across all positions
Related MCP server: NHL MCP Server
Installation
npm install
npm run buildUsage
As an MCP Server
Add to your MCP client configuration:
{
"mcpServers": {
"nfl-data": {
"command": "node",
"args": ["/path/to/nfl-data-mcp-server/build/index.js"]
}
}
}Available Tools
get_player_stats
Get season statistics for a specific player
Parameters:
player_name,position,year(optional, defaults to 2024)
compare_players
Compare statistics between multiple players
Parameters:
players(array),year(optional),metrics(optional)
get_position_leaders
Get top performers at a position for specific metrics
Parameters:
position,metric,year(optional),limit(optional, defaults to 10)
search_players
Search for players by name pattern
Parameters:
name_pattern,year(optional)
Supported Positions
QB (Quarterbacks)
RB (Running Backs)
WR (Wide Receivers)
TE (Tight Ends)
DB (Defensive Backs)
LB (Linebackers)
DL (Defensive Linemen)
K (Kickers)
Data Source
Data is fetched from the NFL-Data repository which contains player statistics from 2015-2024.
Development
npm run dev # Run in development mode
npm run build # Build for productionAvailable Tools
4 toolscompare_playersC
Compare statistics between multiple players
| Name | Required | Description | Default |
|---|---|---|---|
| year | No | Season year (2015-2024) | |
| metrics | No | Specific metrics to compare (optional) | |
| players | Yes | Array of players to compare |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full behavioral burden. The description 'Compare statistics between multiple players' conveys a read-only aggregation operation but doesn't disclose what output format is returned, whether results are sorted, how multiple metrics are combined, or whether data is normalized across positions. For a comparative tool with no output schema, this is a meaningful gap.
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 concise sentence with zero waste. However, it is terse to the point of under-specification for a tool with 3 parameters and no output schema. The sentence earns its place but doesn't cover enough ground.
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?
The schema fully describes all 3 parameters (100% coverage), giving the description some relief. However, there is no output schema, no annotations, and the comparison operation has ambiguous semantics - the description doesn't explain what comparison output looks like, whether it's side-by-side fields, deltas, or rankings. Given the tool's moderate complexity, the description is incomplete.
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 the schema fully documents all parameters (players array, year range, metrics array). The description adds nothing beyond what the schema provides. Per the rubric, baseline is 3 with high coverage; the description 'Compare statistics' implies metrics matter but doesn't clarify metric semantics beyond the schema.
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+resource combination: 'Compare statistics between multiple players.' It uses a specific verb and resource, and the plural 'players' distinguishes it from the sibling get_player_stats (single player) and get_position_leaders (leaderboard). It does distinguish from siblings implicitly via scope, though without explicitly naming alternatives.
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 provides no explicit guidance on when to use this tool versus the siblings. The plural 'players' implies multi-player comparison rather than single-player stats, but no when-to-use, when-not-to-use, or alternative tool names are given. Usage is only implied by the plural framing relative to sibling names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_player_statsC
Get season statistics for a specific player by name and position
| Name | Required | Description | Default |
|---|---|---|---|
| year | No | Season year (2015-2024) | |
| position | Yes | Player position (QB, RB, WR, TE, DB, LB, DL, K) | |
| player_name | Yes | Player name to search for |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It does not state whether this is a read-only operation, what data is returned (which stat categories), whether year is optional and defaults to the latest season, or how name matching works (exact vs fuzzy). For a data-fetch tool with zero annotation coverage, this is a meaningful gap.
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 concise sentence with zero waste. However, it compresses 'by name and position' which duplicates what the schema already declares in the required parameters. It's efficient but under-specified relative to its brevity - it doesn't use the space to add behavioral value beyond the schema.
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?
This is a data retrieval tool with no annotations and no output schema, so the description must carry substantial explanatory weight. It is incomplete: it doesn't specify what statistics are returned, whether year is optional, how name/position matching works, or how this differs from the sibling tools (search_players, compare_players). For a 3-parameter tool with sibling overlap, this level of detail is insufficient.
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 the baseline is 3. However, the description adds minimal value beyond the schema: it bundles player_name and position together but doesn't clarify behavioral semantics like whether position filters the search or is required for disambiguation, whether year defaults to the most recent season when omitted, or how name matching behaves (exact match, case sensitivity). The description doesn't compensate for these ambiguities.
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+resource+scope ('Get season statistics for a specific player by name and position'). It identifies the tool's purpose well, though it doesn't explicitly distinguish the single-player lookup nature from sibling tools like compare_players or search_players. The purpose is clear but lacks explicit sibling differentiation.
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 guidance is given on when to use this tool versus alternatives. Siblings like search_players (for finding players) and compare_players (for comparing) have overlapping domains, and the description doesn't clarify that this tool fetches full season stats for exactly one known player. No exclusions or alternative tool references are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_position_leadersB
Get top performers at a position for specific metrics
| Name | Required | Description | Default |
|---|---|---|---|
| year | No | Season year (2015-2024) | |
| limit | No | Number of top players to return | |
| metric | Yes | Statistic to rank by (e.g., passing_yards, rushing_yards, etc.) | |
| position | Yes | Player position |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden for behavioral disclosure. It describes a read/query operation implicitly but doesn't state return format, whether results are ordered descending, what the ranking metric expects, or whether ties are handled. For a ranking tool, stating that results are sorted descending by the metric would be valuable context that is currently missing.
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 efficient sentence with zero waste. It front-loads the key purpose clearly. It could arguably add a sentence about sorting or usage, but for its length, it's concise and well-structured.
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?
The tool has 4 parameters, a required metric field, no output schema, and no annotations. Given these gaps, the description should compensate by explaining the return format (list sorted descending?), how ranking works, and whether certain metrics are only valid for certain positions. For a data-retrieval tool with no output schema, the description leaves too much to inference.
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 the baseline is 3. The description adds 'top performers' context which implies the results are ranked, but it doesn't add details about the metric parameter format or how position interacts with metric (e.g., which metrics are valid per position). The description adds marginal value beyond the schema's parameter descriptions.
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 'Get top performers at a position for specific metrics' uses a specific verb ('Get') with a clear resource ('top performers at a position') and scoping ('for specific metrics'). It clearly communicates a leaderboard-style ranking tool. However, it doesn't explicitly distinguish itself from sibling tools like get_player_stats or compare_players, though the 'leaders' framing does imply a ranking/top-N semantic that differentiates implicitly.
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 usage context: querying ranked top performers by position and metric. However, there is no explicit when-to-use guidance or alternatives mentioned (e.g., comparing against get_player_stats for individual stats). The absence of exclusions or alternative references means the agent must infer the tool's role from the 'leaders' name and description framing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_playersB
Search for players by name pattern across all positions
| Name | Required | Description | Default |
|---|---|---|---|
| year | No | Season year (2015-2024) | |
| name_pattern | Yes | Player name or partial name to search for |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden of behavioral disclosure. It states the tool searches by name pattern across all positions but doesn't disclose what is returned (full player profiles? just IDs?), matching behavior for wildcards, or whether results are limited. This is a read/search operation that is reasonably inferable, but the return contract is unspecified.
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 that conveys the verb, resource, and scope. Zero wasted words. Could potentially add usage guidance but is economical for a simple search tool.
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 2-param search tool with 100% schema coverage and no output schema, the description is mostly adequate. The main gap is that return behavior is not specified (what does a search result look like, are there pagination limits, is matching fuzzy or exact). Given the simplicity, it's acceptable but could clarify return format or how results connect to sibling stats tools.
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 both parameters are already documented in the schema. The description adds the 'across all positions' context and clarifies name_pattern is a partial-match search, which is marginally useful. The year parameter is optional and its purpose (filtering season) is inferable from schema alone, so description adds little beyond schema coverage.
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?
Clear verb+resource (search players) and scope (by name pattern, across all positions). It distinguishes itself from get_player_stats and get_position_leaders which are stats-oriented, though it doesn't explicitly differentiate from compare_players. The 'across all positions' qualifier adds useful scope clarity.
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 this is the lookup tool for finding players by name, which contrasts with stats-oriented siblings. However, it doesn't state when NOT to use it or explicitly reference alternative tools. Usage context is reasonably clear from the name search focus but lacks explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool targets a distinct purpose: getting a player's stats, comparing players, retrieving position leaders, and searching players by name. There's slight overlap between get_player_stats and compare_players since both retrieve player statistics, but the former is single-player while the latter is multi-player, making them mostly distinguishable.
All tools follow a consistent verb_noun pattern: get_player_stats, compare_players, get_position_leaders, search_players. Each uses a clear action verb (get, compare, search) followed by the object (player_stats, players, position_leaders, players). This is highly predictable and consistent.
With 4 tools, the count is well within the appropriate range for a focused data retrieval server. Each tool services a distinct query pattern (individual lookups, comparisons, positional rankings, and searching). The count feels slightly lean but reasonable for a data-only server with no write operations.
The set covers core statistical queries: individual stats, comparison, position rankings, and discovery. However, there are notable gaps such as team-level stats, game-level data, week-by-week breakdowns, and season/league overviews that a comprehensive NFL data server might be expected to provide. An agent could often work around these gaps, so they're moderate rather than severe.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
NFL analytics tools for AI agents: stats, fantasy, injuries, schedules, and advanced analysis.
Live sports stats and pre-computed analysis for AI assistants across NBA, MLB, NFL, and NHL.
NFL/NBA/MLB/NHL/PGA + DFS and prediction-market data. Browse free; query with a free API key.
Verified NFL stats and Sleeper league context. Every figure carries its own source rank.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceProvides comprehensive NBA player statistics from basketball-reference.com, delivering detailed stats including career summaries, season comparisons, advanced metrics, and shooting analytics.3MIT
- AlicenseNot gradedqualityDmaintenanceProvides access to live NHL game data, team and player statistics, standings, schedules, playoff information, and head-to-head comparisons through natural language queries using official NHL APIs.MIT
- FlicenseAqualityDmaintenanceProvides access to live NHL game data, player and team statistics, standings, schedules, playoff brackets, and historical comparisons through natural language queries using the official NHL API.11
- AlicenseNot gradedqualityAmaintenanceAn 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.8MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/smw355/NFL-Data-MCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server