NBA MCP Server
Provides live access to NBA data including player lookup, career stats, team rosters, league standings, stat leaders, daily scoreboards, and game box scores.
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., "@NBA MCP ServerShow me the box score for last night's Warriors game."
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 Server
A Model Context Protocol server that gives any MCP-compatible LLM client (Claude Desktop, Cursor, VS Code, a custom LangGraph agent) live access to NBA stats, standings, rosters, scores and box scores.
"Compare LeBron James and Kevin Durant's playoff scoring."
"Who led the league in assists in 2023-24?"
"What was the final score and top scorers of game 0042300405?"The LLM answers these by calling tools on this server — no hard-coded data, no scraping in the prompt.
Why this project exists
Most "LLM + API" demos wire one API to one chatbot with glue code. MCP replaces the glue with a protocol: write the server once, and every compatible client can use it. This repo is a small, production-shaped example of that — caching, error handling, a clean data/protocol split, tests, and two transports (stdio + HTTP).
Related MCP server: nba-stats-mcp
Tools
Tool | What it does |
| Resolve a player name → |
| Resolve a team name / city / abbreviation → |
| All 30 teams with ids |
| Career + playoff averages + season-by-season |
| Standings by conference for a season |
| Roster with position, age, experience |
| Per-game leaders (points/rebounds/assists/…) |
| Games and scores for a date (defaults to today) |
| Final score + top 5 scorers per side |
Every tool returns {"ok": true, "data": ...} or {"ok": false, "error": "..."} so
the model can recover from a bad name instead of hallucinating.
Resources
URI | Contents |
| The 30 teams with ids (JSON) |
| What each stat field means (Markdown) |
Prompts
Prompt | Arguments |
|
|
|
|
Both walk the model through calling the tools and grounding every claim in the returned numbers.
Architecture
MCP client (Claude Desktop / Cursor / LangGraph agent)
│ JSON-RPC over stdio or streamable HTTP
▼
server.py ── tool schemas (docstrings + type hints), thin error wrapping
▼
nba_client.py ── normalizes nba_api's 80-column rows into small LLM-friendly dicts
▼
cache.py ── TTL disk cache (scores 5 min, season stats 6 h, rosters 30 d)
▼
nba_api ──► stats.nba.comnba_client.py has no MCP dependency on purpose — the same layer will feed the RAG
pipeline and agents in the companion project.
Install
git clone https://github.com/SergioCastro02/nba-mcp-server
cd nba-mcp-server
python -m venv .venv && . .venv/Scripts/activate # or source .venv/bin/activate
pip install -e ".[dev]"Run
nba-mcp-server # stdio (for Claude Desktop / Cursor)
nba-mcp-server --http # streamable HTTP on http://localhost:8000/mcp
nba-mcp-server --http --host 0.0.0.0 # bind all interfaces (containers)GET /healthz returns {"status": "ok"} for load balancers and container probes.
Claude Desktop
Add to claude_desktop_config.json:
{
"mcpServers": {
"nba": {
"command": "nba-mcp-server"
}
}
}(Use the absolute path to the .venv binary if it isn't on your PATH.)
MCP Inspector
npx @modelcontextprotocol/inspector nba-mcp-serverEnd-to-end demo
Launches the server as a subprocess and drives it over stdio, exactly like a real client would — resolves names to ids, compares two players' playoff stats, pulls season leaders and a box score:
python examples/mcp_client_demo.pyDeploy to AWS
Terraform stack for ECS Fargate + ALB + CloudWatch in infra/.
Development
ruff check .
pytestRoadmap
resourcesfor static reference data (nba://teams,nba://glossary)prompts(scouting_report,compare_players)IaC to deploy the HTTP transport to AWS ECS Fargate — see
infra/Wire continuous deployment (OIDC + push job) and stand up a public demo URL
Publish to PyPI
This server is the tool layer for a larger project: a multi-agent NBA analysis platform (LangGraph orchestration + RAG over news/recaps + AWS Bedrock).
Data source & limits
Data comes from stats.nba.com via nba_api.
It is unofficial and rate-limited; the disk cache absorbs most repeat calls.
Not affiliated with the NBA.
License
MIT
Available Tools
9 toolsfind_playerA
Look up an NBA player by full or partial name.
Returns the player_id needed by player_career_stats, plus any other name matches.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden and does well: 'Look up' signals a read-only operation, and it explicitly discloses that full or partial names are accepted and that the response includes the player_id plus any other name matches. It does not discuss case sensitivity or empty-result behavior, but these are minor for a simple lookup tool.
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 two compact sentences with the main purpose front-loaded and the return usage immediately after. Every sentence adds information: matching semantics and downstream use.
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 one-parameter lookup tool with an output schema present, the description is nearly complete: it states the input semantics, the key output (player_id), and the relationship to player_career_stats. It does not explicitly mention how to handle multiple matches or no matches, but those are minor given the output schema and simple scope.
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 the bare 'name' parameter. It does so by explaining that the name is an NBA player name and that full or partial values are accepted. It stops short of format constraints such as case sensitivity or minimum length, but the core semantics are clear.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific action and resource: 'Look up an NBA player by full or partial name.' It also distinguishes the tool from siblings by noting it returns 'the player_id needed by player_career_stats,' so an agent can tell it apart from find_team and the stats tools without opening schemas.
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 makes clear this is the tool for resolving an NBA player name into a player_id and explicitly points to player_career_stats as the downstream consumer. It does not state exclusions or name find_team as the alternative for team lookups, but the routing context is clear enough for typical use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_teamA
Look up an NBA team by name, city, or 3-letter abbreviation (e.g. 'BOS').
Returns the team_id needed by team_roster.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It explains the accepted identifier forms and the return value, but says nothing about ambiguity on non-unique names, case sensitivity, not-found behavior, or whether the match must be exact. This is adequate for a simple lookup but leaves meaningful edge cases unstated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the action and ending with the downstream purpose. No redundant wording or generic filler.
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 one-parameter lookup tool with an output schema available, the description covers what identifiers to pass and why the result is useful. The only notable omission is behavior on no match or ambiguous match, which is minor given the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the bare schema only says name is a required string. The description supplies the missing semantics by stating that name can be a team name, city, or 3-letter abbreviation, with BOS as an example. It doesn't cover input formatting or validation edge cases, but it makes the parameter's intended values clear.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific action ('Look up an NBA team') and names three accepted identifier types, which is enough to distinguish this from find_player and list_teams. It also states the concrete deliverable, the team_id used by team_roster.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear context: use this when you need to resolve a team reference to the team_id consumed by team_roster. It doesn't name alternatives or exclusions, so it stops short of full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
game_boxscoreA
Box score summary for a game: final score and top 5 scorers per side.
Get game_id from scoreboard.
| Name | Required | Description | Default |
|---|---|---|---|
| game_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of explaining behavior. It does so by specifying the output content: final score and top 5 scorers per side. It also reveals the dependency on game_id from scoreboard, which is useful behavioral context, though it does not mention error cases or edge behavior.
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 sentence defines the resource and output, and one sentence gives the prerequisite. Every word adds value and the key information is 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?
For a simple single-parameter tool with an output schema, the description is nearly complete: it explains the purpose and the source of the required parameter. It could be slightly richer about how the result is scoped (e.g., current season only) but that is not essential given the surrounding 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?
The schema provides only a game_id string with no description, so the description's instruction to get game_id from scoreboard adds real semantic value. It tells the agent where to find a valid value, which is sufficient for a single simple parameter, though it does not define the identifier format.
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 identifies the tool as supplying a box score summary for a specific game, including final score and top 5 scorers per side. This distinguishes it from sibling tools such as scoreboard and player_career_stats, though it lacks an explicit verb like 'returns'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Get game_id from scoreboard' gives a clear prerequisite and tells the agent which sibling tool produces the needed input. It does not explicitly say when not to use this tool or name alternatives, but the context is obvious: use it after selecting a game from the scoreboard.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
league_standingsA
Final or current standings for a season, split by conference.
season is 'YYYY-YY', e.g. '2023-24'.
| Name | Required | Description | Default |
|---|---|---|---|
| season | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries the burden and does disclose useful behavior: standings are final for completed seasons and current for ongoing ones, and are split by conference. It does not address edge cases like unavailable seasons or what happens when no standings exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, each earning its place: the first states the tool's function and scoping, the second the required parameter format.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema available and only one parameter clearly described, the definition is adequate for a simple read-only standings lookup, though a brief pointer to alternative tools would have strengthened it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description compensates by documenting the exact format for season ('YYYY-YY') with a concrete example, which is sufficient for the only parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies the resource (standings) and scope (season, conference split), which distinguishes it from sibling tools like team_roster or stat_leaders, though the verb 'returns' is implied rather than explicit.
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 choose league_standings over siblings such as stat_leaders or find_team; the season format is the only usage detail, and 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.
list_teamsA
List all 30 NBA teams with their ids and abbreviations.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses a read-only list operation, exact cardinality ('all 30'), and the returned fields. It does not discuss auth or side effects, but none are implied for a simple list.
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 with no wasted words. The verb and scope are front-loaded, and every element adds useful 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 zero parameters and an output schema present, the description is fully sufficient for an agent to invoke this tool correctly. Nothing an agent needs to know is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters, and schema description coverage is 100%. The baseline for a no-parameter tool is 4; there is no parameter behavior to describe.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('List'), resource ('all 30 NBA teams'), and output fields ('ids and abbreviations'). Clearly distinguishes from sibling find_team, which searches for a single team.
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 use when enumerating all teams, but it does not explicitly mention when to use find_team instead or any exclusions. Usage context is clear but alternative routing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
player_career_statsA
Career and per-season stats for a player.
Get player_id from find_player. Returns regular-season and playoff career averages plus a season-by-season regular-season breakdown.
| Name | Required | Description | Default |
|---|---|---|---|
| player_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral disclosure burden and does it well by specifying the exact return shape: regular-season and playoff career averages plus a season-by-season regular-season breakdown. It does not discuss edge cases such as invalid player_id, but for a simple stats-retrieval tool this is a minor 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 two concise sentences with no wasted words. It front-loads the tool's purpose and uses the second sentence to add both the id source and the returned data structure.
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 tool with a single required parameter and an output schema present, the description provides sufficient context: what data is returned, what categories are included, and where the required id comes from. No critical information for calling the tool correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides only minimal information for player_id as an integer, and schema description coverage is 0%. The description compensates by explaining that player_id should be obtained from find_player, which adds real semantic meaning 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 clearly identifies the tool as returning career and per-season statistics for a player, including both regular-season and playoff career averages. It does not explicitly name a sibling tool to differentiate from, but the player-specific scope is clear and distinct from the other listed tools.
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 a valuable prerequisite by telling the agent to get player_id from find_player. However, it does not state when this tool should be chosen over stat_leaders, game_boxscore, or other siblings, leaving some selection logic to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scoreboardA
Games and scores for a date (defaults to today).
game_date is 'YYYY-MM-DD'.
| Name | Required | Description | Default |
|---|---|---|---|
| game_date | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It does disclose the default behavior (defaults to today) and the date format, but it does not describe the return structure, edge cases like future/empty dates, or timezone handling. For a low-complexity read tool this is acceptable but minimal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler: the first states the purpose and default, the second documents the parameter format. Every word earns its place and the most important information is 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?
For a tool with one optional parameter and an output schema present, the description covers the essentials: what the tool returns at a high level, the default behavior, and the required date format. Minor gaps like timezone handling or behavior for invalid dates exist, but they are not critical 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?
Schema description coverage is 0%, so the description must compensate, and it does. It explicitly documents that game_date must be formatted as 'YYYY-MM-DD' and clarifies that omitting it defaults to today. This adds meaning beyond the schema, which only declares it as a string with an empty default.
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 the resource ('games and scores') and the controlling parameter (a date, defaulting to today). It is clear and specific enough to distinguish it from sibling tools like find_player or list_teams, though it does not explicitly contrast with the closest sibling, game_boxscore, and uses a noun phrase rather than a strong verb.
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 when to use the tool — to retrieve games and scores for a date, defaulting to today — but provides no explicit exclusions or comparisons to alternative tools. An agent can infer usage but is not told when not to use it or which sibling covers other cases (e.g., game_boxscore for a single game's details).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stat_leadersA
Per-game statistical leaders for a season.
stat is one of: points, rebounds, assists, steals, blocks, three_pointers. season is 'YYYY-YY'. limit is capped at 50.
| Name | Required | Description | Default |
|---|---|---|---|
| stat | No | points | |
| limit | No | ||
| season | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It usefully discloses valid stat values, the season format, and the limit cap. However, it does not mention ordering (e.g., descending by the chosen stat), tie handling, or whether the results are per-game averages, though output schema may cover return structure.
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 compact and front-loaded: the main purpose appears first, followed by concise parameter constraints. Every line earns its place with no redundant wording or restating of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists, the lack of return-value detail is acceptable. Parameter coverage is strong and the tool's core behavior is clear. The main gap is absence of sibling differentiation and behavioral details like sorting or tie-breaking, but overall the definition is sufficient 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?
The input schema has no property descriptions, so the description is essential. It explains the accepted stat enum, the exact season format, and that limit is capped at 50, covering all three parameters. It could be slightly clearer that limit means the number of top leaders returned, but the meaning is strongly implied.
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 returns per-game statistical leaders for a season, which is a specific verb+resource. It also enumerates the supported stat categories, adding precision. It does not explicitly differentiate from sibling tools, but the function is distinct enough from player lookups, rosters, and box 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 intended use is implied: call this when you need per-game statistical leaders for a season. It gives useful input constraints like stat values, season format, and limit cap, but it does not explicitly say when to prefer this tool over alternatives or provide exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
team_rosterA
Roster for a team in a given season.
Get team_id from find_team. season is 'YYYY-YY'.
| Name | Required | Description | Default |
|---|---|---|---|
| season | Yes | ||
| team_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description implies a read-only roster lookup but adds no details such as whether the roster is active only, includes historical players, or is sorted. The behavior is predictable enough for a simple retrieve tool, but the description carries little behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, no filler; the purpose is front-loaded and the parameter guidance follows directly. Every sentence 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 two-parameter lookup with an output schema available, the description covers how to obtain and format both inputs and names its source tool. It does not add selection criteria versus sibling tools, but the low complexity and output schema reduce that burden.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so this description is the only source of parameter meaning. It compensates nicely by telling the agent to get team_id via find_team and to format season as 'YYYY-YY'. It doesn't provide a concrete example or valid season range, which keeps it from a 5.
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 identifies the resource—a team's roster—and the scope—a given season. It uses a noun phrase rather than an explicit 'get/retrieve' verb and does not explicitly distinguish itself from siblings like player_career_stats, though the resource is evident.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives concrete call prerequisites: obtain team_id from find_team and encode season as 'YYYY-YY'. It does not explain when to prefer this tool over alternatives or when not to use it, so it stops short of full routing guidance.
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. Dates show when Glama detected each change.
9 tool updates
v0.1.0- First observed
find_player - First observed
find_team - First observed
game_boxscore - First observed
league_standings - First observed
list_teams - First observed
player_career_stats - First observed
scoreboard - First observed
stat_leaders - First observed
team_roster
TDQS
Each tool targets a distinct NBA entity or query type: player lookup, team lookup, team enumeration, player stats, standings, roster, stat leaders, scoreboard, and box score. Even the closest pair, find_team and list_teams, are clearly differentiated as search versus full list.
Tool names mix imperative verb-led forms like find_player, find_team, and list_teams with noun/resource forms like player_career_stats, league_standings, and game_boxscore. The names are readable and consistently snake_case, but the verb/noun pattern is not applied uniformly.
Nine tools is a well-scoped size for an NBA data server, covering the major stat and score queries without redundancy. Each tool earns its place in the set.
The tool set covers the core read-only NBA workflow: player and team lookup, player stats, rosters, standings, stat leaders, scoreboard, and box score summaries. Gaps such as full box score details, player game logs, or a season schedule are minor and can be worked around.
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
Provide detailed Pokémon data and information through a standardized MCP interface. Enable LLMs an…
The OpenRouter for tools. One MCP connection gives any AI agent 254 hosted tools, pay per call.
471- UnifAPIOAuthcom.unifapi
Hosted MCP server for live public-data APIs and Skills for AI agents.
MCP server providing access to the Scorecard API to evaluate and optimize LLM systems.
Related MCP Servers
- FlicenseAqualityDmaintenanceA Model Context Protocol server that enables LLMs to retrieve NBA data including player stats, team information, game logs, and league standings through the nba_api library.101-
- AlicenseBqualityDmaintenanceProvides comprehensive NBA statistics via Model Context Protocol, enabling queries for player stats, game scores, team info, and advanced analytics through natural language.2110MIT
- AlicenseAqualityCmaintenanceExposes the StatsPlus API as tools for MCP-compatible clients, enabling users to query player/team statistics, contracts, ratings, and game history via natural language.154MIT
- AlicenseAqualityCmaintenanceMCP server for NBA live data and stats, providing read-only tools to query live scores, box scores, player info, standings, and more from NBA.com.15131MIT
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/SergioCastro02/nba-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server