kenpom-mcp
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., "@kenpom-mcpget the Pomeroy ratings for Duke"
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.
KenPom MCP Server π
Production-ready async MCP server for KenPom basketball analytics.
Note: Requires a paid KenPom subscription (kenpom.com) - email/password login, no API key needed.
β¨ Project Status: Production Ready
β 100% Test Coverage β 61 tests covering all parsers and scraper
β CI/CD Pipeline β GitHub Actions running tests, linting, and formatting
β Code Quality β Pre-commit hooks with ruff enforcement
β Network Resilience β Retry logic with exponential backoff
β Dual Transport β Local (STDIO) and self-hosted HTTP/SSE support
Related MCP server: nba-stats-mcp
Features
π Async Architecture β Built with httpx for non-blocking requests
βοΈ Self-Hostable β Optional HTTP/SSE server for remote access
πΎ Smart Caching β KV-based caching to reduce scraping frequency
π§ Dual Transport β Local (STDIO) and Remote (SSE) support
π 13+ Data Tools β Full coverage of KenPom stats
π Retry Logic β Automatic retry with backoff for network failures
π§ͺ Well Tested β Comprehensive unit and integration tests
Quick Start (Local)
cd /path/to/mcp_kenpom
cp .env.example .env # Add your credentials
uv sync
uv run kenpom-mcpMCP Client Configuration
Local Mode
{
"mcpServers": {
"kenpom": {
"command": "uv",
"args": ["--directory", "/path/to/mcp_kenpom", "run", "kenpom-mcp"]
}
}
}Remote Mode (Self-Hosted)
If you run the HTTP server on your own infrastructure:
{
"mcpServers": {
"kenpom": {
"command": "npx",
"args": [
"mcp-remote",
"https://your-server-url/sse"
]
}
}
}Available Tools
Tool | Description |
| Pomeroy ratings (rank, adj efficiency, tempo) |
| Efficiency and tempo stats |
| eFG%, TO%, OR%, FTRate |
| Miscellaneous team stats (offense/defense) |
| Player leaders by metric |
| Height/experience data |
| Game predictions by date |
| Arena information |
| Top games by attribute (excitement, upsets) |
| Historical program rankings |
| Player of the Year standings |
| Scoring breakdown by shot type |
| Home court advantage data |
Architecture
src/kenpom_mcp/
βββ server.py # FastMCP server with 13 tools (STDIO transport)
βββ http_server.py # Starlette server (HTTP/SSE transport)
βββ tools.py # Unified tool registry (single source of truth)
βββ scraper.py # Async httpx scraper with retry logic
βββ parsers/ # HTML parsing modules
βββ ratings.py # Pomeroy ratings
βββ efficiency.py # Efficiency and tempo stats
βββ stats.py # Team and player stats
βββ fanmatch.py # Game predictions
βββ misc.py # Arena, HCA, program ratings, KPOY
tests/
βββ conftest.py # Pytest fixtures
βββ fixtures/ # 14 HTML sample files
βββ test_fixtures.py # Fixture loading tests
βββ test_parsers.py # 33 parser unit tests
βββ test_scraper.py # 14 scraper integration testsDevelopment
Setup
# Install dependencies
uv sync
# Copy environment template
cp .env.example .env # Add your KenPom credentials
# Install pre-commit hooks (optional but recommended)
uv run pre-commit installRunning
# Local dev (STDIO)
uv run kenpom-mcp
# HTTP dev server (port 8000)
uv run uvicorn kenpom_mcp.http_server:app --reload
# Test with MCP inspector
npx @modelcontextprotocol/inspector uv --directory . run kenpom-mcpTesting & Quality
# Run all tests
uv run pytest tests/
# Run tests with coverage
uv run pytest tests/ --cov=kenpom_mcp
# Run specific test file
uv run pytest tests/test_parsers.py -v
# Lint and format
uv run ruff check src/ tests/
uv run ruff format src/ tests/
# Run pre-commit hooks manually
uv run pre-commit run --all-filesπ€ Contributing
Contributions are welcome! Please see CONTRIBUTING.md for guidelines.
This project uses:
pytest for testing with async support
ruff for linting and formatting
pre-commit for automated quality checks
GitHub Actions for CI/CD
All PRs must pass tests and linting checks.
π Security
For security issues, please see SECURITY.md for responsible disclosure guidelines.
π License
This project is licensed under the MIT License - see the LICENSE file for details.
π Acknowledgments
KenPom (kenpom.com) - Ken Pomeroy's advanced basketball analytics
FastMCP (github.com/jlowin/fastmcp) - MCP server framework
MCP Protocol (modelcontextprotocol.io) - Model Context Protocol specification
π Support
Issues: GitHub Issues
Discussions: GitHub Discussions
Security: See SECURITY.md
Made with β€οΈ for basketball analytics enthusiasts
Available Tools
18 toolsget_arenasA
Get arena information for all teams.
Returns arena names, capacities, and attendance data.
Args: season: Optional season year (e.g., "2024"). Defaults to current season. Earliest available: 2010.
Returns: JSON array of arena data.
| Name | Required | Description | Default |
|---|---|---|---|
| season | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
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 explains key behavior: returns arena data for a season, defaults to current season, earliest available is 2010, and outputs a JSON array. It does not mention potential rate limits or authorization, but for a simple read-only data retrieval tool, this is adequate.
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 well-organized, with an initial summary sentence followed by 'Args' and 'Returns' sections. Every sentence adds value, and there is no redundant or filler content.
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 a simple array return, the description covers all necessary aspects: purpose, parameter details, constraints (earliest year), and return format. The output schema further clarifies the structure, so no critical information 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 single 'season' parameter is thoroughly described with a format example, default behavior, and minimum year, far exceeding the schema which only says 'anyOf string/null'. This gives the agent complete guidance on how to specify the parameter correctly.
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 retrieving arena information for all teams and lists specific data types (arena names, capacities, attendance). This distinguishes it from sibling tools like get_ratings or get_team_stats, which focus on other statistics.
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 arena-related queries but does not explicitly state when to use this tool versus alternatives. There are no exclusions or references to sibling tools, so the agent must infer the appropriate context from the tool name and first sentence.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_conference_defenseA
Get conference defensive stats for all teams in a conference.
Returns defensive efficiency, eFG%, TO%, OR%, FTR, 2P%, 3P%, Blk%, and Stl%.
Args: conference: Conference code (required). Examples: 'B12', 'SEC', 'B10', 'ACC'. season: Optional season year (e.g., "2024"). Defaults to current season.
Returns: JSON array of conference defensive stats.
| Name | Required | Description | Default |
|---|---|---|---|
| season | No | ||
| conference | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the exact statistics returned, the return format (JSON array), and the default season behavior. It implies a read-only operation via 'Get' and adds context beyond a simple call, though it does not explicitly state side effects or prerequisites.
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 well-structured with Args and Returns sections, front-loaded with the main purpose. The list of statistics is necessary and not wasteful. It is slightly longer than minimal but each sentence adds value.
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 of the tool (2 params, 1 required) and the descriptive output, the description covers purpose, parameters, return format, and the specific metrics. It lacks details about error conditions or data source caveats, but these are not critical for a straightforward read endpoint.
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%, but the description fully compensates. It provides conference code examples ('B12', 'SEC'), marks conference as required, and explains that season defaults to the current season. This is far richer than the bare 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 states the verb (Get), resource (conference defensive stats), and scope (all teams in a conference). It naturally distinguishes itself from the sibling tool get_conference_offense by explicitly mentioning 'defensive' 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?
The description provides clear context for when to use the tool (for conference-level defensive stats), but it does not explicitly mention alternatives or exclusions. An agent could infer that offensive stats belong to get_conference_offense, but the description does not state this, leaving some ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_conference_offenseA
Get conference offensive stats for all teams in a conference.
Returns offensive efficiency, eFG%, TO%, OR%, FTR, 2P%, 3P%, FT%, and tempo.
Args: conference: Conference code (required). Examples: 'B12', 'SEC', 'B10', 'ACC'. season: Optional season year (e.g., "2024"). Defaults to current season.
Returns: JSON array of conference offensive stats.
| Name | Required | Description | Default |
|---|---|---|---|
| season | No | ||
| conference | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of disclosing behavior. It states the return format (JSON array) and listed stats, but does not mention potential side effects, rate limits, authorization, or data source nuances. It is adequate for a simple retrieval tool but lacks depth.
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 well-organized with clear Args and Returns sections. It is succinct, with every sentence contributing useful information, and avoids reduncancy with the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the moderate complexity (2 params, one required) and presence of an output schema, the description gives enough context for correct invocation. It could mention error behavior or data source caveats, but for a straightforward stats lookup it is sufficiently complete.
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%, yet the description compensates by explaining both parameters: conference with concrete examples ('B12', 'SEC') and season as optional with a default. This adds meaning beyond the bare schema and helps the agent construct valid calls.
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 conference offensive stats for all teams in a conference, using a specific verb ('Get') and resource ('conference offensive stats'). It lists the specific metrics returned, which distinguishes it from siblings like get_conference_defense.
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 conference-level offensive analysis but does not explicitly mention alternatives or when not to use it. It provides context (all teams, conference code examples) but lacks direct guidance on tool selection versus siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_conference_standingsA
Get conference standings with team records and ratings.
Returns standings with overall/conference records, projected records, net rating, offensive/defensive ratings, tempo, and conference SOS.
Args: conference: Conference code (required). Examples: 'B12', 'SEC', 'B10', 'ACC', 'BE'. season: Optional season year (e.g., "2024"). Defaults to current season.
Returns: JSON array of conference standings.
| Name | Required | Description | Default |
|---|---|---|---|
| season | No | ||
| conference | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It transparently lists the returned fields (overall/conference records, projected records, net rating, offensive/defensive ratings, tempo, SOS) and states the return type as 'JSON array of conference standings.' It does not explicitly mention read-only behavior, but 'get' implies it; no side-effect warnings are needed for a read-only 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 compact and well-structured, with a clear Args section and Returns section. Every sentence provides value, and the purpose is front-loaded. No filler or 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 the tool's simplicity (2 params, 1 required) and the presence of an output schema, the description fully covers the necessary usage context, argument semantics, and return type. An agent can confidently select and invoke this tool based on the description alone.
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 must compensate. It provides conference code examples (B12, SEC, B10, ACC, BE), clarifies that conference is required, and explains season is optional with a default of the current season. This adds significant meaning beyond the bare 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 states 'Get conference standings' and specifies the resource ('conference standings') along with the data categories (team records, ratings). This distinguishes it from sibling tools like get_conference_offense/defense, which focus on specific stats rather than overall standings.
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 clear context: use this tool when you need conference standings with records and ratings. It does not explicitly mention alternatives or exclusions, but the distinct return fields imply its specific place among the sibling tools. Clear context with no explicit exclusions earns a 4.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_efficiencyA
Get efficiency and tempo stats for all teams.
Returns the summary efficiency table with offensive/defensive efficiency, tempo, and possession length data.
Args: season: Optional season year (e.g., "2024"). Defaults to current season. Earliest available: 1999. Possession length data from 2010.
Returns: JSON array of efficiency data for all teams.
| Name | Required | Description | Default |
|---|---|---|---|
| season | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It explains that the season parameter is optional, defaults to the current season, and notes data availability limitations (earliest 1999, possession length from 2010). This adds useful context beyond the schema, though it doesn't mention side effects or error behavior, which are less relevant for a read-only stats query.
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 and front-loaded, opening with a clear summary then providing parameter details and return type. Every sentence adds value with no redundancy or 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?
Given the tool's simplicity (one optional, well-documented parameter) and the presence of an output schema, the description adequately covers the purpose, parameter semantics, and data availability. It is complete enough for an agent to select and invoke the tool correctly without additional information.
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 zero property descriptions, but the description fully compensates by explaining the 'season' parameter: optional, defaults to current season, with earliest available year and separate availability for possession length. This gives complete semantic meaning 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 explicitly states 'Get efficiency and tempo stats for all teams' with a specific verb and resource, and further details offensive/defensive efficiency, tempo, and possession length. This distinguishes it from sibling tools like get_ratings and get_four_factors, which focus on different metrics.
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 clear context that this tool is for retrieving efficiency and tempo data for all teams, making it easy to decide when to use it. It does not explicitly name alternative tools or exclusions, but the 'for all teams' scope is clear enough to avoid confusion with per-team or conference-specific tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_fanmatchA
Get FanMatch game predictions for a specific date.
FanMatch provides predicted scores, spreads, and game information for all games on a given date.
Args: date: Date in "YYYY-MM-DD" format (e.g., "2024-12-23"). Defaults to today's date.
Returns: JSON object with games, predictions, and daily statistics.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the disclosure burden. It does mention the return object and the default date behavior, which is useful. However, it does not explicitly state that the operation is read-only or describe any side effects or error conditions. For a simple data retrieval tool, this is a moderate gap in 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 and well-structured, starting with a one-sentence purpose, then an explanatory line, and then a clean Args/Returns section. Every sentence adds value, and the parameter documentation is placed efficiently in the Args section.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with one optional parameter, and the description covers purpose, parameter, and return value. Given that an output schema exists (indicated by context signals), the description does not need to detail the return structure further. A brief note about potential error cases (e.g., no games on the date) would have made it fully complete, but it is otherwise sufficient.
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 zero coverage, but the description fully compensates by specifying the 'date' parameter format ('YYYY-MM-DD'), giving an example, and explaining the default value ('today's date'). This completely resolves any ambiguity about parameter usage.
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 function retrieves FanMatch game predictions for a specific date, including scores, spreads, and game information. It explicitly distinguishes itself from sibling tools by focusing on FanMatch predictions and all games for a date, making it specific and unambiguous.
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 clear context for when to use the tool: when you need FanMatch predictions for a given date. It also notes that the date defaults to today, which is practical. However, it does not explicitly mention alternatives or when not to use it, but the clarity of the domain makes the intended usage obvious.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_four_factorsA
Get Four Factors stats for all teams.
The Four Factors are the key stats that determine team efficiency:
eFG% (Effective Field Goal Percentage)
TO% (Turnover Percentage)
OR% (Offensive Rebound Percentage)
FTRate (Free Throw Rate)
Args: season: Optional season year (e.g., "2024"). Defaults to current season. Earliest available: 1999.
Returns: JSON array of Four Factors data for all teams.
| Name | Required | Description | Default |
|---|---|---|---|
| season | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It adds useful context about the four factors and the season parameter (earliest 1999, optional, default current) and return format (JSON array). However, it doesn't explicitly state side effects (e.g., read-only), error behavior, or data freshness, which are relevant for a stats API. Adequate but not rich.
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 efficiently structured with a clear opening line, a bullet list of the Four Factors, and separate Args/Returns sections. Each sentence adds value, no fluff, and the front-loaded purpose makes it easy to scan.
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 simple one-parameter tool and the presence of an output schema, the description is complete. It covers what the tool returns, the only parameter, and the statistical meaning. It also notes the all-teams scope, which is a key limitation. No significant gaps.
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 season parameter, but the description fully compensates by explaining it is optional, defaults to the current season, accepts a string like '2024', and notes the earliest available year (1999). This adds significant meaning beyond the raw 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 states the tool retrieves 'Four Factors stats for all teams' and enumerates the specific stats (eFG%, TO%, OR%, FTRate), which distinguishes it from sibling stats tools like get_efficiency or get_team_stats. The verb 'Get' and resource are explicit, leaving no 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?
The description provides clear context: it's for team-level four factors across all teams, no filtering. While it doesn't explicitly mention alternatives or exclusions, the scope ('all teams') and the listing of stats imply its use case. It doesn't say when not to use it, but the context is sufficient for a simple lookup tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_game_attrsA
Get top games ranked by game attributes.
Args: metric: Attribute to rank games by. Options: 'Excitement', 'Tension', 'Dominance', 'ComeBack', 'FanMatch', 'Upsets', 'Busts'. Default: 'Excitement'. ('FanMatch', 'Upsets', 'Busts' only available after 2010) season: Optional season year (e.g., "2024"). Defaults to current season. Earliest available: 2010.
Returns: JSON array of top games for the specified attribute.
| Name | Required | Description | Default |
|---|---|---|---|
| metric | No | Excitement | |
| season | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
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 important behavioral constraints (metric availability, earliest season) and return type (JSON array). This is valuable, though it omits potential error cases or pagination, which is acceptable for a simple query 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 well-structured with a one-line purpose, then organized 'Args' and 'Returns' sections. It is concise, front-loaded, and every sentence adds useful information 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?
For a tool with two simple parameters and no nested objects, the description fully covers the necessary context: metric semantics, availability, and return format. An output schema exists but is not needed to understand the tool's behavior.
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 adds substantial meaning beyond the schema: it explains the 'metric' options, default values, and temporal restrictions, and clarifies 'season' defaults and earliest year. The schema only provides titles and defaults, so this description is essential.
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's function: 'Get top games ranked by game attributes.' It uses a specific verb and resource, and the focus on 'game attributes' distinguishes it from sibling tools like get_ratings or get_efficiency.
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 clear usage context by detailing parameter options, defaults, and availability constraints (e.g., 'FanMatch', 'Upsets', 'Busts' only after 2010). It does not explicitly mention when to use this over siblings, but the attribute-focused nature makes the intended use clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_hcaB
Get home court advantage data.
Returns historical home court advantage statistics for all teams.
Returns: JSON array of home court advantage data.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
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 for behavioral disclosure. It only states the return type (JSON array) and the general content, but does not mention data source, time range, potential side effects, or any rate limits. For a read operation this might be tolerable, but the description omits important context about what 'home court advantage' entails statistically.
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 short and front-loaded with the main purpose. However, the last line 'Returns: JSON array of home court advantage data' is redundant with the previous sentence, which diminishes conciseness slightly. Still, it avoids fluff and is easy to scan.
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 that there is an output schema (though not shown) and no parameters, the description is minimally viable. It clearly states the tool returns data for all teams. However, it lacks detail on what specific statistics are included or any seasonal context, which limits completeness for an agent trying to understand the result's nature.
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, so the baseline is 4. The description adds semantic context about the data ('historical... for all teams'), which is useful beyond the empty schema. No parameter explanation is needed.
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 the specific verb 'Get' with the resource 'home court advantage data', and further clarifies 'historical home court advantage statistics for all teams', which distinguishes it from sibling tools like get_team_stats or get_efficiency. It is unambiguous about what the tool returns and its scope.
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?
There is no guidance on when to use this tool versus alternatives, no mention of prerequisites or exclusions. The description simply states what it does without any contextual direction or comparison to sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_heightA
Get height and experience data for all teams.
Returns team rosters data including average height, experience, bench minutes, and continuity metrics.
Args: season: Optional season year (e.g., "2024"). Defaults to current season. Earliest available: 2007. Continuity data from 2008.
Returns: JSON array of height/experience data for all teams.
| Name | Required | Description | Default |
|---|---|---|---|
| season | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It reveals important traits: the season parameter defaults to the current season, earliest available data is 2007, and continuity data starts from 2008. It also indicates the return format as a JSON array, providing useful context beyond just the tool's name.
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 well-structured and front-loaded with the core purpose in the first sentence. It avoids redundancy by using concise sections for Args and Returns, and every sentence contributes to understanding the tool. No filler or unnecessary detail 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?
For a tool with one optional parameter and an existing output schema, the description is largely complete. It explains the parameter's behavior, default, and data availability, and gives a high-level return type. It could be slightly more comprehensive by explaining what 'continuity metrics' entails, but the output schema likely covers that.
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 only specifies 'season' as a nullable string with a null default, providing no meaning. The description compensates fully by explaining the parameter's format ('e.g., "2024"'), default behavior, and historical data boundaries. This adds significant semantic value 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 states the tool's function with a specific verb ('Get') and resource ('height and experience data for all teams'). It distinguishes from sibling tools by enumerating unique metrics like average height, experience, bench minutes, and continuity metrics, making its purpose unambiguous.
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 context by detailing what data is returned, but it does not explicitly state when to use this tool over alternatives or provide exclusions. The sibling list offers context, yet no direct comparison is made, leaving usage guidance to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_kpoyA
Get KenPom Player of the Year standings.
Returns the current KPOY leaderboard and Game MVP leaders.
Args: season: Optional season year (e.g., "2024"). Defaults to current season. Earliest available: 2011. Game MVP table from 2013.
Returns: JSON array with KPOY standings (may include multiple tables).
| Name | Required | Description | Default |
|---|---|---|---|
| season | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description adds that the response is a JSON array possibly containing multiple tables and that Game MVP data starts from 2013, which are useful behavioral traits beyond what the name suggests. It doesn't address auth or rate limits, but for a read-oriented stats tool, the provided context is reasonable.
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 brief and front-loaded with the purpose, followed by return type and parameter semantics. Every sentence contributes essential information 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?
The tool is simple with one optional parameter; the description covers purpose, return format, and parameter behavior, sufficient for selection and invocation. The existing output schema further reduces the need for detailed return explanations.
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 only lists 'season' with no description, but the description fully explains the format ('2024'), default current season, earliest year 2011, and MVP table restriction, completely compensating for zero schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource ('Get KenPom Player of the Year standings') and clarifies it returns both KPOY leaderboard and Game MVP leaders, which clearly distinguishes it from sibling stats 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?
No explicit alternatives or when-not-to-use instructions are provided, but the description implies this tool is for KPOY data. The parameter notes on season defaults and earliest availability offer some usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_player_statsA
Get player leaders by statistical metric.
Args: metric: Stat to rank players by. Options: 'ORtg', 'Min', 'eFG', 'Poss', 'Shots', 'OR', 'DR', 'TO', 'ARate', 'Blk', 'FTRate', 'Stl', 'TS', 'FC40', 'FD40', '2P', '3P', 'FT'. Default: 'eFG'. season: Optional season year (e.g., "2024"). Defaults to current season. Earliest available: 2004. conference: Optional conference filter (e.g., 'ACC', 'B10', 'SEC').
Returns: JSON array of player stats ranked by the specified metric.
| Name | Required | Description | Default |
|---|---|---|---|
| metric | No | eFG | |
| season | No | ||
| conference | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the return format (JSON array), defaults for metric and season, and the earliest available season (2004). However, it does not clarify sort order (ascending/descending) or player qualification thresholds, which are important for a leaderboard tool. With no annotations, these gaps are notable.
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 uses a compact docstring format with a clear purpose sentence, then Args/Returns sections. The metric list is lengthy but necessary; there is no redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers purpose, all parameters, return type, and an important constraint (earliest season). An output schema exists, so return details need not be fully spelled out. Minor omissions like qualification criteria and sort direction prevent a perfect score.
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 zero description coverage, so this description carries the full burden. It enumerates all metric options, defines season default and earliest year, and gives conference examples β adding substantial meaning beyond the raw type/default fields in 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 opens with 'Get player leaders by statistical metric,' which is a specific verb+resource statement. It clearly differentiates this tool from sibling tools like get_team_stats or get_ratings by focusing on player leaderboards rather than team-level metrics.
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 explicit guidance is given for when to use this tool versus alternatives like get_efficiency or get_ratings. The description implies usage through the metric list but does not mention exclusions or alternative tools for similar stats.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_point_distributionA
Get team point distribution breakdown.
Shows how teams score their points (2-pointers, 3-pointers, free throws) and where their points allowed come from.
Args: season: Optional season year (e.g., "2024"). Defaults to current season. Earliest available: 1999.
Returns: JSON array of point distribution data for all teams.
| Name | Required | Description | Default |
|---|---|---|---|
| season | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It does well by specifying that it returns a JSON array of point distribution data for all teams, and details the season parameter's default and earliest available year. This adds useful context about output and parameter behavior beyond the schema.
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, well-structured with clear 'Args' and 'Returns' sections, and contains no fluff. Every sentence earns its place, making it appropriately sized for a tool with one optional parameter.
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 tool with one optional parameter and an existing output schema, the description covers the purpose, parameter behavior, and output type sufficiently. It is self-contained and gives an agent all necessary information to decide when and how to use 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?
The input schema provides only the parameter name/type with no description (0% coverage). The description fully compensates by explaining the season parameter's format ('2024'), default to current season, and valid range (earliest 1999), which is essential 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 clearly states the tool's function: retrieving team point distribution breakdown, specifying how teams score (2-pointers, 3-pointers, free throws) and where points allowed come from. This is a specific verb+resource that distinguishes it from sibling tools like get_efficiency or get_four_factors, which focus on other metrics.
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 explains what the tool does but does not explicitly state when to use it relative to sibling tools. It implies usage for point distribution queries, but lacks direct references to alternatives or exclusions, leaving the agent to infer selection from the tool name and description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_program_ratingsA
Get historical program ratings.
Returns the all-time program rankings based on historical performance across all available seasons.
Returns: JSON array of program ratings.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of behavioral disclosure. It does add context by clarifying that results are 'all-time' and 'across all available seasons,' implying aggregation across the full dataset. However, it does not explicitly state whether the operation is read-only, if authentication is needed, or any potential side effects or limitations.
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, front-loaded with the primary purpose, and uses two short sentences plus a 'Returns' label. Every sentence adds value without redundancy or filler. It is well-structured for quick scanning by an AI 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 the tool's simplicity (zero parameters) and the presence of an output schema, the description provides sufficient context. It states the return type ('JSON array of program ratings') and the scope ('all-time... across all available seasons'). It could have clarified what constitutes a 'program rating,' but for a zero-parameter tool with an output schema, this 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 zero parameters, and the schema coverage is 100% (empty schema). Per calibration, a zero-parameter tool receives a baseline of 4. The description adds no parameter-specific details because none exist, and the schema already fully covers the parameter surface.
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's function with a specific verb ('Get') and resource ('historical program ratings'), and elaborates with 'Returns the all-time program rankings based on historical performance across all available seasons.' This distinguishes it from sibling tools like 'get_ratings' by specifying the program-level scope.
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. It does not mention any exclusions, prerequisites, or situations where another tool (e.g., get_ratings) would be more appropriate. It is purely descriptive with no usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ratingsA
Get Pomeroy College Basketball Ratings for all teams.
Returns team rankings with adjusted efficiency metrics including: rank, team name, conference, record, adjusted offensive/defensive efficiency, adjusted tempo, and more.
Args: season: Optional season year (e.g., "2024"). Defaults to current season. Earliest available: 1999.
Returns: JSON array of team ratings data.
| Name | Required | Description | Default |
|---|---|---|---|
| season | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden. It discloses the return format (JSON array) and lists the specific data fields, which is useful. However, it does not mention any side effects, rate limits, or data update behavior, though the tool is inherently read-only.
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 and well-structured, with a clear opening sentence, a field list, and a straightforward Args/Returns layout. Every sentence contributes essential information 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?
For a simple tool with one optional parameter and an output schema present (per context signals), the description is complete. It covers the purpose, parameter semantics, return type, and data fields, leaving no significant gaps for an agent to understand correct usage.
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 single parameter 'season' is thoroughly explained in the description: optional, format example ('2024'), default behavior (current season), and earliest available year (1999). The schema only lists type/default, so the description adds significant value beyond it.
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 Pomeroy College Basketball Ratings for all teams' with a specific verb and resource. It distinguishes itself from sibling tools by focusing on overall team ratings and explicitly listing the returned fields (rank, team, conference, record, efficiency metrics).
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 does not provide explicit guidance on when to use this tool versus alternatives like get_efficiency or get_team_stats. It implies a broad overview use case but lacks any 'use this instead of...' or edge-case recommendations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_scheduleA
Get a team's game schedule and results.
Returns the full schedule with game dates, opponents, results, rankings, locations, and records.
Args: team: Team name (required). Examples: 'BYU', 'Duke', 'North Carolina'. season: Optional season year (e.g., "2024"). Defaults to current season. Earliest available: 1999.
Returns: JSON array of scheduled/completed games.
| Name | Required | Description | Default |
|---|---|---|---|
| team | Yes | ||
| season | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of behavioral transparency. It discloses that the tool returns a JSON array of scheduled/completed games, indicating that it handles both future and past games. It also reveals the scope of the data (full schedule) but doesn't discuss potential errors or edge cases, which is acceptable for a simple read-only operation.
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 well-structured with an intro, Args section, and Returns section. It's concise and every sentence adds value. A slight redundancy exists between the first sentence and the first Returns sentence, but overall it's efficient and readable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description provides enough context for an agent to understand the tool's purpose, parameters, and return format. It includes important details about the season range and examples, but doesn't mention any alternative tools or potential limitations (e.g., what happens if the team has no games). Given the presence of an output schema, the description sufficiently covers the key aspects.
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 zero description coverage, but the description fully compensates. It explains 'team' is required, provides examples ('BYU', 'Duke', 'North Carolina'), and clarifies that 'season' is optional, defaults to current season, and earliest available is 1999. This adds significant meaning beyond the raw 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 uses a specific verb ('Get') and resource ('a team's game schedule and results'), clearly distinguishing itself from sibling tools like get_ratings or get_team_stats. It also lists the specific data returned (dates, opponents, results, rankings, locations, records), making the tool's purpose unmistakable.
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 (when you need a team's schedule or results) but does not explicitly mention alternatives or exclusions. There is no direct comparison to sibling tools, so guidance is only implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_scouting_reportA
Get detailed scouting report for a team (37 stats with ranks).
Returns offensive and defensive stats with national ranks covering efficiency, tempo, Four Factors, shooting percentages, and point distribution.
Args: team: Team name (required). Examples: 'BYU', 'Duke', 'North Carolina'. season: Optional season year (e.g., "2024"). Defaults to current season. conference_only: If True, returns conference-only stats. Default: False.
Returns: JSON object mapping stat names to {value, rank} objects.
| Name | Required | Description | Default |
|---|---|---|---|
| team | Yes | ||
| season | No | ||
| conference_only | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It explains the return format (JSON mapping names to {value, rank} objects) and parameter behavior (season default, conference_only flag). It doesn't discuss errors or rate limits, but for a read-only data getter, this is sufficient.
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 well-organized with a summary line, a clear Args section, and a Returns section. It is concise, with every sentence serving a purpose, 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?
The description is complete for a tool of this complexity: purpose, parameters, and return format are all covered thoroughly. An output schema exists, but the description reinforces it with additional detail, making it self-sufficient.
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, but the description fully compensates by explaining each parameter with examples, defaults, and conditional behavior. Team examples ('BYU', 'Duke'), season default, and conference_only semantics are explicitly detailed.
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 gets a detailed scouting report for a team with 37 stats and ranks, covering offensive and defensive categories. This distinguishes it from more specific sibling tools like get_four_factors or get_efficiency by offering a comprehensive, all-in-one report.
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 when a broad overview of team stats is needed, but it never explicitly mentions alternatives or when to prefer this over the more specialized sibling tools. No when-not-to-use guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_team_statsA
Get miscellaneous team statistics.
Returns detailed team stats including shooting percentages, blocks, steals, assists, and more.
Args: defense: If True, returns defensive stats. If False, returns offensive stats. season: Optional season year (e.g., "2024"). Defaults to current season. Earliest available: 1999.
Returns: JSON array of team stats (offense or defense based on parameter).
| Name | Required | Description | Default |
|---|---|---|---|
| season | No | ||
| defense | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It does disclose the offense/defense toggle, season default, earliest available year, and JSON array return type. But it omits potential caveats like data freshness, error behavior, or whether any filtering applies, which are relevant for a stats-retrieval 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 well-structured with Args and Returns sections, making it easy to parse. Each line provides useful information, though there is minor redundancy in mentioning 'Returns detailed team stats' and then a separate Returns block.
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 presence of an output schema, the description need not enumerate return fields. It covers all parameters and their semantics, plus the defensive/offensive selection. It could add edge cases like invalid season values, but overall it 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 schema has zero description coverage, so the description entirely compensates. It clearly explains the 'defense' boolean behavior and the 'season' parameter including format, default, and minimum year. This is exemplary parameter documentation.
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 resource 'team statistics', and gives examples of metrics (shooting percentages, blocks, steals, assists). However, the word 'miscellaneous' makes it sound like a catch-all, and it does not explicitly differentiate from sibling tools like get_conference_offense or get_player_stats beyond the 'team' scope.
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 the many sibling tools. It does not mention alternatives or exclusions, leaving the agent to infer usage solely from the tool name and description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Most tools target a distinct resource (ratings, efficiency, four factors, player stats, arenas, schedule, etc.). However, several team-level stat tools (get_ratings, get_efficiency, get_four_factors, get_team_stats, get_scouting_report) overlap in content, though descriptions clarify their specific focuses.
All tool names follow a consistent 'get_<noun>' pattern in snake_case, making them highly predictable. Examples include get_ratings, get_schedule, get_scouting_report, and get_conference_standings.
With 18 tools, the server is comprehensive but slightly heavy for a niche stats domain. The count is justifiable given the breadth of KenPom data, but it edges into the upper range of ideal scope.
The surface covers a wide range of college basketball analytics: ratings, efficiency, player stats, schedule, conference stats, and more. Minor gaps exist (e.g., no direct box score or team roster details beyond height), but core use cases are well covered.
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β¦
NBA MCP β player, team, and game data via the BallDontLie API
Sports Game Odds MCP β wraps the Sports Game Odds API (sportsgameodds.com)
Read-only fantasy analysis for ESPN, Yahoo, and Sleeper leagues via MCP
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceAn MCP server for accessing college basketball statistics through the SportsData.io CBB v3 Stats API, enabling AI agents to retrieve and analyze college basketball data through natural language interactions.
- 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
- FlicenseBqualityDmaintenanceA Python MCP server providing 11 tools for querying KenPom basketball analytics, including efficiency ratings, game predictions, four factors, and more through Claude.15
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/dburge86/kenpom-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server