Skip to main content
Glama

Round robin schedule

round_robin_schedule
Read-onlyIdempotent

Compute a round-robin fixture list (circle method) for 2-100 teams: every pair meets once, or twice home-and-away with second_leg; odd counts get one bye per round. Use when you need who plays whom in each round. Do NOT use to assign times/courts for one match day (use match_day_plan) or to get calendar dates for a season (use season_plan).

Input Schema

NameRequiredDescriptionDefault
teamsYesTeam names: 2-100 unique, non-empty names (trimmed), e.g. ["Falcons", "Tigers", "Bears"]
roundsNoOptional: return only the first N rounds, integer 1..max (max = teams-1 for even counts, teams for odd; doubled with second_leg). Default: all rounds
second_legNoIf true, append a mirrored second leg with home and away swapped (double round-robin). Default false

Output Schema

NameRequiredDescriptionDefault
legsYesNumber of legs included in the returned rounds (1 or 2)
noteYesPlain-English summary of the schedule (teams, rounds, byes, truncation)
teamsYesCleaned (trimmed) team names in input order
roundsYesRounds in play order, each with its fixtures and any bye
total_gamesYesTotal fixtures (excluding byes) in the returned rounds
games_per_teamYesAverage games per team across the returned rounds (2 decimals)

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed16 schema fields changed
    • changedInput schema / properties / rounds / description
      Previous value: -"Optional number of rounds to return (1..full schedule)"New value: +"Optional: return only the first N rounds, integer 1..max (max = teams-1 for even counts, teams for odd; doubled with second_leg). Default: all rounds"
    • addedInput schema / properties / rounds / minimum
      Added value: +1
    • changedInput schema / properties / rounds / type
      Previous value: -"number"New value: +"integer"
    • changedInput schema / properties / second_leg / description
      Previous value: -"Also schedule the reverse fixtures for a double round-robin"New value: +"If true, append a mirrored second leg with home and away swapped (double round-robin). Default false"
    • changedInput schema / properties / teams / description
      Previous value: -"Team names (2 or more, unique)"New value: +"Team names: 2-100 unique, non-empty names (trimmed), e.g. [\"Falcons\", \"Tigers\", \"Bears\"]"
    • addedInput schema / properties / teams / items / description
      Added value: +"Team name, e.g. \"Falcons\""
    • addedInput schema / properties / teams / maxItems
      Added value: +100
    • addedInput schema / properties / teams / minItems
      Added value: +2
    • addedOutput schema / properties / games_per_team
      Added value: +{
      +  "description": "Average games per team across the returned rounds (2 decimals)",
      +  "type": "number"
      +}
    • addedOutput schema / properties / legs
      Added value: +{
      +  "description": "Number of legs included in the returned rounds (1 or 2)",
      +  "enum": [
      +    1,
      +    2
      +  ],
      +  "type": "integer"
      +}
    • addedOutput schema / properties / note
      Added value: +{
      +  "description": "Plain-English summary of the schedule (teams, rounds, byes, truncation)",
      +  "type": "string"
      +}
    • addedOutput schema / properties / rounds
      Added value: +{
      +  "description": "Rounds in play order, each with its fixtures and any bye",
      +  "items": {
      +    "properties": {
      +      "fixtures": {
      +        "description": "Fixtures in this round",
      +        "items": {
      +          "description": "A fixture {home, away}, or {bye} for the team sitting out this round",
      +          "properties": {
      +            "away": {
      +              "description": "Away team name",
      +              "type": "string"
      +            },
      +            "bye": {
      +              "description": "Team with a bye (no game) this round",
      +              "type": "string"
      +            },
      +            "home": {
      +              "description": "Home team name",
      +              "type": "string"
      +            }
      +          },
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "round": {
      +        "description": "Round number starting at 1",
      +        "type": "integer"
      +      }
      +    },
      +    "required": [
      +      "round",
      +      "fixtures"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • removedOutput schema / properties / schedule
      Removed value: -{
      -  "description": "List of rounds in the schedule",
      -  "items": {
      -    "properties": {
      -      "bye": {
      -        "description": "The team with a bye in this round (if any)",
      -        "type": "string"
      -      },
      -      "matches": {
      -        "description": "List of matches in the round",
      -        "items": {
      -          "properties": {
      -            "away": {
      -              "description": "The away team name",
      -              "type": "string"
      -            },
      -            "home": {
      -              "description": "The home team name",
      -              "type": "string"
      -            }
      -          },
      -          "required": [
      -            "home",
      -            "away"
      -          ],
      -          "type": "object"
      -        },
      -        "type": "array"
      -      },
      -      "round": {
      -        "description": "The round number",
      -        "type": "number"
      -      }
      -    },
      -    "required": [
      -      "round",
      -      "matches"
      -    ],
      -    "type": "object"
      -  },
      -  "type": "array"
      -}
    • addedOutput schema / properties / teams
      Added value: +{
      +  "description": "Cleaned (trimmed) team names in input order",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / total_games
      Added value: +{
      +  "description": "Total fixtures (excluding byes) in the returned rounds",
      +  "type": "integer"
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "schedule"
      -]New value: +[
      +  "teams",
      +  "legs",
      +  "rounds",
      +  "games_per_team",
      +  "total_games",
      +  "note"
      +]
  2. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "properties": {
      +    "schedule": {
      +      "description": "List of rounds in the schedule",
      +      "items": {
      +        "properties": {
      +          "bye": {
      +            "description": "The team with a bye in this round (if any)",
      +            "type": "string"
      +          },
      +          "matches": {
      +            "description": "List of matches in the round",
      +            "items": {
      +              "properties": {
      +                "away": {
      +                  "description": "The away team name",
      +                  "type": "string"
      +                },
      +                "home": {
      +                  "description": "The home team name",
      +                  "type": "string"
      +                }
      +              },
      +              "required": [
      +                "home",
      +                "away"
      +              ],
      +              "type": "object"
      +            },
      +            "type": "array"
      +          },
      +          "round": {
      +            "description": "The round number",
      +            "type": "number"
      +          }
      +        },
      +        "required": [
      +          "round",
      +          "matches"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    }
      +  },
      +  "required": [
      +    "schedule"
      +  ],
      +  "type": "object"
      +}
  3. First observed

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, so safety is covered; the description adds genuine domain behavior beyond that: the circle method, single vs. double round-robin via second_leg, and the odd-count bye rule. It does not discuss error behavior for invalid input, but the algorithmic semantics are well disclosed.

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 tight sentences: what it computes, the key option interaction, then routing guidance. The scope and constraint are front-loaded with zero filler.

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?

An output schema exists so return values need not be described; the description covers range limits, edge cases (odd counts, second leg), and sibling routing. Nothing an agent needs to select or invoke this correctly is missing.

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 description coverage is 100%, so the baseline is 3; the description still adds value by tying the parameters together semantically (2-100 team bound, 'twice home-and-away with second_leg', odd counts producing one bye per round), which is not stated in the schema itself.

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 and resource ('Compute a round-robin fixture list (circle method)') and immediately scopes it ('for 2-100 teams: every pair meets once, or twice home-and-away with second_leg'). It is clearly distinguishable from match_day_plan and season_plan, which it names.

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?

Explicit when-to-use ('Use when you need who plays whom in each round') and explicit when-not with named alternatives for both excluded cases (match_day_plan for times/courts, season_plan for calendar dates). Nothing is left to inference.

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