Skip to main content
Glama

Historical Baseball

Baseball Player History

baseball_player_history
Read-onlyIdempotent

Year-by-year MLB batting and/or pitching statistics for one player's whole career, from the SABR Lahman Baseball Database (1871-2025). Pass a player NAME ("Babe Ruth", "Walter Johnson") or an exact Lahman player_id (e.g. "ruthba01") -- a name is resolved by exact then fuzzy match; if more than one player matches, a list of candidates (with player_id, birth year, debut) is returned instead of a guess, so the caller can re-ask with the exact player_id. Returns every season the player appears in Batting.csv and/or Pitching.csv (most players have only one; a few, like Babe Ruth, have both). Each season row has team, league, games and the standard counting stats. Unknown or ambiguous names are refused with a clear error/candidate-list, never an empty success.

Input Schema

NameRequiredDescriptionDefault
playerYesPlayer name ("Hank Aaron") or exact Lahman player_id ("aaronha01").

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already establish read-only, idempotent, non-destructive, open-world behavior. The description adds substantial behavioral detail beyond annotations: exact-then-fuzzy name resolution, candidate-list return on ambiguity, data source and date range, and the guarantee that unknown names are refused rather than returning empty success.

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 front-loaded with the core purpose and then covers input resolution and return behavior efficiently. It is somewhat long, but nearly every sentence adds operational detail, so it remains appropriately structured rather than padded.

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?

With no output schema, the description carries the burden of explaining return values and does so: it describes season rows with team, league, games, and standard counting stats, plus candidate-list responses on ambiguity. Combined with the annotations and full schema coverage, an agent has enough information to call and interpret 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?

Schema coverage is 100%, so the baseline would be 3, but the description adds meaning beyond the schema: it explains exact player_id usage, name resolution order, fuzzy matching, and the candidate-list behavior when multiple players match. This materially improves how an agent should construct and recover from the `player` argument.

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 a specific verb and resource: retrieving year-by-year MLB batting and/or pitching statistics for one player's entire career from the SABR Lahman database. It clearly distinguishes this from sibling baseball tools like game logs, season leaders, team season, and coverage by scope and granularity.

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 gives clear usage context: pass either a player name or exact Lahman player_id, and explains what happens with ambiguous names. It does not explicitly compare against named sibling alternatives, but the one-player/career-stats scope is clear enough for an agent to select it correctly.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.