Skip to main content
Glama
alex-rimerman

Statcast MCP Server

Statcast MCP Server

A MCP (Model Context Protocol) server that lets you query MLB Statcast data using plain English. Ask your AI assistant about players, games, stats, leaderboards, and more — no coding required.

Built on pybaseball, this server gives AI assistants direct access to data from Baseball Savant, FanGraphs, and Baseball Reference.

What Can You Ask?

Once connected, just talk to your AI assistant naturally:

  • "How did Aaron Judge hit in July 2024?"

  • "Show me Gerrit Cole's pitch arsenal this season"

  • "Who had the highest exit velocity in 2024?"

  • "What were the NL standings at the end of 2023?"

  • "Find me the most undervalued hitters — compare xBA to actual BA"

  • "Expected stats for the whole Yankees lineup and their five starters" (use expected_stats_batch with comma-separated names)

  • "Who are the fastest players in baseball right now?"

  • "Show me every pitch from the Yankees-Red Sox game on July 4, 2024"

The AI translates your questions into the right data queries automatically.

Related MCP server: MLB SportRadar MCP Server

Example: Prompt & Response

Here's what a typical exchange looks like when you use the Statcast MCP:

Prompt

"What were Gerrit Cole's arsenal statistics in 2023?"

Response

Pitch Type

Usage

Pitches

PA

BA

SLG

Whiff%

K%

Run Val/100

4-Seam Fastball

52.9%

1,737

427

.202

.333

23.0%

28.3%

+1.7

Slider

20.8%

683

175

.186

.251

32.7%

29.1%

+1.4

Curveball

12.1%

396

97

.215

.269

24.4%

27.8%

+1.4

Cutter

7.0%

231

65

.262

.377

31.1%

23.1%

+1.6

Changeup

7.1%

233

54

.235

.510

28.6%

13.0%

−1.3

His 4-seam fastball was his primary weapon (52.9% usage) with a .202 BA against and +1.7 run value per 100 pitches. The changeup was his only negative pitch (−1.3 run value).


Another prompt

"Who had the highest exit velocity in 2024?"

Response

The AI calls statcast_batter_exitvelo_barrels(year=2024) and returns the leaderboard — Aaron Judge led with a 97.0 mph average exit velocity and 21.8% barrel rate, followed by [other top hitters]...


Available Tools

Tool

What It Does

player_lookup

Find any player's ID, years active, and database links (default 10 rows; up to 5000 if many fuzzy matches)

statcast_search

Pitch-by-pitch data for a date range (optionally filtered by team); default 100 pitch rows, up to 5000

statcast_batter

Every pitch a specific batter saw in a date range (default 100 rows, up to 5000)

statcast_batter_pitch_arsenal

Batting stats by pitch type (BA, SLG, wOBA vs fastballs, sliders, etc.)

statcast_pitcher

Every pitch a specific pitcher threw in a date range (default 100 rows, up to 5000)

season_batting_stats

Full-season batting from FanGraphs (AVG, OPS, WAR, wRC+, …). max_output_rows (default 50, max 5000), optional sort_by / sort_descending for leaderboards. If FG fails, single-season queries fall back to Baseball Reference.

season_pitching_stats

Full-season pitching stats from FanGraphs (ERA, FIP, K/9, WAR, …); default 50 rows, up to 5000 via max_output_rows

team_season_batting_stats

Team batting — full roster actual stats (FG, or BRef fallback); default 200 rows, up to 5000

team_season_pitching_stats

Team pitching — rotation + bullpen actual stats (FG, or BRef fallback); default 200 rows, up to 5000

statcast_batter_expected_stats

xBA, xSLG, xwOBA leaderboard — who deserves better stats?

statcast_pitcher_expected_stats

Expected stats allowed by pitchers

expected_stats_batch

Expected stats for many batters and/or pitchers in one call (lineups, rotations)

statcast_batter_exitvelo_barrels

Exit velocity and barrel rate leaders

statcast_pitcher_exitvelo_barrels

Exit velocity and barrel rate allowed by pitchers

statcast_pitcher_pitch_arsenal

Pitch mix breakdown (% fastball, slider, curve, etc.)

statcast_pitcher_arsenal_stats

Performance stats per pitch type (whiff rate, BA against, etc.)

sprint_speed_leaderboard

Fastest players in baseball by sprint speed

team_standings

Division standings for any season (15 teams per division table by default; adjustable via max_output_rows, max 5000 per division)

batter_percentile_ranks

Statcast percentile ranks for hitters (exit velo, barrel%, xwOBA, etc.)

pitcher_percentile_ranks

Statcast percentile ranks for pitchers (stuff, spin, whiff%, etc.)

outs_above_average

Defensive OAA leaderboard by position (SS, CF, ALL, etc.)

outfield_directional_oaa

Outfield OAA by direction (back/in, L/R)

batting_stats_date_range

Batting stats over any date range (Baseball Reference)

pitching_stats_date_range

Pitching stats over any date range (Baseball Reference)

46 tools total. Most tables support optional max_output_rows (per-tool defaults: 10 / 50 / 100 / 200 / 250 — see REFERENCE.md); values are clamped to 5000 max. Core table above; extended tools add schedules, splits, Lahman history, draft/prospects, WAR files, extra Statcast defense/movement, league team totals, single-game pitch logs, and batter–pitcher matchup summaries. Call statcast_tool_directory for the full list, or see TOOLS_SUMMARY.md and REFERENCE.md.

Extended tools (high level)

Tool

What it does

statcast_tool_directory

Markdown catalog of all tools

team_schedule

Team schedule & scores (Baseball Reference)

player_stat_splits

BRef splits (platoon, home/away, …)

statcast_game_pitches

Every pitch in one game (game_pk)

batter_vs_pitcher_statcast

Statcast summary for one batter vs one pitcher

lahman_season_batting / lahman_season_pitching / lahman_season_teams

Lahman / Baseball Data Bank slices

top_prospects_mlb

MLB Pipeline–style prospect list

amateur_draft_round

Amateur draft by year + round

war_daily_batting / war_daily_pitching

BRef WAR component files

season_fielding_stats

FanGraphs fielding leaderboard

league_team_batting_totals / league_team_pitching_totals

FG team lines (league-wide)

statcast_running_splits_detail

90 ft sprint splits

statcast_outfield_catch_probability

OF catch prob / stars

statcast_outfield_jump

OF jump metric

statcast_catcher_framing / statcast_catcher_poptime

Catcher framing & pop time

statcast_pitcher_pitch_movement / statcast_pitcher_active_spin_leaderboard

Pitch movement & active spin (Statcast)

Team seasons: Use team_season_batting_stats / team_season_pitching_stats with a 3-letter code (PHI, NYY, …) for a full roster’s actual stats (lineup + staff). FanGraphs is tried first; Baseball Reference is used if FG fails or returns nothing.

Player search: Nearly every leaderboard/stat tool accepts optional player_name (e.g. "Aaron Judge") so you get that player’s full rows instead of only the first 50 in the table. For groups (full lineup + rotation, “all starters”), use expected_stats_batch with comma-separated names — the server does not pull MLB rosters automatically; list names explicitly or resolve them first (e.g. web / player_lookup). Pitch-level tools already take a name via statcast_batter / statcast_pitcher. team_standings is team-only.

Quick Start

Prerequisites

# Using uv (fastest)
uv pip install statcast-mcp

# Or using pip
pip install statcast-mcp

Option 2: Install from Source

git clone https://github.com/YOUR_USERNAME/statcast-mcp.git
cd statcast-mcp
uv pip install .

Setup

