Skip to main content
Glama

Team stats

get_team_stats
Read-onlyIdempotent

A team's stats per game with the opponent's beside them, or group_by=season for per-game averages and totals. Needs league, one of meta.stats_leagues. Send team, or a season to read every team. Free plan: one team, its last 10 games.

Input Schema

NameRequiredDescriptionDefault
dateNoOne game date, league local.
lastNoThe team's most recent N games. Needs team. limit and cursor are ignored.
teamNoA team code (BOS) or team id (tm_...).
viewNogroup_by=game only: compact is flat and allows limit up to 1000.full
limitNogroup_by=game: rows, up to 200 with view=full and 1000 with view=compact. group_by=season: teams, up to 100.
cursorNometa.next_cursor from the preceding page. Send the same filters.
leagueYesLeague code, for example NBA. meta.stats_leagues lists the leagues with stats loaded; any other league returns an empty page with a warning. A segment league from a projection row (NBA1Q) reads as its full league. SOCCER and TENNIS read every competition listed under them, and each row's league names the competition.
seasonNoSeason label, as listed in meta.coverage.seasons: 2025-26, or 2026 in single-year leagues.
end_dateNoGames on or before this league-local date. For a feature as it stood before a game, set this to the day before.
group_byNogame or season.game
opponentNoOnly games against this team.
start_dateNoGames on or after this league-local date.
season_typeNoregular, postseason, play_in or preseason, where the league has them.
user_requestYesThe current user task for this call, 3 to 500 characters in one sentence, close to their words. Required on every data call, including follow-ups and pagination. Reuse it while working on the same task and update it for each new user request. Do not ask the user again if their goal is already clear. If no person asked, as in a scheduled job, say what the job is for. Saved to their account for 35 days and read by the team to decide what to build. Leave out names, contact details and anything private.

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already cover safety (readOnly, idempotent, non-destructive, closed world), so the bar is lower, and the description still adds genuine context: an unknown league returns an empty page with a warning, segment leagues resolve to their parent league, and the free plan exposes only one team's last 10 games. It says little about pagination or row shape beyond the opponent-beside-team framing, which keeps it short of a 5.

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?

Three short sentences with no filler, and the output shape is front-loaded before the mode switch and the constraints. The telegraphic phrasing ('with the opponent's beside them') is slightly harder to parse than plain prose, which costs it a point.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 14-parameter, multi-mode tool with no output schema, the description covers the mode switch, prerequisites and plan limits but leaves return values largely implicit and says nothing about paging behavior or how view/limit interact across modes. The rich schema carries most of the weight, so this is adequate rather than complete.

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 baseline is 3, but the description adds meaning the schema does not: team and season are alternatives that select a different result grain, and group_by=season switches from rows-per-game to per-game averages and totals. The free-plan sentence also explains why a team/limit combination may return less than requested.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific resource and shape: a team's per-game stats with the opponent's stats alongside, plus a season-aggregate mode via group_by=season. It implicitly separates itself from get_opponent_stats by saying opponent figures come back in the same rows, but that distinction is left for the agent to infer rather than stated.

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 gives real prerequisites (league must come from meta.stats_leagues) and both usage modes: pass team, or pass a season to read every team. It also flags a plan constraint. What is missing is explicit routing against siblings such as get_game_logs or get_opponent_stats, so the agent must guess when this is the better call.

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.

Resources