Koskamo

Turniermeister MCP

Turniermeister is a web-based tournament management SaaS that offers an MCP server for AI agents. The server allows agents to prepare real tournaments by specifying name, format, and team count, returning a claim link for the user to finalize the setup in the app. It supports bracket formats and ensures idempotency via UUID keys.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

Turniermeister MCP logo, by TurniermeisterCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-06Published by Turniermeister
MCP endpoint (Streamable HTTP)
https://app.turniermeister.at/mcp
Vendor documentation

What its tools do

1 tool, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

Not annotated (1)

1 of 1 have a description · 0 of 1 declare behavior hints · 1 of 1 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Prepare a tournament bracket with specified team count and format
  • Generate a claim link for users to adopt the tournament
  • Manage tournament schedules and results via the app

Source and maintenance

Community listingRegistry 1.0.0
Maintenance checked

Protocol and capabilities

Server
turniermeister 1.0.0
MCP protocol negotiated in check
2025-11-25
Tools
1 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": true
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

Turniermeister is a tournament engine for real club and amateur tournaments (brackets, schedules, scoring). Use the prepare_tournament tool when a user wants to create or plan a tournament: it pre-configures the tournament and returns a claim link the user opens in a browser to sign up and take over the tournament without retyping anything.

Tools

1 advertised

prepare_tournament — Prepare a Turniermeister tournament
Advertised by the server during the last successful anonymous check.

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).

prepare_tournament input schema
{
  "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."
    },
    "schedule": {
      "type": "object",
      "properties": {
        "fields": {
          "type": "integer",
          "maximum": 20,
          "minimum": 1,
          "description": "Number of playing fields (1-20). Only if the user named it."
        },
        "startTime": {
          "type": "string",
          "pattern": "^([01]\\d|2[0-3]):[0-5]\\d$",
          "description": "Tournament start time in 24h format \"HH:MM\", e.g. \"09:00\". Only if the user named it."
        },
        "pauseMinutes": {
          "type": "integer",
          "maximum": 120,
          "minimum": 0,
          "description": "Break between matches in minutes (0-120). Only if the user named it."
        },
        "playingMinutes": {
          "type": "integer",
          "maximum": 360,
          "minimum": 1,
          "description": "Playing time per match in minutes (1-360). Only if the user named it."
        }
      },
      "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."
    },
    "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, 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."
    },
    "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."
    }
  }
}

Prompts

Not advertised

No prompt definitions available.

Resources

Not advertised

No resource definitions available.

90-day uptime

A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.

Too few checks for a percentage yet (1 of 1 answered).

  1. 2026-11-06: 1 of 1 checks answered

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
1314 ms
95th percentile latency
1314 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 1314 ms · metadata changed · 1 tool(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http turniermeister-mcp https://app.turniermeister.at/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add turniermeister-mcp --url https://app.turniermeister.at/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable turniermeister-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "turniermeister-mcp": {
      "url": "https://app.turniermeister.at/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "turniermeister-mcp": {
      "type": "streamableHttp",
      "url": "https://app.turniermeister.at/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start turniermeister-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "turniermeister-mcp": {
      "type": "http",
      "url": "https://app.turniermeister.at/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http turniermeister-mcp https://app.turniermeister.at/mcp

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://app.turniermeister.at/mcp

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "turniermeister-mcp": {
      "serverUrl": "https://app.turniermeister.at/mcp"
    }
  }
}

Let your agent find its tools

Find servers like Turniermeister MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.