An MCP server providing MLB statistics and baseball analysis tools using MLB StatsAPI and pybaseball data
Scoring was not performed
Descriptions lack WHEN/WHY context. 'Create a strike zone plot...' does not explain when an agent should choose this tool vs alternatives, what prerequisites exist, or what the user gets back. Descriptions are 40-80 chars, below the 50-200 char target for LLM-optimized docs.
Parameters lack constraints. 'colorby' and 'annotation' accept free-form strings with no enum declaration. An LLM may pass 'pitch_colored_by_type' or other hallucinated values. No mention of valid column names from the Statcast data schema.
Error handling is basic exception wrapping ('Error creating strike zone plot: {e}') without recovery guidance. When plotting fails due to bad column names or missing data, the LLM has no suggestion for what to do next (e.g., 'Try with parameter=exit_velocity' or 'Call get_statcast_data first').
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 26 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 46 | - | v1 |
Output schemas include 'metadata' dict but lack clear structure definition. Response objects (pitch_count, hit_count, stadium) are returned as untyped dicts, LLMs cannot plan follow-up actions without knowing exact field names and types.
Input parameter 'data' expects a nested dict structure with 'data' key ('Dictionary containing Statcast data with data key'). This is awkward and non-idiomatic, if the schema is a dict of records, accept it directly. The nested 'data' wrapper wastes tokens and is a common source of agent confusion.
Parameters like 'size' (integer, default 100) and 'width'/'height' (integers, defaults 500) lack min/max bounds. An LLM could pass size=999999 or width=-100, causing matplotlib to fail. Numeric parameters should include range constraints in the description.
No documented dependencies between tools. Agents don't know that create_strike_zone_plot requires Statcast pitch-level data, while create_teams_plot requires team-level aggregates. Descriptions should hint at prerequisite data sources.