Beleeg
Server Details
Run a recreational sports league from an AI assistant: standings, schedules, rosters, scores, dues.
- Status
- Healthy
- Uptime
- 56.6% over 21 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 11 tools
The set follows a clean gateway pattern: identity (whoami, needs_me), read (look_up, look_up_public), and mutation (prepare_change, confirm_change, cancel_change, retry_delivery) are clearly separated, and the prepare/confirm/cancel trio is a textbook unambiguous flow. The only real overlap is beleeg_start_league/beleeg_start_tournament versus prepare_change's create_league/create_tournament actions, though descriptions carefully distinguish the account-less, no-confirm case from the normal path.
Every tool carries the same beleeg_ prefix and uses snake_case throughout, which is highly predictable. Suffixes deviate slightly from a strict verb_noun pattern (beleeg_whoami, beleeg_needs_me, beleeg_look_up), but these read naturally and no conventions are mixed.
11 top-level tools is well within the ideal range for a gateway-style server; a broad fan-out of ~90 actions and lookup topics is folded into a handful of meta-tools rather than exposing one tool per operation. Each tool earns its place as a distinct role in the prepare/confirm/lookup lifecycle.
Coverage is exceptionally thorough: leagues, seasons, teams, rosters, scheduling, rescheduling, scoring, disputes, lineups, referees, availability, payments, dues, emails, sponsors, store, waitlist, ladder, tournaments, events, and public pages all have read and write paths. Delivery recovery, feedback, and account-less league/tournament creation close the remaining lifecycle gaps.
Available Tools
11 toolsbeleeg_cancel_changeCancel a prepared changeAIdempotentInspect
Drop a change that was prepared but never confirmed, so it can no longer be confirmed by anyone. Use it when the person says "no", "cancel that", or "never mind" after you showed them a summary. It does NOT undo a change that was already made: if they confirmed it, this says so and the reverse has to be asked for as a new change. Find the prepare_id with beleeg_look_up(what: "my_changes") if you do not have it. Only the person who prepared it can cancel it.
| Name | Required | Description | Default |
|---|---|---|---|
| prepare_id | Yes | The prepare_id of the request to drop. |
Output Schema
| Name | Required | Description |
|---|---|---|
| action | Yes | |
| cancelled | Yes | |
| prepare_id | Yes | |
| already_cancelled | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial behavior beyond the annotations: the change becomes permanently unconfirmable, only the preparer may cancel it, and calling it on an already-confirmed change reports that fact rather than undoing it. The annotations cover the safety profile (destructiveHint=false, idempotentHint=true) and the description adds authorization and state-transition semantics without contradicting them.
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?
Purpose is front-loaded, then usage triggers, then the non-undo boundary, then id lookup and permissions. Each sentence carries distinct information, though the permission clause could have been folded into the boundary sentence.
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 no explanation, and the description already states what happens on a confirmed change. Auth requirement, id acquisition, and irreversibility of the cancel are all present, leaving no gap for a single-param tool.
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 coverage is 100%, so the schema already defines prepare_id as a UUID. The description adds the operational route for obtaining that value ('Find the prepare_id with beleeg_look_up(what: "my_changes")'), which is meaning the schema cannot carry.
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 ('Drop') and resource ('a change that was prepared but never confirmed'), and explicitly contrasts with beleeg_confirm_change by defining the window in which the change exists. An agent can distinguish this from confirm/look_up siblings 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 concrete trigger phrases ('no', 'cancel that', 'never mind'), names the alternative path for already-confirmed changes ('the reverse has to be asked for as a new change'), and explains how to obtain the required id via beleeg_look_up. 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.
beleeg_confirm_changeConfirm a prepared changeADestructiveIdempotentInspect
CONFIRM — this is the step that actually makes the change. Call it ONLY with a prepare_id from a beleeg_prepare_change tool, and ONLY after you have shown that tool's summary to the person and they said yes. Never confirm on your own initiative and never confirm something the person did not ask for. The prepare_id works once, for the same person, within 10 minutes; confirming it again returns the earlier result with already_done:true instead of repeating the change. For email and payment actions this tool also performs the delivery and reports it (sent counts, or a checkout_url the person must open to pay). Every confirmed change is written to the league audit log under the person's name. Needs a token that allows changes.
| Name | Required | Description | Default |
|---|---|---|---|
| prepare_id | Yes | The prepare_id returned by a beleeg_prepare_change tool, after the person agreed to its summary. |
Output Schema
| Name | Required | Description |
|---|---|---|
| done | Yes | True when the change is fully complete (including any delivery step). |
| action | Yes | |
| result | Yes | What the action produced (ids, counts, URLs) — see the prepare tool description. |
| delivery | No | Present for email and payment actions: the outcome of the delivery step (sent counts, checkout_url, or an error). |
| prepare_id | Yes | |
| already_done | Yes | True when this prepare_id had been confirmed before; nothing was repeated. |
| delivery_state | No | For email and payment actions: whether the sending step finished. "unknown" means it was interrupted and may or may not have gone out — say so and offer beleeg_retry_delivery. Never treat "unknown" as done. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructive/idempotent/openWorld, but the description adds materially new behavior: the prepare_id is single-use, bound to the same person, valid for 10 minutes, and re-confirmation returns already_done:true rather than re-applying. It also discloses side effects (email/payment delivery, checkout_url), audit logging, and the required token scope.
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?
Front-loads 'CONFIRM' and the core rule, then layers constraints and side effects. It is on the longer side, but each sentence carries operational information and none is 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?
For a destructive, state-changing tool this covers preconditions, idempotency behavior, side effects, and auth needs. With an output schema present, it correctly avoids over-explaining return shape while still noting the already_done field and checkout_url.
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 coverage is 100% and the single parameter is documented there, so baseline is 3; however the description adds lifecycle semantics for prepare_id (single use, same person, 10-minute window) that the schema does not convey.
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?
Opens with a specific verb and immediately states the consequence ('this is the step that actually makes the change'), cleanly separating it from beleeg_prepare_change. An agent can identify the tool's role without inspecting the 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 explicit when-to-use rules: only with a prepare_id from beleeg_prepare_change, only after showing the summary and receiving a 'yes', and never on the agent's own initiative. This is about as prescriptive as guidance gets.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
beleeg_look_upLook something upARead-onlyIdempotentInspect
Look something up in the person's Beleeg leagues. Read-only: nothing changes. Pick what, give only the params listed for it (league_id comes from beleeg_whoami), and relay the answer as written — times already carry their time zone. For what needs the person across all their leagues use beleeg_needs_me; for public pages by slug use beleeg_look_up_public.
what (params; ? = optional):
my_leagues: The leagues the person belongs to, their roles in each, and each league_id. [no params]
league_brief: A whole league in one call: teams with captains and roster sizes, standings, the schedule by week, recent results, tournaments. Best for broad questions. [league_id]
search_leagues: The public league directory, by name, sport or town — for leagues the person is not in. [query?]
standings: The standings table: rank, record, points, streak, last five, games back. [league_id, season_id?]
schedule: This season's matches, earliest first: date and time with zone, venue, sides, score; the match ids changes take. [league_id, from_date?, to_date?, team_id?, limit?]
divisions: The league's divisions and their ids. [league_id, season_id?]
seasons: Every season the league has run, newest first, with ids and dates. [league_id]
makeup_options: Days a rained-out or postponed match could be replayed on, and what each costs (league admins). [league_id, from_date?, match_ids?, horizon_days?]
teams: Every team in the league with its captain and roster user ids. [league_id, limit?]
members: Everyone in the league — name, email, roles, status — plus invites not yet accepted. [league_id, limit?]
my_team_assignment: The person's own team, line and role, as their captain set it. [league_id]
unpaid_members: Members who still owe the registration fee (league admins). [league_id]
tournaments: Every tournament the league has run or planned, with ids. [league_id, limit?, cursor?]
tournament_draws: The parallel draws (brackets) inside one tournament. [tournament_id, limit?]
tournament_court_schedule: One tournament's order of play: court, start time and referee per match. [tournament_id, limit?]
team_chat: Recent messages in a team's chat (people on the team only). [team_id, limit?, tournament_id?]
comms_status: Announcements already emailed to the league: subject, when, to whom, how many got it (league admins). [league_id, limit?]
articles: The league's published news posts and match recaps. [league_id, limit?, cursor?]
article_comments: Comments on one article or recap. [article_id, limit?]
tournament_photos: Photos uploaded for a tournament. [tournament_id, limit?]
tournament_highlights: Video highlights uploaded for a tournament. [tournament_id, limit?]
highlight_comments: Comments on one video highlight. [highlight_id, limit?]
referee_assignments: A tournament's referee assignments: match, court, time, referee. [tournament_id, limit?]
my_referee_alerts: How the calling referee is set up to hear about assignments. [no params]
my_availability: The person's own availability windows (an admin may name a user_id). [user_id?]
demo_league: Diagnostic snapshot of the demo league (Beleeg platform administrators only). [no params]
match_availability: Who can make a league match: each side's players grouped In, Out, Maybe and Hasn't answered. [league_id, match_id?]
match_checklist: The league's checklist for one match (the things every match needs — shot clock operator, snacks, nets put away) and who has answered what. [league_id, match_id?]
head_to_head: A team's record against one opponent in this league, across every season: won, lost, drawn, the total score, and the most recent results. [league_id, opponent, team?]
match_venue: Where a match is and what to know before going: the venue and its address with a map link, where to park, how to find the courts or field, what time to arrive by and what to wear, as the league set them. [league_id, match_id?]
calendar_link: The person's own calendar link: every match for every team they play on, which their phone or computer calendar keeps up to date by itself — a moved match moves in their calendar too. [no params]
match_proposals: Open requests to move a match that involve the person: ones waiting on them to accept, decline or approve, and ones their team is waiting on. [league_id]
standings_form: Each division's table this season with form: record, current streak (W3 = three wins in a row), last five results, and games behind the leader. [league_id]
find_team: Find a team by name across every league on Beleeg that lists itself publicly: its league, division, season, town, and a link to its public page (schedule, results, and a calendar anyone can subscribe to). [name]
open_disputes: Scores in dispute in this league: the match, the score one team put in, and the other team's reason. [league_id]
player_stats: Players' records this season, best first: matches won and lost, win percentage, and sets won and lost where the sport has sets. [league_id, player?]
team_dues_status: A team's dues (the kitty the captain collects): what they are for, how much, who has paid and who still owes. [league_id, team?]
scheduled_emails: League emails set to go out later: the subject, when each goes out (in the league's time), who it goes to, and any that could not be sent. [league_id]
referee_availability: The league's referees for one day: who is free, who already referees a match that day (and which), and who took the day off. [league_id, match_id?, date?]
events: Upcoming social events for this league and its organization: when, where, how many are going or maybe, spots left, the ticket price, and the person's own answer. [league_id, event?]
sponsors: The league's sponsors: applications waiting for an answer (who, what tier, what they offer), who is showing now, and how many were declined. [league_id]
store: The league store, read only: what is for sale and at what price, what is hidden, and the latest orders (who, what, total, status). [league_id]
waitlist: The league's waiting list in order (who, since when, who was already offered a spot) and how many spots are open now. [league_id]
ladder: The league's challenge ladder: every spot in order with each side's wins and losses, the challenges going on (who challenged whom, the answer deadline, the agreed time and place), any challenge waiting on the person's answer with its deadline, and who they… [league_id]
my_changes: Changes an assistant prepared or made for this person, and whether their emails actually went out. [limit?]
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | The day, as YYYY-MM-DD, when no match is named. Used with what: referee_availability. | |
| name | No | The team name, or part of it, e.g. "Hawks". At least two letters. Used with what: find_team. | |
| team | No | A team, by name. Leave out for the person's own team. Used with what: head_to_head, team_dues_status. | |
| what | Yes | What to look up. Every value is listed, with its params, in the tool description. | |
| event | No | A word or two from one event's name, to see who is coming. Used with what: events. | |
| limit | No | Most rows to return. A list that is cut short says how many were left out. Used with what: schedule, teams, members, tournaments, tournament_draws, tournament_court_schedule, team_chat, comms_status, articles, article_comments, tournament_photos, tournament_highlights, highlight_comments, referee_assignments, my_changes. | |
| query | No | Words to match against league name, organization, sport, or town. Omit to list everything public. Used with what: search_leagues. | |
| cursor | No | Opaque cursor from a previous page; leave out for the first page. Used with what: tournaments, articles. | |
| player | No | One player by name, or "me". Omit for the top ten. Used with what: player_stats. | |
| team_id | No | Only matches involving this team. Used with what: schedule, team_chat. | |
| to_date | No | Only matches on or before this day, YYYY-MM-DD. Used with what: schedule. | |
| user_id | No | Target user. Omit to return the calling user's own availability. Used with what: my_availability. | |
| match_id | No | One match id (from what "schedule"). For the match-day lookups, leave out to mean the person's next match. Used with what: match_availability, match_checklist, match_venue, referee_availability. | |
| opponent | No | The other team, by name, e.g. "Hawks". Used with what: head_to_head. | |
| from_date | No | Only matches on or after this day, YYYY-MM-DD. Omit for the whole season. Used with what: schedule, makeup_options. | |
| league_id | No | The league id, from beleeg_whoami or what "my_leagues" (what "search_leagues" for a league the person is not in). Used with what: league_brief, standings, schedule, divisions, seasons, makeup_options, teams, members, my_team_assignment, unpaid_members, tournaments, comms_status, articles, match_availability, match_checklist, head_to_head, match_venue, match_proposals, standings_form, open_disputes, player_stats, team_dues_status, scheduled_emails, referee_availability, events, sponsors, store, waitlist, ladder. | |
| match_ids | No | Specific matches instead of a whole day. Give this or from_date. Used with what: makeup_options. | |
| season_id | No | A past season, from what "seasons". Leave out for the season being played now. Used with what: standings, divisions. | |
| article_id | No | Article whose comments to list. Used with what: article_comments. | |
| highlight_id | No | Highlight whose comments to list. Used with what: highlight_comments. | |
| horizon_days | No | How far ahead to look. Default 45 days. Used with what: makeup_options. | |
| tournament_id | No | A tournament id, from what "tournaments". Used with what: tournament_draws, tournament_court_schedule, team_chat, tournament_photos, tournament_highlights, referee_assignments. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this read-only, idempotent, and non-destructive, but the description adds important behavioral context: answers should be relayed as written, times already include their time zone, and several operations are restricted to league admins, team members, or platform admins. This goes well beyond the structured safety hints.
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?
The description is long, but the length is justified by 45 distinct operations and the absence of an output schema. It is front-loaded with global selection guidance, then uses a compact bulleted structure where each entry earns its place by naming the resource, params, and returned fields.
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?
Given the 22 parameters, the 45-value enum, no output schema, and the multiplexed design, the description is complete: it covers routing alternatives, permission scopes, parameter mapping, pagination hints via `limit`/`cursor`, and return content for every `what` value.
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 already 100%, yet the description still adds substantial value by grouping each `what` value with its valid parameters and optionality, and by describing what each operation returns. That operation-level mapping is more useful than the per-parameter schema alone for a 22-param multiplexer.
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 states a specific read-only lookup role in the person's Beleeg leagues and enumerates every supported resource via the `what` values. It explicitly distinguishes itself from siblings `beleeg_needs_me` and `beleeg_look_up_public`, so an agent can route correctly without opening 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 explicit selection guidance: pick `what`, pass only the listed params, get `league_id` from `beleeg_whoami`, and use `beleeg_needs_me` or `beleeg_look_up_public` instead when those conditions apply. Each `what` entry also states admin-only or team-only restrictions where relevant.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
beleeg_look_up_publicLook up a public pageARead-onlyIdempotentInspect
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):
team: A team's public page by its slug: roster, captain, colours, recent matches. [slug]
league: A league's public page by its slug: sport, current season, teams, standings. [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]
| Name | Required | Description | Default |
|---|---|---|---|
| slug | No | Public URL-safe team slug (e.g. "hawks-2026"). Used with what: team, league. | |
| what | Yes | What to look up. Every value is listed, with its params, in the tool description. | |
| match_id | No | One match id (from what "schedule"). For the match-day lookups, leave out to mean the person's next match. Used with what: match. | |
| league_slug | No | Public league slug (not UUID). Used with what: league_tournaments. | |
| tournament_id | No | A tournament id, from what "tournaments". Used with what: tournament. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint, idempotentHint, destructiveHint=false), so the bar is lower; the description reinforces 'Read-only' and adds genuinely new context about the public/no-membership access boundary. It also discloses what each lookup returns (roster, captain, colours, recent matches; status, entrants, bracket), which is real behavioral detail. It does not cover pagination or result limits.
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?
Front-loaded statement of purpose and access scope, followed by a scannable per-value parameter list where every line maps a branch to its input and output summary. Tight and well organized; only mildly verbose in restating the title's notion of a 'public page' twice.
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 no output schema, the description compensates by naming the fields returned for each lookup type, and it fully documents which parameter goes with which branch. Combined with 100% schema coverage and strong annotations, an agent has what it needs. The only soft spot is the schema's references to nonexistent 'schedule'/'tournaments' enum values, which the description never addresses.
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 coverage is 100%, so baseline is 3; the description goes beyond it by mapping each `what` enum value to the exact parameter it consumes and summarizing the returned fields per type. It does not clarify the schema's dangling references ('from what "schedule"' / 'from what "tournaments"') to enum values that do not exist in the list, which is a real ambiguity left unresolved.
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 gives a specific verb (look up) plus the exact resource class (league, team, match, tournament public pages) and pins the distinguishing constraint: 'no membership needed. Read-only.' This separates it from the sibling beleeg_look_up, which an agent can infer is the authenticated counterpart, without opening either 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?
It states when to use this tool (public content viewable by anyone) and enumerates, per `what` value, exactly which param to supply: slug, match_id, tournament_id, league_slug. That is usable routing guidance. It stops short of an explicit exclusion such as 'do not use for private/authenticated data — use beleeg_look_up', which is only implied by 'no membership needed'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
beleeg_needs_meWhat needs this person, across every league they runARead-onlyIdempotentInspect
Everything waiting on the person, in one call, across all the leagues they run: matches with no score yet, score reports nobody has confirmed, disputes, lineups that were never sent, members who have not paid, registration about to close, and settings that are still missing. Answers "what needs me this week?", "anything I should deal with?", "am I behind on anything?" Each item says which league it belongs to and links to the page for it. Leagues the person only plays in are left out — this is the organizer's list. Nothing here is a change; use it to decide which change to prepare next.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| total | Yes | How many things need this person, across every league they run. |
| leagues | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly, idempotent, non-destructive and closed-world, so the safety profile is settled. The description adds genuine behavioral context beyond that: it is cross-league, organizer-scoped only, each item is tagged with its league and links to the relevant page, and it explicitly performs no mutation. It does not discuss pagination or result size, which is the only remaining 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?
Front-loaded with the core claim, then the item enumeration, then scope exclusions and the routing sentence. The long item list is dense but each entry adds discriminating detail; the weak spot is that the enumeration could be tightened slightly without losing meaning.
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 spelled out, and the description still previews what each item contains (league tag plus link). For a no-arg, read-only aggregator this covers everything an agent needs to select and invoke it correctly, including the sibling it should call afterwards.
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?
The tool takes zero parameters, so there is no parameter semantics to document and the baseline is 4. The description correctly conveys that the call needs no input ('in one call') and does not waste space restating a schema that is empty.
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+scope: everything waiting on the person, across every league they run, with an explicit enumeration of item types (unscored matches, unconfirmed reports, disputes, unsent lineups, unpaid members, closing registration, missing settings). An agent can distinguish this aggregate 'inbox' tool from beleeg_prepare_change, beleeg_look_up and the other siblings 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 concrete triggering questions ('what needs me this week?', 'am I behind on anything?'), states an explicit exclusion ('Leagues the person only plays in are left out'), and routes to the alternative: 'Nothing here is a change; use it to decide which change to prepare next.' When-to-use, when-not, and the follow-up tool are all present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
beleeg_prepare_changePrepare a changeAIdempotentInspect
PREPARE ONLY — nothing changes yet. Pick the change (action) and give its params. Beleeg checks the person may do it, previews exactly what would happen, and returns a plain summary plus a prepare_id that works for 10 minutes. Show the summary to the person and call beleeg_confirm_change with the prepare_id only after they agree. Some changes (a league-wide email, a money record) also need the person to press Approve in Beleeg: the reply says so and gives the link. Needs a token that allows changes. League ids come from beleeg_whoami; match ids from beleeg_look_up what "schedule". Every time a change takes (newTime, matchTime, time, sendAt) is the league's local time, never UTC; leave newTime out to keep the same time — the summary names the zone. If params are wrong, the reply lists exactly what the action takes.
action (params; ? = optional):
create_league: Create a league. Create a new league (and, when no organizationId is given, a new organization named after it) with a first season whose registration opens right away. params {name: text, sport: text, organizationId?: id, organizationName?: text, timezone?: text, city?: text, registrationClosesOn?: text, teams?: [text], inviteEmails?: [email]}
create_tournament: Create a tournament. params {name: text, leagueId?: id, organizationId?: id, format?: single_elim|single_elim_consolation|three_match_guarantee|double_elim|round_robin|pool_to_bracket, entrants?: [text], registrationUnit?: solo|pair, bestOf?: number, description?: text, startsOn?: text, endsOn?: text, priceCents?: number, events?: [{name: text, fieldCap?: number, priceCents?: number}]}
add_players: Add people to a league. Invite people to a league by email, up to 200 at a time. params {leagueId: id, players: [text | {email: email, name?: text, role?: player|captain|co_captain, teamId?: id}], role?: player|captain|co_captain, teamId?: id}
create_teams: Create teams. Create up to 64 teams in a league's current season, optionally placing each in a division (by division name or id). params {leagueId: id, teams: [text | {name: text, division?: text, divisionId?: id}], division?: text, divisionId?: id}
generate_schedule: Build the season schedule. Build a round-robin schedule for the league's current season: one match day per week starting on startDate, for
weeksweeks, at matchTime. params {leagueId: id, startDate: text, weeks: number, matchTime?: text, timezone?: text, skipDates?: [text]}reschedule_match: Move a match. Move one match (matchId), several (matchIds, up to 200), or every unplayed match in a league on a given day (leagueId + fromDate) to newDate, at newTime in the league's local time (leave it out to keep the same time). params {matchId?: id, matchIds?: [id], leagueId?: id, fromDate?: text, newDate: text, newTime?: text, venue?: text}
report_score: Record a score. Record the result of a match: a tournament result, or for a league match only the captain's UNOFFICIAL report (a league admin records the final score with enter_final_score). params {matchId: id, homeScore?: number, awayScore?: number, sideA?: [number], sideB?: [number], note?: text, reporter?: text}
send_announcement: Email the league. Email everyone in a league, or just the players or captains, optionally narrowed to one division or specific teams. params {leagueId: id, subject: text, body: text, audience?: all|players|captains, divisionId?: id, teamIds?: [id], sendAt?: text}
register_player: Register for a league. Register the CALLER as a player in a league whose registration is open. params {leagueId: id}
mark_paid: Mark a player as paid. Record that a league member paid their registration outside Beleeg (cash, check, Venmo) — it charges nobody. params {leagueId: id, userId?: id, email?: email, name?: text}
set_availability: Say who can play. Record whether someone can play a league match: "in", "out", or "maybe". params {leagueId: id, answer: in|out|maybe, matchId?: id, player?: text}
answer_match_checklist: Fill in the match checklist. Answer one thing on a match's checklist — the list the league keeps for every match ("Shot clock operator", "Bringing snacks", "Nets put away"). params {leagueId: id, item: text, answer?: text, clear?: true|false, matchId?: id, side?: text, player?: text}
update_venue_details: Fill in venue details. Save where a league plays and what players should know before they go: the street address, parking, how to find the courts or field, a phone number and a website. params {leagueId: id, venue: text, addressLine1?: text, addressLine2?: text, city?: text, region?: text, postalCode?: text, parkingNotes?: text, directionsNotes?: text, phone?: text, website?: text}
propose_match_time: Ask to move a match. A captain asks the other team to move a league match to a new date and time (and optionally a new place). params {leagueId: id, newDate: text, newTime?: text, matchId?: id, venue?: text, note?: text}
respond_match_proposal: Answer a request to move a match. Answer an open request to move a league match: "accept" or "decline" (the other team's captain, or a league admin when it waits for approval), or "withdraw" (the captain whose team asked). params {leagueId: id, answer: accept|decline|withdraw, matchId?: id, note?: text}
submit_team_score: Put in our team's score. A team captain or co-captain puts in their own team's score for a league match (or one of the two players in a one-on-one match). params {leagueId: id, ourScore?: number, theirScore?: number, homeScore?: number, awayScore?: number, matchId?: id}
respond_to_score: Answer the other team's score. A captain or co-captain answers the score the OTHER team put in: decision "confirm" (it's right — it then counts in the standings) or "dispute" (it's wrong — it goes to the league admins, who decide the final score; a reason is required, e.g. params {leagueId: id, decision: confirm|dispute, reason?: text, category?: score|lineup, matchId?: id}
message_team: Post in the team chat. Post a message in a team's chat, under the caller's own name — everyone on the team sees it. params {leagueId: id, message: text, team?: text}
remind_no_response: Remind the ones who haven't answered. A captain sends every player on their team who has not said whether they can play a match a notice in Beleeg asking them to answer. params {leagueId: id, matchId?: id}
set_lineup: Send our lineup. A team captain or co-captain sends the team's lineup for a match: who plays on which line (lines), or just who plays (players) in a sport without lines. params {leagueId: id, lines?: [{line: number, players: [text]}], players?: [text], matchId?: id}
postpone_matches: Postpone a day of matches. Rain-out: every unplayed match in the league on one day (date, default today in the league's time zone) moves to another day — a week later by default (shiftDays), or to toDate — keeping each start time. params {leagueId: id, date?: text, shiftDays?: number, toDate?: text, noNewDate?: true|false}
cancel_match: Call off matches. Call off (cancel) one unplayed match (matchId) or every unplayed match on a day (date). params {leagueId: id, matchId?: id, date?: text}
record_forfeit: Record a forfeit. Record that a team forfeited a league match: the other team gets the win and its points and the standings update. params {leagueId: id, team: text, matchId?: id, date?: text, note?: text}
resolve_score_dispute: Settle a score disagreement. A league admin settles a disputed score: give the final score (finalHome, finalAway — lines won, or goals/runs) or scoreStands:true to keep the score that was put in. params {leagueId: id, finalHome?: number, finalAway?: number, scoreStands?: true|false, note?: text, matchId?: id}
review_lineup: Approve a lineup. A league admin approves (or sends back) a lineup a captain sent. params {leagueId: id, decision: approve|reject, team?: text, matchId?: id}
nudge_score_answer: Chase a score confirmation. A league admin reminds the other team's captains to confirm a score one team put in (a notice in Beleeg). params {leagueId: id, team?: text, matchId?: id}
assign_captain: Make someone captain. Make a league member the captain of a team (replacing the current captain), or with role co_captain add them as a co-captain. params {leagueId: id, team: text, person: text, role?: captain|co_captain}
move_player: Move a player to another team. Put a league member on a team, taking them off any other team in this league. params {leagueId: id, person: text, team: text}
assign_referee: Assign a referee. Make a league referee the referee for one unplayed match. params {leagueId: id, referee: text, matchId?: id, date?: text, team?: text}
add_blackout_date: Block off days with no matches. Mark a day, or a run of days up to a month (date through endDate), as a day the league does not play (a holiday). params {leagueId: id, date: text, endDate?: text, reason?: text}
set_league_setting: Change a match-day setting. Change one of these league settings: arriveBefore (minutes early players should arrive, 0-180; "off" = 0), whatToWear (a short note shown on every match; "off" clears it), captainScheduling (who can move a match: "admins", "admin_approves", or… params {leagueId: id, setting: arriveBefore|whatToWear|captainScheduling|weatherAdvisories, value: text}
remind_unpaid: Remind whoever hasn't paid. Send every league member who has not paid the league's registration fee a friendly reminder (a notice in Beleeg pointing to the league page). params {leagueId: id}
direct_message: Send someone a message. Send one league member a private message in Beleeg, from the caller ("ask Tom if the courts are playable"). params {leagueId: id, person: text, message: text}
notification_prefs: Change my notifications. Change the caller's own notification settings: matchReminders, matchReminderHoursBefore (1 or 24), messageAlerts, leagueAnnouncements (emails from organizers), weeklyDigest, textMessages (can only be turned OFF here — turning texts on is done in the app),… params {matchReminders?: true|false, matchReminderHoursBefore?: number, messageAlerts?: true|false, leagueAnnouncements?: true|false, weeklyDigest?: true|false, textMessages?: true|false, quietHours?: true|false, quietStart?: text, quietEnd?: text}
team_dues: Team dues (the team kitty a captain collects — beer money, a shared fee). params {leagueId: id, task: record|remind, person?: text, paid?: true|false, amount?: text, note?: text, team?: text}
join_team: Join a team. The CALLER joins a league as a player on a named team ("put me on the Hawks"), when the league lets players pick their team, registration is open and public, the team has room, and the league has no fee (a league with a fee registers on its page, with… params {leagueId: id, team: text}
cancel_scheduled_email: Call off a scheduled email. Call off a league email that was set to go out later, before it goes. params {leagueId: id, subject?: text}
rollover_season: Start the next season. Start the league's next season from the current one: the current season is marked finished (its results and standings are kept as they are), a new season opens with sign-ups running until it starts, and the teams carry over with their names, colors, captains… params {leagueId: id, name: text, startsOn?: text, endsOn?: text, keepTeams?: true|false, keepPlayers?: true|false}
create_event: Add an event. Add a free social event (a party, a clinic, an awards night) to the league — or to the whole organization with wholeOrganization:true. params {leagueId: id, title: text, date: text, time: text, endTime?: text, location?: text, description?: text, capacity?: number, wholeOrganization?: true|false}
rsvp_event: Say if I am coming to an event. The CALLER says whether they are coming to an upcoming event: going, maybe, or cant (not going). params {leagueId: id, event?: text, answer: going|maybe|cant}
review_sponsor: Approve or decline a sponsor. Approve a sponsor application (their logo starts showing on the league's pages) or decline it. params {leagueId: id, sponsor: text, decision: approve|decline}
offer_waitlist_spot: Offer the next person on the waiting list a spot. When the league has an open spot, offer it to the next person on its waiting list; they get a notice in Beleeg to sign up soon (someone with no Beleeg account is not told automatically — the summary says so). params {leagueId: id}
follow_team: Follow a team. The CALLER follows a team in this league ("follow the Hawks"), so its games and results show with the other teams they follow. params {leagueId: id, team: text}
enter_final_score: Enter a final score. A league admin records the FINAL, official score of a league match: it counts in the standings straight away and nobody is asked to confirm it (a captain's own score goes through submit_team_score; report_score only files an unofficial report). params {matchId: id, homeScore: number, awayScore: number, replace?: true|false, note?: text, leagueId?: id}
ladder_challenge: Send a ladder challenge. Challenge a team or player above you on the league's ladder for their spot (a player for themself; for a team, its captain — or any player where the league lets members play the ladder). params {leagueId: id, opponent: text, date?: text, time?: text, venue?: text}
ladder_respond: Answer a ladder challenge waiting on the person (their own spot, or their team's as its captain): "accept" or "decline". params {leagueId: id, answer: accept|decline, challenger?: text, date?: text, time?: text, venue?: text}
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | The change to prepare. Every value is listed, with its params, in the tool description. | |
| params | No | The params for that action, exactly as listed for it in the description (camelCase keys, e.g. leagueId). |
Output Schema
| Name | Required | Description |
|---|---|---|
| action | Yes | |
| changes | Yes | Structured preview of the same (counts, names, before/after). |
| summary | Yes | Plain-language description of exactly what confirming will do. Show it to the person. |
| expires_at | Yes | ISO 8601 timestamp; the prepare_id stops working after this (10 minutes). |
| prepare_id | Yes | Pass to beleeg_confirm_change once the person agrees. |
| approve_url | No | Where the person approves. Give it to them exactly as written; never build one yourself. |
| approval_required | No | True for changes that cannot be taken back (a league-wide email, a money record, a card payment). Beleeg will refuse the confirm until the person approves it in Beleeg itself. Your own confirmation is not enough and cannot substitute. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare non-read-only/non-destructive/idempotent, and the description reinforces and extends them: prepare_id TTL ('works for 10 minutes'), the auth requirement ('Needs a token that allows changes'), the out-of-band Approve step for some actions, and explicit error behavior ('the reply lists exactly what the action takes'). None of that is in the structured fields.
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?
Very long, but the length is largely earned: it is a 46-action dispatcher whose params are documented nowhere else, and it is front-loaded with the PREPARE-ONLY constraint and the confirm workflow before the catalog. A few per-action blurbs drift into edge-case prose, so it is not maximally tight, but there is little pure 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?
For a complex dispatcher with an output schema, the description covers everything an agent needs to call it correctly: the prepare/confirm contract, TTL, auth, approval fallbacks, time-zone rules, id sources, and per-action param shapes. Return values are handled by the output schema and are not redundantly re-explained.
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?
The schema is a generic dispatcher (action enum + free-form params object), so the description carries the entire parameter burden and does so exhaustively, listing every action's params, optionality, types, and per-field semantics (e.g. newTime is league-local, never UTC; leave it out to keep the same time). This adds far more than the schema provides.
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?
Opens with a specific, unambiguous verb+resource+scope: 'PREPARE ONLY — nothing changes yet. Pick the change (action) and give its params.' It distinguishes itself from the sibling that actually commits the change by name (beleeg_confirm_change) and states exactly what it produces (a summary plus a prepare_id). An agent can tell this apart from confirm/cancel without opening any 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?
Explicit when/when-not and sequencing: 'call beleeg_confirm_change with the prepare_id only after they agree', plus the additional approval condition for sensitive actions (league-wide email, money record). It also names the sibling tools that supply required ids (beleeg_whoami for league ids, beleeg_look_up for match ids), which is real routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
beleeg_retry_deliverySend it again after an interrupted sendAIdempotentInspect
Try the sending step again for a change that was already made but whose emails or payment link did not finish going out. Use it when a confirm or beleeg_look_up(what: "my_changes") reports delivery_failed or delivery_unknown. It is safe: nobody can be emailed twice for the same request, so running it after an uncertain outcome is the right move rather than a risk. It does NOT redo the change itself, only the sending. Gives up after three attempts and tells the person to send it from the Beleeg site instead. Needs a token that allows changes.
| Name | Required | Description | Default |
|---|---|---|---|
| prepare_id | Yes | The prepare_id whose email or payment step needs another attempt. |
Output Schema
| Name | Required | Description |
|---|---|---|
| done | Yes | |
| action | Yes | |
| attempt | No | |
| delivery | No | |
| prepare_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare idempotentHint=true and destructiveHint=false, and the description reinforces and extends this with a concrete safety guarantee ('nobody can be emailed twice for the same request'), a bounded retry policy (gives up after three attempts), a fallback path, and an auth requirement ('needs a token that allows changes'). This is substantial context beyond the structured fields.
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?
Front-loaded with the core action, then usage trigger, safety, retry limits, and auth needs. Six sentences is slightly long, but each carries distinct information and none is redundant with annotations or schema.
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?
Given an output schema exists and annotations cover the safety profile, the description fills the remaining gaps: trigger conditions, retry ceiling, fallback behavior, and permission requirement. An agent has everything needed to invoke it 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% for the single prepare_id parameter, and the schema already explains it is the prepare_id whose email or payment step needs another attempt. The description adds no syntax or format detail beyond what the schema provides, so the baseline of 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?
The description states a specific verb ('try the sending step again') and a precise resource scope ('a change that was already made but whose emails or payment link did not finish going out'), and explicitly differentiates from the change itself ('does NOT redo the change itself, only the sending'). An agent can distinguish this from beleeg_confirm_change and beleeg_prepare_change immediately.
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 names the exact trigger condition: use it when a confirm or beleeg_look_up(what: "my_changes") reports delivery_failed or delivery_unknown. It also gives a when-not (don't use it to redo the change) and states the alternative fallback (send from the Beleeg site after three failures).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
beleeg_send_feedbackTell Beleeg what was missingAInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| tool | No | The tool that fell short, if one did. | |
| message | Yes | 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 | No | What the person was trying to get done, e.g. "move all of Saturday's games to Sunday". |
Output Schema
| Name | Required | Description |
|---|---|---|
| received | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare this is a non-read, non-idempotent, non-destructive write. The description adds meaningful behavior beyond that: the Beleeg team reads submissions to prioritize work, nothing happens automatically, no one replies, and personal details (names, emails, phone numbers) must never be included. It does not mention any rate limits or what the call returns, but the privacy prohibition and no-reply semantics are substantive added context.
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?
The trigger condition is front-loaded in the first sentence and each subsequent sentence carries a distinct constraint (attribution, privacy, no-reply escalation back to the user). The final sentence is long and packs three ideas, but none of it is filler for a tool with this much policy attached.
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 no explanation, and the description covers triggers, required content, privacy rules, and the expectation of no follow-up. The three parameters are all documented in-schema. What remains thin is what happens after submission beyond 'the team reads these,' but that is minor for a fire-and-forget feedback tool.
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% and each parameter already carries a description and example (e.g. trying_to's "move all of Saturday's games to Sunday"). The description's 'Say what they wanted and, if one did, which tool fell short' essentially restates the schema fields at a high level, adding intent framing but no new format or constraint detail.
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 states a specific verb and resource ('Send Beleeg a note') and defines the exact triggering conditions: the assistant cannot do something the person asked for, a tool was confusing, or a wrong answer was given. Siblings (look up, start league, start tournament) are functionally unrelated, so no disambiguation is needed and none is missed.
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 explicit when-to-use conditions and an important counter-instruction: because nothing is done automatically and nobody replies, the agent must still tell the person what could not be done and, where possible, point them to where in Beleeg they can do it themselves. This is exactly the routing decision an agent needs and is not inferable elsewhere.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
beleeg_start_leagueStart a league (no account needed)AInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | Town or city, shown on the public page. | |
| name | Yes | League name, plain text, for example "Tuesday Night Pickleball". | |
| sport | Yes | Sport key, for example pickleball, platform-tennis, tennis, softball, volleyball. | |
| teams | No | Team names to create right away (up to 64). | |
| client | No | Which assistant this is, for example muse, claude, chatgpt, cursor. | |
| timezone | Yes | IANA time zone the league plays in, for example America/Chicago. | |
| inviteEmails | No | 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. | |
| organizerEmail | Yes | The organizer's own email address. They sign in with it to take over the league. Ask for it; never guess. | |
| organizationName | No | Club or group name. Defaults to the league name. | |
| registrationClosesOn | No | Last day to register, YYYY-MM-DD. Defaults to 30 days from today. |
Output Schema
| Name | Required | Description |
|---|---|---|
| name | Yes | |
| slug | Yes | |
| teams | Yes | |
| claim_url | Yes | Give this to the organizer: it explains how to take over the league. |
| league_id | Yes | |
| public_url | Yes | 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. |
| invites_pending | Yes | Invites saved but NOT sent. |
| organization_id | Yes | |
| organizer_email | Yes | |
| claim_instructions | Yes | Read this to the person. |
| unclaimed_expires_on | Yes | If the organizer has not signed in and kept the league by this date, it is removed. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only cover the safety profile (readOnly=false, openWorld=false, idempotent=false, destructive=false). The description adds substantial behavioral context the annotations cannot convey: the claim_url/is-it-theirs ownership flow, that sign-in alone does not transfer ownership, that invites stay unsent until the organizer keeps the league, the 30-day removal, and concrete rate limits (3/organizer/day, 5/caller/day, 3 pending).
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?
Front-loaded with purpose and claim mechanics, and almost every sentence carries operational value (claim_url handling, limits, dedup rule, confirmation requirement). Slight redundancy: ownership is restated ('Signing in alone does not make it theirs' vs 'it is theirs only once they keep it'), and the keep/discard flow is mentioned twice.
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?
Given an output schema exists, return-value detail is not required, and the description still covers the full operational picture: creation side effects, ownership/claim flow, invite deferral, expiry, rate limits, and the mandatory confirmation step. Nothing an agent needs to invoke it 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 all ten parameters are already documented in the schema, setting the baseline at 3. The description reinforces a few constraints (organizer email must be asked for and never guessed, team-name capitalization/spacing normalization) but adds little parameter detail beyond what the schema already states.
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 ('Creates a real league on Beleeg right away') with a clear scope qualifier: for someone without a Beleeg account. This cleanly separates it from the sibling prepare_create_league / prepare_* family, which only stage actions.
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 explicit when-to-use ('someone who does not have a Beleeg account yet'), prerequisites (ask for the email, never guess), and a required pre-call step ('Tell the person what you are about to create and get a yes BEFORE calling this; there is no separate confirm step'), plus fallback behavior when Beleeg refuses.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
beleeg_start_tournamentStart a tournament bracket (no account needed)AInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Tournament name, plain text. | |
| bestOf | No | Sets per match, 1 to 9. Defaults to 3. | |
| client | No | Which assistant this is, for example muse, claude, chatgpt, cursor. | |
| format | No | Bracket format. Defaults to single_elim. | |
| entrants | Yes | 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). | |
| organizerEmail | Yes | The organizer's own email address. They sign in with it to run the bracket. Ask for it; never guess. | |
| registrationUnit | No | solo (default) or pair (doubles). |
Output Schema
| Name | Required | Description |
|---|---|---|
| name | Yes | |
| format | Yes | |
| entrants | Yes | |
| claim_url | Yes | Give this to the organizer: it explains how to run the bracket. |
| public_url | Yes | 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. |
| tournament_id | Yes | |
| organizer_email | Yes | |
| claim_instructions | Yes | Read this to the person. |
| unclaimed_expires_on | No | If the organizer has not signed in and kept the bracket by this date, it is removed. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations, the description discloses important behavior: the bracket is held for the organizer until they claim it, signing in alone is insufficient, nobody else can see entrants until it is kept, and unclaimed brackets are removed after 30 days. It also states concrete limits: up to 64 entrants (32 for round robin), 3 per organizer email per day, 5 per caller per day, and at most 3 waiting leagues or brackets. It does not contradict the annotations.
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?
The description is long but front-loaded: it states the core action first, then the claim process, visibility rules, retention, limits, and pre-call confirmation. Every sentence carries operational information needed to avoid mistakes, and there is no redundant filler. The density is justified by the complexity of the tool.
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?
Given the tool's complexity and the existence of an output schema, the description covers the missing behavioral context thoroughly: accountless creation, claim flow, visibility, retention, rate limits, and confirmation requirements. It does not need to explain return values because an output schema is present. An agent has enough information to invoke the tool correctly and guide the user afterward.
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 schema already documents all seven parameters, including entrants, format, bestOf, and organizerEmail. The description reinforces a few constraints, such as entrant limits and pair naming, but adds no parameter syntax or meaning beyond what the schema provides. With full schema coverage, the baseline score of 3 is appropriate.
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 and resource: 'Creates a real standalone tournament bracket on Beleeg.' It immediately distinguishes the tool from a league-creation sibling by stating the bracket 'is never attached to an existing league or organization.' It also clarifies the no-account use case, so an agent can tell what this tool does without opening the 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?
The description clearly defines the usage context: for someone without a Beleeg account, creating a standalone bracket rather than one attached to a league or organization. It also gives workflow guidance such as asking for the organizer's email, never guessing it, and getting a yes before calling. However, it does not explicitly name an alternative sibling tool such as beleeg_start_league, so it stops short of the full when-to-use-vs-alternative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
beleeg_whoamiWho you are acting for, and what you may doARead-onlyIdempotentInspect
START HERE in a new conversation. One call tells you who this connection belongs to, every league they are in with the league_id and the roles they hold there, the time zone each league keeps its schedule in, and whether this person may make changes in that league — with the reason in plain words when they may not. It also says whether this connection is allowed to change anything at all, so you can tell someone their token is look-up-only before you waste their time preparing something. Use it instead of guessing a league from a name, and instead of discovering a permission by being refused. For a league the person is NOT in, use beleeg_look_up(what: "search_leagues").
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| me | Yes | |
| leagues | Yes | |
| can_make_changes | Yes | Whether THIS connection was given permission to change anything. A look-up-only token is false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so safety is covered; the description adds real value by disclosing the return payload (identity, leagues, roles, time zones, per-league permission plus plain-word reason) and the token's overall write capability. It stops short of format/shape details, which the output schema presumably carries.
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?
Front-loaded with the actionable 'START HERE' imperative and the payload contents, then closes with the alternative routing. It runs a bit long and lists its returns in an embedded clause, but every sentence carries distinct information.
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?
Given an output schema exists, the description need not explain the return shape, yet it still summarizes what comes back and what the permission fields mean. Combined with annotations covering the read-only profile, an agent has everything needed to call it correctly first.
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?
The tool takes zero parameters, so there is nothing for the description to disambiguate; baseline for no-params tools applies. The only parameter-like detail is the cross-reference to beleeg_look_up(what: "search_leagues"), which aids routing rather than this tool's inputs.
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 ('tells you who this connection belongs to') with enumerated scope: leagues, league_id, roles, time zones, and change permission with reasons. An agent can immediately distinguish this identity/permission bootstrap from siblings like beleeg_look_up or beleeg_needs_me.
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?
Explicitly says 'START HERE in a new conversation' and gives the discover-by-refusal anti-pattern it replaces. It also names the exact alternative and condition for a different case: 'For a league the person is NOT in, use beleeg_look_up(what: "search_leagues")'.
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.
2 tool updates
- Added
beleeg_start_league - Added
beleeg_start_tournament
2 tool updates
- Removed
beleeg_start_league - Removed
beleeg_start_tournament
2 tool updates
- Added
beleeg_start_league - Added
beleeg_start_tournament
2 tool updates
- Removed
beleeg_start_league - Removed
beleeg_start_tournament
2 tool updates
- Changed
beleeg_look_up2 fields changed- changed
Input schema / properties / league_id / descriptionPrevious value: -"The league id, from beleeg_whoami or what \"my_leagues\" (what \"search_leagues\" for a league the person is not in). Used with what: league_brief, standings, schedule, divisions, seasons, makeup_options, teams, members, my_team_assignment, unpaid_members, tournaments, comms_status, articles, match_availability, match_checklist, head_to_head, match_venue, match_proposals, standings_form, open_disputes, player_stats, team_dues_status, scheduled_emails, referee_availability, events, sponsors, store, waitlist."New value: +"The league id, from beleeg_whoami or what \"my_leagues\" (what \"search_leagues\" for a league the person is not in). Used with what: league_brief, standings, schedule, divisions, seasons, makeup_options, teams, members, my_team_assignment, unpaid_members, tournaments, comms_status, articles, match_availability, match_checklist, head_to_head, match_venue, match_proposals, standings_form, open_disputes, player_stats, team_dues_status, scheduled_emails, referee_availability, events, sponsors, store, waitlist, ladder." - changed
Input schema / properties / what / enumPrevious value: -[ - "my_leagues", - "league_brief", - "search_leagues", - "standings", - "schedule", - "divisions", - "seasons", - "makeup_options", - "teams", - "members", - "my_team_assignment", - "unpaid_members", - "tournaments", - "tournament_draws", - "tournament_court_schedule", - "team_chat", - "comms_status", - "articles", - "article_comments", - "tournament_photos", - "tournament_highlights", - "highlight_comments", - "referee_assignments", - "my_referee_alerts", - "my_availability", - "demo_league", - "match_availability", - "match_checklist", - "head_to_head", - "match_venue", - "calendar_link", - "match_proposals", - "standings_form", - "find_team", - "open_disputes", - "player_stats", - "team_dues_status", - "scheduled_emails", - "referee_availability", - "events", - "sponsors", - "store", - "waitlist", - "my_changes" -]New value: +[ + "my_leagues", + "league_brief", + "search_leagues", + "standings", + "schedule", + "divisions", + "seasons", + "makeup_options", + "teams", + "members", + "my_team_assignment", + "unpaid_members", + "tournaments", + "tournament_draws", + "tournament_court_schedule", + "team_chat", + "comms_status", + "articles", + "article_comments", + "tournament_photos", + "tournament_highlights", + "highlight_comments", + "referee_assignments", + "my_referee_alerts", + "my_availability", + "demo_league", + "match_availability", + "match_checklist", + "head_to_head", + "match_venue", + "calendar_link", + "match_proposals", + "standings_form", + "find_team", + "open_disputes", + "player_stats", + "team_dues_status", + "scheduled_emails", + "referee_availability", + "events", + "sponsors", + "store", + "waitlist", + "ladder", + "my_changes" +]
- Changed
beleeg_prepare_change1 field changed- changed
Input schema / properties / action / enumPrevious value: -[ - "create_league", - "create_tournament", - "add_players", - "create_teams", - "generate_schedule", - "reschedule_match", - "report_score", - "send_announcement", - "register_player", - "mark_paid", - "set_availability", - "answer_match_checklist", - "update_venue_details", - "propose_match_time", - "respond_match_proposal", - "submit_team_score", - "respond_to_score", - "message_team", - "remind_no_response", - "set_lineup", - "postpone_matches", - "cancel_match", - "record_forfeit", - "resolve_score_dispute", - "review_lineup", - "nudge_score_answer", - "assign_captain", - "move_player", - "assign_referee", - "add_blackout_date", - "set_league_setting", - "remind_unpaid", - "direct_message", - "notification_prefs", - "team_dues", - "join_team", - "cancel_scheduled_email", - "rollover_season", - "create_event", - "rsvp_event", - "review_sponsor", - "offer_waitlist_spot", - "follow_team", - "enter_final_score" -]New value: +[ + "create_league", + "create_tournament", + "add_players", + "create_teams", + "generate_schedule", + "reschedule_match", + "report_score", + "send_announcement", + "register_player", + "mark_paid", + "set_availability", + "answer_match_checklist", + "update_venue_details", + "propose_match_time", + "respond_match_proposal", + "submit_team_score", + "respond_to_score", + "message_team", + "remind_no_response", + "set_lineup", + "postpone_matches", + "cancel_match", + "record_forfeit", + "resolve_score_dispute", + "review_lineup", + "nudge_score_answer", + "assign_captain", + "move_player", + "assign_referee", + "add_blackout_date", + "set_league_setting", + "remind_unpaid", + "direct_message", + "notification_prefs", + "team_dues", + "join_team", + "cancel_scheduled_email", + "rollover_season", + "create_event", + "rsvp_event", + "review_sponsor", + "offer_waitlist_spot", + "follow_team", + "enter_final_score", + "ladder_challenge", + "ladder_respond" +]
1 tool update
- Changed
beleeg_start_tournament1 field changed- changed
Input schema / properties / format / enumPrevious value: -[ - "single_elim", - "single_elim_consolation", - "three_match_guarantee", - "round_robin", - "pool_to_bracket" -]New value: +[ + "single_elim", + "single_elim_consolation", + "three_match_guarantee", + "double_elim", + "round_robin", + "pool_to_bracket" +]
2 tool updates
- Added
beleeg_start_league - Added
beleeg_start_tournament
2 tool updates
- Removed
beleeg_start_league - Removed
beleeg_start_tournament
104 tool updates
- Removed
beleeg_agent_context - Removed
beleeg_calendar_link - Removed
beleeg_cancel_action - Added
beleeg_cancel_change - Removed
beleeg_confirm_action - Added
beleeg_confirm_change - Removed
beleeg_events - Removed
beleeg_find_team - Removed
beleeg_find_unpaid - Removed
beleeg_get_league_brief - Removed
beleeg_get_my_referee_notification_prefs - Removed
beleeg_get_my_team_assignment - Removed
beleeg_get_public_league - Removed
beleeg_get_public_match - Removed
beleeg_get_public_team - Removed
beleeg_get_public_tournament - Removed
beleeg_get_schedule - Removed
beleeg_get_standings - Removed
beleeg_head_to_head - Removed
beleeg_list_agent_actions - Removed
beleeg_list_article_comments - Removed
beleeg_list_highlight_comments - Removed
beleeg_list_league_communications - Removed
beleeg_list_league_divisions - Removed
beleeg_list_league_members - Removed
beleeg_list_league_seasons - Removed
beleeg_list_league_teams - Removed
beleeg_list_my_availability - Removed
beleeg_list_my_leagues - Removed
beleeg_list_public_tournaments_by_league - Removed
beleeg_list_published_articles - Removed
beleeg_list_referee_tournament_assignments - Removed
beleeg_list_team_chat_messages - Removed
beleeg_list_tournament_court_schedule - Removed
beleeg_list_tournament_draws - Removed
beleeg_list_tournament_highlights - Removed
beleeg_list_tournament_photos - Removed
beleeg_list_tournaments - Added
beleeg_look_up - Added
beleeg_look_up_public - Removed
beleeg_makeup_options - Removed
beleeg_match_availability - Removed
beleeg_match_checklist - Removed
beleeg_match_proposals - Removed
beleeg_match_venue - Added
beleeg_needs_me - Removed
beleeg_open_disputes - Removed
beleeg_player_stats - Removed
beleeg_prepare_add_blackout_date - Removed
beleeg_prepare_add_players - Removed
beleeg_prepare_answer_match_checklist - Removed
beleeg_prepare_assign_captain - Removed
beleeg_prepare_assign_referee - Removed
beleeg_prepare_cancel_match - Removed
beleeg_prepare_cancel_scheduled_email - Added
beleeg_prepare_change - Removed
beleeg_prepare_create_event - Removed
beleeg_prepare_create_league - Removed
beleeg_prepare_create_teams - Removed
beleeg_prepare_create_tournament - Removed
beleeg_prepare_direct_message - Removed
beleeg_prepare_follow_team - Removed
beleeg_prepare_generate_schedule - Removed
beleeg_prepare_join_team - Removed
beleeg_prepare_mark_paid - Removed
beleeg_prepare_message_team - Removed
beleeg_prepare_move_player - Removed
beleeg_prepare_notification_prefs - Removed
beleeg_prepare_nudge_score_answer - Removed
beleeg_prepare_offer_waitlist_spot - Removed
beleeg_prepare_postpone_matches - Removed
beleeg_prepare_propose_match_time - Removed
beleeg_prepare_record_forfeit - Removed
beleeg_prepare_register_player - Removed
beleeg_prepare_remind_no_response - Removed
beleeg_prepare_remind_unpaid - Removed
beleeg_prepare_report_score - Removed
beleeg_prepare_reschedule_match - Removed
beleeg_prepare_resolve_score_dispute - Removed
beleeg_prepare_respond_match_proposal - Removed
beleeg_prepare_respond_to_score - Removed
beleeg_prepare_review_lineup - Removed
beleeg_prepare_review_sponsor - Removed
beleeg_prepare_rollover_season - Removed
beleeg_prepare_rsvp_event - Removed
beleeg_prepare_send_announcement - Removed
beleeg_prepare_set_availability - Removed
beleeg_prepare_set_league_setting - Removed
beleeg_prepare_set_lineup - Removed
beleeg_prepare_submit_team_score - Removed
beleeg_prepare_team_dues - Removed
beleeg_prepare_update_venue_details - Removed
beleeg_referee_availability - Removed
beleeg_scheduled_emails - Removed
beleeg_search_leagues - Added
beleeg_send_feedback - Removed
beleeg_sponsors - Removed
beleeg_standings_form - Removed
beleeg_store - Removed
beleeg_team_dues_status - Removed
beleeg_view_demo_league_summary - Removed
beleeg_waitlist - Removed
beleeg_whats_waiting - Added
beleeg_whoami
99 tool updates
- First observed
beleeg_agent_context - First observed
beleeg_calendar_link - First observed
beleeg_cancel_action - First observed
beleeg_confirm_action - First observed
beleeg_events - First observed
beleeg_find_team - First observed
beleeg_find_unpaid - First observed
beleeg_get_league_brief - First observed
beleeg_get_my_referee_notification_prefs - First observed
beleeg_get_my_team_assignment - First observed
beleeg_get_public_league - First observed
beleeg_get_public_match - First observed
beleeg_get_public_team - First observed
beleeg_get_public_tournament - First observed
beleeg_get_schedule - First observed
beleeg_get_standings - First observed
beleeg_head_to_head - First observed
beleeg_list_agent_actions - First observed
beleeg_list_article_comments - First observed
beleeg_list_highlight_comments - First observed
beleeg_list_league_communications - First observed
beleeg_list_league_divisions - First observed
beleeg_list_league_members - First observed
beleeg_list_league_seasons - First observed
beleeg_list_league_teams - First observed
beleeg_list_my_availability - First observed
beleeg_list_my_leagues - First observed
beleeg_list_public_tournaments_by_league - First observed
beleeg_list_published_articles - First observed
beleeg_list_referee_tournament_assignments - First observed
beleeg_list_team_chat_messages - First observed
beleeg_list_tournament_court_schedule - First observed
beleeg_list_tournament_draws - First observed
beleeg_list_tournament_highlights - First observed
beleeg_list_tournament_photos - First observed
beleeg_list_tournaments - First observed
beleeg_makeup_options - First observed
beleeg_match_availability - First observed
beleeg_match_checklist - First observed
beleeg_match_proposals - First observed
beleeg_match_venue - First observed
beleeg_open_disputes - First observed
beleeg_player_stats - First observed
beleeg_prepare_add_blackout_date - First observed
beleeg_prepare_add_players - First observed
beleeg_prepare_answer_match_checklist - First observed
beleeg_prepare_assign_captain - First observed
beleeg_prepare_assign_referee - First observed
beleeg_prepare_cancel_match - First observed
beleeg_prepare_cancel_scheduled_email - First observed
beleeg_prepare_create_event - First observed
beleeg_prepare_create_league - First observed
beleeg_prepare_create_teams - First observed
beleeg_prepare_create_tournament - First observed
beleeg_prepare_direct_message - First observed
beleeg_prepare_follow_team - First observed
beleeg_prepare_generate_schedule - First observed
beleeg_prepare_join_team - First observed
beleeg_prepare_mark_paid - First observed
beleeg_prepare_message_team - First observed
beleeg_prepare_move_player - First observed
beleeg_prepare_notification_prefs - First observed
beleeg_prepare_nudge_score_answer - First observed
beleeg_prepare_offer_waitlist_spot - First observed
beleeg_prepare_postpone_matches - First observed
beleeg_prepare_propose_match_time - First observed
beleeg_prepare_record_forfeit - First observed
beleeg_prepare_register_player - First observed
beleeg_prepare_remind_no_response - First observed
beleeg_prepare_remind_unpaid - First observed
beleeg_prepare_report_score - First observed
beleeg_prepare_reschedule_match - First observed
beleeg_prepare_resolve_score_dispute - First observed
beleeg_prepare_respond_match_proposal - First observed
beleeg_prepare_respond_to_score - First observed
beleeg_prepare_review_lineup - First observed
beleeg_prepare_review_sponsor - First observed
beleeg_prepare_rollover_season - First observed
beleeg_prepare_rsvp_event - First observed
beleeg_prepare_send_announcement - First observed
beleeg_prepare_set_availability - First observed
beleeg_prepare_set_league_setting - First observed
beleeg_prepare_set_lineup - First observed
beleeg_prepare_submit_team_score - First observed
beleeg_prepare_team_dues - First observed
beleeg_prepare_update_venue_details - First observed
beleeg_referee_availability - First observed
beleeg_retry_delivery - First observed
beleeg_scheduled_emails - First observed
beleeg_search_leagues - First observed
beleeg_sponsors - First observed
beleeg_standings_form - First observed
beleeg_start_league - First observed
beleeg_start_tournament - First observed
beleeg_store - First observed
beleeg_team_dues_status - First observed
beleeg_view_demo_league_summary - First observed
beleeg_waitlist - First observed
beleeg_whats_waiting
Publisher details
- Operator
- Beleeg
- Operator website
- https://beleeg.com
- Vendor relationship
- First-party
- Documentation
- https://beleeg.com/mcp
- Trust center
- https://beleeg.com/security
- Restrictions
- Needs a free Beleeg account and a connection token from beleeg.com/account (Apps and assistants), either look-up-only or look-up-and-change. Changes are shown to the person to approve first, and a few (emailing a league, recording payments) must also be approved inside Beleeg. No paid plan needed.
Related MCP Connectors
Run racket-sport tournaments from your AI assistant: fair draws, scores, live standings.
Public league standings, schedules and brackets; start a league or bracket with no account.
Live sports stats and pre-computed analysis for AI assistants across NBA, MLB, NFL, and NHL.
Round-robin fixtures, standings and match-day plans for league organizers. Free.
Related MCP Servers
- AlicenseAqualityCmaintenanceProvides AI assistants with commissioner-focused tools for fantasy sports leagues, enabling league overviews, standings, transactions, recaps, and manager activity across providers like Yahoo Fantasy.1MIT
- 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.MIT
- AlicenseNot gradedqualityBmaintenanceConnect ESPN & Yahoo fantasy leagues to AI assistants via MCP. Read-only tools for rosters, standings, matchups, free agents, and league info across football and baseball.23MIT
- AlicenseAqualityAmaintenanceEnables AI clients to read and write ESPN fantasy sports leagues using your own session cookies, including managing rosters, lineups, waiver claims, and free agent adds without a browser.171MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.