Ce que fait ce MCP
Creates and operates racket-sport tournaments, including player rosters, draws, schedules, scores, standings, results, exports, and printable documents.
Outils
Schéma d’entrée
{'type': 'object', 'required': ['tournament_key', 'players'], 'properties': {'players': {'type': 'array', 'items': {'type': 'object', 'required': ['name'], 'properties': {'name': {'type': 'string', 'maxLength': 120}, 'level': {'type': 'number', 'maximum': 10000, 'minimum': -10000, 'description': 'Any consistent numeric level/rating â\x80\x94 used only for seeding and balancing'}, 'gender': {'enum': ['m', 'f', 'x'], 'type': 'string'}}}, 'maxItems': 128, 'minItems': 1}, 'request_id': {'type': 'string', 'maxLength': 64, 'description': 'Optional idempotency id â\x80\x94 retrying a call with the same id never applies it twice'}, 'tournament_key': {'type': 'string', 'description': "The tournament's organiser key (starts with tk_)"}}}
Schéma de sortie
{'type': 'object', 'required': ['players_total', 'added', 'summary'], 'properties': {'added': {'type': 'array', 'items': {'type': 'string'}}, 'preview': {'type': 'boolean', 'description': 'True when this is a preview â\x80\x94 nothing was changed'}, 'summary': {'type': 'string', 'description': 'What happened, in one line'}, 'players_total': {'type': 'number'}}, 'additionalProperties': False}
Schéma d’entrée
{'type': 'object', 'required': ['sport'], 'properties': {'name': {'type': 'string', 'maxLength': 120, 'description': "Defaults to '<Sport> tournament 14 Aug 2026 (<location>)' â\x80\x94 start date (or today) plus the location when known"}, 'pairs': {'type': 'array', 'items': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 2, 'minItems': 2}, 'description': 'Doubles: fixed pairs as [name, name] arrays. Omit to auto-pair.'}, 'sport': {'enum': ['tennis', 'padel', 'pickleball', 'badminton', 'squash', 'table_tennis'], 'type': 'string', 'description': "Write sport names to the organiser in words â\x80\x94 'table tennis', never the enum spelling 'table_tennis'."}, 'courts': {'type': 'integer', 'maximum': 16, 'minimum': 1, 'description': 'Default 2'}, 'format': {'enum': ['round_robin', 'groups_playoff', 'single_elimination', 'americano', 'mexicano'], 'type': 'string', 'description': "Tournament format. round_robin: everyone plays everyone. groups_playoff: round-robin groups then a knockout. single_elimination: knockout with byes. americano/mexicano: rotating-partner doubles, points per round (mexicano pairs each round from standings). OMIT when the organiser hasn't clearly chosen â\x80\x94 the call then returns a menu of explained options to show them instead of creating anything."}, 'rounds': {'type': 'integer', 'maximum': 30, 'minimum': 1, 'description': 'Americano/mexicano; default from player count'}, 'players': {'type': 'array', 'items': {'type': 'object', 'required': ['name'], 'properties': {'name': {'type': 'string', 'maxLength': 120}, 'level': {'type': 'number', 'maximum': 10000, 'minimum': -10000, 'description': 'Any consistent numeric level/rating â\x80\x94 used only for seeding and balancing'}, 'gender': {'enum': ['m', 'f', 'x'], 'type': 'string'}}}, 'maxItems': 128}, 'seeding': {'enum': ['random', 'level'], 'type': 'string', 'description': 'Default random'}, 'language': {'enum': ['en', 'bg', 'hr', 'cs', 'da', 'nl', 'et', 'fi', 'fr', 'de', 'el', 'hu', 'it', 'lv', 'lt', 'nb', 'pl', 'ro', 'sk', 'sl', 'sv', 'uk', 'es', 'pt', 'ar', 'bn', 'zh', 'hi', 'id', 'ja', 'ko', 'ru', 'tr', 'ur', 'vi'], 'type': 'string', 'description': 'Language of the tournament page, PDFs and player emails (ISO 639-1). Default en; set it to the language the organiser is writing in when it is in this list.'}, 'location': {'type': 'string', 'maxLength': 160, 'description': 'Venue/location shown to players on the page, e.g. club name + city'}, 'discipline': {'enum': ['singles', 'doubles'], 'type': 'string', 'description': 'Ask the organiser â\x80\x94 never infer it from the sport. Americano/mexicano are always doubles. Defaults to singles for the bracket formats when they truly have no preference.'}, 'signup_cap': {'type': 'integer', 'maximum': 128, 'minimum': 4, 'description': 'Signup limit; beyond it players join a waitlist'}, 'start_time': {'type': 'string', 'description': 'ISO datetime with offset, e.g. 2026-08-01T18:00:00+03:00. Must be within 365 days from today.'}, 'court_names': {'type': 'array', 'items': {'type': 'string', 'maxLength': 60}, 'maxItems': 16}, 'group_count': {'type': 'integer', 'maximum': 8, 'minimum': 2}, 'house_rules': {'type': 'array', 'items': {'type': 'string', 'maxLength': 200}, 'maxItems': 12, 'description': "Organiser's house rules, shown on the tournament page (e.g. 'Golden point at deuce')"}, 'level_scale': {'enum': ['absolute', 'by_group', 'ignore'], 'type': 'string', 'description': 'How to read the numbers in `level`. absolute (default): one shared scale, a 3 is a 3 whoever holds it. by_group: men and women were each rated within their own group, so the numbers are not directly comparable â\x80\x94 ask the organiser which they did rather than guessing. ignore: the numbers are notes, never used for the draw.'}, 'signup_open': {'type': 'boolean', 'description': 'Open self-signup: players add themselves on the shared page (name-only or signed in). Offer this when the organiser has no player list yet.'}, 'level_offset': {'type': 'number', 'maximum': 1000, 'minimum': 0, 'description': "by_group only: how much stronger an m is than an f carrying the SAME number, in the organiser's own level units. Default 1 â\x80\x94 a starting point to adjust, not a fact. Used for balancing only; never shown on the page or in standings."}, 'break_minutes': {'type': 'integer', 'maximum': 60, 'minimum': 0, 'description': 'Changeover between matches/rounds, shown separately from play time (default 0)'}, 'level_gap_cap': {'type': 'number', 'maximum': 1000, 'minimum': 0, 'description': 'Opt-in: the largest level gap the organiser wants between opponents, in their own level units. Soft â\x80\x94 the draw prefers to respect it and reports when it cannot. Pass 0 to clear.'}, 'gender_balance': {'enum': ['prefer_symmetric', 'off'], 'type': 'string', 'description': 'Americano/mexicano: prefer matches where both teams have the same make-up (MM v MM, MW v MW, WW v WW). Default prefer_symmetric. A preference, not a rule â\x80\x94 an uneven field cannot supply it, and the draw says so rather than distorting the rotation.'}, 'points_per_match': {'type': 'integer', 'maximum': 64, 'minimum': 4, 'description': 'Americano/mexicano; default 21'}, 'advance_per_group': {'type': 'integer', 'maximum': 4, 'minimum': 1}, 'third_place_match': {'type': 'boolean', 'description': 'Single elimination; default true'}, 'page_results_entry': {'type': 'boolean', 'description': 'Allow anyone with the page link to enter scores courtside. Default TRUE â\x80\x94 recreational tournaments run on whoever finishes their match first, and an organiser who has to type every result is the bottleneck. Pass false if the organiser wants to be the only one recording scores; switchable either way at any time via update_settings or the toggle on the page.'}, 'match_duration_minutes': {'type': 'integer', 'maximum': 240, 'minimum': 5}}}
Schéma de sortie
{'type': 'object', 'required': ['tournament_key', 'page_url', 'name', 'players_added', 'draw_generated', 'summary'], 'properties': {'name': {'type': 'string'}, 'summary': {'type': 'string'}, 'page_url': {'type': 'string'}, 'rounds_text': {'type': 'string', 'description': 'Present when a draw was generated â\x80\x94 show it to the organiser as-is.'}, 'players_added': {'type': 'number'}, 'draw_generated': {'type': 'boolean'}, 'tournament_key': {'type': 'string'}}, 'additionalProperties': False}
Schéma d’entrée
{'type': 'object', 'required': ['tournament_key'], 'properties': {'confirm': {'type': 'boolean'}, 'tournament_key': {'type': 'string'}}}
Schéma de sortie
{'type': 'object', 'required': ['deleted', 'summary'], 'properties': {'deleted': {'type': 'boolean'}, 'summary': {'type': 'string'}}, 'additionalProperties': False}
Schéma d’entrée
{'type': 'object', 'required': ['tournament_key'], 'properties': {'confirm': {'type': 'boolean', 'description': 'Omit or false: return a preview of what would change. True: apply it.'}, 'request_id': {'type': 'string', 'maxLength': 64, 'description': 'Optional idempotency id â\x80\x94 retrying a call with the same id never applies it twice'}, 'tournament_key': {'type': 'string', 'description': "The tournament's organiser key (starts with tk_)"}}}
Schéma de sortie
{'type': 'object', 'required': ['status', 'placements', 'summary'], 'properties': {'status': {'type': 'string'}, 'preview': {'type': 'boolean', 'description': 'True when this is a preview â\x80\x94 nothing was changed'}, 'summary': {'type': 'string', 'description': 'What happened, in one line'}, 'placements': {'type': 'array', 'items': {'type': 'object', 'properties': {}, 'additionalProperties': {}}}}, 'additionalProperties': False}
Schéma d’entrée
{'type': 'object', 'required': ['tournament_key'], 'properties': {'seed': {'type': 'integer', 'maximum': 2147483647, 'minimum': 0, 'description': 'Draw seed returned by the preview â\x80\x94 pass it back with confirm: true to apply exactly the previewed draw. Omit for a fresh draw.'}, 'rounds': {'type': 'integer', 'maximum': 30, 'minimum': 1}, 'confirm': {'type': 'boolean', 'description': 'Omit or false: return a preview of what would change. True: apply it.'}, 'seeding': {'enum': ['random', 'level'], 'type': 'string'}, 'request_id': {'type': 'string', 'maxLength': 64, 'description': 'Optional idempotency id â\x80\x94 retrying a call with the same id never applies it twice'}, 'group_count': {'type': 'integer', 'maximum': 8, 'minimum': 2}, 'tournament_key': {'type': 'string', 'description': "The tournament's organiser key (starts with tk_)"}, 'discard_results': {'type': 'boolean', 'description': 'Required (true) when results already exist â\x80\x94 separate acknowledgement that this redraw destroys them'}, 'points_per_match': {'type': 'integer', 'maximum': 64, 'minimum': 4}, 'advance_per_group': {'type': 'integer', 'maximum': 4, 'minimum': 1}, 'third_place_match': {'type': 'boolean'}}}
Schéma de sortie
{'type': 'object', 'required': ['matches', 'discarded_results', 'rounds_text', 'seed', 'summary'], 'properties': {'seed': {'type': 'number'}, 'matches': {'type': 'number'}, 'preview': {'type': 'boolean', 'description': 'True when this is a preview â\x80\x94 nothing was changed'}, 'summary': {'type': 'string', 'description': 'What happened, in one line'}, 'rounds_text': {'type': 'string'}, 'discarded_results': {'type': 'number'}}, 'additionalProperties': False}
Schéma d’entrée
{'type': 'object', 'required': ['tournament_key'], 'properties': {'limit': {'type': 'integer', 'maximum': 200, 'minimum': 1}, 'before_id': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'tournament_key': {'type': 'string', 'description': "The tournament's organiser key (starts with tk_)"}}}
Schéma de sortie
{'type': 'object', 'required': ['entries', 'next_before_id'], 'properties': {'entries': {'type': 'array', 'items': {'type': 'object', 'properties': {}, 'additionalProperties': {}}}, 'next_before_id': {'anyOf': [{'type': 'number'}, {'type': 'null'}]}}, 'additionalProperties': False}
Schéma d’entrée
{'type': 'object', 'required': ['tournament_key'], 'properties': {'tournament_key': {'type': 'string', 'description': "The tournament's organiser key (starts with tk_)"}}}
Schéma de sortie
{'type': 'object', 'required': ['name', 'sport', 'status', 'discipline', 'courts', 'start_time', 'players_total', 'players', 'matches_played', 'matches_pending', 'next_up', 'standings_top', 'page_url', 'page_results_entry', 'format', 'signup', 'aside'], 'properties': {'name': {'type': 'string'}, 'aside': {'anyOf': [{'type': 'object', 'required': ['kind', 'lead', 'text'], 'properties': {'kind': {'enum': ['fact', 'joke'], 'type': 'string'}, 'lead': {'type': 'string'}, 'text': {'type': 'string'}}, 'additionalProperties': False}, {'type': 'null'}], 'description': "Present ONLY when the tournament is set up, running, and asking nothing of the organiser â\x80\x94 for answering 'what else can you do?', or any moment where they are plainly just chatting. NEVER volunteer it: not as a greeting, not after a result, not alongside a report. Say `lead` then `text`, nothing of your own in between. Both are English already: relay them unchanged unless the organiser is writing to you in another language. If they are, translate `lead` â\x80\x94 but translate `text` ONLY when kind is 'fact'. A joke goes out in English word for word, whatever language you are speaking, because translating it destroys it."}, 'sport': {'type': 'string'}, 'courts': {'type': 'array', 'items': {'type': 'string'}}, 'format': {'type': 'object', 'properties': {}, 'additionalProperties': {}}, 'signup': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'status': {'type': 'string'}, 'next_up': {'type': 'array', 'items': {'type': 'object', 'required': ['match_id', 'structure', 'round', 'state', 'side_a', 'side_b', 'score', 'winner', 'retired', 'court', 'estimated_start'], 'properties': {'court': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'round': {'type': 'number'}, 'score': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'state': {'type': 'string'}, 'side_a': {'type': 'string'}, 'side_b': {'type': 'string'}, 'winner': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'retired': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'match_id': {'type': 'string'}, 'structure': {'type': 'string'}, 'estimated_start': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}}, 'additionalProperties': False}}, 'players': {'type': 'array', 'items': {'type': 'string'}}, 'page_url': {'type': 'string'}, 'discipline': {'type': 'string'}, 'start_time': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'players_total': {'type': 'number'}, 'standings_top': {'type': 'array', 'items': {'type': 'object', 'properties': {}, 'additionalProperties': {}}}, 'matches_played': {'type': 'number'}, 'matches_pending': {'type': 'number'}, 'page_results_entry': {'type': 'boolean', 'description': 'True when anyone with the page link can record scores courtside (the default for new tournaments). Turn it off with update_settings page_results_entry: false.'}}, 'additionalProperties': False}
Schéma d’entrée
{'type': 'object', 'required': ['tournament_key'], 'properties': {'tournament_key': {'type': 'string', 'description': "The tournament's organiser key (starts with tk_)"}}}
Schéma de sortie
{'type': 'object', 'required': ['tournament'], 'properties': {'tournament': {'type': 'object', 'properties': {}, 'additionalProperties': {}}}, 'additionalProperties': False}
Schéma d’entrée
{'type': 'object', 'required': ['tournament_key'], 'properties': {'doc': {'enum': ['sheet', 'results', 'plan'], 'type': 'string'}, 'tournament_key': {'type': 'string', 'description': "The tournament's organiser key (starts with tk_)"}}}
Schéma de sortie
{'type': 'object', 'required': ['filename', 'mime_type', 'size_bytes', 'pdf_url'], 'properties': {'pdf_url': {'type': 'string'}, 'filename': {'type': 'string'}, 'mime_type': {'type': 'string'}, 'size_bytes': {'type': 'number'}}, 'additionalProperties': False}
Schéma d’entrée
{'type': 'object', 'required': ['tournament_key'], 'properties': {'tournament_key': {'type': 'string', 'description': "The tournament's organiser key (starts with tk_)"}}}
Schéma de sortie
{'type': 'object', 'required': ['pdf_url', 'results_pdf_url', 'plan_pdf_url', 'page_url'], 'properties': {'pdf_url': {'type': 'string'}, 'page_url': {'type': 'string'}, 'plan_pdf_url': {'type': 'string'}, 'results_pdf_url': {'type': 'string'}}, 'additionalProperties': False}
Schéma d’entrée
{'type': 'object', 'properties': {}}
Schéma de sortie
{'type': 'object', 'required': ['template_url', 'filename', 'mime_type', 'size_bytes', 'columns', 'note'], 'properties': {'note': {'type': 'string'}, 'columns': {'type': 'array', 'items': {'type': 'string'}}, 'filename': {'type': 'string'}, 'mime_type': {'type': 'string'}, 'size_bytes': {'type': 'number'}, 'template_url': {'type': 'string'}}, 'additionalProperties': False}
Schéma d’entrée
{'type': 'object', 'required': ['tournament_key'], 'properties': {'tournament_key': {'type': 'string', 'description': "The tournament's organiser key (starts with tk_)"}}}
Schéma de sortie
{'type': 'object', 'required': ['status', 'placements'], 'properties': {'status': {'type': 'string'}, 'placements': {'type': 'array', 'items': {'type': 'object', 'properties': {}, 'additionalProperties': {}}}}, 'additionalProperties': False}
Schéma d’entrée
{'type': 'object', 'required': ['tournament_key'], 'properties': {'limit': {'type': 'integer', 'maximum': 100, 'minimum': 1}, 'tournament_key': {'type': 'string', 'description': "The tournament's organiser key (starts with tk_)"}}}
Schéma de sortie
{'type': 'object', 'required': ['schedule'], 'properties': {'schedule': {'type': 'array', 'items': {'type': 'object', 'required': ['match_id', 'structure', 'round', 'state', 'side_a', 'side_b', 'score', 'winner', 'retired', 'court', 'estimated_start'], 'properties': {'court': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'round': {'type': 'number'}, 'score': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'state': {'type': 'string'}, 'side_a': {'type': 'string'}, 'side_b': {'type': 'string'}, 'winner': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'retired': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'match_id': {'type': 'string'}, 'structure': {'type': 'string'}, 'estimated_start': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}}, 'additionalProperties': False}}}, 'additionalProperties': False}
Schéma d’entrée
{'type': 'object', 'required': ['tournament_key'], 'properties': {'tournament_key': {'type': 'string', 'description': "The tournament's organiser key (starts with tk_)"}}}
Schéma de sortie
{'type': 'object', 'required': ['standings'], 'properties': {'standings': {'type': 'array', 'items': {'type': 'object', 'properties': {}, 'additionalProperties': {}}}}, 'additionalProperties': False}
Schéma d’entrée
{'type': 'object', 'required': ['tournament_key'], 'properties': {'limit': {'type': 'integer', 'maximum': 100, 'minimum': 1}, 'round': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 1}, 'state': {'enum': ['scheduled', 'completed', 'walkover', 'retired', 'cancelled', 'bye'], 'type': 'string'}, 'tournament_key': {'type': 'string', 'description': "The tournament's organiser key (starts with tk_)"}, 'after_match_number': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}}}
Schéma de sortie
{'type': 'object', 'required': ['matches', 'next_after_match_number'], 'properties': {'matches': {'type': 'array', 'items': {'type': 'object', 'required': ['match_id', 'structure', 'round', 'state', 'side_a', 'side_b', 'score', 'winner', 'retired', 'court', 'estimated_start'], 'properties': {'court': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'round': {'type': 'number'}, 'score': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'state': {'type': 'string'}, 'side_a': {'type': 'string'}, 'side_b': {'type': 'string'}, 'winner': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'retired': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'match_id': {'type': 'string'}, 'structure': {'type': 'string'}, 'estimated_start': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}}, 'additionalProperties': False}}, 'next_after_match_number': {'anyOf': [{'type': 'number'}, {'type': 'null'}]}}, 'additionalProperties': False}
Schéma d’entrée
{'type': 'object', 'required': ['tournament_key'], 'properties': {'tournament_key': {'type': 'string', 'description': "The tournament's organiser key (starts with tk_)"}}}
Schéma de sortie
{'type': 'object', 'required': ['players', 'total'], 'properties': {'total': {'type': 'number'}, 'players': {'type': 'array', 'items': {'type': 'object', 'properties': {}, 'additionalProperties': {}}}}, 'additionalProperties': False}
Schéma d’entrée
{'type': 'object', 'properties': {}}
Schéma de sortie
{'type': 'object', 'required': ['ok', 'message'], 'properties': {'ok': {'type': 'boolean'}, 'message': {'type': 'string'}}, 'additionalProperties': False}
Schéma d’entrée
{'type': 'object', 'required': ['tournament_key', 'name'], 'properties': {'name': {'type': 'string'}, 'request_id': {'type': 'string', 'maxLength': 64, 'description': 'Optional idempotency id â\x80\x94 retrying a call with the same id never applies it twice'}, 'tournament_key': {'type': 'string', 'description': "The tournament's organiser key (starts with tk_)"}}}
Schéma de sortie
{'type': 'object', 'required': ['name', 'status', 'summary'], 'properties': {'name': {'type': 'string'}, 'status': {'type': 'string'}, 'preview': {'type': 'boolean', 'description': 'True when this is a preview â\x80\x94 nothing was changed'}, 'summary': {'type': 'string', 'description': 'What happened, in one line'}}, 'additionalProperties': False}
Schéma d’entrée
{'type': 'object', 'required': ['category', 'feedback'], 'properties': {'category': {'enum': ['unsupported_format', 'scoring_variant', 'feature', 'other'], 'type': 'string'}, 'feedback': {'type': 'string', 'maxLength': 1000, 'minLength': 10, 'description': 'What the organiser wanted, summarised without any personal data (max 1000 characters â\x80\x94 room for the problem, the workaround tried, and the suggested scope)'}, 'related_tool': {'type': 'string', 'maxLength': 60, 'description': 'The tool this relates to, if any'}}}
Schéma de sortie
{'type': 'object', 'required': ['recorded', 'summary'], 'properties': {'summary': {'type': 'string'}, 'recorded': {'type': 'boolean'}}, 'additionalProperties': False}
Schéma d’entrée
{'type': 'object', 'required': ['tournament_key', 'results'], 'properties': {'results': {'type': 'array', 'items': {'type': 'object', 'required': ['match_id'], 'properties': {'score': {'type': 'string', 'maxLength': 120}, 'winner': {'enum': ['a', 'b'], 'type': 'string'}, 'outcome': {'enum': ['completed', 'walkover', 'retired', 'cancelled', 'reinstate'], 'type': 'string'}, 'match_id': {'type': 'string'}}}, 'maxItems': 100, 'minItems': 1}, 'request_id': {'type': 'string', 'maxLength': 64, 'description': 'Optional idempotency id â\x80\x94 retrying a call with the same id never applies it twice'}, 'tournament_key': {'type': 'string', 'description': "The tournament's organiser key (starts with tk_)"}}}
Schéma de sortie
{'type': 'object', 'required': ['recorded', 'summary'], 'properties': {'preview': {'type': 'boolean', 'description': 'True when this is a preview â\x80\x94 nothing was changed'}, 'summary': {'type': 'string', 'description': 'What happened, in one line'}, 'recorded': {'type': 'array', 'items': {'type': 'object', 'required': ['match_id', 'structure', 'round', 'state', 'side_a', 'side_b', 'score', 'winner', 'retired', 'court', 'estimated_start'], 'properties': {'court': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'round': {'type': 'number'}, 'score': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'state': {'type': 'string'}, 'side_a': {'type': 'string'}, 'side_b': {'type': 'string'}, 'winner': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'retired': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'match_id': {'type': 'string'}, 'structure': {'type': 'string'}, 'estimated_start': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}}, 'additionalProperties': False}}}, 'additionalProperties': False}
Schéma d’entrée
{'type': 'object', 'required': ['tournament_key'], 'properties': {'request_id': {'type': 'string', 'maxLength': 64, 'description': 'Optional idempotency id â\x80\x94 retrying a call with the same id never applies it twice'}, 'player_name': {'type': 'string'}, 'player_names': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 128, 'minItems': 1, 'description': 'Bulk removal â\x80\x94 e.g. clearing mistaken placeholder names in one call'}, 'tournament_key': {'type': 'string', 'description': "The tournament's organiser key (starts with tk_)"}}}
Schéma de sortie
{'type': 'object', 'required': ['players_total', 'removed', 'promoted', 'summary'], 'properties': {'preview': {'type': 'boolean', 'description': 'True when this is a preview â\x80\x94 nothing was changed'}, 'removed': {'type': 'array', 'items': {'type': 'string'}}, 'summary': {'type': 'string', 'description': 'What happened, in one line'}, 'promoted': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Waitlisted players who took the freed spots'}, 'players_total': {'type': 'number'}}, 'additionalProperties': False}
Schéma d’entrée
{'type': 'object', 'required': ['tournament_key', 'out_player_name', 'in_player'], 'properties': {'mode': {'enum': ['slot_swap', 'regenerate'], 'type': 'string'}, 'in_player': {'type': 'object', 'required': ['name'], 'properties': {'name': {'type': 'string', 'maxLength': 120}, 'level': {'type': 'number', 'maximum': 10000, 'minimum': -10000, 'description': 'Any consistent numeric level/rating â\x80\x94 used only for seeding and balancing'}, 'gender': {'enum': ['m', 'f', 'x'], 'type': 'string'}}}, 'request_id': {'type': 'string', 'maxLength': 64, 'description': 'Optional idempotency id â\x80\x94 retrying a call with the same id never applies it twice'}, 'tournament_key': {'type': 'string', 'description': "The tournament's organiser key (starts with tk_)"}, 'out_player_name': {'type': 'string'}}}
Schéma de sortie
{'type': 'object', 'required': ['entry', 'summary'], 'properties': {'entry': {'type': 'string'}, 'preview': {'type': 'boolean', 'description': 'True when this is a preview â\x80\x94 nothing was changed'}, 'summary': {'type': 'string', 'description': 'What happened, in one line'}}, 'additionalProperties': False}
Schéma d’entrée
{'type': 'object', 'required': ['tournament_key'], 'properties': {'move_match': {'type': 'object', 'required': ['match_id'], 'properties': {'slot': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, 'match_id': {'type': 'string'}, 'court_name': {'type': 'string'}}}, 'request_id': {'type': 'string', 'maxLength': 64, 'description': 'Optional idempotency id â\x80\x94 retrying a call with the same id never applies it twice'}, 'start_time': {'type': 'string', 'description': 'New ISO start time'}, 'delay_minutes': {'type': 'integer', 'maximum': 600, 'minimum': 1}, 'tournament_key': {'type': 'string', 'description': "The tournament's organiser key (starts with tk_)"}}}
Schéma de sortie
{'type': 'object', 'required': ['start_time', 'summary'], 'properties': {'preview': {'type': 'boolean', 'description': 'True when this is a preview â\x80\x94 nothing was changed'}, 'summary': {'type': 'string', 'description': 'What happened, in one line'}, 'start_time': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}}, 'additionalProperties': False}
Schéma d’entrée
{'type': 'object', 'required': ['tournament_key'], 'properties': {'auto': {'enum': ['random', 'level_balanced'], 'type': 'string'}, 'pairs': {'type': 'array', 'items': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 2, 'minItems': 2}, 'description': 'Fixed pairs as [name, name] arrays'}, 'request_id': {'type': 'string', 'maxLength': 64, 'description': 'Optional idempotency id â\x80\x94 retrying a call with the same id never applies it twice'}, 'tournament_key': {'type': 'string', 'description': "The tournament's organiser key (starts with tk_)"}}}
Schéma de sortie
{'type': 'object', 'required': ['pairs', 'summary'], 'properties': {'pairs': {'type': 'array', 'items': {'type': 'string'}}, 'preview': {'type': 'boolean', 'description': 'True when this is a preview â\x80\x94 nothing was changed'}, 'summary': {'type': 'string', 'description': 'What happened, in one line'}}, 'additionalProperties': False}
Schéma d’entrée
{'type': 'object', 'required': ['players_estimate'], 'properties': {'vibe': {'enum': ['social', 'competitive'], 'type': 'string', 'description': 'Social: everyone mixes and plays a lot. Competitive: a bracket and a winner.'}, 'courts': {'type': 'integer', 'maximum': 16, 'minimum': 1, 'description': 'Default 2'}, 'discipline': {'enum': ['singles', 'doubles', 'unknown'], 'type': 'string', 'description': "Ask the organiser before offering formats; never infer it from the sport. 'unknown' = you asked and they don't mind, which shows both kinds. OMIT to get the question itself back."}, 'match_minutes': {'type': 'integer', 'maximum': 240, 'minimum': 5}, 'total_minutes': {'type': 'integer', 'maximum': 600, 'minimum': 30, 'description': 'The time budget, e.g. 120 for a two-hour evening'}, 'fixed_partners': {'type': 'boolean', 'description': 'Doubles only: do pairs stay together all evening?'}, 'players_estimate': {'type': 'integer', 'maximum': 128, 'minimum': 2}}}
Schéma de sortie
{'type': 'object', 'required': ['recommendations', 'glossary', 'menu', 'note'], 'properties': {'menu': {'type': 'string', 'description': 'Ready-to-show menu of the options â\x80\x94 relay it to the organiser as-is. Do not compress it to bare format names.'}, 'note': {'type': 'string'}, 'glossary': {'type': 'object', 'properties': {}, 'additionalProperties': {}}, 'recommendations': {'type': 'array', 'items': {'type': 'object', 'properties': {}, 'additionalProperties': {}}}}, 'additionalProperties': False}
Schéma d’entrée
{'type': 'object', 'required': ['tournament_key', 'player_a', 'player_b'], 'properties': {'round': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 1, 'description': 'Americano/mexicano only: which round to patch. Omit to swap the next unplayed round.'}, 'confirm': {'type': 'boolean', 'description': 'Omit or false: return a preview of what would change. True: apply it.'}, 'player_a': {'type': 'string'}, 'player_b': {'type': 'string'}, 'request_id': {'type': 'string', 'maxLength': 64, 'description': 'Optional idempotency id â\x80\x94 retrying a call with the same id never applies it twice'}, 'tournament_key': {'type': 'string', 'description': "The tournament's organiser key (starts with tk_)"}}}
Schéma de sortie
{'type': 'object', 'required': ['summary'], 'properties': {'pairs': {'type': 'array', 'items': {'type': 'string'}}, 'round': {'type': 'number'}, 'preview': {'type': 'boolean', 'description': 'True when this is a preview â\x80\x94 nothing was changed'}, 'summary': {'type': 'string', 'description': 'What happened, in one line'}, 'repeats_meeting': {'type': 'array', 'items': {'type': 'string'}}, 'repeats_partnership': {'type': 'array', 'items': {'type': 'string'}}}, 'additionalProperties': False}
Schéma d’entrée
{'type': 'object', 'required': ['tournament_key'], 'properties': {'confirm': {'type': 'boolean', 'description': 'Omit or false: return a preview of what would change. True: apply it.'}, 'request_id': {'type': 'string', 'maxLength': 64, 'description': 'Optional idempotency id â\x80\x94 retrying a call with the same id never applies it twice'}, 'to_change_id': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'A change id from get_audit_log â\x80\x94 restore to just before this change, discarding it and everything after it. Omit to undo only the latest change.'}, 'tournament_key': {'type': 'string', 'description': "The tournament's organiser key (starts with tk_)"}}}
Schéma de sortie
{'type': 'object', 'required': ['undone_tool', 'undone_summary', 'undone_at', 'discarded_count', 'discarded', 'summary'], 'properties': {'preview': {'type': 'boolean', 'description': 'True when this is a preview â\x80\x94 nothing was changed'}, 'summary': {'type': 'string', 'description': 'What happened, in one line'}, 'discarded': {'type': 'array', 'items': {'type': 'object', 'properties': {}, 'additionalProperties': {}}, 'description': 'Every change this rollback discards, oldest first'}, 'undone_at': {'type': 'string'}, 'undone_tool': {'type': 'string', 'description': 'Tool behind the earliest discarded change'}, 'undone_summary': {'type': 'string'}, 'discarded_count': {'type': 'number'}}, 'additionalProperties': False}
Schéma d’entrée
{'type': 'object', 'required': ['tournament_key'], 'properties': {'note': {'type': 'string', 'maxLength': 500, 'description': 'Free note shown on the tournament page. Pass an empty string to clear it.'}, 'level': {'type': 'number', 'maximum': 10000, 'minimum': -10000, 'description': 'Any consistent numeric level/rating â\x80\x94 used only for seeding and balancing'}, 'gender': {'enum': ['m', 'f', 'x'], 'type': 'string'}, 'updates': {'type': 'array', 'items': {'type': 'object', 'required': ['player_name'], 'properties': {'note': {'type': 'string', 'maxLength': 500, 'description': 'Free note shown on the tournament page. Pass an empty string to clear it.'}, 'level': {'type': 'number', 'maximum': 10000, 'minimum': -10000, 'description': 'Any consistent numeric level/rating â\x80\x94 used only for seeding and balancing'}, 'gender': {'enum': ['m', 'f', 'x'], 'type': 'string'}, 'new_name': {'type': 'string', 'maxLength': 120}, 'player_name': {'type': 'string'}}}, 'maxItems': 128, 'minItems': 1, 'description': 'Bulk edit â\x80\x94 e.g. levels for a whole roster in one call'}, 'new_name': {'type': 'string', 'maxLength': 120}, 'request_id': {'type': 'string', 'maxLength': 64, 'description': 'Optional idempotency id â\x80\x94 retrying a call with the same id never applies it twice'}, 'player_name': {'type': 'string', 'description': 'Single update; or use `updates` for several'}, 'tournament_key': {'type': 'string', 'description': "The tournament's organiser key (starts with tk_)"}}}
Schéma de sortie
{'type': 'object', 'required': ['players', 'summary'], 'properties': {'player': {'type': 'string'}, 'players': {'type': 'array', 'items': {'type': 'string'}}, 'preview': {'type': 'boolean', 'description': 'True when this is a preview â\x80\x94 nothing was changed'}, 'summary': {'type': 'string', 'description': 'What happened, in one line'}}, 'additionalProperties': False}
Schéma d’entrée
{'type': 'object', 'required': ['tournament_key'], 'properties': {'name': {'type': 'string', 'maxLength': 120}, 'courts': {'type': 'integer', 'maximum': 16, 'minimum': 1}, 'language': {'enum': ['en', 'bg', 'hr', 'cs', 'da', 'nl', 'et', 'fi', 'fr', 'de', 'el', 'hu', 'it', 'lv', 'lt', 'nb', 'pl', 'ro', 'sk', 'sl', 'sv', 'uk', 'es', 'pt', 'ar', 'bn', 'zh', 'hi', 'id', 'ja', 'ko', 'ru', 'tr', 'ur', 'vi'], 'type': 'string', 'description': 'Page/PDF/email language, ISO 639-1 (default en)'}, 'location': {'type': 'string', 'maxLength': 160, 'description': 'Venue/location shown to players; pass an empty string to clear it'}, 'request_id': {'type': 'string', 'maxLength': 64, 'description': 'Optional idempotency id â\x80\x94 retrying a call with the same id never applies it twice'}, 'signup_cap': {'type': 'integer', 'maximum': 128, 'minimum': 4}, 'start_time': {'type': 'string', 'description': 'ISO datetime with offset. Must be within 365 days from today.'}, 'court_names': {'type': 'array', 'items': {'type': 'string', 'maxLength': 60}, 'maxItems': 16}, 'house_rules': {'type': 'array', 'items': {'type': 'string', 'maxLength': 200}, 'maxItems': 12}, 'level_scale': {'enum': ['absolute', 'by_group', 'ignore'], 'type': 'string', 'description': 'How to read the numbers in `level`. absolute (default): one shared scale, a 3 is a 3 whoever holds it. by_group: men and women were each rated within their own group, so the numbers are not directly comparable â\x80\x94 ask the organiser which they did rather than guessing. ignore: the numbers are notes, never used for the draw.'}, 'signup_open': {'type': 'boolean', 'description': 'Open or close self-signup on the page'}, 'level_offset': {'type': 'number', 'maximum': 1000, 'minimum': 0, 'description': "by_group only: how much stronger an m is than an f carrying the SAME number, in the organiser's own level units. Default 1 â\x80\x94 a starting point to adjust, not a fact. Used for balancing only; never shown on the page or in standings."}, 'break_minutes': {'type': 'integer', 'maximum': 60, 'minimum': 0, 'description': 'Changeover between matches/rounds, shown separately from play time'}, 'level_gap_cap': {'type': 'number', 'maximum': 1000, 'minimum': 0, 'description': 'Opt-in: the largest level gap the organiser wants between opponents, in their own level units. Soft â\x80\x94 the draw prefers to respect it and reports when it cannot. Pass 0 to clear.'}, 'gender_balance': {'enum': ['prefer_symmetric', 'off'], 'type': 'string', 'description': 'Americano/mexicano: prefer matches where both teams have the same make-up (MM v MM, MW v MW, WW v WW). Default prefer_symmetric. A preference, not a rule â\x80\x94 an uneven field cannot supply it, and the draw says so rather than distorting the rotation.'}, 'tournament_key': {'type': 'string', 'description': "The tournament's organiser key (starts with tk_)"}, 'page_results_entry': {'type': 'boolean', 'description': 'Allow anyone with the page link to enter scores courtside. ON for new tournaments â\x80\x94 pass false when the organiser wants to be the only one recording results, true to hand it back to the players.'}, 'match_duration_minutes': {'type': 'integer', 'maximum': 240, 'minimum': 5}}}
Schéma de sortie
{'type': 'object', 'required': ['courts', 'promoted', 'summary'], 'properties': {'courts': {'type': 'array', 'items': {'type': 'string'}}, 'preview': {'type': 'boolean', 'description': 'True when this is a preview â\x80\x94 nothing was changed'}, 'summary': {'type': 'string', 'description': 'What happened, in one line'}, 'promoted': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Waitlisted players a raised cap let in'}}, 'additionalProperties': False}
Schéma d’entrée
{'type': 'object', 'required': ['tournament_key', 'player_name'], 'properties': {'confirm': {'type': 'boolean', 'description': 'Omit or false: return a preview of what would change. True: apply it.'}, 'request_id': {'type': 'string', 'maxLength': 64, 'description': 'Optional idempotency id â\x80\x94 retrying a call with the same id never applies it twice'}, 'player_name': {'type': 'string'}, 'tournament_key': {'type': 'string', 'description': "The tournament's organiser key (starts with tk_)"}}}
Schéma de sortie
{'type': 'object', 'required': ['affected_matches', 'summary'], 'properties': {'preview': {'type': 'boolean', 'description': 'True when this is a preview â\x80\x94 nothing was changed'}, 'summary': {'type': 'string', 'description': 'What happened, in one line'}, 'affected_matches': {'type': 'number'}}, 'additionalProperties': False}
Modifications récentes des outils
Serveurs MCP similaires
freedom-mcp
Supports company operations through commitments, teams, agents, customer evidence, leads, content workflows, spreadsheets, commer…
Calcgrid
Runs general-purpose calculators for loans, dates, lunar and solar terms, time zones, units, and a larger catalog of specialized …
Local MCP
Connects AI assistants to Mac email, calendars, reminders, notes, tasks, files, Microsoft 365, Todoist, spreadsheets, and daily b…
Stable Baseline
Manages company documents, knowledge graphs, whiteboards, projects, plans, tasks, teams, and improvement workflows.
hopi
Provides read-only calculators, converters, validators, text utilities, encoders, and generators for everyday and technical tasks.
GripForge
Generates, rigs, animates, analyzes, and packages game characters, weapons, armor, effects, environments, and engine-ready assets.
mu
Supports personal and collaborative tasks including web browsing, app creation, blogs, bookmarks, discussions, and contact manage…
John's Essentials
Analyzes and converts documents, images, audio, video, archives, data files, and other media formats, with PDF chat and file insp…