Skip to main content
Glama

mlb_statcast_bat_tracking

Read-only

Fetch Baseball Savant Bat Tracking rows for batters, teams, pitchers, or league totals with season, game, swing threshold, date, contact, team, pitch, count, grouping, sorting, and pagination filters; use mlb_discovery for exact values.

Input Schema

NameRequiredDescriptionDefault
sortNoOptional local row field from mlb_discovery.
typeNoOptional row type: batter, batting-team, pitcher, pitching-team, or league. Defaults to batter.
limitNoOptional number of rows to return, 1-500; defaults to 100.
teamsNoOptional MLB team ids from mlb_discovery; select one or more.
countsNoOptional ball-strike counts from mlb_discovery; select one or more.
offsetNoOptional zero-based row offset.
bat_sideNoOptional batting side: L or R.
date_endNoOptional date range end in YYYY-MM-DD format.
group_byNoOptional up to four grouping columns from mlb_discovery.
sort_dirNoOptional local sort direction: asc or desc.
game_typeNoOptional game type: Any, Playoff, or Regular.
date_startNoOptional date range start in YYYY-MM-DD format.
min_swingsNoOptional swing qualifier: q, 1, 5, 10, 25, 50, 100, 200, 500, or 1000.
pitch_handNoOptional pitcher hand: L or R.
season_endNoOptional last season from the values returned by mlb_discovery; defaults to season_start.
attack_zoneNoOptional attack-zone code: 0, 1, 1.1, 2, or 3.
is_hard_hitNoOptional hard-hit filter: 1 or 0.
pitch_typesNoOptional pitch type codes from mlb_discovery; select one or more.
contact_typeNoOptional contact type: 2 (hit in play), 4 (foul), or 9 (whiff).
season_startNoOptional first season from the values returned by mlb_discovery; defaults to the current season.
min_group_swingsNoOptional grouped-row minimum: 1, 5, 10, 25, 50, 100, 200, 500, or 1000.

Output Schema

NameRequiredDescriptionDefault
dataYesThe tool result payload (shape varies per tool; see each tool's docs resource).

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed4 schema fields changed
    • addedInput schema / properties / counts / items / description
      Added value: +"Documented values: 00, 01, 02, 10, 11, 12, 20, 21, 22, 30, 31, 32."
    • addedInput schema / properties / group_by / items / description
      Added value: +"Documented values: year, api_game_date_month_text, bat_contact_code, api_pitch_type_group03, game_type, is_hit_into_play_hardhit, is_best_speed, pitch_hand, bat_side, is_pre_ball_count_3, is_pre_strike_count_2."
    • addedInput schema / properties / pitch_types / items / description
      Added value: +"Documented values: FF, SI, FC, CH, FS, FO, SC, CU, SL, ST, SV, KN."
    • addedInput schema / properties / teams / items / description
      Added value: +"Documented values: 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 158."
  2. First observed

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is covered. The description adds the filterable dimensions but says nothing about default row size, pagination behavior, or result shape beyond what annotations cover.

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?

A single front-loaded sentence with the verb and resource first, then the filter inventory, then the mlb_discovery pointer. No filler, and the length is justified by 21 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?

An output schema exists so return values need no explanation, and the description covers scope and filter families for a 21-param tool. The one gap is disambiguation from sibling statcast endpoints, which matters given the dense cluster of mlb_statcast_* tools.

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 coverage is 100%, so the baseline is 3, but the description goes further by grouping the 21 parameters into named filter families (season, game, swing threshold, date, contact, team, pitch, count, grouping, sorting, pagination) that map cleanly onto the schema properties.

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?

Specific verb ('Fetch') plus a named resource ('Baseball Savant Bat Tracking rows') and an explicit enumeration of entity types (batters, teams, pitchers, league totals). This distinguishes it from sibling statcast tools like swing_path, swing_timing, and arm_angle without needing to open the schema.

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?

It routes the agent to mlb_discovery for exact parameter values, which is a useful workflow hint. However, it never says when to prefer this over siblings such as mlb_statcast_swing_path or mlb_statcast_batted_ball, and there are no when-not conditions.

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.