nba-mcp
Provides tools for accessing NBA live data and statistics, including live scoreboards, box scores, play-by-play, player and team information, schedules, standings, and league-wide stats from NBA.com.
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., "@nba-mcpget today's live scores"
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.
nba-mcp
Node.js / TypeScript MCP server for NBA live data and stats from NBA.com.
This server exposes a focused set of read-only Model Context Protocol tools over stdio. It uses NBA.com's public website endpoints:
Live data:
https://cdn.nba.com/static/json/liveData/...Stats data:
https://stats.nba.com/stats/{endpoint}
NBA.com does not treat these as a formally supported public developer API, so endpoints, required parameters, headers, rate limits, and network access can change without notice.
Install
npm install -g nba-mcpRelated MCP server: SportRadar MCP Server
Run
Use the published npm package directly from MCP clients:
{
"mcpServers": {
"nba": {
"command": "npx",
"args": ["-y", "nba-mcp"]
}
}
}Or run the installed binary:
nba-mcpFor local development from a checkout:
npm install
npm run build
npm startLocal MCP clients can also use the built stdio entrypoint:
{
"mcpServers": {
"nba": {
"command": "node",
"args": ["/absolute/path/to/nba-mcp/dist/index.js"]
}
}
}During development:
npm run devTools
nba_stats_endpoint- advanced raw caller for documentedstats.nba.comendpointsnba_search_teams- local static NBA team lookupnba_live_scoreboard- today's live scoreboardnba_live_boxscore- live box score bygameIdnba_live_play_by_play- live play-by-play bygameIdnba_live_odds- today's live odds when availablenba_schedule_by_date- schedule and scores for a datenba_search_players- player search viaplayerindexnba_player_info- player bio and headline statsnba_player_career_stats- player career and season totalsnba_player_game_log- player game log for a seasonnba_team_game_log- team game log for a seasonnba_league_standings- standings by seasonnba_league_player_stats- league-wide player dashboard statsnba_league_team_stats- league-wide team dashboard stats
Environment
NBA_STATS_BASE_URL=https://stats.nba.com/stats
NBA_LIVE_BASE_URL=https://cdn.nba.com/static/json/liveData
NBA_STATS_TIMEOUT_MS=30000
NBA_LIVE_TIMEOUT_MS=10000
NBA_MAX_RETRIES=2
NBA_STATS_RATE_LIMIT_MS=650
NBA_USER_AGENT="Mozilla/5.0 ..."NBA_STATS_BASE_URL and NBA_LIVE_BASE_URL are intentionally configurable so deployments can route through a trusted internal proxy when NBA.com blocks direct server-side requests.
Network Notes
stats.nba.com and sometimes cdn.nba.com can reject requests from cloud, datacenter, VPN, or non-browser TLS fingerprints. In those cases tools return an MCP error with the URL, status code, and response body preview. Run from a residential network or proxy through a service that can reach NBA.com.
Development
npm run typecheck
npm run buildPublish
The package is configured for public npm publishing.
npm login --registry https://registry.npmjs.org
npm publish --dry-run --registry https://registry.npmjs.org
npm publish --registry https://registry.npmjs.orgprepublishOnly runs typecheck and prepack builds dist/.
Smoke test the MCP protocol layer:
node --input-type=module -e "import { Client } from '@modelcontextprotocol/sdk/client/index.js'; import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js'; const client = new Client({ name: 'smoke-test', version: '0.0.0' }); const transport = new StdioClientTransport({ command: 'node', args: ['dist/index.js'] }); await client.connect(transport); console.log((await client.listTools()).tools.map(t => t.name)); await client.close();"Available Tools
15 toolsnba_league_player_statsNBA League Player StatsARead-onlyIdempotent
Get league-wide player statistics for a season. Results are limited by default.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| season | Yes | ||
| teamId | No | ||
| perMode | No | PerGame | |
| leagueId | No | 00 | |
| lastNGames | No | ||
| seasonType | No | Regular Season | |
| measureType | No | Base |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is clear. The description adds valuable behavioral context by noting 'Results are limited by default,' which informs the agent about default pagination (limit=25). This goes beyond what annotations provide.
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 extremely concise: two short sentences that directly state the tool's purpose and a key default behavior. Every sentence adds value without redundancy.
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?
Given 8 parameters (1 required) and no output schema, the description fails to provide essential context. It does not describe the structure of returned statistics, pagination behavior beyond 'limited', or how parameters like teamId or measureType affect results. This leaves the agent underinformed for a tool with moderate complexity.
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 0%, so the description must compensate for parameter understanding. However, the description does not explain any of the 8 parameters (e.g., season format, perMode options, leagueId meanings). The agent is left to infer from schema defaults and enums, which is insufficient for correct invocation.
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 ('Get') and resource ('league-wide player statistics') clearly indicating the tool's function. It distinguishes itself from sibling tools like nba_league_team_stats (team stats) and nba_player_career_stats (career stats) by focusing on league-wide player stats for a season.
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 context for use (league-wide player stats per season) but provides no explicit guidance on when to use this tool versus alternatives like nba_player_career_stats or nba_team_game_log. It lacks clear 'when to use' and 'when not to use' instructions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nba_league_standingsNBA League StandingsCRead-onlyIdempotent
Get NBA standings for a season and season type.
| Name | Required | Description | Default |
|---|---|---|---|
| season | Yes | ||
| leagueId | No | 00 | |
| seasonType | No | Regular Season |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the description adds no behavioral context beyond stating the obvious. It does not contradict annotations, but it fails to disclose details like pagination or rate limits.
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 sentence with no extra words, but it lacks front-loaded structure and does not prioritize key information. It is concise but minimal.
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 simple read-only tool with good annotations and enums, the description covers the basic purpose. However, it omits details about the output format, which is important given no output schema is provided.
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 0%, and the description only mentions 'season' and 'season type' without explaining the format, enum values, or the leagueId parameter. It does not compensate for the lack of schema 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 clearly states the tool retrieves standings for a season and season type, but it does not explicitly differentiate from sibling tools like nba_league_team_stats, which might cause confusion.
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 provided on when to use this tool versus alternatives. The description does not mention exclusions or prerequisites, leaving the agent to infer usage from context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nba_league_team_statsNBA League Team StatsCRead-onlyIdempotent
Get league-wide team statistics for a season. Results are limited by default.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| season | Yes | ||
| perMode | No | PerGame | |
| leagueId | No | 00 | |
| lastNGames | No | ||
| seasonType | No | Regular Season | |
| measureType | No | Base |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint false, so the description only adds 'Results are limited by default'. This is useful but minimal; it does not disclose pagination, rate limits, or other behavioral traits beyond the default limit.
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 very short (two sentences) and front-loaded, but it sacrifices completeness for brevity. It earns its place but fails to convey necessary details.
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?
Given 7 parameters, no output schema, and 13 sibling tools, the description is incomplete. It does not explain what data is returned, how filtering works, or how to interpret 'limited by default'. The tool's complexity demands more context.
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 0%, and the description provides no parameter explanations. All 7 parameters, including enums and defaults, lack any semantic context in the description, leaving the agent without guidance on how to use them.
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 clearly states the verb 'Get' and the resource 'league-wide team statistics for a season', which is specific and helps distinguish from sibling tools like nba_league_player_stats or nba_team_game_log. However, it does not explicitly differentiate from all siblings.
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 team-level statistics but provides no explicit guidance on when to use this versus sibling tools like nba_team_game_log or nba_league_standings. No exclusions or alternatives are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nba_live_boxscoreNBA Live Box ScoreBRead-onlyIdempotent
Get the live box score for a 10-digit NBA game id from cdn.nba.com.
| Name | Required | Description | Default |
|---|---|---|---|
| gameId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint. The description adds only the data source URL, without additional behavioral details such as rate limits, data freshness, or error handling. Minimal extra value.
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 sentence that is front-loaded with the purpose, containing no fluff. Every word earns its place.
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?
Given the absence of an output schema, the description should explain what the box score contains (e.g., player stats, quarter scores, team totals), but it does not. This leaves the agent without critical information about the return value.
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?
The description reinforces the schema pattern by stating '10-digit NBA game id', but provides no additional semantics beyond what the schema already enforces. With 0% schema description coverage, this is a modest improvement but does not fully compensate.
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 clearly states the verb 'Get', the specific resource 'live box score', and the source 'cdn.nba.com' along with the required input format '10-digit NBA game id', distinguishing it from siblings like nba_live_scoreboard or nba_live_play_by_play which serve different purposes.
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 guidance on when to use this tool versus its siblings (e.g., nba_live_scoreboard for game summaries or nba_live_play_by_play for sequence of events). No explicit context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nba_live_oddsNBA Live OddsARead-onlyIdempotent
Get live betting odds for today's games from cdn.nba.com when available.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, and non-destructive behavior. The description adds context about the data source and availability, which is useful beyond annotations.
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 that front-loads the core purpose. All words are necessary and no fluff.
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?
Given the simplicity (no parameters, good annotations), the description is adequate. It could optionally mention the output format (e.g., odds type) but is not essential for correct invocation.
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?
With zero parameters and 100% schema coverage, no additional explanation is needed. The description does not need to add parameter details.
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 clearly specifies the action (get), resource (live betting odds), and source (cdn.nba.com). It distinguishes from sibling tools like nba_live_scoreboard by focusing on odds rather than scores.
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 availability is conditional ('when available') but does not explicitly state when to use this tool over alternatives or when not to use it. No exclusions or comparisons are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nba_live_play_by_playNBA Live Play By PlayARead-onlyIdempotent
Get live play-by-play actions for a 10-digit NBA game id from cdn.nba.com.
| Name | Required | Description | Default |
|---|---|---|---|
| gameId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, openWorldHint, idempotentHint, and destructiveHint. The description adds only the data source (cdn.nba.com), which is useful but does not substantially expand behavioral disclosure beyond the annotations.
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?
Single sentence, front-loaded with the action and resource, no redundancy. Every word is necessary.
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 simple read-only tool with one parameter and comprehensive annotations, the description is complete. It specifies what data to retrieve and the input format, sufficient for an agent to invoke correctly.
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?
With 0% schema coverage and only one parameter, the description compensates by confirming the parameter is a 10-digit game ID, matching the pattern. It adds source context (cdn.nba.com), which helps the agent understand the parameter's role.
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?
Description clearly states 'Get live play-by-play actions' using a specific verb and resource. It specifies the input format (10-digit game ID) and distinguishes from sibling tools like nba_live_boxscore and nba_live_scoreboard.
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?
Implied usage is for live play-by-play data, but no explicit guidance on when to use this tool versus alternatives such as nba_live_boxscore or nba_live_odds. No exclusions or contextual conditions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nba_live_scoreboardNBA Live ScoreboardARead-onlyIdempotent
Get today's NBA live scoreboard from cdn.nba.com.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds the data source (cdn.nba.com) but does not discuss caching, rate limits, or behavior when no games are scheduled. This adds marginal value beyond annotations.
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 sentence, front-loaded with key information ('Get today's NBA live scoreboard'), with no wasted words. Every word earns its place.
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 simple, no-parameter tool with rich annotations, the description is mostly complete. It could mention that it returns a list of games or the output structure, but given the absence of an output schema, the current level is adequate.
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?
The tool has no parameters, so schema coverage is 100%. The description does not need to provide parameter details. Baseline score of 4 is appropriate for zero-parameter tools.
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 clearly states the verb 'Get', the resource 'today's NBA live scoreboard', and the data source 'cdn.nba.com'. It effectively distinguishes from sibling tools like nba_live_boxscore which focuses on individual game details.
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 guidance on when to use this tool versus alternatives (e.g., nba_live_boxscore for game details, nba_live_odds for betting lines). It lacks explicit usage context or when-not-to-use instructions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nba_player_career_statsNBA Player Career StatsBRead-onlyIdempotent
Get career and season totals for an NBA player id.
| Name | Required | Description | Default |
|---|---|---|---|
| perMode | No | PerGame | |
| leagueId | No | 00 | |
| playerId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations (readOnlyHint, idempotentHint, destructiveHint) already indicate this is a safe read operation. The description adds that it retrieves totals, but does not disclose any additional behavioral traits like potential performance characteristics or required authentication. Given the strong annotation coverage, a neutral score is appropriate.
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, clear sentence with no unnecessary words. It is front-loaded with the key action. However, it could include a brief note about parameters without harming conciseness.
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?
Given the tool has 3 parameters (including enums) and no output schema, the description should clarify return values and parameter roles. It only mentions 'career and season totals' and 'player id', leaving users unaware of the perMode and leagueId impact on results.
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?
With schema description coverage at 0%, the description should compensate but only implicitly references the playerId parameter. It does not explain the meaning of perMode (e.g., Totals vs PerGame) or leagueId (e.g., '00' for NBA). The description adds minimal value beyond the schema's enum names.
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 clearly states 'Get career and season totals for an NBA player id', specifying the verb (Get) and the resource (career and season totals). It distinguishes from sibling tools like nba_player_game_log (game logs) and nba_player_info (player info), which return different data.
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 provided on when to use this tool versus alternatives such as nba_player_game_log for per-game specifics or nba_player_info for biographical data. The description lacks any context about prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nba_player_game_logNBA Player Game LogCRead-onlyIdempotent
Get game-by-game statistics for an NBA player in a season.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| dateTo | No | ||
| season | Yes | ||
| dateFrom | No | ||
| leagueId | No | 00 | |
| playerId | Yes | ||
| seasonType | No | Regular Season |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint as true/false. However, the description does not add any behavioral context beyond the basic function, such as whether results are paginated (despite a limit parameter) or the range of seasons available.
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 sentence with no wasted words, but it is overly concise and omits essential information about parameters and output. It is front-loaded with the core purpose but lacks structure to support parameter usage.
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?
Given 7 parameters, no output schema, and sibling tools like nba_team_game_log, the description is severely incomplete. It does not explain what data is returned, how to filter by date or season type, or how it differs from nba_team_game_log. Minimum viable completeness would require parameter descriptions and usage context.
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?
With 0% schema description coverage, the description must compensate but fails to explain any parameters beyond the implied 'player' and 'season'. Parameters like limit, dateFrom, dateTo, leagueId, and seasonType are not described, leaving the agent without guidance on valid formats or defaults.
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 clearly states the verb 'Get' and the resource 'game-by-game statistics for an NBA player in a season.' It distinguishes itself from sibling tools like nba_team_game_log (team-based) and nba_player_career_stats (career summary) by specifying per-game granularity.
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 guidance on when to use this tool versus alternatives, nor does it mention prerequisites or limitations. For example, it lacks context like 'Use this for detailed per-game stats; for season averages, use nba_player_career_stats.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nba_player_infoNBA Player InfoBRead-onlyIdempotent
Get biographical and headline information for an NBA player id.
| Name | Required | Description | Default |
|---|---|---|---|
| leagueId | No | 00 | |
| playerId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, openWorldHint=true, and idempotentHint=true, indicating a safe, non-destructive read operation. The description adds the type of information retrieved (biographical and headline) but does not contradict annotations. The behavioral disclosure is adequate but not enhanced beyond annotations.
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 that efficiently conveys the tool's action and target. No redundant or extraneous information is present.
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?
Given the tool's simplicity (2 parameters, no output schema), the description provides a high-level understanding but lacks detail on return format or exact data fields. For a complete picture, an agent might need more context, especially with multiple sibling 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 0%, so the description must compensate. It mentions 'player id' but does not explain the optional leagueId parameter or its enum values. This leaves meaning gaps, as leagueId's default and purpose are undocumented.
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 clearly states the verb 'Get', the resource 'biographical and headline information', and the specific identifier 'NBA player id'. This effectively differentiates the tool from sibling tools like nba_player_career_stats and nba_player_game_log, which focus on statistical data.
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 guidance on when to use this tool versus alternatives such as nba_player_career_stats or nba_search_players. It does not specify context, prerequisites, or situations where the tool is inappropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nba_schedule_by_dateNBA Schedule By DateBRead-onlyIdempotent
Get NBA schedule and scores for a specific date via stats.nba.com scoreboardv2.
| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | ||
| leagueId | No | 00 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds minimal behavioral info beyond mentioning the data source (stats.nba.com scoreboardv2), which does not significantly enhance understanding beyond the annotations.
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 sentence with no wasted words. However, it is slightly vague ('schedule and scores') and could benefit from front-loading the key scope.
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?
No output schema exists, so the description should elaborate on return values. It only says 'schedule and scores', which is insufficient. Additionally, given many sibling tools, more context on when to choose this tool over, say, nba_live_scoreboard would improve completeness.
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 0%, so the description must compensate. It does not explain the 'date' format or the 'leagueId' enum values (e.g., '00' for NBA). Without param details, the agent may misuse the tool.
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 clearly states the verb 'Get', the resource 'NBA schedule and scores', and the scope 'for a specific date'. It distinguishes itself from siblings like nba_live_scoreboard by focusing on a specific date rather than live data.
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 usage for a specific date but does not explicitly state when to use this tool versus alternatives like nba_live_scoreboard for live games. No when-not-to-use or alternative recommendations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nba_search_playersSearch NBA PlayersBRead-onlyIdempotent
Search NBA players by name using stats.nba.com playerindex. Defaults to the supplied season and active players only.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes | ||
| season | No | ||
| leagueId | No | 00 | |
| activeOnly | No | ||
| historical | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint false. The description adds value by specifying default filtering to active players and a season. However, it does not discuss rate limits, pagination, or error behavior, which would be helpful beyond the annotations.
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 extremely concise with two short sentences. The purpose is front-loaded, and every word adds value. No unnecessary information.
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 6 parameters, 0% schema coverage, and no output schema, the description is insufficient. It fails to explain key parameters and does not describe the return format. Given the complexity, more detail is needed for an agent to use the tool effectively.
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 0%, so the description must compensate but only partially. It mentions the 'query' parameter implicitly and hints at 'season' and 'activeOnly' via defaults. Parameters like 'limit', 'leagueId', and 'historical' are unexplained, leaving significant gaps for an agent.
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 clearly states the tool searches NBA players by name using a specific API. It mentions default behavior (season and active only), which adds clarity. However, it does not explicitly distinguish from sibling tools like nba_player_info or nba_player_career_stats, leaving slight ambiguity.
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 provided on when to use this tool versus alternatives such as nba_player_info or nba_league_player_stats. The description lacks any when-to-use, when-not-to-use, or comparative context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nba_search_teamsSearch NBA TeamsARead-onlyIdempotent
Search NBA teams by name, city, abbreviation, slug, or team id.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only and idempotent behavior. The description adds that the tool searches across specific fields, which is useful context beyond the annotations, but does not detail return format or edge cases.
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?
Single sentence, no extraneous words. Every element adds value and is clearly 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?
Given a simple read-only tool with one optional parameter and ample annotation coverage, the description is mostly complete. It covers what the tool does and what fields it searches, though it could mention the output structure or behavior on no matches.
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?
The schema has 0% description coverage for the single query parameter. The description compensates by listing the fields that can be matched (name, city, abbreviation, slug, team id), but does not specify whether the search is exact or fuzzy, or how results are ordered. Baseline 3 is appropriate as the description adds some meaning but is not fully comprehensive.
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 clearly states the verb 'Search' and the resource 'NBA teams'. It lists multiple searchable fields (name, city, abbreviation, slug, team id), which distinguishes it from sibling tools like nba_search_players that search for players.
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 usage for looking up teams by various identifiers, but does not explicitly state when to use this tool versus alternatives. However, the list of searchable fields and sibling tool names provide implicit context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nba_stats_endpointNBA Stats EndpointCRead-onlyIdempotent
Advanced raw stats.nba.com endpoint caller. Use a documented endpoint name and NBA parameter names.
| Name | Required | Description | Default |
|---|---|---|---|
| params | No | ||
| endpoint | Yes | ||
| limitRows | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false, signaling safe, non-destructive, idempotent behavior. The description adds minimal behavioral context (only 'raw stats') beyond what annotations provide, so it does not significantly enhance transparency.
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 concise, consisting of two sentences with no wasted words. However, it is too brief and lacks detail that would be valuable for effective tool usage.
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?
Given the lack of output schema, low schema coverage, and vague description, the tool is incomplete. It does not explain return values, error handling, or how to correctly construct endpoint names and parameters. The description fails to provide enough context for reliable use.
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 0%, meaning no parameter descriptions exist in the schema. The description only mentions 'documented endpoint name and NBA parameter names' without explaining the parameters 'params', 'endpoint', or 'limitRows'. It adds some context but fails to compensate for the lack of schema 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 states it is an 'Advanced raw stats.nba.com endpoint caller' and mentions using a documented endpoint name. This distinguishes it from specific sibling tools like 'nba_league_player_stats' which target particular data types, but it lacks specificity about what the tool actually retrieves or does beyond calling an endpoint.
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 advises to 'Use a documented endpoint name and NBA parameter names' but does not provide guidance on when to use this generic caller versus the specific sibling tools. There are no explicit when-to-use or when-not-to-use conditions, nor any mention of alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nba_team_game_logNBA Team Game LogCRead-onlyIdempotent
Get game-by-game statistics for an NBA team in a season.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| dateTo | No | ||
| season | Yes | ||
| teamId | Yes | ||
| dateFrom | No | ||
| leagueId | No | 00 | |
| seasonType | No | Regular Season |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint, which already cover safety and idempotence. The description adds that it returns game-by-game statistics, which is consistent but does not disclose additional behavioral traits like pagination, rate limits, or data freshness. No contradiction with annotations.
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 extremely concise (one short sentence) but lacks crucial detail. It is front-loaded but under-specified, missing information that would be valuable for an agent.
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?
Given 7 parameters, no output schema, and no parameter descriptions, the description is incomplete. It does not explain what statistics are returned, how date filtering works, or the meaning of leagueId and seasonType. An agent would need additional knowledge to use the tool correctly.
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 0% and the tool description provides no parameter details. With 7 parameters including required teamId and season, plus optional date range, league, and season type, the agent has no guidance on parameter semantics or valid values beyond the schema's basic type and enum constraints.
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 clearly states the tool retrieves game-by-game statistics for an NBA team in a season, with a specific verb and resource. It distinguishes from sibling tools like nba_player_game_log (player-focused) and nba_league_team_stats (aggregate stats).
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 on when to use this tool versus alternatives. The description does not mention when-not-to-use, prerequisites, or compare to siblings like nba_schedule_by_date or nba_team_game_log. The sibling list is provided externally but not referenced.
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.
15 tool updates
v0.1.1- First observed
nba_league_player_stats - First observed
nba_league_standings - First observed
nba_league_team_stats - First observed
nba_live_boxscore - First observed
nba_live_odds - First observed
nba_live_play_by_play - First observed
nba_live_scoreboard - First observed
nba_player_career_stats - First observed
nba_player_game_log - First observed
nba_player_info - First observed
nba_schedule_by_date - First observed
nba_search_players - First observed
nba_search_teams - First observed
nba_stats_endpoint - First observed
nba_team_game_log
TDQS
Scored across 15 tools
Each tool targets a distinct aspect of NBA data (player stats, standings, live games, search, etc.) with clear descriptions, minimizing confusion.
All tools follow a consistent snake_case pattern with 'nba_' prefix and descriptive resource/action names, making them predictable.
15 tools is well-scoped for a sports data API, covering essential player, team, game, and schedule operations without excess.
Core CRUD-like operations are covered (stats, logs, info, search, live). Minor gaps like explicit team roster are mitigated by the raw endpoint.
Maintenance
Related MCP Connectors
NBA MCP — player, team, and game data via the BallDontLie API
ESPN MCP — keyless multi-sport live scores, teams, and news via ESPN's public site API.
The hockey data API. Stats, odds, and everything between. REST API and MCP server.
Related MCP Servers
- AlicenseAqualityCmaintenanceAn MCP Server implementation that integrates the Balldontlie API, to provide information about players, teams and games for the NBA, NFL and MLB.430 npm26MIT
- FlicenseNot gradedqualityDmaintenanceMCP server providing tools to query live scores, schedules, standings, and game stats from the SportRadar API for multiple sports including NFL, NBA, NHL, NCAAMB, soccer, and tennis.-
- AlicenseAqualityDmaintenanceAn MCP server that provides access to ESPN Fantasy Basketball APIs, enabling Claude and other MCP clients to fetch league teams, rosters, free agents, matchups, NBA schedules, and live draft assistant tools.141MIT
- FlicenseBqualityDmaintenanceMCP server that enables Claude Desktop to access real-time sports data including live scores, fixtures, standings, and NBA statistics using free APIs.10-