Skip to main content
Glama
smw355

NFL Data MCP Server

by smw355

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 build

Usage

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

  1. get_player_stats

    • Get season statistics for a specific player

    • Parameters: player_name, position, year (optional, defaults to 2024)

  2. compare_players

    • Compare statistics between multiple players

    • Parameters: players (array), year (optional), metrics (optional)

  3. get_position_leaders

    • Get top performers at a position for specific metrics

    • Parameters: position, metric, year (optional), limit (optional, defaults to 10)

  4. 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 production

Available Tools

4 tools
compare_playersC

Compare statistics between multiple players

ParametersJSON Schema
NameRequiredDescriptionDefault
yearNoSeason year (2015-2024)
metricsNoSpecific metrics to compare (optional)
playersYesArray of players to compare

TDQS

C2.8/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
yearNoSeason year (2015-2024)
positionYesPlayer position (QB, RB, WR, TE, DB, LB, DL, K)
player_nameYesPlayer name to search for

TDQS

C2.6/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
yearNoSeason year (2015-2024)
limitNoNumber of top players to return
metricYesStatistic to rank by (e.g., passing_yards, rushing_yards, etc.)
positionYesPlayer position

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
yearNoSeason year (2015-2024)
name_patternYesPlayer name or partial name to search for

TDQS

B3.4/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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

B3.2/5.0
Disambiguation4/5

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.

Naming Consistency5/5

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.

Tool Count4/5

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.

Completeness3/5

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

ActivityInactive
ResponsivenessSyncing

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

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Provides comprehensive NBA player statistics from basketball-reference.com, delivering detailed stats including career summaries, season comparisons, advanced metrics, and shooting analytics.
    3
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Provides 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
  • F
    license
    A
    quality
    D
    maintenance
    Provides 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
  • A
    license
    Not graded
    quality
    A
    maintenance
    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.
    8
    MIT

Latest Blog Posts

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