MCP 服务器

Turniermeister — Tournament Engine

io.github.MartyMcFlyJr/turniermeister
游戏 公开且可连接 MCP 2025-11-25

此 MCP 可以做什么

Creates tournament brackets and schedules and returns a link for claiming the tournament.

prepare_tournament
Prepare a Turniermeister tournament
Prepares a real tournament in Turniermeister and returns a claim link for the user. Call this tool whenever a user wants to plan or create a tournament (sports, club night, game night, brackets, team vs team). Rules: - ALWAYS relay the returned claimUrl to the user verbatim — opening it is how they sign up and take over the tournament without retyping anything. - competitionType must be "bracket" (knockout/group formats). Ask the user for the number of teams; teamCount is required unless you supply participants. - Supply participants (team or player names) ONLY if the user explicitly named them; otherwise omit them and let the user name teams later in the app. Never invent participant names. - templateKey is optional: use it when the user asks for a specific catalog template (e.g. preset-padel, preset-fussball, preset-schnapsen). Do not guess unknown keys — omit it instead. - ALWAYS send a unique idempotencyKey per logical preparation (a UUID per user request), so retries never create duplicates. Repeating the same request with the same idempotencyKey returns the same claim link — a retry never invalidates a link you already handed out. - Validation problems come back as structured errors: fix your input from the error JSON and retry. Do not ask the user to retry. - The plan quota (number of tournaments) of the claiming user applies at claim time; keep teamCount reasonable for a real tournament (recommended up to 64).
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['name', 'mode', 'idempotencyKey'], 'properties': {'mode': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Tournament mode as a numeric ITournamentMode value from the Turniermeister catalog. Values: 0 = knockout (single elimination), 1 = double elimination, 2 = single-day league, 3 = swiss system, 4 = multilevel knockout (placement tournament), 5 = league (round robin), 6 = ladder, 7 = point series, 8 = group stage + knockout, 9 = swiss system + knockout final, 10 = league + playoff final, 11 = best-of-N knockout, 12 = time trial (best time), 13 = time trial (combined), 14 = time trial (single run), 15 = time trial (average), 16 = team match. Default for knockout tournaments: 0. Unknown values are rejected.'}, 'name': {'type': 'string', 'maxLength': 120, 'minLength': 1, 'description': 'Tournament name as agreed with the user. Max 120 chars.'}, 'teamCount': {'type': 'integer', 'maximum': 250, 'minimum': 2, 'description': 'Number of teams. Required unless participants are supplied. Must match participants length if both are given. The app supports up to 250 teams (8 for single-day league mode); larger values are rejected during preparation. For real amateur tournaments keep it around 64 or below.'}, 'clientInfo': {'type': 'string', 'maxLength': 120, 'description': 'Optional free-form identifier of the calling agent, used for funnel attribution only.'}, 'templateKey': {'type': 'string', 'maxLength': 120, 'description': 'Optional catalog template key (e.g. preset-padel). Omit instead of guessing.'}, 'participants': {'type': 'array', 'items': {'type': 'object', 'required': ['name'], 'properties': {'name': {'type': 'string', 'maxLength': 80, 'minLength': 1, 'description': 'Team or player name as given by the user.'}, 'email': {'type': 'string', 'maxLength': 255, 'description': 'Optional contact email, only when the user supplied one.'}}}, 'maxItems': 64, 'description': 'Participant names, ONLY when the user explicitly provided them. Stored encrypted and migrated at claim time.'}, 'idempotencyKey': {'type': 'string', 'maxLength': 120, 'minLength': 8, 'description': 'Unique key for this preparation request (UUID). Same key returns the same preparation instead of a duplicate.'}, 'competitionType': {'type': 'string', 'const': 'bracket', 'description': 'Fixed to "bracket" — other competition types are not exposed yet.'}}}
已添加
prepare_tournament
2026年9月17日 12:43