LeagueNight

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

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
100%
Naming quality
80%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~817Tokens (tool definitions)
~1.5 KBTypical response size
Moderate attention impact (0.64% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "league-night": {
      "url": "https://league-night.magicteams.ai/mcp"
    }
  }
}

Remote endpoints

https://league-night.magicteams.ai/mcpstreamable-http

What it can do

Tool inventory

Tools (4)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢round_robin_schedule(teams, rounds, second_leg)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "teams": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Team names (2 or more, unique)"
    },
    "rounds": {
      "type": "number",
      "description": "Optional number of rounds to return (1..full schedule)"
    },
    "second_leg": {
      "type": "boolean",
      "description": "Also schedule the reverse fixtures for a double round-robin"
    }
  },
  "required": [
    "teams"
  ]
}
🟢standings_table(results, teams, points_win, points_draw)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "results": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "home": {
            "type": "string"
          },
          "away": {
            "type": "string"
          },
          "home_score": {
            "type": "number"
          },
          "away_score": {
            "type": "number"
          }
        },
        "required": [
          "home",
          "away",
          "home_score",
          "away_score"
        ]
      },
      "description": "Match results in any order"
    },
    "teams": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Full roster; results for teams outside it are skipped with a warning"
    },
    "points_win": {
      "type": "number",
      "description": "Points for a win, default 3"
    },
    "points_draw": {
      "type": "number",
      "description": "Points for a draw, default 1"
    }
  },
  "required": [
    "results"
  ]
}
🟢match_day_plan(games, courts, slot_minutes, start_time)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "games": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "home": {
            "type": "string"
          },
          "away": {
            "type": "string"
          }
        },
        "required": [
          "home",
          "away"
        ]
      },
      "description": "Games in the order they should be played"
    },
    "courts": {
      "type": "number",
      "description": "Courts available (1-12)"
    },
    "slot_minutes": {
      "type": "number",
      "description": "Minutes per time slot (10-180)"
    },
    "start_time": {
      "type": "string",
      "description": "First kick-off, 24h HH:MM"
    }
  },
  "required": [
    "games",
    "courts",
    "slot_minutes",
    "start_time"
  ]
}
🟢season_plan(teams, courts, slot_minutes, start_date, days_between_rounds, ...)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "teams": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Team names (2 or more, unique)"
    },
    "courts": {
      "type": "number",
      "description": "Courts available per match day (1-12)"
    },
    "slot_minutes": {
      "type": "number",
      "description": "Minutes per time slot (10-180)"
    },
    "start_date": {
      "type": "string",
      "description": "First match day, YYYY-MM-DD"
    },
    "days_between_rounds": {
      "type": "number",
      "description": "Days between match days, default 7"
    },
    "second_leg": {
      "type": "boolean",
      "description": "Plan a double round-robin (each pair meets twice)"
    }
  },
  "required": [
    "teams",
    "courts",
    "slot_minutes",
    "start_date"
  ]
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded4 tools