batting_stats_date_range
Analyze baseball batting statistics for any custom date range to identify performance trends, hot streaks, or specific time periods. Filter by player to examine individual performance during selected windows.
Instructions
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.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| start_date | Yes | ||
| end_date | Yes | ||
| player_name | No |
Implementation Reference
- src/statcast_mcp/server.py:1344-1376 (handler)The implementation of the `batting_stats_date_range` MCP tool. It uses `pybaseball.batting_stats_range` to fetch data for the given date range and filters the results if a player name is provided.
def batting_stats_date_range( start_date: str, end_date: str, player_name: str | None = None, ) -> str: """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. """ from pybaseball import batting_stats_range as _fn try: data = _fn(start_date, end_date) except Exception as e: return f"Error fetching batting stats for date range: {e}" if player_name: try: data = _filter_player_rows(data, player_name) except ValueError as e: return str(e) if data.empty: return f"No batting stats for {player_name} in {start_date}–{end_date}." return _fmt(data, max_rows=50)