Skip to main content
Glama

Standings table

standings_table
Read-onlyIdempotent

Compute a league standings table from match results: played, W/D/L, goals for/against, goal difference and points, sorted by points, then goal difference, then goals for, then name. Use when you have scores and want the current table. Do NOT use to generate future fixtures (use round_robin_schedule).

Input Schema

NameRequiredDescriptionDefault
teamsNoOptional full roster (2+ unique names). Teams with no results appear with zeros; results involving teams not listed are skipped with a warning
resultsYesCompleted match results in any order; may be empty if teams is given (zeroed table)
points_winNoPoints awarded for a win, non-negative number. Default 3
points_drawNoPoints awarded for a draw, non-negative number. Default 1

Output Schema

NameRequiredDescriptionDefault
tableYesStandings rows sorted by points, goal difference, goals for, then team name
warningsYesResults skipped because a team was not in the roster (empty if none)
points_systemYesPoints scheme applied to compute the table

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed21 schema fields changed
    • changedInput schema / properties / points_draw / description
      Previous value: -"Points for a draw, default 1"New value: +"Points awarded for a draw, non-negative number. Default 1"
    • addedInput schema / properties / points_draw / minimum
      Added value: +0
    • changedInput schema / properties / points_win / description
      Previous value: -"Points for a win, default 3"New value: +"Points awarded for a win, non-negative number. Default 3"
    • addedInput schema / properties / points_win / minimum
      Added value: +0
    • changedInput schema / properties / results / description
      Previous value: -"Match results in any order"New value: +"Completed match results in any order; may be empty if teams is given (zeroed table)"
    • addedInput schema / properties / results / items / properties / away / description
      Added value: +"Away team name (must differ from home), e.g. \"Tigers\""
    • addedInput schema / properties / results / items / properties / away_score / description
      Added value: +"Away team score, non-negative integer, e.g. 1"
    • addedInput schema / properties / results / items / properties / away_score / minimum
      Added value: +0
    • changedInput schema / properties / results / items / properties / away_score / type
      Previous value: -"number"New value: +"integer"
    • addedInput schema / properties / results / items / properties / home / description
      Added value: +"Home team name, e.g. \"Falcons\""
    • addedInput schema / properties / results / items / properties / home_score / description
      Added value: +"Home team score, non-negative integer, e.g. 3"
    • addedInput schema / properties / results / items / properties / home_score / minimum
      Added value: +0
    • changedInput schema / properties / results / items / properties / home_score / type
      Previous value: -"number"New value: +"integer"
    • changedInput schema / properties / teams / description
      Previous value: -"Full roster; results for teams outside it are skipped with a warning"New value: +"Optional full roster (2+ unique names). Teams with no results appear with zeros; results involving teams not listed are skipped with a warning"
    • addedInput schema / properties / teams / items / description
      Added value: +"Team name"
    • addedInput schema / properties / teams / minItems
      Added value: +2
    • addedOutput schema / properties / points_system
      Added value: +{
      +  "description": "Points scheme applied to compute the table",
      +  "properties": {
      +    "draw": {
      +      "description": "Points per draw",
      +      "type": "number"
      +    },
      +    "win": {
      +      "description": "Points per win",
      +      "type": "number"
      +    }
      +  },
      +  "required": [
      +    "win",
      +    "draw"
      +  ],
      +  "type": "object"
      +}
    • removedOutput schema / properties / standings
      Removed value: -{
      -  "description": "List of teams with their respective standings data",
      -  "items": {
      -    "properties": {
      -      "draws": {
      -        "description": "Number of matches drawn by the team",
      -        "type": "number"
      -      },
      -      "goal_difference": {
      -        "description": "Difference between goals scored and conceded",
      -        "type": "number"
      -      },
      -      "goals_against": {
      -        "description": "Total goals conceded by the team",
      -        "type": "number"
      -      },
      -      "goals_for": {
      -        "description": "Total goals scored by the team",
      -        "type": "number"
      -      },
      -      "losses": {
      -        "description": "Number of matches lost by the team",
      -        "type": "number"
      -      },
      -      "name": {
      -        "description": "Name of the team",
      -        "type": "string"
      -      },
      -      "played": {
      -        "description": "Number of matches played by the team",
      -        "type": "number"
      -      },
      -      "points": {
      -        "description": "Total points accumulated by the team",
      -        "type": "number"
      -      },
      -      "wins": {
      -        "description": "Number of matches won by the team",
      -        "type": "number"
      -      }
      -    },
      -    "required": [
      -      "name",
      -      "played",
      -      "wins",
      -      "draws",
      -      "losses",
      -      "goals_for",
      -      "goals_against",
      -      "goal_difference",
      -      "points"
      -    ],
      -    "type": "object"
      -  },
      -  "type": "array"
      -}
    • addedOutput schema / properties / table
      Added value: +{
      +  "description": "Standings rows sorted by points, goal difference, goals for, then team name",
      +  "items": {
      +    "properties": {
      +      "draws": {
      +        "description": "Games drawn",
      +        "type": "integer"
      +      },
      +      "ga": {
      +        "description": "Goals/points conceded (against)",
      +        "type": "integer"
      +      },
      +      "gd": {
      +        "description": "Goal difference (gf - ga)",
      +        "type": "integer"
      +      },
      +      "gf": {
      +        "description": "Goals/points scored (for)",
      +        "type": "integer"
      +      },
      +      "losses": {
      +        "description": "Games lost",
      +        "type": "integer"
      +      },
      +      "played": {
      +        "description": "Games played",
      +        "type": "integer"
      +      },
      +      "points": {
      +        "description": "League points",
      +        "type": "number"
      +      },
      +      "team": {
      +        "description": "Team name",
      +        "type": "string"
      +      },
      +      "wins": {
      +        "description": "Games won",
      +        "type": "integer"
      +      }
      +    },
      +    "required": [
      +      "team",
      +      "played",
      +      "wins",
      +      "draws",
      +      "losses",
      +      "gf",
      +      "ga",
      +      "gd",
      +      "points"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • changedOutput schema / properties / warnings / description
      Previous value: -"List of warnings encountered during processing"New value: +"Results skipped because a team was not in the roster (empty if none)"
    • changedOutput schema / required
      Previous value: -[
      -  "standings"
      -]New value: +[
      +  "table",
      +  "warnings",
      +  "points_system"
      +]
  2. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "properties": {
      +    "standings": {
      +      "description": "List of teams with their respective standings data",
      +      "items": {
      +        "properties": {
      +          "draws": {
      +            "description": "Number of matches drawn by the team",
      +            "type": "number"
      +          },
      +          "goal_difference": {
      +            "description": "Difference between goals scored and conceded",
      +            "type": "number"
      +          },
      +          "goals_against": {
      +            "description": "Total goals conceded by the team",
      +            "type": "number"
      +          },
      +          "goals_for": {
      +            "description": "Total goals scored by the team",
      +            "type": "number"
      +          },
      +          "losses": {
      +            "description": "Number of matches lost by the team",
      +            "type": "number"
      +          },
      +          "name": {
      +            "description": "Name of the team",
      +            "type": "string"
      +          },
      +          "played": {
      +            "description": "Number of matches played by the team",
      +            "type": "number"
      +          },
      +          "points": {
      +            "description": "Total points accumulated by the team",
      +            "type": "number"
      +          },
      +          "wins": {
      +            "description": "Number of matches won by the team",
      +            "type": "number"
      +          }
      +        },
      +        "required": [
      +          "name",
      +          "played",
      +          "wins",
      +          "draws",
      +          "losses",
      +          "goals_for",
      +          "goals_against",
      +          "goal_difference",
      +          "points"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "warnings": {
      +      "description": "List of warnings encountered during processing",
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    }
      +  },
      +  "required": [
      +    "standings"
      +  ],
      +  "type": "object"
      +}
  3. First observed

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint/idempotentHint/openWorldHint=false, so safety is covered. The description adds genuine behavioral detail beyond that: the deterministic tiebreak chain (points, then GD, then GF, then name) and the fact that it derives a table rather than generating new matches. It stops short of describing edge-case handling (e.g. partial rosters, warnings), which the schema carries instead.

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?

Three sentences, zero padding: purpose and output shape first, then the positive trigger, then the exclusion. Nothing is repeated and the routing information is front-loaded.

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?

Output schema exists, so return values needn't be explained, and the description still describes the table's columns and ordering. Combined with full parameter coverage, an agent has everything needed to call this correctly.

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 baseline is 3. The description adds only the sorting keys implied by the output, not detail on points_win/points_draw or the teams/results interaction, all of which the schema already documents well.

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?

States a specific verb+resource ('Compute a league standings table from match results') and enumerates the exact output columns (played, W/D/L, GF/GA, GD, points) plus sort order. It also distinguishes itself from round_robin_schedule by name, so an agent needn't open the schema to tell them apart.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit positive trigger ('Use when you have scores and want the current table') and an explicit exclusion with the correct alternative ('Do NOT use to generate future fixtures (use round_robin_schedule)'). Both when-to-use and when-not are covered.

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