Install
openclaw skills install mlb-statcastQuery MLB Statcast data via the statcast MCP server — player lookups, expected stats, pitch arsenals, exit velocity, barrel rate, percentile ranks, standings, and more. Use when asked about any MLB player, team, or pitching/hitting metric beyond traditional box score numbers.
openclaw skills install mlb-statcastGet pitch-by-pitch Statcast data, expected stats, pitch arsenals, and advanced metrics for any MLB player, team, or season. Wraps the statcast MCP server (installed via pip install statcast-mcp).
Use this skill whenever the user asks about:
If the question can be answered with traditional box-score stats only, prefer wikipedia or a web search. This skill is for advanced, Statcast-derived numbers.
# Player ID lookup (always do this first for new players)
mcporter call statcast.player_lookup "player_name=Shohei Ohtani"
# Batter percentile ranks (note: param is `year`, not `season`)
mcporter call statcast.batter_percentile_ranks "player_name=Aaron Judge" "year=2025"
# Pitcher arsenal stats (param is `year`)
mcporter call statcast.statcast_pitcher_arsenal_stats "player_name=Paul Skenes" "year=2025"
# Expected stats for a custom group (param is `year`)
mcporter call statcast.expected_stats_batch "player_names=[\"Judge\",\"Ohtani\",\"Soto\"]" "year=2025"
# Standings (param is `year`)
mcporter call statcast.team_standings "year=2025"
# Pitch-level data for a single game
mcporter call statcast.statcast_search "start_date=2025-06-15" "end_date=2025-06-15" "team=NYY"
player_lookup — Look up MLBAM ID + alternate IDs (FanGraphs, Baseball-Reference, Retro) for a playerteam_standings — Current/season MLB division standingsstatcast_search — All pitches in a date range (optionally filtered by team)statcast_batter — All pitches seen by a specific batterstatcast_pitcher — All pitches thrown by a specific pitcherseason_batting_stats / season_pitching_stats — full-season traditional statsbatting_stats_date_range / pitching_stats_date_range — same metrics over a custom windowteam_season_batting_stats / team_season_pitching_stats — full-roster team totalsstatcast_batter_expected_stats / statcast_pitcher_expected_stats — xBA, xSLG, xwOBA for a playerexpected_stats_batch — same, but for many players in one call (cheaper)statcast_batter_pitch_arsenal — hitter’s outcomes split by incoming pitch typestatcast_pitcher_pitch_arsenal — all pitchers’ pitch mix + outcomesstatcast_pitcher_arsenal_stats — performance (BA/SLG/wOBA/Whiff%/K%/Hard-Hit%) by pitch type for one pitcherstatcast_batter_exitvelo_barrels — hitter EV + barrel% leaderboardstatcast_pitcher_exitvelo_barrels — pitcher EV-allowed + barrel%-allowedbatter_percentile_ranks — hitter percentile vs the league (EV, barrel%, xwOBA, sprint speed, etc.) — param: yearpitcher_percentile_ranks — pitcher percentile vs the league (spin, whiff%, xERA, K%, etc.) — param: yearsprint_speed_leaderboard — top sprinters (param: year)outs_above_average — OAA leaderboard by position (param: year, position)outfield_directional_oaa — outfield OAA split by directionplayer_lookup to get the MLBAM ID. Some downstream tools are stricter about exact names; a player_lookup confirms spelling and years active.expected_stats_batch over multiple statcast_batter_expected_stats calls.statcast_search / statcast_batter / statcast_pitcher. The upstream API is slow on long windows. 1–5 days is ideal; a full month can take 30+ seconds.player_lookup("Trout") works, but uncommon names may return multiple candidates. Always check the response.wikipedia MCP is the right companion tool.player_lookup use player_name="Ohtani" (last name only). The matcher is substring + last-name, and full first+last can over-match.batter_percentile_ranks / pitcher_percentile_ranks / statcast_pitcher_arsenal_stats, use the full name ("Aaron Judge", not "Judge") — those tools reject single-name lookups.player_lookup may return multiple candidates — read the response and disambiguate by mlb_played_first / mlb_played_last years.player_lookup returns a pitcher when you wanted a hitter (or vice versa), pass the full name in Last, First form to disambiguate.pip install statcast-mcp
This gives you the statcast-mcp command. The server uses pybaseball under the hood (no API key needed — it pulls from public Baseball Savant / FanGraphs endpoints).
Add to your mcporter.json:
{
"mcpServers": {
"statcast": {
"command": "statcast-mcp"
}
}
}
mcporter call statcast.player_lookup "player_name=Aaron Judge"
You should see Judge’s MLBAM ID (592450) and active years.
pip install statcast-mcp (pulls in lxml, mcp, pandas, pybaseball, tabulate)All data comes from public Baseball Savant (Statcast) and FanGraphs endpoints via pybaseball. No API keys, no rate-limit auth — but please be polite with call volume.
mlb-daily-scores ClawHub skill or a sports-odds MCP)