Skip to main content
Glama

SportStatsAPI

get_standings

Read-only

League table of a league, with summary: ready paragraphs on the league from our data (the race at the top and bottom, form side, scoring, top scorer, champions; English; summary_as_of; absent when not fresh; with lang de, es, it or fr in sold sports and a plan with Insights: the most important facts of the league's matches of the last 14 days in that language, from our fact templates only, else English; summary_lang says which); for soccer also the top scorers, most assists or most cards (top_scorers), every player's season statistics sorted by goals, assists, minutes, rating, xg or apps (player_stats), every team's season statistics with ranks such as the best defence (team_stats), the referees with cards and penalties per game (referees), the roll of honour with champions and runners-up per season and their sources (champions), home attendance per team and league (attendance), the xG table with expected points against real points (xg_table), players banned or one booking away from a ban (suspensions) and past seasons' final tables (season); for every sport with results Elo-style team ratings of a league or the whole sport (ratings); for tennis the ATP or WTA singles ranking (tour); for golf the season money list with wins (tour); for snooker and darts the world ranking (WPBSA, PDC Order of Merit); for boxing the current world champions per weight class and body; for cricket the points table of a series or league.

Input Schema

NameRequiredDescriptionDefault
langNolanguage of team, league and country names: de, es, it or fr (default English)
tourNotennis: atp or wta (the singles ranking, top 100); golf: pga (default) or lpga
sportYessport (see list_sports)
seasonNosoccer: a past season's final table (2016-17, or 2016 for Brazil and MLS; the last 10 seasons of the top leagues, from Wikipedia: cite the attribution) instead of the current table; tennis: a year (2026) for that year's year-end ranking, first 100 places (final false while the year is not over; stored weekly from 2026-10)
historyNothe league's table round by round instead of the table (position charts; sports with the data provider league tables, not cricket): soccer from our results for the current and previous season plus stored tables, other sports the stored tables from 2026-10-11 (history_from); with team_id only that team's row per round
ratingsNoany sport with results: Elo-style team ratings (tennis: players) instead of the table, highest first, of the league (league_id) or of the whole sport without it; matches_rated and rated_from say how much history a rating stands on, provisional below 10; ratings compare across leagues only where those leagues' teams meet (cups, continental matches)
team_idNowith history: only this team
refereesNosoccer: the league's referees instead of the table: games, yellow and red cards and penalties per game (computed from our match data, top leagues; league_matches_with_referee of league_matches_played says how complete; season: a past season)
xg_tableNosoccer: xpts, xg_diff or points_minus_xpts for the league's xG table instead of the table: xG for and against, expected points (xpts, independent Poisson goals from both sides' xG) against real points and the difference (positive = more than expected: luckier or better finishing), all over matches_with_xg of played (top leagues; season: a past season)
championsNosoccer: the league's (or cup's) roll of honour instead of the table: champion and runner_up per season, each with its sources (wikipedia: the final tables of the last 10 seasons, top leagues; provider: the trophy lists of team profiles, further back but missing teams we do not hold); conflicts lists a team another source names for the same place: report it, do not pick silently; cite the attribution
league_idNoleague code (or number) from find_leagues (not for tennis)
attendanceNosoccer: the league season's home attendance instead of the table: league average and record, per team average, record and rank; matches_with_attendance of matches_played says how complete (often low: the feed lacks attendance for many matches, so say the average stands on that many matches; season: a past season)
team_statsNosoccer: ppg, goals_for, goals_against (best defence), clean_sheets, failed_to_score, xg_for, xg_against or attendance for every team's season statistics (home/away records, xG, attendance, ranks per metric) sorted by it, instead of the table (matches_with_xg and matches_with_attendance say how complete xG and attendance are; season: a past season)
suspensionsNosoccer: the league's suspension watch instead of the table: players banned now (status suspended, matches_left) and one booking away from a ban (next_threshold, next_ban), from the league's official card rules (Premier League, EFL, Bundesliga, 2. Bundesliga, LaLiga, Segunda, Serie A, Serie B; rules.source) and our cards; rules_known and matches_with_stats of matches_played on every row; leagues without known rules list cards so far only
top_scorersNosoccer: goals, assists or cards for the league's top scorers, most assists or most cards instead of the table
player_statsNosoccer: goals, assists, minutes, rating, xg or apps for every player's season statistics in the league sorted by it, instead of the table (computed from our matches; matches_with_stats of team_matches_played says how complete a row is; season: a past season); NBA, MLB, NFL: a stat name such as points_per_game, home_runs, earned_run_average or passing.yards (category.stat) for the players' season lines from the data provider's team feeds (season null for the NBA: before a new season the feed still holds the last one; as_of says when it was read); hockey: goals, assists, points (NHL, Liiga, SHL, DEL lines from box scores); handball: goals, penalty_goals or expulsions (Swedish and Austrian lower leagues' lines from the federations' statistics and match reports; null = not in our data)

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / player_stats / description
      Previous value: -"soccer: goals, assists, minutes, rating, xg or apps for every player's season statistics in the league sorted by it, instead of the table (computed from our matches; matches_with_stats of team_matches_played says how complete a row is; season: a past season); NBA, MLB, NFL: a stat name such as points_per_game, home_runs, earned_run_average or passing.yards (category.stat) for the players' season lines from the data provider's team feeds (season null for the NBA: before a new season the feed still holds the last one; as_of says when it was read)"New value: +"soccer: goals, assists, minutes, rating, xg or apps for every player's season statistics in the league sorted by it, instead of the table (computed from our matches; matches_with_stats of team_matches_played says how complete a row is; season: a past season); NBA, MLB, NFL: a stat name such as points_per_game, home_runs, earned_run_average or passing.yards (category.stat) for the players' season lines from the data provider's team feeds (season null for the NBA: before a new season the feed still holds the last one; as_of says when it was read); hockey: goals, assists, points (NHL, Liiga, SHL, DEL lines from box scores); handball: goals, penalty_goals or expulsions (Swedish and Austrian lower leagues' lines from the federations' statistics and match reports; null = not in our data)"
  2. Changed2 schema fields changed
    • removedInput schema / properties / kind
      Removed value: -{
      -  "description": "motorsport: drivers (default) or teams",
      -  "type": "string"
      -}
    • removedInput schema / properties / series
      Removed value: -{
      -  "description": "motorsport: f1, motogp, moto2, moto3, f2, formula-e, indycar, nascar-cup, nascar-xfinity or nascar-trucks",
      -  "type": "string"
      -}
  3. Changed1 schema field changed
    • changedInput schema / properties / league_id / description
      Previous value: -"league id from find_leagues (not for tennis)"New value: +"league code (or number) from find_leagues (not for tennis)"
  4. Changed5 schema fields changed
    • changedInput schema / properties / champions / description
      Previous value: -"soccer: the league's (or cup's) roll of honour instead of the table: champion and runner_up per season, each with its sources (wikipedia: the final tables of the last 10 seasons, top leagues; goalserve: the trophy lists of team profiles, further back but missing teams we do not hold); conflicts lists a team another source names for the same place: report it, do not pick silently; cite the attribution"New value: +"soccer: the league's (or cup's) roll of honour instead of the table: champion and runner_up per season, each with its sources (wikipedia: the final tables of the last 10 seasons, top leagues; provider: the trophy lists of team profiles, further back but missing teams we do not hold); conflicts lists a team another source names for the same place: report it, do not pick silently; cite the attribution"
    • changedInput schema / properties / history / description
      Previous value: -"the league's table round by round instead of the table (position charts; sports with GoalServe league tables, not cricket): soccer from our results for the current and previous season plus stored tables, other sports the stored tables from 2026-10-11 (history_from); with team_id only that team's row per round"New value: +"the league's table round by round instead of the table (position charts; sports with the data provider league tables, not cricket): soccer from our results for the current and previous season plus stored tables, other sports the stored tables from 2026-10-11 (history_from); with team_id only that team's row per round"
    • changedInput schema / properties / league_id / type
      Previous value: -"integer"New value: +[
      +  "integer",
      +  "string"
      +]
    • changedInput schema / properties / player_stats / description
      Previous value: -"soccer: goals, assists, minutes, rating, xg or apps for every player's season statistics in the league sorted by it, instead of the table (computed from our matches; matches_with_stats of team_matches_played says how complete a row is; season: a past season); NBA, MLB, NFL: a stat name such as points_per_game, home_runs, earned_run_average or passing.yards (category.stat) for the players' season lines from GoalServe's team feeds (season null for the NBA: before a new season the feed still holds the last one; as_of says when it was read)"New value: +"soccer: goals, assists, minutes, rating, xg or apps for every player's season statistics in the league sorted by it, instead of the table (computed from our matches; matches_with_stats of team_matches_played says how complete a row is; season: a past season); NBA, MLB, NFL: a stat name such as points_per_game, home_runs, earned_run_average or passing.yards (category.stat) for the players' season lines from the data provider's team feeds (season null for the NBA: before a new season the feed still holds the last one; as_of says when it was read)"
    • changedInput schema / properties / team_id / type
      Previous value: -"integer"New value: +[
      +  "integer",
      +  "string"
      +]
  5. Changed1 schema field changed
    • changedInput schema / properties / season / description
      Previous value: -"soccer: a past season's final table (2016-17, or 2016 for Brazil and MLS; the last 10 seasons of the top leagues, from Wikipedia: cite the attribution) instead of the current table"New value: +"soccer: a past season's final table (2016-17, or 2016 for Brazil and MLS; the last 10 seasons of the top leagues, from Wikipedia: cite the attribution) instead of the current table; tennis: a year (2026) for that year's year-end ranking, first 100 places (final false while the year is not over; stored weekly from 2026-10)"
  6. Changed1 schema field changed
    • changedInput schema / properties / history / description
      Previous value: -"the league's table round by round instead of the table (position charts; any sport with league tables): soccer from our results for the current and previous season plus stored tables, other sports the stored tables from 2026-10-11 (history_from); with team_id only that team's row per round"New value: +"the league's table round by round instead of the table (position charts; sports with GoalServe league tables, not cricket): soccer from our results for the current and previous season plus stored tables, other sports the stored tables from 2026-10-11 (history_from); with team_id only that team's row per round"
  7. Changed3 schema fields changed
    • addedInput schema / properties / history
      Added value: +{
      +  "description": "the league's table round by round instead of the table (position charts; any sport with league tables): soccer from our results for the current and previous season plus stored tables, other sports the stored tables from 2026-10-11 (history_from); with team_id only that team's row per round",
      +  "type": "boolean"
      +}
    • changedInput schema / properties / player_stats / description
      Previous value: -"soccer: goals, assists, minutes, rating, xg or apps for every player's season statistics in the league sorted by it, instead of the table (computed from our matches; matches_with_stats of team_matches_played says how complete a row is; season: a past season)"New value: +"soccer: goals, assists, minutes, rating, xg or apps for every player's season statistics in the league sorted by it, instead of the table (computed from our matches; matches_with_stats of team_matches_played says how complete a row is; season: a past season); NBA, MLB, NFL: a stat name such as points_per_game, home_runs, earned_run_average or passing.yards (category.stat) for the players' season lines from GoalServe's team feeds (season null for the NBA: before a new season the feed still holds the last one; as_of says when it was read)"
    • addedInput schema / properties / team_id
      Added value: +{
      +  "description": "with history: only this team",
      +  "type": "integer"
      +}
  8. Changed3 schema fields changed
    • addedInput schema / properties / attendance
      Added value: +{
      +  "description": "soccer: the league season's home attendance instead of the table: league average and record, per team average, record and rank; matches_with_attendance of matches_played says how complete (often low: the feed lacks attendance for many matches, so say the average stands on that many matches; season: a past season)",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / champions
      Added value: +{
      +  "description": "soccer: the league's (or cup's) roll of honour instead of the table: champion and runner_up per season, each with its sources (wikipedia: the final tables of the last 10 seasons, top leagues; goalserve: the trophy lists of team profiles, further back but missing teams we do not hold); conflicts lists a team another source names for the same place: report it, do not pick silently; cite the attribution",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / suspensions
      Added value: +{
      +  "description": "soccer: the league's suspension watch instead of the table: players banned now (status suspended, matches_left) and one booking away from a ban (next_threshold, next_ban), from the league's official card rules (Premier League, EFL, Bundesliga, 2. Bundesliga, LaLiga, Segunda, Serie A, Serie B; rules.source) and our cards; rules_known and matches_with_stats of matches_played on every row; leagues without known rules list cards so far only",
      +  "type": "boolean"
      +}
  9. Changed2 schema fields changed
    • addedInput schema / properties / ratings
      Added value: +{
      +  "description": "any sport with results: Elo-style team ratings (tennis: players) instead of the table, highest first, of the league (league_id) or of the whole sport without it; matches_rated and rated_from say how much history a rating stands on, provisional below 10; ratings compare across leagues only where those leagues' teams meet (cups, continental matches)",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / xg_table
      Added value: +{
      +  "description": "soccer: xpts, xg_diff or points_minus_xpts for the league's xG table instead of the table: xG for and against, expected points (xpts, independent Poisson goals from both sides' xG) against real points and the difference (positive = more than expected: luckier or better finishing), all over matches_with_xg of played (top leagues; season: a past season)",
      +  "type": "string"
      +}
  10. Changed5 schema fields changed
    • addedInput schema / properties / player_stats
      Added value: +{
      +  "description": "soccer: goals, assists, minutes, rating, xg or apps for every player's season statistics in the league sorted by it, instead of the table (computed from our matches; matches_with_stats of team_matches_played says how complete a row is; season: a past season)",
      +  "type": "string"
      +}
    • addedInput schema / properties / referees
      Added value: +{
      +  "description": "soccer: the league's referees instead of the table: games, yellow and red cards and penalties per game (computed from our match data, top leagues; league_matches_with_referee of league_matches_played says how complete; season: a past season)",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / season
      Added value: +{
      +  "description": "soccer: a past season's final table (2016-17, or 2016 for Brazil and MLS; the last 10 seasons of the top leagues, from Wikipedia: cite the attribution) instead of the current table",
      +  "type": "string"
      +}
    • addedInput schema / properties / team_stats
      Added value: +{
      +  "description": "soccer: ppg, goals_for, goals_against (best defence), clean_sheets, failed_to_score, xg_for, xg_against or attendance for every team's season statistics (home/away records, xG, attendance, ranks per metric) sorted by it, instead of the table (matches_with_xg and matches_with_attendance say how complete xG and attendance are; season: a past season)",
      +  "type": "string"
      +}
    • changedInput schema / properties / tour / description
      Previous value: -"tennis: atp or wta (the singles ranking, top 100)"New value: +"tennis: atp or wta (the singles ranking, top 100); golf: pga (default) or lpga"
  11. Changed2 schema fields changed
    • addedInput schema / properties / kind
      Added value: +{
      +  "description": "motorsport: drivers (default) or teams",
      +  "type": "string"
      +}
    • addedInput schema / properties / series
      Added value: +{
      +  "description": "motorsport: f1, motogp, moto2, moto3, f2, formula-e, indycar, nascar-cup, nascar-xfinity or nascar-trucks",
      +  "type": "string"
      +}
  12. Changed1 schema field changed
    • addedInput schema / properties / top_scorers
      Added value: +{
      +  "description": "soccer: goals, assists or cards for the league's top scorers, most assists or most cards instead of the table",
      +  "type": "string"
      +}
  13. Changed4 schema fields changed
    • changedInput schema / properties / league_id / description
      Previous value: -"league id from find_leagues"New value: +"league id from find_leagues (not for tennis)"
    • changedInput schema / properties / sport / description
      Previous value: -"sport (see list_sports; not tennis)"New value: +"sport (see list_sports)"
    • addedInput schema / properties / tour
      Added value: +{
      +  "description": "tennis: atp or wta (the singles ranking, top 100)",
      +  "type": "string"
      +}
    • changedInput schema / required
      Previous value: -[
      -  "sport",
      -  "league_id"
      -]New value: +[
      +  "sport"
      +]
  14. First observed

TDQS

A3.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, but the description adds meaningful behavioral context: summary freshness ('absent when not fresh'), data completeness caveats ('matches_with_attendance of matches_played says how complete'), and attribution requirements ('cite the attribution'). These are valuable disclosures beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single enormous run-on sentence packed with semicolon-separated mode descriptions and parentheticals. It is front-loaded with the core purpose, but the bulk is dense and largely duplicates the schema, making it hard to scan and use.

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?

For a complex 16-parameter tool with no output schema, the description covers the key return modes and data-quality caveats, including freshness, completeness, and attribution. It is reasonably complete, though its density and overlap with the schema prevent a 5.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all 16 parameters in detail. The description restates many of the same modes (tour, ratings, top_scorers, player_stats) in prose without adding syntax or format details beyond what the schema provides. Baseline 3 is appropriate.

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?

Opens with a specific verb and resource: 'League table of a league,' then enumerates the additional outputs it can return. The core purpose is clear, but the sprawling mode list makes it harder to tell at a glance how it differs from siblings such as get_league_facts or get_bracket.

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?

The description implies how each mode is selected ('for soccer also...', 'for tennis...') and the schema repeatedly says 'instead of the table,' but it never explicitly states when to use this tool versus alternatives or prerequisites such as obtaining league_id from find_leagues. Usage is inferable rather than clearly guided.

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