Claude Desktop

Add this to your Claude Desktop configuration file:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

  • Windows: %APPDATA%\Claude\claude_desktop_config.json

{
  "mcpServers": {
    "statcast": {
      "command": "statcast-mcp"
    }
  }
}

If you installed from source and want to run it directly:

{
  "mcpServers": {
    "statcast": {
      "command": "uv",
      "args": ["run", "--directory", "/absolute/path/to/statcast-mcp", "statcast-mcp"]
    }
  }
}

Cursor

Open Cursor Settings → MCP and add a new server:

  • Name: statcast

  • Type: command

  • Command: statcast-mcp

Or add to your .cursor/mcp.json:

{
  "mcpServers": {
    "statcast": {
      "command": "statcast-mcp"
    }
  }
}

VS Code (Copilot)

Add to your VS Code settings.json:

{
  "mcp": {
    "servers": {
      "statcast": {
        "command": "statcast-mcp"
      }
    }
  }
}

Example Queries

Looking Up a Player

"Look up Shohei Ohtani"

Returns the player's MLBAM ID, FanGraphs ID, Baseball Reference ID, and years active.

Pitch-Level Data

"Show me all the pitches from the Dodgers game on October 15, 2024"

statcast_search(start_date="2024-10-15", team="LAD")

Batter Analysis

"What pitches did Juan Soto see from July 1 to July 31, 2024?"

statcast_batter(player_name="Juan Soto", start_date="2024-07-01", end_date="2024-07-31")

"How does Aaron Judge hit against different pitch types?" (e.g. 2023, 106 games)

statcast_batter_pitch_arsenal(year=2023, player_name="Aaron Judge")

Season Leaderboards

"Who were the top hitters in 2024 by wRC+?"

season_batting_stats(start_season=2024)

"Top 200 hitters in 2023 by slugging, min 100 PA"

season_batting_stats(
    start_season=2023,
    min_plate_appearances=100,
    sort_by="SLG",
    max_output_rows=200,
)

Expected Stats (Find Undervalued Players)

"Show me batters whose expected stats were way higher than their actual stats in 2024"

statcast_batter_expected_stats(year=2024)

"What are Aaron Judge's expected stats vs actual in 2025?"

statcast_batter_expected_stats(year=2025, player_name="Aaron Judge")

Exit Velocity Leaders

"Who hit the ball hardest in 2024?"

statcast_batter_exitvelo_barrels(year=2024)

Pitcher Arsenal

"What pitches does Spencer Strider throw and how effective are they?"

statcast_pitcher_pitch_arsenal(year=2024)
statcast_pitcher_arsenal_stats(year=2024)

Sprint Speed

"Who are the fastest players in baseball?"

sprint_speed_leaderboard(year=2024)

Standings

"Show me the 2024 MLB standings"

team_standings(season=2024)

Percentile ranks & defense

"What are Aaron Judge's Statcast percentile ranks in 2024?"

batter_percentile_ranks(year=2024, player_name="Aaron Judge")

"Who were the best defensive shortstops by OAA in 2024?"

outs_above_average(year=2024, position="SS")

Hot streaks (date ranges)

"Who hit the best from July 1 to July 31, 2024?"

batting_stats_date_range(start_date="2024-07-01", end_date="2024-07-31")

Data Sources

All data is sourced from:

  • Baseball Savant — Statcast pitch-level and leaderboard data (2008+)

  • FanGraphs — Season-level batting and pitching statistics

  • Baseball Reference — Player identification, daily stat ranges, and cross-references

Reference Guide

For detailed tool-by-tool documentation, row limits, parameters, and usage patterns, see REFERENCE.md.

Social / sharing: Short descriptions and hashtag ideas for posts are in TOOLS_SUMMARY.md.

Notes

  • Date ranges: Statcast data is available from 2008 onward. Some metrics (exit velocity, launch angle) are only available from 2015+.

  • Query speed: Shorter date ranges return faster. For pitch-level data, keep ranges to 1-5 days when possible.

  • Rate limits: Baseball Savant limits individual requests to ~30,000 rows. The server handles splitting larger queries automatically.

  • Markdown row display: Each tool’s markdown table is capped by max_output_rows (defaults vary; hard maximum 5000 per limits.py) so responses stay bounded in chat clients.

  • Player names: Tools accept names like "Mike Trout", "Trout, Mike", or "Shohei Ohtani". The server resolves names to MLB IDs automatically.

Development

# Clone the repo
git clone https://github.com/YOUR_USERNAME/statcast-mcp.git
cd statcast-mcp

# Create a virtual environment and install in editable mode
uv venv
uv pip install -e ".[dev]"

# Run the server locally
statcast-mcp

# Test with the MCP Inspector
npx @modelcontextprotocol/inspector statcast-mcp

# Smoke-test all 46 tools (needs network; ~2024 fixtures)
PYTHONPATH=src python scripts/verify_tools.py

Contributing

Contributions are welcome! Some ideas:

  • Add more tools (game scores, team batting/pitching, historical data)

  • Improve player name resolution

  • Add data caching for faster repeated queries

  • Create prompt templates for common analyses

License

MIT

Available Tools

24 tools
batter_percentile_ranksA

Statcast percentile ranks for hitters vs the league (exit velo, barrel%, xwOBA, etc.).

Each metric is 0–100 where higher is better for that stat. Use to answer "How elite is this hitter on Statcast?" or compare league-wide.

Args: year: Season year (e.g. 2024). player_name: Optional. If set, returns only that player's row (e.g. "Aaron Judge").

Qualifying batters: ~2.1 PA per team game (Statcast default).

