LeagueNight
Server Details
Round-robin fixtures, standings and match-day plans for league organizers. Free.
- Status
- Healthy
- Uptime
- 100.0% over 22 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Server Listing
- Sahadeva
TDQS
Scored across 4 tools
Each tool targets a distinct artifact: fixture pairings (round_robin_schedule), one-day time/court assignment (match_day_plan), season calendar sizing (season_plan), and standings from results (standings_table). Descriptions even include explicit 'Do NOT use...' routing hints, eliminating boundary confusion between the scheduling tools.
All four names are snake_case noun/domain phrases (match_day_plan, round_robin_schedule, season_plan, standings_table) following a predictable <domain>_<output> convention. No mixing of camelCase, verbs, or ad-hoc prefixes.
Four tools cleanly partition a small, coherent domain (league scheduling/output): fixtures, day plan, season plan, standings. No redundant or filler tools; each earns its place for a deliberately narrow scope.
Core lifecycle is covered: generate pairings, lay them onto courts/times, project season dates, and compute standings from results. Minor gaps exist—no support for non-round-robin formats (knockout/groups) and no explicit result-entry tool, though standings accepts results as input—so agents can work around them.
Available Tools
4 toolsmatch_day_planMatch day planARead-onlyIdempotentInspect
Compute a one-day timetable: lay an ordered list of games onto parallel courts and fixed-length time slots from a start time, giving each game a court and HH:MM start, plus the end time. Use when you already know the day's games. Do NOT use to decide who plays whom (use round_robin_schedule) or to size a whole season (use season_plan).
| Name | Required | Description | Default |
|---|---|---|---|
| games | Yes | Games in the order they should be played (non-empty); e.g. one round's fixtures from round_robin_schedule | |
| courts | Yes | Number of courts/pitches usable at the same time, integer 1-12, e.g. 2 | |
| start_time | Yes | First game start, 24h HH:MM, e.g. "09:00" or "18:30" | |
| slot_minutes | Yes | Length of one game slot in minutes, integer 10-180, e.g. 40 |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | Yes | Plain-English summary (slots, courts, after-midnight warning) |
| courts | Yes | Number of courts used in parallel |
| end_time | Yes | Time the last slot finishes, 24h HH:MM (wraps past midnight) |
| timeline | Yes | One entry per game, in input order |
| start_time | Yes | First slot start time, 24h HH:MM (echoed from input) |
| slot_minutes | Yes | Length of each slot in minutes |
| total_minutes | Yes | Total duration from first start to last finish, in minutes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the full safety profile (readOnly, idempotent, non-destructive, closed-world), so the description only needs to add scheduling semantics, which it does: ordered input, parallel courts, fixed-length slots, and the fields of each emitted entry (court, HH:MM start, end time). It does not disclose what happens to leftover games that exceed the court count in a slot or how slots are numbered, a minor gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each earning its place: what it computes, when to use it, and when not to with named alternatives. The core action is front-loaded in the first clause.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present the description need not explain return values, and with 100% schema coverage the inputs are fully documented elsewhere. The description closes the remaining gaps: the ordering assumption on input and the routing rules against sibling tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter (games, courts, slot_minutes, start_time) is already documented in the schema with examples and bounds. The description reinforces the ordering contract of 'games' and the parallel-court semantics of 'courts' but adds no syntax or format detail beyond what the schema provides, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Compute a one-day timetable') and immediately specifies the mechanics: ordered games laid onto parallel courts and fixed-length slots from a start time. It explicitly distinguishes itself from round_robin_schedule and season_plan by naming the sibling it is not, so an agent can route without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit positive condition ('Use when you already know the day's games') plus two explicit exclusions with the correct alternative named for each ('use round_robin_schedule', 'use season_plan'). Nothing about when to pick this tool 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.
round_robin_scheduleRound robin scheduleARead-onlyIdempotentInspect
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).
| Name | Required | Description | Default |
|---|---|---|---|
| teams | Yes | Team names: 2-100 unique, non-empty names (trimmed), e.g. ["Falcons", "Tigers", "Bears"] | |
| rounds | No | 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 | |
| second_leg | No | If true, append a mirrored second leg with home and away swapped (double round-robin). Default false |
Output Schema
| Name | Required | Description |
|---|---|---|
| legs | Yes | Number of legs included in the returned rounds (1 or 2) |
| note | Yes | Plain-English summary of the schedule (teams, rounds, byes, truncation) |
| teams | Yes | Cleaned (trimmed) team names in input order |
| rounds | Yes | Rounds in play order, each with its fixtures and any bye |
| total_games | Yes | Total fixtures (excluding byes) in the returned rounds |
| games_per_team | Yes | Average games per team across the returned rounds (2 decimals) |
TDQS
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.
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.
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.
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.
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.
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.
season_planSeason planARead-onlyIdempotentInspect
Estimate a season's size and calendar: total round-robin fixtures, games per match day (limited by courts, one slot per day), match days needed, every match-day date from start_date at a fixed interval, and the finish date. Use for "when will the season end?". Do NOT use for pairings (use round_robin_schedule) or one day's timetable (use match_day_plan).
| Name | Required | Description | Default |
|---|---|---|---|
| teams | Yes | Team names: 2-100 unique, non-empty names (trimmed), e.g. ["Falcons", "Tigers", "Bears"] | |
| courts | Yes | Courts usable at the same time on each match day, integer 1-12; caps games per match day. E.g. 2 | |
| second_leg | No | If true, plan a double round-robin (each pair meets twice). Default false | |
| start_date | Yes | First match day, YYYY-MM-DD, e.g. "2026-10-04" | |
| slot_minutes | Yes | Length of one game slot in minutes, integer 10-180 (validated and echoed in the note; each match day is one slot). E.g. 30 | |
| days_between_rounds | No | Days between consecutive match days, integer 1-60. Default 7 (weekly) |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | Yes | Plain-English summary of the season plan and assumptions |
| dates | Yes | Every match-day date, YYYY-MM-DD, in order |
| finish_date | Yes | Date of the last match day, YYYY-MM-DD |
| games_total | Yes | Total fixtures in the season (n(n-1)/2 per leg) |
| rounds_needed | Yes | Number of match days needed to play all fixtures |
| per_team_games | Yes | Games each team plays over the season |
| games_per_round | Yes | Games played per match day: min(floor(teams/2), courts) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered and the description correctly does not restate it. Beyond that it adds genuine behavioral context: the computation is deterministic round-robin sizing, one slot per day, dates stepped at a fixed interval, and slot_minutes is validated and echoed back. It stops short of describing pagination, error conditions, or the note/response structure, so 3 is the right level for a read-only pure-calculation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, no filler, and the front-loading is deliberate: purpose and outputs first, then the use-case question, then the exclusions. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a six-parameter, read-only planning tool with a full output schema and complete annotations, nothing an agent needs is missing: purpose, triggering scenario, sibling routing, and the interaction between courts/slots/intervals are all stated, and return values are already covered by the output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 and the schema already carries per-parameter bounds, defaults, and formats. The description adds a little interaction semantics (courts caps games per match day; each match day is one slot; dates follow a fixed interval) but introduces no syntax or constraints not already in the schema, so it does not exceed the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource ("Estimate a season's size and calendar") and enumerates the exact outputs computed: fixtures, games per match day, match days needed, every match-day date, and the finish date. It also explicitly names the sibling tools it is not (round_robin_schedule, match_day_plan), so an agent can distinguish it without inspecting schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a concrete triggering question ("when will the season end?") plus explicit exclusions with named alternatives: pairings go to round_robin_schedule and a single day's timetable to match_day_plan. That is the full when/when-not/alternative trio.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
standings_tableStandings tableARead-onlyIdempotentInspect
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).
| Name | Required | Description | Default |
|---|---|---|---|
| teams | No | Optional full roster (2+ unique names). Teams with no results appear with zeros; results involving teams not listed are skipped with a warning | |
| results | Yes | Completed match results in any order; may be empty if teams is given (zeroed table) | |
| points_win | No | Points awarded for a win, non-negative number. Default 3 | |
| points_draw | No | Points awarded for a draw, non-negative number. Default 1 |
Output Schema
| Name | Required | Description |
|---|---|---|
| table | Yes | Standings rows sorted by points, goal difference, goals for, then team name |
| warnings | Yes | Results skipped because a team was not in the roster (empty if none) |
| points_system | Yes | Points scheme applied to compute the table |
TDQS
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.
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.
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.
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.
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.
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.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
4 tool updates
- Changed
match_day_plan23 fields changed- changed
Input schema / properties / courts / descriptionPrevious value: -"Courts available (1-12)"New value: +"Number of courts/pitches usable at the same time, integer 1-12, e.g. 2" - added
Input schema / properties / courts / maximumAdded value: +12 - added
Input schema / properties / courts / minimumAdded value: +1 - changed
Input schema / properties / courts / typePrevious value: -"number"New value: +"integer" - changed
Input schema / properties / games / descriptionPrevious value: -"Games in the order they should be played"New value: +"Games in the order they should be played (non-empty); e.g. one round's fixtures from round_robin_schedule" - added
Input schema / properties / games / items / properties / away / descriptionAdded value: +"Away team name, e.g. \"Tigers\"" - added
Input schema / properties / games / items / properties / home / descriptionAdded value: +"Home team name, e.g. \"Falcons\"" - added
Input schema / properties / games / minItemsAdded value: +1 - changed
Input schema / properties / slot_minutes / descriptionPrevious value: -"Minutes per time slot (10-180)"New value: +"Length of one game slot in minutes, integer 10-180, e.g. 40" - added
Input schema / properties / slot_minutes / maximumAdded value: +180 - added
Input schema / properties / slot_minutes / minimumAdded value: +10 - changed
Input schema / properties / slot_minutes / typePrevious value: -"number"New value: +"integer" - changed
Input schema / properties / start_time / descriptionPrevious value: -"First kick-off, 24h HH:MM"New value: +"First game start, 24h HH:MM, e.g. \"09:00\" or \"18:30\"" - added
Input schema / properties / start_time / patternAdded value: +"^([01]\\d|2[0-3]):[0-5]\\d$" - added
Output schema / properties / courtsAdded value: +{ + "description": "Number of courts used in parallel", + "type": "integer" +} - added
Output schema / properties / end_timeAdded value: +{ + "description": "Time the last slot finishes, 24h HH:MM (wraps past midnight)", + "type": "string" +} - added
Output schema / properties / noteAdded value: +{ + "description": "Plain-English summary (slots, courts, after-midnight warning)", + "type": "string" +} - removed
Output schema / properties / scheduleRemoved value: -{ - "description": "List of scheduled games with their respective courts and times.", - "items": { - "properties": { - "away": { - "description": "The away team of the game.", - "type": "string" - }, - "court": { - "description": "The court number where the game is scheduled.", - "type": "integer" - }, - "game_index": { - "description": "The index of the game in the input list.", - "type": "integer" - }, - "home": { - "description": "The home team of the game.", - "type": "string" - }, - "time": { - "description": "The start time of the game in 24h HH:MM format.", - "type": "string" - } - }, - "required": [ - "game_index", - "home", - "away", - "court", - "time" - ], - "type": "object" - }, - "type": "array" -} - added
Output schema / properties / slot_minutesAdded value: +{ + "description": "Length of each slot in minutes", + "type": "integer" +} - added
Output schema / properties / start_timeAdded value: +{ + "description": "First slot start time, 24h HH:MM (echoed from input)", + "type": "string" +} - added
Output schema / properties / timelineAdded value: +{ + "description": "One entry per game, in input order", + "items": { + "properties": { + "away": { + "description": "Away team name", + "type": "string" + }, + "court": { + "description": "Court number starting at 1", + "type": "integer" + }, + "home": { + "description": "Home team name", + "type": "string" + }, + "time_hhmm": { + "description": "Start time 24h HH:MM", + "type": "string" + } + }, + "required": [ + "time_hhmm", + "court", + "home", + "away" + ], + "type": "object" + }, + "type": "array" +} - added
Output schema / properties / total_minutesAdded value: +{ + "description": "Total duration from first start to last finish, in minutes", + "type": "integer" +} - changed
Output schema / requiredPrevious value: -[ - "schedule" -]New value: +[ + "start_time", + "end_time", + "courts", + "slot_minutes", + "timeline", + "total_minutes", + "note" +]
- Changed
round_robin_schedule16 fields changed- changed
Input schema / properties / rounds / descriptionPrevious 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" - added
Input schema / properties / rounds / minimumAdded value: +1 - changed
Input schema / properties / rounds / typePrevious value: -"number"New value: +"integer" - changed
Input schema / properties / second_leg / descriptionPrevious 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" - changed
Input schema / properties / teams / descriptionPrevious value: -"Team names (2 or more, unique)"New value: +"Team names: 2-100 unique, non-empty names (trimmed), e.g. [\"Falcons\", \"Tigers\", \"Bears\"]" - added
Input schema / properties / teams / items / descriptionAdded value: +"Team name, e.g. \"Falcons\"" - added
Input schema / properties / teams / maxItemsAdded value: +100 - added
Input schema / properties / teams / minItemsAdded value: +2 - added
Output schema / properties / games_per_teamAdded value: +{ + "description": "Average games per team across the returned rounds (2 decimals)", + "type": "number" +} - added
Output schema / properties / legsAdded value: +{ + "description": "Number of legs included in the returned rounds (1 or 2)", + "enum": [ + 1, + 2 + ], + "type": "integer" +} - added
Output schema / properties / noteAdded value: +{ + "description": "Plain-English summary of the schedule (teams, rounds, byes, truncation)", + "type": "string" +} - added
Output schema / properties / roundsAdded 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" +} - removed
Output schema / properties / scheduleRemoved 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" -} - added
Output schema / properties / teamsAdded value: +{ + "description": "Cleaned (trimmed) team names in input order", + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / total_gamesAdded value: +{ + "description": "Total fixtures (excluding byes) in the returned rounds", + "type": "integer" +} - changed
Output schema / requiredPrevious value: -[ - "schedule" -]New value: +[ + "teams", + "legs", + "rounds", + "games_per_team", + "total_games", + "note" +]
- Changed
season_plan33 fields changed- changed
Input schema / properties / courts / descriptionPrevious value: -"Courts available per match day (1-12)"New value: +"Courts usable at the same time on each match day, integer 1-12; caps games per match day. E.g. 2" - added
Input schema / properties / courts / maximumAdded value: +12 - added
Input schema / properties / courts / minimumAdded value: +1 - changed
Input schema / properties / courts / typePrevious value: -"number"New value: +"integer" - changed
Input schema / properties / days_between_rounds / descriptionPrevious value: -"Days between match days, default 7"New value: +"Days between consecutive match days, integer 1-60. Default 7 (weekly)" - added
Input schema / properties / days_between_rounds / maximumAdded value: +60 - added
Input schema / properties / days_between_rounds / minimumAdded value: +1 - changed
Input schema / properties / days_between_rounds / typePrevious value: -"number"New value: +"integer" - changed
Input schema / properties / second_leg / descriptionPrevious value: -"Plan a double round-robin (each pair meets twice)"New value: +"If true, plan a double round-robin (each pair meets twice). Default false" - changed
Input schema / properties / slot_minutes / descriptionPrevious value: -"Minutes per time slot (10-180)"New value: +"Length of one game slot in minutes, integer 10-180 (validated and echoed in the note; each match day is one slot). E.g. 30" - added
Input schema / properties / slot_minutes / maximumAdded value: +180 - added
Input schema / properties / slot_minutes / minimumAdded value: +10 - changed
Input schema / properties / slot_minutes / typePrevious value: -"number"New value: +"integer" - changed
Input schema / properties / start_date / descriptionPrevious value: -"First match day, YYYY-MM-DD"New value: +"First match day, YYYY-MM-DD, e.g. \"2026-10-04\"" - added
Input schema / properties / start_date / patternAdded value: +"^\\d{4}-\\d{2}-\\d{2}$" - changed
Input schema / properties / teams / descriptionPrevious value: -"Team names (2 or more, unique)"New value: +"Team names: 2-100 unique, non-empty names (trimmed), e.g. [\"Falcons\", \"Tigers\", \"Bears\"]" - added
Input schema / properties / teams / items / descriptionAdded value: +"Team name, e.g. \"Falcons\"" - added
Input schema / properties / teams / maxItemsAdded value: +100 - added
Input schema / properties / teams / minItemsAdded value: +2 - added
Output schema / properties / datesAdded value: +{ + "description": "Every match-day date, YYYY-MM-DD, in order", + "items": { + "description": "Match-day date YYYY-MM-DD", + "type": "string" + }, + "type": "array" +} - removed
Output schema / properties / estimated_finish_dateRemoved value: -{ - "description": "The estimated finish date of the season.", - "format": "date", - "type": "string" -} - added
Output schema / properties / finish_dateAdded value: +{ + "description": "Date of the last match day, YYYY-MM-DD", + "type": "string" +} - removed
Output schema / properties / games_per_match_dayRemoved value: -{ - "description": "Number of games scheduled per match day.", - "type": "integer" -} - added
Output schema / properties / games_per_roundAdded value: +{ + "description": "Games played per match day: min(floor(teams/2), courts)", + "type": "integer" +} - added
Output schema / properties / games_totalAdded value: +{ + "description": "Total fixtures in the season (n(n-1)/2 per leg)", + "type": "integer" +} - removed
Output schema / properties / match_daysRemoved value: -{ - "description": "Array of match day plans, each with details for that day.", - "items": { - "properties": { - "date": { - "description": "The date of the match day.", - "format": "date", - "type": "string" - }, - "matches": { - "items": { - "properties": { - "team1": { - "description": "The name of the first team.", - "type": "string" - }, - "team2": { - "description": "The name of the second team.", - "type": "string" - }, - "time_slot": { - "description": "The time slot for the match.", - "type": "string" - } - }, - "required": [ - "team1", - "team2", - "time_slot" - ], - "type": "object" - }, - "type": "array" - } - }, - "required": [ - "date", - "matches" - ], - "type": "object" - }, - "type": "array" -} - removed
Output schema / properties / match_days_neededRemoved value: -{ - "description": "Total number of match days required to complete the season.", - "type": "integer" -} - added
Output schema / properties / noteAdded value: +{ + "description": "Plain-English summary of the season plan and assumptions", + "type": "string" +} - added
Output schema / properties / per_team_gamesAdded value: +{ + "description": "Games each team plays over the season", + "type": "integer" +} - added
Output schema / properties / rounds_neededAdded value: +{ + "description": "Number of match days needed to play all fixtures", + "type": "integer" +} - removed
Output schema / properties / start_dateRemoved value: -{ - "description": "The start date of the season.", - "format": "date", - "type": "string" -} - removed
Output schema / properties / total_fixturesRemoved value: -{ - "description": "Total number of matches in the season.", - "type": "integer" -} - changed
Output schema / requiredPrevious value: -[ - "total_fixtures", - "games_per_match_day", - "match_days_needed", - "start_date", - "estimated_finish_date", - "match_days" -]New value: +[ + "rounds_needed", + "games_total", + "games_per_round", + "per_team_games", + "dates", + "finish_date", + "note" +]
- Changed
standings_table21 fields changed- changed
Input schema / properties / points_draw / descriptionPrevious value: -"Points for a draw, default 1"New value: +"Points awarded for a draw, non-negative number. Default 1" - added
Input schema / properties / points_draw / minimumAdded value: +0 - changed
Input schema / properties / points_win / descriptionPrevious value: -"Points for a win, default 3"New value: +"Points awarded for a win, non-negative number. Default 3" - added
Input schema / properties / points_win / minimumAdded value: +0 - changed
Input schema / properties / results / descriptionPrevious value: -"Match results in any order"New value: +"Completed match results in any order; may be empty if teams is given (zeroed table)" - added
Input schema / properties / results / items / properties / away / descriptionAdded value: +"Away team name (must differ from home), e.g. \"Tigers\"" - added
Input schema / properties / results / items / properties / away_score / descriptionAdded value: +"Away team score, non-negative integer, e.g. 1" - added
Input schema / properties / results / items / properties / away_score / minimumAdded value: +0 - changed
Input schema / properties / results / items / properties / away_score / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / results / items / properties / home / descriptionAdded value: +"Home team name, e.g. \"Falcons\"" - added
Input schema / properties / results / items / properties / home_score / descriptionAdded value: +"Home team score, non-negative integer, e.g. 3" - added
Input schema / properties / results / items / properties / home_score / minimumAdded value: +0 - changed
Input schema / properties / results / items / properties / home_score / typePrevious value: -"number"New value: +"integer" - changed
Input schema / properties / teams / descriptionPrevious 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" - added
Input schema / properties / teams / items / descriptionAdded value: +"Team name" - added
Input schema / properties / teams / minItemsAdded value: +2 - added
Output schema / properties / points_systemAdded 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" +} - removed
Output schema / properties / standingsRemoved 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" -} - added
Output schema / properties / tableAdded 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" +} - changed
Output schema / properties / warnings / descriptionPrevious value: -"List of warnings encountered during processing"New value: +"Results skipped because a team was not in the roster (empty if none)" - changed
Output schema / requiredPrevious value: -[ - "standings" -]New value: +[ + "table", + "warnings", + "points_system" +]
1 tool update
- Changed
season_plan1 field changed- added
Output schema / properties / match_days / descriptionAdded value: +"Array of match day plans, each with details for that day."
4 tool updates
- Changed
match_day_plan1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "schedule": { + "description": "List of scheduled games with their respective courts and times.", + "items": { + "properties": { + "away": { + "description": "The away team of the game.", + "type": "string" + }, + "court": { + "description": "The court number where the game is scheduled.", + "type": "integer" + }, + "game_index": { + "description": "The index of the game in the input list.", + "type": "integer" + }, + "home": { + "description": "The home team of the game.", + "type": "string" + }, + "time": { + "description": "The start time of the game in 24h HH:MM format.", + "type": "string" + } + }, + "required": [ + "game_index", + "home", + "away", + "court", + "time" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "schedule" + ], + "type": "object" +}
- Changed
round_robin_schedule1 field changed- changed
Output 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" +}
- Changed
season_plan1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "estimated_finish_date": { + "description": "The estimated finish date of the season.", + "format": "date", + "type": "string" + }, + "games_per_match_day": { + "description": "Number of games scheduled per match day.", + "type": "integer" + }, + "match_days": { + "items": { + "properties": { + "date": { + "description": "The date of the match day.", + "format": "date", + "type": "string" + }, + "matches": { + "items": { + "properties": { + "team1": { + "description": "The name of the first team.", + "type": "string" + }, + "team2": { + "description": "The name of the second team.", + "type": "string" + }, + "time_slot": { + "description": "The time slot for the match.", + "type": "string" + } + }, + "required": [ + "team1", + "team2", + "time_slot" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "date", + "matches" + ], + "type": "object" + }, + "type": "array" + }, + "match_days_needed": { + "description": "Total number of match days required to complete the season.", + "type": "integer" + }, + "start_date": { + "description": "The start date of the season.", + "format": "date", + "type": "string" + }, + "total_fixtures": { + "description": "Total number of matches in the season.", + "type": "integer" + } + }, + "required": [ + "total_fixtures", + "games_per_match_day", + "match_days_needed", + "start_date", + "estimated_finish_date", + "match_days" + ], + "type": "object" +}
- Changed
standings_table1 field changed- changed
Output 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" +}
4 tool updates
- First observed
match_day_plan - First observed
round_robin_schedule - First observed
season_plan - First observed
standings_table
Related MCP Connectors
Public league standings, schedules and brackets; start a league or bracket with no account.
Round-robin ladders and match scores for small clubs. Players join by QR poster; no app, no account.
Run racket-sport tournaments from your AI assistant: fair draws, scores, live standings.
Fair youth soccer lineups, rotations, formations, playing time, age groups and fixtures.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceTournament software for tennis, padel, pickleball and more: fair draws, live standings, scores and dropout handling.MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to organize weekly football games by creating balanced teams and fixtures, managing squads and invites, setting games, tracking availability, entering results, and sharing vote links.1MIT
- AlicenseAqualityDmaintenanceSchedules, scores, odds, splits & explainable AI bet confidence — 8+ sports, free instant key.1611MIT
- AlicenseAqualityCmaintenanceLive football/soccer data from top European leagues, enabling queries for standings, fixtures, scorers, and team comparisons via natural language.66 npmMIT
Glama MCP Gateway
Add one secure layer between your agents and this server.