Turniermeister — Tournament Engine
Turnier engine: AI prepares a real tournament (bracket, schedule) and returns a claim link.
Should I use this
Quality & Safety
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"turniermeister": {
"url": "https://app.turniermeister.at/mcp"
}
}
}Remote endpoints
https://app.turniermeister.at/mcpstreamable-httpWhat it can do
Tool inventory
Tools (1)
🟡prepare_tournament(name, mode, competitionType, templateKey, teamCount, ...)
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-eisstock, preset-schnapsen). For Eisstock use mode 2; its 128-team limit is available only with templateKey preset-eisstock. Do not guess unknown keys — omit it instead. - schedule is optional: pass fields, startTime (HH:MM), playingMinutes and pauseMinutes ONLY when the user named them. Never invent them. The tool does not know the user's dates or field layout beyond these values. - 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. - Business validation problems come back as structured JSON errors (ok=false, code, message, fixHint): fix your input from that JSON and retry. Schema violations (wrong type or value out of range) are rejected as a validation error naming the field (e.g. teamCount above the maximum): correct that argument 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).
Input Schema
{
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 1,
"maxLength": 120,
"description": "Tournament name as agreed with the user. Max 120 chars."
},
"mode": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 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."
},
"competitionType": {
"description": "Fixed to \"bracket\" — other competition types are not exposed yet.",
"type": "string",
"const": "bracket"
},
"templateKey": {
"description": "Optional catalog template key (e.g. preset-padel). Omit instead of guessing.",
"type": "string",
"maxLength": 120
},
"teamCount": {
"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, or 128 with mode 2 and templateKey preset-eisstock); larger values are rejected during preparation. For real amateur tournaments keep it around 64 or below.",
"type": "integer",
"minimum": 2,
"maximum": 250
},
"participants": {
"description": "Participant names, ONLY when the user explicitly provided them. Stored encrypted and migrated at claim time.",
"maxItems": 64,
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 1,
"maxLength": 80,
"description": "Team or player name as given by the user."
},
"email": {
"description": "Optional contact email, only when the user supplied one.",
"type": "string",
"maxLength": 255
}
},
"required": [
"name"
]
}
},
"schedule": {
"description": "Optional schedule. Set only the values the user explicitly named; omitted values keep the app defaults and can be changed in the app after the takeover.",
"type": "object",
"properties": {
"fields": {
"description": "Number of playing fields (1-20). Only if the user named it.",
"type": "integer",
"minimum": 1,
"maximum": 20
},
"startTime": {
"description": "Tournament start time in 24h format \"HH:MM\", e.g. \"09:00\". Only if the user named it.",
"type": "string",
"pattern": "^([01]\\d|2[0-3]):[0-5]\\d$"
},
"playingMinutes": {
"description": "Playing time per match in minutes (1-360). Only if the user named it.",
"type": "integer",
"minimum": 1,
"maximum": 360
},
"pauseMinutes": {
"description": "Break between matches in minutes (0-120). Only if the user named it.",
"type": "integer",
"minimum": 0,
"maximum": 120
}
}
},
"idempotencyKey": {
"type": "string",
"minLength": 8,
"maxLength": 120,
"description": "Unique key for this preparation request (UUID). Same key returns the same preparation instead of a duplicate."
},
"clientInfo": {
"description": "Optional free-form identifier of the calling agent, used for funnel attribution only.",
"type": "string",
"maxLength": 120
}
},
"required": [
"name",
"mode",
"idempotencyKey"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}Community
Evidence