ParametersJSON Schema
NameRequiredDescriptionDefault
yearYes
player_nameNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden and successfully adds critical behavioral context: it explains the metric scale ('0–100 where higher is better') and qualifying criteria ('~2.1 PA per team game'). It does not mention rate limits or error behaviors, but covers the essential data interpretation rules.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is efficiently structured with purpose front-loaded, followed by usage guidance, parameter documentation, and qualifying criteria. Every sentence adds unique value—from metric interpretation to filter behavior—with no redundant or wasted text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simple 2-parameter schema and existence of an output schema (which removes the need to describe return values), the description is complete. It distinguishes from sibling tools, explains the Statcast-specific qualifying threshold, and provides sufficient context for an agent to invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

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 via the Args block. It documents both parameters with clear semantics and examples ('Season year (e.g. 2024)', 'returns only that player's row'), explaining not just types but the functional effect of the optional filter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states the specific verb and resource ('Statcast percentile ranks for hitters vs the league') and provides concrete examples ('exit velo, barrel%, xwOBA'). It clearly distinguishes from the sibling 'pitcher_percentile_ranks' by specifying 'hitters' and noting the comparison is against the league.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides explicit usage guidance ('Use to answer "How elite is this hitter on Statcast?" or compare league-wide'), giving clear context for when to invoke the tool. It lacks explicit exclusions or named alternatives (e.g., not mentioning when to use 'pitcher_percentile_ranks' instead), preventing a perfect score.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

batting_stats_date_rangeA

Batting stats aggregated over a custom date range (Baseball Reference).

Use for hot/cold streaks, post-deadline samples, or any window between two dates.

Args: start_date: Start date YYYY-MM-DD (2008+). end_date: End date YYYY-MM-DD (inclusive). player_name: Optional. Filter to one player (matches BRef Name / mlbID).

Returns rate stats (AVG, OBP, SLG, OPS) and counting stats for that span. Row limit applies — many players may qualify in long ranges.

ParametersJSON Schema
NameRequiredDescriptionDefault
start_dateYes
end_dateYes
player_nameNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden by disclosing the Baseball Reference data source, date constraints (2008+), row limit warnings, and specific return value types (AVG, OBP, SLG, OPS plus counting stats). Could mention rate limiting or null handling.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well-structured with clear sections for purpose, usage, arguments, and returns. The Args block is necessary given the empty schema, though the format is slightly verbose. Every sentence adds value, including the critical row limit warning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Comprehensive for a date-range aggregation tool: covers input constraints, output schema summary (rate and counting stats), and data source. Since an output schema exists, the brief return description is appropriate, though timezone handling for dates could be mentioned.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Given 0% schema description coverage, the description fully compensates by documenting all three parameters with precise semantics: date formats (YYYY-MM-DD), constraints (2008+, inclusive), and player_name matching behavior (BRef Name/mlbID) including optionality.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the tool aggregates batting statistics over a custom date range from Baseball Reference, using specific verbs ('aggregated') and distinguishing itself from sibling season stats and Statcast tools through the date range scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit usage scenarios ('hot/cold streaks, post-deadline samples, or any window between two dates') that clearly indicate when to use this over season-long tools, though it doesn't explicitly name sibling alternatives like season_batting_stats.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

expected_stats_batchA

Expected stats (xBA, xSLG, xwOBA vs actual) for multiple batters and/or pitchers in one call.

Use this when the user asks for a lineup, rotation, "team starters", or any named group (e.g. Yankees 1–9 and five starters). Pass comma-separated names. The MCP does not fetch MLB rosters automatically — use current player names from context or a quick web lookup, then list them here.

Args: year: Season year (e.g. 2026). If Savant has not published that season’s leaderboard yet (common before Opening Day or in early April), the table may be empty — use the prior year for full-season expected stats, or lower min_plate_appearances once enough games are played. batters: Comma-separated hitter names, e.g. "Aaron Judge, Juan Soto, Giancarlo Stanton, Anthony Volpe, ..." pitchers: Comma-separated pitcher names, e.g. "Gerrit Cole, Carlos Rodon, Marcus Stroman, Clarke Schmidt, Luis Gil" min_plate_appearances: Minimum PA to qualify (default 50).

Provide at least one of batters or pitchers. Semicolons and newlines also separate names.

ParametersJSON Schema
NameRequiredDescriptionDefault
yearYes
battersNo
pitchersNo
min_plate_appearancesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden and succeeds in disclosing data availability constraints ('If Savant has not published that season's leaderboard yet... the table may be empty'), parsing behavior ('Semicolons and newlines also separate names'), and validation rules ('Provide at least one of batters or pitchers'). Lacks explicit mention of read-only nature or rate limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well-structured and front-loaded with the core purpose first, followed by usage scenarios, then detailed parameter documentation. Despite length necessitated by zero schema coverage, every sentence adds value including the roster lookup limitation and early-season data caveats.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Complete for a batch statistics tool: explains the return value conceptually (expected vs actual stats), covers all input parameters with examples, addresses edge cases (pre-Opening Day data), and acknowledges the existence of an output schema makes detailed return value documentation unnecessary.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Given 0% schema description coverage, the description comprehensively compensates by documenting all 4 parameters: year (with season example and Savant publishing warning), batters/pitchers (with comma-separated format and extensive real-world examples), and min_plate_appearances (with meaning and default value).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific purpose statement including the exact metrics returned (xBA, xSLG, xwOBA vs actual) and clearly distinguishes this as a batch operation for 'multiple' players, differentiating it from likely single-player sibling tools like statcast_batter_expected_stats.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit when-to-use guidance ('when the user asks for a lineup, rotation, team starters') with concrete examples ('Yankees 1–9'). Also documents a critical limitation ('The MCP does not fetch MLB rosters automatically') with a workaround strategy, and specifies input format requirements ('comma-separated names').

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

outfield_directional_oaaA

Outfielders' Outs Above Average broken out by direction (back/in, left/right).

Shows where outfielders add or lose value relative to average.

Args: year: Season year (e.g. 2024). min_opportunities: Minimum opportunities, or "q" for qualified (default). player_name: Optional. Filter to one outfielder.

ParametersJSON Schema
NameRequiredDescriptionDefault
yearYes
min_opportunitiesNoq
player_nameNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

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 the metric's meaning ('add or lose value relative to average') but omits operational details such as data freshness, rate limits, or safety characteristics (though the query nature implies read-only behavior).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Excellent structure with two concise sentences front-loading the tool's purpose, followed by a clear Args section. No redundant information; every element serves a specific function in explaining the tool's scope or parameters.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Appropriate for the tool's complexity (3 simple parameters, no nested objects). The presence of an output schema means return values don't need description. The description adequately covers the domain-specific inputs, though mentioning the data source or year availability range would strengthen completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Given 0% schema description coverage, the description effectively compensates by documenting all three parameters: it provides an example for 'year' (2024), explains the magic string 'q' for qualified in 'min_opportunities', and clarifies that 'player_name' filters to a single outfielder. Could further clarify what constitutes an 'opportunity'.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly defines the resource as 'Outfielders' Outs Above Average' with specific directional breakdowns (back/in, left/right), distinguishing it from the sibling tool 'outs_above_average' which lacks directional granularity. Uses specific verbs 'broken out by' and 'shows' to define the action.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

While the description implies usage scenarios through the emphasis on directional breakdowns, it lacks explicit guidance on when to select this tool versus the general 'outs_above_average' sibling or other fielding statistics. No prerequisites or exclusions are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

outs_above_averageA

Outs Above Average (OAA) leaderboard by defensive position.

OAA estimates how many outs a fielder saved vs an average defender.

Args: year: Season year (e.g. 2024). position: One of: SS, 2B, 3B, 1B, LF, CF, RF, or ALL (all infield + outfield positions supported by Savant). Not available for catcher in this leaderboard. min_attempts: Minimum fielding attempts, or "q" for qualified (default). player_name: Optional. Filter to one fielder (use a position they actually play).

ParametersJSON Schema
NameRequiredDescriptionDefault
yearYes
positionYes
min_attemptsNoq
player_nameNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. It explains the metric's meaning (outs saved vs. average), notes the catcher's exclusion, and specifies the default value ('q' for qualified). With output schema present, it appropriately focuses on input behavior and domain-specific constraints rather than return values.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well-structured with purpose upfront, conceptual explanation second, and parameter details in Args section. Front-loaded with the key function. The Args formatting is slightly informal but clear. No redundant sentences.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 4 parameters with 0% schema coverage, the description adequately documents all inputs including defaults and constraints. Output schema exists, so return value explanation isn't needed. Covers domain limitations (no catcher data) sufficient for a specialized baseball statistics tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, requiring the description to fully compensate. It successfully documents all 4 parameters: year (with example 2024), position (enumerates all valid values plus ALL), min_attempts (explains 'q' for qualified and notes default), and player_name (notes optional status and usage constraint).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the tool retrieves an 'OAA leaderboard by defensive position' and defines OAA as estimating 'how many outs a fielder saved vs an average defender.' This effectively distinguishes it from batting/pitching siblings (e.g., batting_stats_date_range, pitching_stats_date_range) and the related outfield_directional_oaa tool by specifying this is the general positional leaderboard.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides specific constraints: 'Not available for catcher in this leaderboard' and advises to 'use a position they actually play' when filtering by player_name. While it doesn't explicitly name the outfield_directional_oaa sibling as an alternative, it clearly scopes the valid positions (SS, 2B, 3B, 1B, LF, CF, RF, ALL).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pitcher_percentile_ranksA

Statcast percentile ranks for pitchers vs the league (spin, whiff%, xERA, etc.).

Each metric is 0–100. Use for "How does this pitcher's stuff compare?"

Args: year: Season year (e.g. 2024). player_name: Optional. Filter to one pitcher (e.g. "Gerrit Cole").

Qualifying pitchers: Statcast minimum innings/appearance thresholds.

ParametersJSON Schema
NameRequiredDescriptionDefault
yearYes
player_nameNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. Adds valuable behavioral context about 'Qualifying pitchers' requiring Statcast minimum thresholds and the 0-100 scale. Missing operational details like rate limits, caching behavior, or empty result handling.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Efficient structure with no wasted words. Front-loads the core definition, follows with use case, then parameter details. The 'Args:' docstring style is slightly informal but functional. Every sentence provides unique value not found in structured fields.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Adequate for a 2-parameter lookup tool with existing output schema. Covers domain-specific qualifying thresholds crucial for baseball statistics. Does not need to describe return values since output schema exists, and parameter documentation is complete despite poor schema coverage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema has 0% description coverage. Description fully compensates by documenting both parameters with clear semantics and examples ('2024', 'Gerrit Cole') and noting player_name is optional. Effectively substitutes for missing schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clear verb-resource combination ('percentile ranks for pitchers') with specific examples (spin, whiff%, xERA) and scale (0-100). Distinguishes from batter-focused sibling via 'pitchers' and 'Statcast' context, though could explicitly contrast with raw stat siblings like statcast_pitcher.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit use case ('Use for How does this pitcher's stuff compare?') and qualifying thresholds note. However, lacks explicit when-not-to-use guidance or differentiation from similar pitching stat tools (season_pitching_stats, statcast_pitcher_expected_stats).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pitching_stats_date_rangeA

Pitching stats aggregated over a custom date range (Baseball Reference).

Args: start_date: Start date YYYY-MM-DD (2008+). end_date: End date YYYY-MM-DD (inclusive). player_name: Optional. Filter to one pitcher.

Returns ERA, WHIP, K/9, IP, W-L, etc. for that span.

ParametersJSON Schema
NameRequiredDescriptionDefault
start_dateYes
end_dateYes
player_nameNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

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 successfully identifies the data source (Baseball Reference), temporal constraints (2008+), date boundary behavior (inclusive), and sample return metrics (ERA, WHIP, K/9). It omits error handling behavior or rate limiting details, but covers the essential operational constraints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is optimally structured with a clear purpose statement followed by labeled Args and Returns sections. Every line provides essential information (data source, date formats, constraints, return examples) with zero redundancy or filler content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has an output schema (reducing the need for detailed return value documentation in the description) and three simple parameters, the description is sufficiently complete. It provides the critical context of data provenance (Baseball Reference) and temporal coverage limits (2008+) that would be necessary for correct usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

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 documenting all three parameters in the Args section: date formats (YYYY-MM-DD), the 2008+ constraint for start_date, the inclusive nature of end_date, and the optional filtering behavior of player_name. This is exemplary compensation for poor schema documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it retrieves 'Pitching stats aggregated over a custom date range' from 'Baseball Reference', providing specific verb, resource, and scope. It implicitly distinguishes from sibling tools like 'season_pitching_stats' via the 'custom date range' qualifier and from Statcast tools via the data source mention, though it could explicitly state when to prefer this over season-level alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage through 'custom date range' (suggesting arbitrary periods vs. full seasons), but lacks explicit when-to-use guidance or comparisons to alternatives like 'season_pitching_stats' or 'statcast_pitcher'. It does not state prerequisites or when NOT to use the tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

player_lookupA

Look up a baseball player to find their MLBAM ID, years active, and database IDs.

Accepts names like 'Mike Trout', 'Trout, Mike', or 'Shohei Ohtani'. Useful for verifying a player's identity or finding their MLBAM / FanGraphs / Baseball-Reference IDs before running other queries.

ParametersJSON Schema
NameRequiredDescriptionDefault
player_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It discloses input formats and return values but lacks explicit safety declarations (read-only status), error handling details, or rate limiting information that would help an agent understand operational constraints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three well-structured sentences with zero waste: purpose/outputs first, input formats second, usage context third. Every sentence earns its place and follows logical progression.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the existence of an output schema and simple single-parameter input, the description is appropriately complete. It identifies the specific database IDs returned (MLBAM, FanGraphs, Baseball-Reference) which contextualizes the tool within the baseball data ecosystem.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% description coverage (only 'Player Name' as title). The description compensates effectively by providing concrete input examples ('Mike Trout', 'Trout, Mike', 'Shohei Ohtani'), clarifying the expected name formats beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action (look up), resource (baseball player), and outputs (MLBAM ID, years active, database IDs). It effectively distinguishes this identity-resolution tool from its sibling statistics tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear guidance on when to use the tool ('before running other queries'), positioning it as a prerequisite for the sibling stats tools. However, it does not explicitly name specific alternatives or state when NOT to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

season_batting_statsA

Get season-level batting statistics from FanGraphs.

Returns comprehensive stats: AVG, OBP, SLG, wOBA, wRC+, HR, SB, WAR, and many more for every qualifying batter.

Args: start_season: First season to include (e.g. 2024). end_season: Last season to include. Omit for a single year. min_plate_appearances: Minimum plate appearances to qualify. Leave blank to use the FanGraphs default qualified threshold. player_name: Optional. Filter to one player (e.g. 'Aaron Judge').

Great for finding league leaders, comparing players, or reviewing a full season.

ParametersJSON Schema
NameRequiredDescriptionDefault
start_seasonYes
end_seasonNo
min_plate_appearancesNo
player_nameNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. Adds valuable context about FanGraphs data source, 'qualifying batter' logic, and comprehensive stat types (AVG, wOBA, WAR, etc.). However, misses error handling, rate limits, data volume expectations, and response structure details.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well-structured with purpose front-loaded, followed by return value description, Args documentation, and use cases. Slightly verbose but necessary given schema coverage gaps. The 'Args:' section is efficiently formatted with inline examples.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Appropriate for complexity: has output schema (covering return details) and 4 well-documented parameters. Lacks only advanced context like data freshness, pagination for large multi-season queries, or error scenarios that would merit a 5.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description fully compensates by documenting all 4 parameters in the Args section: start_season (with example 2024), end_season (omit for single year), min_plate_appearances (blank for default), and player_name (optional filter with example).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clear specific verb ('Get') + resource ('season-level batting statistics') + source ('FanGraphs'). Explicitly distinguishes from siblings: contrasts with 'batting_stats_date_range' (season-level vs date range), 'season_pitching_stats' (batting vs pitching), and 'team_season_batting_stats' (individual qualifying batters vs team).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides implied usage context ('Great for finding league leaders, comparing players, or reviewing a full season') but lacks explicit when-to-use guidance versus alternatives like 'batting_stats_date_range' or 'statcast_batter'. No exclusions or prerequisites mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

season_pitching_statsA

Get season-level pitching statistics from FanGraphs.

Returns comprehensive stats: ERA, FIP, WHIP, K/9, BB/9, WAR, and many more for every qualifying pitcher.

Args: start_season: First season to include (e.g. 2024). end_season: Last season to include. Omit for a single year. min_innings: Minimum innings pitched to qualify. Leave blank to use the FanGraphs default qualified threshold. player_name: Optional. Filter to one pitcher (e.g. 'Gerrit Cole').

Great for finding pitching leaders, comparing pitchers, or analyzing a season.

ParametersJSON Schema
NameRequiredDescriptionDefault
start_seasonYes
end_seasonNo
min_inningsNo
player_nameNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It effectively discloses behavioral traits by listing example metrics returned (ERA, FIP, WHIP, etc.) and explaining the 'qualifying pitcher' concept tied to min_innings. It could improve by mentioning data volume expectations or rate limiting, but covers the essential return behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured and front-loaded: purpose statement first, return value summary second, then the Args section, closing with use-case sentences. There is no wasted language; every sentence earns its place by adding information not present in the structured schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the 4 parameters with zero schema coverage, the Args section provides complete documentation. Since an output schema exists, the description appropriately does not fully document return values, though listing example stats is helpful. Minor gap: could explicitly contrast with the date_range variant for completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description fully compensates via the Args section. It provides clear semantics for all 4 parameters: start_season includes an example (2024), end_season explains the omit-for-single-year behavior, min_innings clarifies the 'leave blank for default' logic, and player_name provides a concrete example ('Gerrit Cole').

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb-resource combination ('Get season-level pitching statistics from FanGraphs') that clearly distinguishes it from siblings like season_batting_stats (pitching vs. batting) and pitching_stats_date_range (season-level aggregates vs. date ranges). It also specifies the data source (FanGraphs) distinguishing it from Statcast-based siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides implied usage context ('Great for finding pitching leaders, comparing pitchers, or analyzing a season'), but lacks explicit guidance on when to use this versus pitching_stats_date_range for partial seasons, or whether to use player_lookup first for name resolution. It does not state exclusions or prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sprint_speed_leaderboardA

Get the Statcast sprint speed leaderboard.

Returns each player's sprint speed in feet per second, measured on competitive running plays. Sprint speed is one of the best measures of raw speed and baserunning ability.

Args: year: Season year (e.g. 2024). min_opportunities: Minimum competitive run opportunities (default 10). player_name: Optional. Filter to one player (e.g. 'Ronald Acuna Jr.').

Great for finding the fastest players in baseball.

ParametersJSON Schema
NameRequiredDescriptionDefault
yearYes
min_opportunitiesNo
player_nameNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It successfully discloses behavioral traits by explaining the measurement methodology ('measured on competitive running plays') and units ('feet per second'). It lacks operational details like error handling for invalid years or whether results are paginated, but covers the essential domain-specific context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is appropriately sized with clear front-loading of the core purpose. The structure separates the tool description, technical methodology, parameter documentation, and use case. The Args section efficiently documents parameters without verbosity, though the final sentence ('Great for finding...') slightly overlaps with the opening purpose statement.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has an output schema (per context signals) and is a straightforward read operation with only 3 parameters, the description is complete. It explains what data is returned (sprint speed in feet per second) and fully documents all parameters, compensating for the schema's lack of descriptions. No critical gaps remain for an AI agent to invoke this tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, requiring the description to fully compensate. It excels by documenting all three parameters in the 'Args:' section: year includes an example (2024), min_opportunities notes the default value (10), and player_name marks it as Optional with a realistic example ('Ronald Acuna Jr.').

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Get the Statcast sprint speed leaderboard' - a specific verb and resource. It distinguishes itself from the many sibling batting/pitching tools by focusing explicitly on 'raw speed and baserunning ability' rather than hitting or pitching metrics.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage with 'Great for finding the fastest players in baseball,' indicating when the tool is appropriate. However, it lacks explicit guidance on when to use this versus other statcast tools (like statcast_batter) or exclusions (e.g., that this is not for pitching speed).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

statcast_batterA

Get pitch-level Statcast data for a specific batter in a date range.

Returns every pitch the batter saw — pitch type, velocity, exit velocity, launch angle, expected batting average, and much more.

Args: player_name: Full name of the batter (e.g. 'Aaron Judge'). start_date: Start date in YYYY-MM-DD format. end_date: End date in YYYY-MM-DD format (defaults to start_date).

Great for analyzing a hitter's performance over a specific period.

ParametersJSON Schema
NameRequiredDescriptionDefault
player_nameYes
start_dateYes
end_dateNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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 effectively details the return payload ('every pitch the batter saw — pitch type, velocity, exit velocity...'), explaining the granularity and richness of data returned. It also clarifies the date range behavior (end_date defaults to start_date). Minor gap: doesn't explicitly state this is a safe read operation, though 'Get' implies this.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured and front-loaded: purpose statement first, return value details second, parameter specifications third, and use case last. Every sentence earns its place; there is no redundant or wasted text. The Args block efficiently handles parameter documentation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that an output schema exists (so full return value specification isn't required in text), the description provides an excellent preview of returned fields. It covers all parameters (compensating for the schema's lack of descriptions), explains the date logic, and provides the usage context. Complete for a query tool of this complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description fully compensates by providing an 'Args' section that documents all three parameters with clear semantics: player_name includes a concrete example ('Aaron Judge'), and both date fields specify the exact format ('YYYY-MM-DD') and default behavior. This adds essential meaning missing from the structured schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a precise action ('Get pitch-level Statcast data'), identifies the specific resource (pitch-level data), and scopes it to 'a specific batter in a date range.' This clearly distinguishes it from sibling aggregation tools like 'batting_stats_date_range' (which likely returns summary stats) and 'statcast_pitcher' (which covers pitchers).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description includes the line 'Great for analyzing a hitter's performance over a specific period,' which implies the use case. However, it lacks explicit guidance on when to prefer this over siblings like 'statcast_batter_expected_stats' or 'statcast_batter_exitvelo_barrels' for specific analyses, or when to use the broader 'statcast_search' instead.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

statcast_batter_exitvelo_barrelsA

Get exit velocity and barrel rate leaderboard for batters.

Returns average exit velocity, max exit velocity, barrel percentage, hard-hit rate, and batted ball quality metrics. A 'barrel' is a batted ball with the ideal combination of exit velocity and launch angle that almost always results in a hit.

Args: year: Season year (e.g. 2024). min_batted_ball_events: Minimum batted ball events to qualify (default 50). player_name: Optional. Filter to one batter (e.g. 'Aaron Judge').

Great for finding the hardest hitters and best contact quality in baseball.

ParametersJSON Schema
NameRequiredDescriptionDefault
yearYes
min_batted_ball_eventsNo
player_nameNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Without annotations, the description carries full burden. It adds valuable domain context by defining what a 'barrel' is and listing return metrics. However, it omits behavioral constraints like Statcast data availability years, rate limits, or error handling when a player_name is not found.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well-structured with clear sections: purpose, return values, domain definition (barrel), Args documentation, and use case. Every sentence adds value; the barrel definition is essential domain knowledge, and examples are provided without verbosity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 3 simple parameters and existence of output schema, the description is nearly complete. It covers all undocumented parameters and explains key terminology. Minor gap: lacks data availability constraints (e.g., Statcast tracking years) which are relevant for the 'year' parameter.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% (properties lack descriptions), but the description fully compensates via the 'Args:' section. It documents all 3 parameters with clear semantics, examples ('2024', 'Aaron Judge'), and default values (min_batted_ball_events default 50).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with specific verb 'Get' and resource 'exit velocity and barrel rate leaderboard for batters', clearly distinguishing from sibling 'statcast_pitcher_exitvelo_barrels' and broader 'statcast_batter'. Lists specific metrics returned (avg exit velocity, max exit velocity, barrel percentage) to reinforce scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides implicit usage context ('Great for finding the hardest hitters and best contact quality') suggesting when to select it, but lacks explicit comparisons to siblings like 'statcast_batter_expected_stats' or 'batting_stats_date_range' for alternative use cases. No 'when not to use' guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

statcast_batter_expected_statsA

Get expected batting stats (xBA, xSLG, xwOBA vs actual) from Statcast.

Returns xBA, xSLG, xwOBA and the gap from actual stats — what a batter deserves based on quality of contact.

Args: year: Season year (e.g. 2024). min_plate_appearances: Minimum PA to qualify (default 50). player_name: Optional. If set (e.g. 'Aaron Judge'), returns only that player's row — use this so a star is not cut off by the 50-row leaderboard limit.

Great for identifying lucky/unlucky hitters or a single player's expected line.

ParametersJSON Schema
NameRequiredDescriptionDefault
yearYes
min_plate_appearancesNo
player_nameNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. It discloses the critical 50-row leaderboard limit, default 50 PA threshold, and explains what the gap represents ('deserves based on quality of contact'). Missing safety profile (implied read-only) and error behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well-structured with purpose front-loaded, followed by return value explanation, Args documentation, and use-case summary. Every sentence adds value; no repetition or filler despite covering 3 parameters and behavioral constraints.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Appropriately complete given the output schema exists (so return values need less description). Covers the key constraint (50-row limit) that would affect agent planning. Minor gap: assumes familiarity with 'Statcast' without domain context (MLB).

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the Args section fully compensates by documenting all three parameters: year includes example (2024), min_plate_appearances explains meaning and default (50), and player_name details the filtering behavior and use case (avoiding row limit cutoff).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description explicitly states 'Get expected batting stats (xBA, xSLG, xwOBA vs actual) from Statcast' with specific metrics and distinguishes from siblings by noting the 50-row leaderboard limit and expected-vs-actual focus, differentiating it from raw statcast_batter or batch tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear use-case guidance ('Great for identifying lucky/unlucky hitters') and explicitly advises when to use player_name filter ('so a star is not cut off by the 50-row leaderboard limit'). Lacks explicit naming of sibling alternatives like expected_stats_batch.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

statcast_batter_pitch_arsenalA

Get batting stats broken down by pitch type for batters.

Returns BA, SLG, wOBA, whiff rate, K rate, run value, and hard-hit rate for each pitch type a batter faced (4-seam, slider, curve, changeup, etc.).

Args: year: Season year (e.g. 2024). player_name: Optional. Filter to a specific batter (e.g. 'Aaron Judge'). If omitted, returns the full leaderboard. min_plate_appearances: Minimum PA per pitch type to qualify (default 10).

Great for analyzing how a hitter performs against fastballs vs. breaking balls.

ParametersJSON Schema
NameRequiredDescriptionDefault
yearYes
player_nameNo
min_plate_appearancesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It effectively discloses return behavior by listing specific metrics returned (BA, SLG, wOBA, whiff rate, etc.) and the breakdown structure (per pitch type). However, it omits explicit safety declarations (read-only vs. destructive) or rate limiting concerns.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear sections: purpose, return values, Args documentation, and use case. Every sentence adds value; no repetition of the tool name or tautological statements. The Args section is efficiently embedded without excessive verbosity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 3 parameters and an output schema, the description is complete. It documents all parameters (compensating for empty schema descriptions), explains the return structure despite the existence of an output schema, and provides contextual usage guidance. No critical gaps remain.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Given 0% schema description coverage, the Args section fully compensates by documenting all 3 parameters with semantics, examples ('2024', 'Aaron Judge'), optionality flags, and default values (min_plate_appearances default 10). This adds substantial meaning beyond the raw schema types.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb ('Get') + resource ('batting stats') + granular scope ('broken down by pitch type'). It clearly distinguishes itself from the general 'statcast_batter' sibling by emphasizing the pitch-type granularity (4-seam, slider, etc.).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides positive usage guidance ('Great for analyzing how a hitter performs against fastballs vs. breaking balls'), but lacks explicit negative constraints or alternatives. It does not state when to use the general 'statcast_batter' tool instead, or clarify that this is specifically for pitch-type breakdowns versus aggregate stats.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

statcast_pitcherA

Get pitch-level Statcast data for a specific pitcher in a date range.

Returns every pitch thrown — pitch type, velocity, spin rate, movement, exit velocity allowed, and more.

Args: player_name: Full name of the pitcher (e.g. 'Gerrit Cole'). start_date: Start date in YYYY-MM-DD format. end_date: End date in YYYY-MM-DD format (defaults to start_date).

Great for analyzing a pitcher's stuff, outings, or trends over time.

ParametersJSON Schema
NameRequiredDescriptionDefault
player_nameYes
start_dateYes
end_dateNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

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 effectively communicates the granularity ('Returns every pitch thrown') and previews data fields (velocity, spin rate, etc.), which helps agents anticipate response volume. However, it omits operational constraints like rate limits, maximum date ranges, or error conditions when a player is not found.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear sectioning: purpose, return value specification, Args documentation, and usage context. There is minimal fluff, though the 'Great for...' sentence could be more formal. The Args section efficiently packs necessary schema details without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Considering the presence of an output schema (reducing the need for detailed return documentation) and the compensation for zero schema coverage via the Args section, the description is adequate for basic invocation. However, it lacks completeness regarding edge cases, such as date range limitations, name normalization rules, or handling of off-season date ranges.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Given 0% schema description coverage, the Args section effectively compensates by providing type semantics and formats (e.g., 'YYYY-MM-DD format') and an example value ('Gerrit Cole'). It also documents the default behavior for end_date, which is critical for optional parameter understanding.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a precise action ('Get pitch-level Statcast data'), identifies the resource (pitcher-specific data), and scopes it (date range). The 'pitch-level' qualifier effectively distinguishes this from sibling aggregate tools like statcast_pitcher_arsenal_stats or pitching_stats_date_range.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides positive usage context ('Great for analyzing a pitcher's stuff, outings, or trends'), helping agents understand when to select it. However, it lacks explicit guidance on when NOT to use this versus alternatives like statcast_search or the aggregated arsenal stats tools, leaving ambiguity about which pitcher tool is appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

statcast_pitcher_arsenal_statsA

Get performance stats broken down by pitch type for each pitcher.

Shows batting average, slugging, whiff rate, put-away rate, and run values for every individual pitch type a pitcher throws.

Args: year: Season year (e.g. 2024). min_plate_appearances: Minimum PA for each pitch type (default 25). player_name: Optional. Filter to one pitcher (all their pitch types).

Great for evaluating which specific pitches are most (or least) effective.

ParametersJSON Schema
NameRequiredDescriptionDefault
yearYes
min_plate_appearancesNo
player_nameNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It discloses what data is returned (the specific pitch-type metrics), which is helpful. However, it lacks operational details like rate limits, error conditions, or whether the data is real-time vs historical.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The content is well-structured with purpose first, followed by return details, Args documentation, and a use-case summary. The line breaks within sentences are slightly inefficient, but every sentence adds necessary information without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

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 appropriately summarizes the key metrics rather than detailing the full return structure. All parameters are documented. It could be improved by noting data source constraints or season availability limits.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Despite 0% schema description coverage, the Args section thoroughly documents all three parameters: 'year' includes a format example (2024), 'min_plate_appearances' notes the default value (25), and 'player_name' clarifies its optional filter behavior. This fully compensates for the schema's lack of descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb ('Get') and resource ('performance stats broken down by pitch type for each pitcher'), then enumerates exact metrics returned (batting average, slugging, whiff rate, put-away rate, run values). This precisely distinguishes it from general pitching stats or batter-focused siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides an implied use case ('Great for evaluating which specific pitches are most effective'), but fails to explicitly differentiate from the similarly-named sibling 'statcast_pitcher_pitch_arsenal' or state when to prefer this over 'statcast_pitcher'. No exclusions or alternative recommendations are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

statcast_pitcher_exitvelo_barrelsA

Get exit velocity and barrel rate allowed by pitchers.

Returns average exit velocity, barrel percentage, and hard-hit rate allowed. Lower values indicate a pitcher who limits hard contact.

Args: year: Season year (e.g. 2024). min_batted_ball_events: Minimum batted ball events against (default 50). player_name: Optional. Filter to one pitcher (e.g. 'Gerrit Cole').

Great for finding pitchers who suppress hard contact most effectively.

ParametersJSON Schema
NameRequiredDescriptionDefault
yearYes
min_batted_ball_eventsNo
player_nameNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It discloses what metrics are returned and adds interpretive context ('Lower values indicate a pitcher who limits hard contact'), but omits operational details like rate limits, data freshness, or caching behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well-structured with clear front-loading: purpose statement, return value description, behavioral interpretation, parameter documentation (Args), and use case. Every sentence provides distinct value without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the output schema exists and parameters are well-documented in the description, the coverage is strong. Minor gap: could explicitly reference the sibling batter tool for clarity, but the pitcher/batter distinction is implied through 'allowed by' language.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, requiring the description to compensate fully. The Args section documents all three parameters (year, min_batted_ball_events, player_name) with types implied via examples, constraints noted ('Optional'), and defaults mentioned ('default 50'), completely filling the schema documentation gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb ('Get') and resource ('exit velocity and barrel rate allowed by pitchers'), clearly distinguishing it from the sibling batter tool (statcast_batter_exitvelo_barrels) by specifying 'allowed by pitchers' (pitcher perspective).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides implied usage context ('Great for finding pitchers who suppress hard contact most effectively') but lacks explicit when-to-use/when-not-to-use guidance or naming of alternative tools like the batter variant or other pitching stats tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

statcast_pitcher_expected_statsA

Get expected stats allowed by pitchers from Statcast.

Returns xBA, xSLG, xwOBA, xERA allowed vs actual — contact quality vs results.

Args: year: Season year (e.g. 2024). min_plate_appearances: Minimum PA against to qualify (default 50). player_name: Optional. If set (e.g. 'Gerrit Cole'), returns only that pitcher's row (avoids missing them in the truncated leaderboard).

Great for finding pitchers who outperformed or underperformed their contact quality.

ParametersJSON Schema
NameRequiredDescriptionDefault
yearYes
min_plate_appearancesNo
player_nameNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It effectively discloses the return values (specific expected stats vs actual), notes the 'truncated leaderboard' behavior (explaining why to use player_name), and mentions the default value for minimum plate appearances. Missing only operational details like rate limits or error handling.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well-structured with purpose front-loaded in the first sentence, followed by return value specifics, an Args block documenting parameters, and a final use-case sentence. Every sentence adds value; no repetition of schema structure or tautology.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the existence of an output schema (which handles return value documentation), the description provides complete coverage: it identifies the data source (Statcast), explains the specific metrics returned, documents all parameters (compensating for empty schema descriptions), and provides usage context for the target analysis (over/underperformance detection).

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description fully compensates by documenting all three parameters in the Args section: year includes an example (2024), min_plate_appearances clarifies 'PA against' (plate appearances against) and default (50), and player_name explains the behavior (avoids missing entries in truncated results) with an example ('Gerrit Cole').

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool 'Get[s] expected stats allowed by pitchers from Statcast' with specific metrics (xBA, xSLG, xwOBA, xERA), distinguishing it from siblings like `statcast_pitcher` (general data) and `season_pitching_stats` (traditional stats) by emphasizing 'expected' versus 'actual' results and contact quality analysis.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear context with 'Great for finding pitchers who outperformed or underperformed their contact quality,' indicating the analytical purpose. However, it does not explicitly name sibling alternatives (e.g., when to use this vs `expected_stats_batch` or `statcast_pitcher`), so it lacks explicit when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

statcast_pitcher_pitch_arsenalA

Get pitch arsenal breakdown for all pitchers in a season.

Shows average velocity (and related columns) per pitch type for qualifying pitchers.

Args: year: Season year (e.g. 2024). min_pitches: Minimum total pitches thrown to qualify (default 100). player_name: Optional. Filter to one pitcher (e.g. 'Spencer Strider').

Great for understanding what pitches a pitcher throws and how often.

ParametersJSON Schema
NameRequiredDescriptionDefault
yearYes
min_pitchesNo
player_nameNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. Adds valuable context about output ('average velocity and related columns') and filtering logic ('qualifying pitchers'), but omits details about data freshness, pagination, or error handling.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well-structured with clear sections: purpose, data details, parameters, and use case. The inline 'Args:' format is slightly informal but efficiently packs necessary parameter documentation without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Adequately complete given the existence of an output schema. Covers the main functional scope, parameter requirements, and typical use case. Could briefly mention whether it returns aggregated season data or individual pitch data.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema has 0% description coverage, but the description fully compensates by documenting all 3 parameters with semantic meaning, examples ('2024', 'Spencer Strider'), and default values (min_pitches: 100, player_name: optional).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clear verb ('Get') and resource ('pitch arsenal breakdown') with scope ('all pitchers in a season'). Distinguishes from batter tools implicitly by mentioning pitchers, but does not explicitly differentiate from similar sibling 'statcast_pitcher_arsenal_stats'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides implied usage context ('Great for understanding what pitches a pitcher throws and how often') but lacks explicit when-to-use guidance or comparison to alternatives like 'statcast_pitcher' or 'statcast_pitcher_arsenal_stats'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

team_season_batting_statsA

Full-season actual batting stats for one MLB team (entire roster).

Uses FanGraphs when available; if that fails or returns no rows, falls back to scraping Baseball Reference's team page (same numbers as the site: PA, HR, AVG/OBP/SLG, OPS+, WAR, etc.).

Args: team: 3-letter team abbreviation — same as Baseball Reference (e.g. PHI, NYY, LAD, ARI). season: Calendar year of the season (e.g. 2025). min_plate_appearances: Minimum PA to include on the FanGraphs pull (default 1). Ignored for the BRef fallback, which lists everyone who appeared. player_name: Optional. Restrict to one player (e.g. Bryce Harper).

Use this for “Phillies lineup stats”, “Yankees 2024 hitters”, etc. For league leaderboards without a team filter, use season_batting_stats instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
teamYes
seasonYes
min_plate_appearancesNo
player_nameNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. Discloses data sources (FanGraphs primary, BRef fallback), fallback trigger conditions ('if that fails or returns no rows'), and behavioral quirk (min_plate_appearances ignored for BRef). Lists representative output fields (PA, HR, AVG/OBP/SLG, OPS+, WAR). Minor gap: doesn't explicitly state read-only nature or rate limits, though implied by 'stats' retrieval pattern.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Efficient structure: scope sentence → data source/fallback paragraph → Args section → usage guidelines. Every sentence earns its place; no tautology or filler. Markdown bolding and code blocks enhance scannability. Front-loaded with the essential 'what' before implementation details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Comprehensive for a 4-parameter tool with output schema (so return values need minimal description). Covers scope, data sources, all parameters (given 0% schema coverage), sibling alternatives, and use case examples. The mention of specific stat categories (OPS+, WAR) provides appropriate context for what 'batting stats' entails without needing to replicate the output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% (no property descriptions), requiring full compensation. The 'Args' section documents all 4 parameters with precise semantics: team abbreviations with examples (PHI, NYY), season as calendar year, min_plate_appearances with default value and fallback caveat, and player_name as optional filter with example. Fully compensates for empty schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with specific scope: 'Full-season **actual** batting stats for one MLB team (entire roster)'—clear verb (stats), resource (MLB team), and scope. Explicitly distinguishes from sibling `season_batting_stats` ('For **league** leaderboards... use ``season_batting_stats`` instead') and implicitly from `team_season_pitching_stats` via resource specificity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit when-to-use examples ('Phillies lineup stats', 'Yankees 2024 hitters') and explicit alternative for the wrong use case (league leaderboards → `season_batting_stats`). Also documents fallback behavior (FanGraphs → Baseball Reference) so users understand data provenance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

team_season_pitching_statsA

Full-season actual pitching stats for one MLB team (rotation + bullpen).

Uses FanGraphs when available; otherwise scrapes Baseball Reference's team pitching table (W, L, ERA, G, GS, SV, IP, SO, WAR, etc.).

Args: team: 3-letter abbreviation (e.g. PHI, NYY). season: Season year (e.g. 2025). min_innings: Minimum IP for the FanGraphs pull (default 1). Ignored for BRef fallback (full staff). player_name: Optional. One pitcher (e.g. Zack Wheeler).

Split rotation vs bullpen by sorting on GS in the table (starters vs relievers). For league-wide pitching only, use season_pitching_stats.

ParametersJSON Schema
NameRequiredDescriptionDefault
teamYes
seasonYes
min_inningsNo
player_nameNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. Discloses data source priority (FanGraphs primary, BRef fallback), filtering logic differences (min_innings ignored for BRef), and result interpretation methodology (GS sorting for rotation/bullpen). Does not mention rate limits or auth requirements, preventing a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Uses structured Args section with backtick formatting for code examples. Every sentence adds value: data source disclosure, parameter semantics, usage guidance, and result interpretation. No wasted words despite comprehensive coverage.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given output schema exists (per context signals), description appropriately focuses on conceptual behavior, data sources, and usage patterns rather than return value structure. Covers all 4 parameters comprehensively and explains business logic (rotation/bullpen split).

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, requiring full compensation. Description excellently documents all 4 parameters: team (3-letter abbrev with examples), season (year format), min_innings (default value and behavioral note about BRef ignorance), and player_name (optional with example).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description opens with specific verb+resource ('Full-season actual pitching stats for one MLB team') and explicitly distinguishes from sibling 'season_pitching_stats' by contrasting team-specific vs league-wide scope. Clear differentiation of rotation vs bullpen adds further specificity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when-not-to-use and alternative: 'For league-wide pitching only, use `season_pitching_stats`' provides clear guidance. Also clarifies FanGraphs vs Baseball Reference fallback behavior and how to interpret results (splitting rotation/bullpen via GS sorting).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

team_standingsA

Get MLB division standings for a given season.

Returns win-loss records, winning percentage, and games back for all 30 teams organised by division (AL East, AL Central, AL West, NL East, NL Central, NL West).

Args: season: The season year (e.g. 2024).

ParametersJSON Schema
NameRequiredDescriptionDefault
seasonYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden. It discloses return content (win-loss records, winning percentage, games back) and structure (organized by 6 divisions). However, it omits safety traits (read-only status), rate limits, or error behaviors like invalid season handling.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Excellent structure with front-loaded purpose ('Get MLB division standings...'), followed by return value details, then parameter documentation. Zero redundant text; every sentence delivers distinct value regarding scope, output format, or parameter usage.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter tool with existing output schema, the description is appropriately complete. It covers the undocumented parameter, clarifies the specific output metrics, and establishes clear scope without unnecessary verbosity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, requiring the description to compensate. The Args section successfully documents the season parameter with type context ('year') and concrete example ('2024'), fully compensating for the bare schema. Minor deduction for lacking validation constraints (e.g., valid year ranges).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses specific verb 'Get' with clear resource 'MLB division standings' and scope 'for a given season'. It effectively distinguishes from sibling tools like team_season_batting_stats by emphasizing win-loss records and divisional organization rather than performance statistics.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage by specifying it returns division standings and win-loss records, contrasting with player stat tools. However, it lacks explicit guidance on when to use this versus similar team-level tools like team_season_batting_stats or when standings data is available (e.g., in-season vs offseason).

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.

  1. 24 tool updatesv0.1.0
    • First observedbatter_percentile_ranks
    • First observedbatting_stats_date_range
    • First observedexpected_stats_batch
    • First observedoutfield_directional_oaa
    • First observedouts_above_average
    • First observedpitcher_percentile_ranks
    • First observedpitching_stats_date_range
    • First observedplayer_lookup
    • First observedseason_batting_stats
    • First observedseason_pitching_stats
    • First observedsprint_speed_leaderboard
    • First observedstatcast_batter
    • First observedstatcast_batter_exitvelo_barrels
    • First observedstatcast_batter_expected_stats
    • First observedstatcast_batter_pitch_arsenal
    • First observedstatcast_pitcher
    • First observedstatcast_pitcher_arsenal_stats
    • First observedstatcast_pitcher_exitvelo_barrels
    • First observedstatcast_pitcher_expected_stats
    • First observedstatcast_pitcher_pitch_arsenal
    • First observedstatcast_search
    • First observedteam_season_batting_stats
    • First observedteam_season_pitching_stats
    • First observedteam_standings

TDQS

A4/5.0

Scored across 24 tools

Disambiguation4/5

Most tools have distinct purposes focused on specific baseball statistics domains (batting, pitching, fielding, team stats), but there is some overlap between tools like 'statcast_batter_expected_stats' and 'expected_stats_batch' that could cause confusion about when to use each. The descriptions help clarify, but an agent might need to carefully parse the differences.

Naming Consistency4/5

Tool names follow a consistent snake_case pattern throughout, with clear descriptive naming (e.g., 'batter_percentile_ranks', 'statcast_pitcher_arsenal_stats'). There are minor deviations like 'player_lookup' (more generic) and 'statcast_search' (broader scope), but overall the naming is predictable and well-structured.

Tool Count3/5

With 24 tools, the count feels heavy for a Statcast-focused server, though it covers a comprehensive range of baseball analytics. Some tools could potentially be consolidated (e.g., multiple expected stats tools), making the surface somewhat bloated compared to a more streamlined set.

Completeness5/5

The tool set provides excellent coverage of baseball statistics, including batting, pitching, fielding, team stats, and player lookup across multiple data sources (Statcast, FanGraphs, Baseball Reference). There are no obvious gaps—it supports detailed analysis, comparisons, and historical queries with flexible date ranges and filtering options.

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    C
    maintenance
    Provides access to comprehensive MLB baseball statistics through the MLB Stats API, pybaseball library, Statcast data, FanGraphs, and Baseball Reference, including support for generating matplotlib visualizations.
    32
    -
  • A
    license
    A
    quality
    D
    maintenance
    Connects Claude to the SportRadar MLB API to access real-time baseball data including game schedules, live scores, player statistics, team standings, injury reports, and play-by-play information through natural language queries.
    19
    1
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Provides comprehensive baseball analytics through 32 tools covering pitching, batting, defensive metrics, and visualizations via the Model Context Protocol, enabling natural language queries for advanced Statcast and MLB statistics.
    MIT
  • F
    license
    A
    quality
    C
    maintenance
    Enables natural language interaction with Sleeper Fantasy Football API data, allowing queries about leagues, players, matchups, draft results, and trade analysis.
    13
    19
    -