# LeagueNight

> Round-robin fixtures, standings and match-day plans for league organizers. Free.

- name: io.github.everyai-com/league-night
- version: 1.0.0
- connection class: R0 (autonomous)
- trust: 90/100 flags: duplicate-repo
- quality: 79/100 (good)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/io.github.everyai-com%2Fleague-night
- tools: https://api.protogrid.dev/v1/servers/io.github.everyai-com%2Fleague-night/tools

**An agent can connect right now, no human step.** Remote endpoint, no authentication, reachable on the last probe.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "league-night": {
      "type": "http",
      "url": "https://league-night.magicteams.ai/mcp"
    }
  }
}
```


## Trust

- hygiene: 80
- liveness: 99
- freshness: 100
- provenance: 80
- drivers: +repository +namespace-matches-repo +reachable +uptime-98% +updated-16d-ago -duplicate-repo(15 names)
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 79/100 (good)

### protocol: 88 (weight 25)

- pass `protocol.modern`: supports 2026-07-28 (server/discover)
- pass `protocol.stateless`: answers without a session
- pass `protocol.transport`: streamable HTTP
- warn `protocol.list_ttl`: tools/list carries no ttlMs, so clients re-fetch it

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 100 (weight 30)

- pass `tools.descriptions`: every tool has a description
- pass `tools.description_length`: descriptions are concise
- pass `tools.schemas`: every tool has an object input schema
- pass `tools.annotations`: 4 of 4 tools declare readOnlyHint or destructiveHint
- pass `tools.directory_hints`: every tool declares readOnlyHint, destructiveHint, idempotentHint and openWorldHint
- pass `tools.token_cost`: about 1,406 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

### stability: 25 (weight 15)

- warn `stability.changes`: 8 tool changes in 30 days
- fail `stability.rug_pull`: 8 tools kept their name but changed most of their description in 30 days; review before trusting them

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: no npm or PyPI package

- tools: 4, about 1,406 tokens to load them all
- tool set hash: 94081a7dfab1bf1614b8992da313ea54
- tools last changed: 2026-10-10T14:06:23.365Z
- badge: [![protogrid quality](https://protogrid.dev/badge/io.github.everyai-com/league-night.svg)](https://protogrid.dev/servers/io.github.everyai-com/league-night)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

- 2026-10-10 `season_plan` changed (description, inputSchema, outputSchema, annotations) **meaning changed**
  - before: Plan a season end-to-end. Use when you need a full season overview. Do NOT use when you need to plan a single match day; use match_day_plan instead.
  - after: 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).
- 2026-10-10 `match_day_plan` changed (description, inputSchema, outputSchema, annotations) **meaning changed**
  - before: Assign games to courts and time slots for a match day. Use when you need to schedule multiple games across several courts. Do NOT use when you need to generate a full season schedule, use season_plan.
  - after: 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).
- 2026-10-10 `standings_table` changed (description, inputSchema, outputSchema, annotations) **meaning changed**
  - before: Generate a standings table from match results. Use when you need to rank teams based on their performance. Do NOT use when you need to plan future matches; use round_robin_schedule instead.
  - after: 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).
- 2026-10-10 `round_robin_schedule` changed (description, inputSchema, outputSchema, annotations) **meaning changed**
  - before: Generate a round-robin fixture schedule for a set of teams. Use when needing a balanced, circular schedule. Avoid when needing a single matchday plan (use match_day_plan).
  - after: 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).
- 2026-10-06 `season_plan` changed (title, description, outputSchema, annotations) **meaning changed**
  - before: Size a season end-to-end: total fixtures from the round-robin, games per match day given the courts available, match days needed, and the calendar dates from a start date to the estimated finish date.
  - after: Plan a season end-to-end. Use when you need a full season overview. Do NOT use when you need to plan a single match day; use match_day_plan instead.
- 2026-10-06 `match_day_plan` changed (title, description, outputSchema, annotations) **meaning changed**
  - before: Lay an ordered list of games onto a courts-by-slots time grid: game i goes to court (i mod courts) in slot (i div courts) and each slot is slot_minutes long, starting at start_time.
  - after: Assign games to courts and time slots for a match day. Use when you need to schedule multiple games across several courts. Do NOT use when you need to generate a full season schedule, use season_plan.
- 2026-10-06 `standings_table` changed (title, description, outputSchema, annotations) **meaning changed**
  - before: Aggregate match results into a league table with played, wins, draws, losses, goals for/against, goal difference and points, sorted by points, then goal difference, then goals for, then name.
  - after: Generate a standings table from match results. Use when you need to rank teams based on their performance. Do NOT use when you need to plan future matches; use round_robin_schedule instead.
- 2026-10-06 `round_robin_schedule` changed (title, description, outputSchema, annotations) **meaning changed**
  - before: Build a circle-method round-robin fixture schedule: every pair of teams meets once, or twice when second_leg is set. Odd team counts get one bye per round.
  - after: Generate a round-robin fixture schedule for a set of teams. Use when needing a balanced, circular schedule. Avoid when needing a single matchday plan (use match_day_plan).

Full history: https://api.protogrid.dev/v1/servers/io.github.everyai-com%2Fleague-night/changes

## Remotes

- https://league-night.magicteams.ai/mcp (streamable-http, auth none, reachable true, uptime30d 0.984375)

## Packages

_none_

## Tools (4)

- `match_day_plan`: 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).
- `round_robin_schedule`: 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).
- `season_plan`: 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).
- `standings_table`: 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).
