Beleeg (public, no account)

Public league standings, schedules and brackets; start a league or bracket with no account.

Should I use this

Quality & Safety

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

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~2,698Tokens (tool definitions)
~5.0 KBTypical response size
Significant attention impact (2.11% 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": {
    "beleeg-public": {
      "url": "https://beleeg.com/api/mcp/public"
    }
  }
}

Remote endpoints

https://beleeg.com/api/mcp/publicstreamable-http

What it can do

Tool inventory

Tools (4)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢beleeg_look_up_public(what, slug, match_id, tournament_id, league_slug)

Look up what anyone can see on Beleeg — a league, team, match or tournament public page — no membership needed. Read-only. Pick `what` and give the slug or id listed for it. what (params; ? = optional): - league: A league's public page by its slug: sport, current season, teams, standings. [slug] - team: A team's public page by its slug: roster, captain, colours, recent matches. [slug] - match: One match by match_id: teams, lineups, set scores, venue. [match_id] - tournament: One tournament's public page by tournament_id: status, entrants, bracket. [tournament_id] - league_tournaments: The tournaments a league shows the public, by the league slug. [league_slug]

Input Schema

{
  "type": "object",
  "properties": {
    "what": {
      "type": "string",
      "enum": [
        "league",
        "team",
        "match",
        "tournament",
        "league_tournaments"
      ],
      "description": "What to look up. Every value is listed, with its params, in the tool description."
    },
    "slug": {
      "type": "string",
      "description": "Public URL-safe league slug. Used with what: league, team."
    },
    "match_id": {
      "type": "string",
      "description": "One match id (from what \"schedule\"). For the match-day lookups, leave out to mean the person's next match. Used with what: match."
    },
    "tournament_id": {
      "type": "string",
      "description": "A tournament id, from what \"tournaments\". Used with what: tournament."
    },
    "league_slug": {
      "type": "string",
      "description": "Public league slug (not UUID). Used with what: league_tournaments."
    }
  },
  "required": [
    "what"
  ],
  "additionalProperties": true,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟡beleeg_start_league(organizerEmail, name, sport, timezone, organizationName, ...)

Creates a real league on Beleeg right away for someone who does not have a Beleeg account yet: the league, its first season with registration open, optional teams, and a public page. It is held for the organizer whose email you give: to take it over they open the claim_url, sign in at beleeg.com with THAT email address (email code, Google or Apple), and choose to keep it. Signing in alone does not make it theirs. Always give the person the claim_url exactly as returned (never build a link from the name) and tell them which email to sign in with. Ask the person for their email; never guess one. If Beleeg refuses, tell the person to sign in to Beleeg with that email and ask again. After signing in, the organizer is asked whether to keep the league or discard it; it is theirs only once they keep it. Invited people are saved but not emailed until the organizer has kept the league and sends them. If the organizer has not kept it within 30 days, the league is removed. Limits: 3 per organizer email per day, 5 per caller per day, and at most 3 leagues or brackets waiting on the organizer. Team names that differ only by capitals or spacing are treated as one team. Tell the person what you are about to create and get a yes BEFORE calling this; there is no separate confirm step.

Input Schema

{
  "type": "object",
  "properties": {
    "organizerEmail": {
      "type": "string",
      "minLength": 3,
      "maxLength": 254,
      "description": "The organizer's own email address. They sign in with it to take over the league. Ask for it; never guess."
    },
    "name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 80,
      "description": "League name, plain text, for example \"Tuesday Night Pickleball\"."
    },
    "sport": {
      "type": "string",
      "minLength": 1,
      "maxLength": 60,
      "description": "Sport key, for example pickleball, platform-tennis, tennis, softball, volleyball."
    },
    "timezone": {
      "type": "string",
      "minLength": 1,
      "maxLength": 64,
      "description": "IANA time zone the league plays in, for example America/Chicago."
    },
    "organizationName": {
      "type": "string",
      "maxLength": 80,
      "description": "Club or group name. Defaults to the league name."
    },
    "city": {
      "type": "string",
      "maxLength": 80,
      "description": "Town or city, shown on the public page."
    },
    "registrationClosesOn": {
      "type": "string",
      "description": "Last day to register, YYYY-MM-DD. Defaults to 30 days from today."
    },
    "teams": {
      "type": "array",
      "items": {
        "type": "string",
        "maxLength": 60
      },
      "maxItems": 64,
      "description": "Team names to create right away (up to 64)."
    },
    "inviteEmails": {
      "type": "array",
      "items": {
        "type": "string",
        "maxLength": 254
      },
      "maxItems": 200,
      "description": "People to invite (up to 200). They are only SAVED as pending invites: no email goes out until the organizer has signed in, kept the league, and sends them."
    },
    "client": {
      "type": "string",
      "maxLength": 40,
      "description": "Which assistant this is, for example muse, claude, chatgpt, cursor."
    }
  },
  "required": [
    "organizerEmail",
    "name",
    "sport",
    "timezone"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Output Schema

{
  "type": "object",
  "properties": {
    "league_id": {
      "type": "string"
    },
    "organization_id": {
      "type": "string"
    },
    "slug": {
      "type": "string"
    },
    "name": {
      "type": "string"
    },
    "public_url": {
      "type": "string",
      "description": "The public league page. Works right away, and says the league is waiting for its organizer until it is kept. Use it exactly as returned: while the league waits its address ends in a few extra characters. Once kept it moves to the short address if that is free, and this one keeps working."
    },
    "claim_url": {
      "type": "string",
      "description": "Give this to the organizer: it explains how to take over the league."
    },
    "organizer_email": {
      "type": "string"
    },
    "claim_instructions": {
      "type": "string",
      "description": "Read this to the person."
    },
    "teams": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "name"
        ],
        "additionalProperties": true
      }
    },
    "invites_pending": {
      "type": "integer",
      "description": "Invites saved but NOT sent."
    },
    "unclaimed_expires_on": {
      "type": "string",
      "description": "If the organizer has not signed in and kept the league by this date, it is removed."
    }
  },
  "required": [
    "league_id",
    "organization_id",
    "slug",
    "name",
    "public_url",
    "claim_url",
    "organizer_email",
    "claim_instructions",
    "teams",
    "invites_pending",
    "unclaimed_expires_on"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟡beleeg_start_tournament(organizerEmail, name, entrants, format, registrationUnit, ...)

Creates a real standalone tournament bracket on Beleeg right away for someone who does not have a Beleeg account yet: the draw is built from the entrants you give. It is never attached to an existing league or organization. It is held for the organizer whose email you give: to take it over they open the claim_url, sign in at beleeg.com with THAT email address (email code, Google or Apple), and choose to keep it. Signing in alone does not make it theirs. Always give the person the claim_url exactly as returned (never build a link from the name) and tell them which email to sign in with. Ask the person for their email; never guess one. If Beleeg refuses, tell the person to sign in to Beleeg with that email and ask again. After signing in, the organizer is asked whether to keep the bracket or discard it; it is theirs only once they keep it. Until then nobody else can see the entrants or the draw: the bracket page only says it is waiting for its organizer. If the organizer has not kept it within 30 days, the bracket is removed. Limits: up to 64 entrants (32 for round robin); 3 per organizer email per day, 5 per caller per day, and at most 3 leagues or brackets waiting on the organizer. Tell the person what you are about to create and get a yes BEFORE calling this; there is no separate confirm step.

Input Schema

{
  "type": "object",
  "properties": {
    "organizerEmail": {
      "type": "string",
      "minLength": 3,
      "maxLength": 254,
      "description": "The organizer's own email address. They sign in with it to run the bracket. Ask for it; never guess."
    },
    "name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 80,
      "description": "Tournament name, plain text."
    },
    "entrants": {
      "anyOf": [
        {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 160
          },
          "minItems": 2,
          "maxItems": 64
        },
        {
          "type": "string",
          "maxLength": 20000
        }
      ],
      "description": "Who is playing: a list of names, or text with one entrant per line. For pairs write \"Ann Lee / Bo Park\". 2 to 64 entrants (2 to 32 for round_robin)."
    },
    "format": {
      "type": "string",
      "enum": [
        "single_elim",
        "single_elim_consolation",
        "three_match_guarantee",
        "round_robin",
        "pool_to_bracket"
      ],
      "description": "Bracket format. Defaults to single_elim."
    },
    "registrationUnit": {
      "type": "string",
      "enum": [
        "solo",
        "pair"
      ],
      "description": "solo (default) or pair (doubles)."
    },
    "bestOf": {
      "type": "integer",
      "minimum": 1,
      "maximum": 9,
      "description": "Sets per match, 1 to 9. Defaults to 3."
    },
    "client": {
      "type": "string",
      "maxLength": 40,
      "description": "Which assistant this is, for example muse, claude, chatgpt, cursor."
    }
  },
  "required": [
    "organizerEmail",
    "name",
    "entrants"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Output Schema

{
  "type": "object",
  "properties": {
    "tournament_id": {
      "type": "string"
    },
    "name": {
      "type": "string"
    },
    "format": {
      "type": "string"
    },
    "entrants": {
      "type": "integer"
    },
    "public_url": {
      "type": "string",
      "description": "The bracket page. Until the organizer keeps the bracket it only says the tournament is waiting for its organizer; the entrants and the draw show once it is kept."
    },
    "claim_url": {
      "type": "string",
      "description": "Give this to the organizer: it explains how to run the bracket."
    },
    "organizer_email": {
      "type": "string"
    },
    "claim_instructions": {
      "type": "string",
      "description": "Read this to the person."
    },
    "unclaimed_expires_on": {
      "type": "string",
      "description": "If the organizer has not signed in and kept the bracket by this date, it is removed."
    }
  },
  "required": [
    "tournament_id",
    "name",
    "format",
    "entrants",
    "public_url",
    "claim_url",
    "organizer_email",
    "claim_instructions"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟡beleeg_send_feedback(message, trying_to, tool)

Send Beleeg a note when it cannot do something the person asked for, or when a tool was confusing or gave a wrong answer. Say what they wanted and, if one did, which tool fell short. Never include personal details — names, emails or phone numbers — of the person or anyone else. The Beleeg team reads these to decide what to build; nothing is done automatically and nobody replies, so still tell the person what you could not do and, where there is one, where in Beleeg they can do it themselves.

Input Schema

{
  "type": "object",
  "properties": {
    "message": {
      "type": "string",
      "minLength": 1,
      "maxLength": 2000,
      "description": "What Beleeg could not do, or what was confusing or wrong, in a sentence or two. No names, emails or phone numbers of anyone."
    },
    "trying_to": {
      "type": "string",
      "maxLength": 500,
      "description": "What the person was trying to get done, e.g. \"move all of Saturday's games to Sunday\"."
    },
    "tool": {
      "type": "string",
      "maxLength": 100,
      "description": "The tool that fell short, if one did."
    }
  },
  "required": [
    "message"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Output Schema

{
  "type": "object",
  "properties": {
    "received": {
      "type": "boolean"
    }
  },
  "required": [
    "received"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded4 tools