Skip to main content

POFA Tournaments

app.pofa/pofaVersion 1.4.4

Run small tennis & pickleball tournaments from your AI assistant: brackets, schedules, results.

Status

Responds546 msAnswered our handshake without sign-in.

Registry data may be out of date

We could not refresh it, so this page shows the last copy.
Last checked
Nov 14, 2026, 13:38 UTC
Latency
546 ms
Remotes responding
1 of 1
Sign-in
No sign-in
Hosting
Hosted outside the EU (detected)
Registry data as of
Nov 14, 2026, 22:14 UTC

Data from the official MCP Registry, checked by run.zero. How we check

Connect

Streamable HTTP
https://pofa.app/mcp/Responds546 ms
No sign-in

Claude Code

claude mcp add --transport http pofa https://pofa.app/mcp/

Claude Desktop and claude.ai

Settings > Connectors > Add custom connector
Name: pofa
Remote MCP server URL: https://pofa.app/mcp/

Cursor

{
  "mcpServers": {
    "pofa": {
      "url": "https://pofa.app/mcp/"
    }
  }
}

VS Code

code --add-mcp '{"name":"pofa","type":"http","url":"https://pofa.app/mcp/"}'

Built your own server? run.zero hosts MCP servers on European infrastructure.

Host your own MCP server on run.zero

Tools

18 tools

Tools of POFA Tournaments
Read-only
Idempotent
Open world
create_tournamentCreate a NEW tournament as an organizer — step 1 of the organizer flow: create_tournament → import_players → generate_bracket → schedule_matches → report_result. Takes effect immediately (no preview step). Returns the new tournament's id, share_url and manage_code. SAVE the manage_code and show it to the user: it is the write credential for every organizer tool on this tournament (import_players, generate_bracket, schedule_matches, report_result, screen_show, screen_clear, delete_tournament) and cannot be recovered later.Not declaredNot declaredNot declaredNot declared
delete_tournamentDelete a tournament as its organizer (needs manage_code). PREVIEW FIRST: call without confirm_preview_id to get a preview_id and a summary of what will be deleted (players, matches, live screens) — nothing is written. Show the preview to the user, then call again with {tournament_id, code, confirm_preview_id} to delete. Deleting removes the tournament from search and public pages immediately; its record and audit trail stay in the database for the operator, and there is no undelete via MCP — treat this as permanent. Use it to clean up test events and cancelled tournaments.Not declaredNot declaredNot declaredNot declared
generate_bracketGenerate the bracket for a tournament (organizer step 3, after the roster is in; needs manage_code). SINGLE-ELIMINATION ONLY in this version — tournaments of other formats return an error. PREVIEW FIRST: call without confirm_preview_id to get a preview_id and bracket preview — nothing is written. Show the preview to the user, then call again with {tournament_id, code, confirm_preview_id} to commit. The roster is the tournament's own player list (the same one the player page shows), paired by the same seeding the pages use; match ids are the pages' sequential labels M1, M2, ... A players list may be given to override the roster for the preview.Not declaredNot declaredNot declaredNot declared
get_activity_logRead a tournament's activity log — the same audit trail the organizer console shows: event creation, roster changes, draw and schedule commits, score reports, corrections, undos and screen calls, newest first. Requires the tournament's manage_code (the log is organizer-only). Use it to answer 'what happened to this event' and to verify that writes actually landed. Read-only.Not declaredNot declaredNot declaredNot declared
get_bracketRead a tournament's full bracket exactly as stored: every round and match with match_id, both players, winner, score, structured score_sets, status (pending / ready / completed) and the next-match pointer. Use it to refresh full match state before reporting or undoing a result — and pair it with report_result's expect_winner / expect_score so a stale read cannot overwrite another referee's correction. Only brackets created through this MCP server (generate_bracket) are stored match-by-match; for web-console events the pages derive the draw from the roster, so this returns bracket: null with a note. Read-only, no credentials needed.Not declaredNot declaredNot declaredNot declared
get_event_contextGet a whole tournament in ONE call: event facts, roster, stored bracket (plus any unconfirmed bracket preview), schedule, call screens, recent activity, pending actions and permissions. Built for AI consoles (MCP Apps) so one call can render the full event state instead of six separate reads. Read-only; contact details and the audit trail are included only with a valid manage_code, and never appear without one.Not declaredNot declaredNot declaredNot declared
get_rosterRead a tournament's roster as structured data: every player's name and stable player_id, in seed order. Pass the tournament's manage_code as code to ALSO receive the registration entries with contact details (email, phone, source); without a valid code only names and ids are returned, matching what the public pages show. Use it to verify the roster after import_players / register_player, or before generate_bracket. Read-only.Not declaredNot declaredNot declaredNot declared
get_scheduleGet a tournament's published schedule as stored: dates, court count, start time and bracket_rounds. When the schedule was created through this MCP server (schedule_matches), matches lists every scheduled match with its match_id, round, both players, court, start time, score and status. Schedules built in the web console are derived on the pages and are not stored match-by-match on the server, so only their headline facts (e.g. courts and date) come back here. Returns schedule: null with a note when the organizer has not published a schedule yet. Use get_tournament for the event's own facts (format, fee, location). Read-only.Not declaredNot declaredNot declaredNot declared
get_screenRead what a tournament's venue call screens are currently showing: every court's on-screen match (screens), plus court_screens — one screen link per court with its live state, so you can hand the organizer all their court-display links in one go — plus a one-line summary of the console calling queue underneath. Use to confirm a screen_show / screen_clear took effect. Read-only, no credentials needed.Not declaredNot declaredNot declaredNot declared
get_tournamentGet one tournament's full public details: format, dates, location, entry fee, description and its public share_url. Use after search_tournaments, or whenever you already have an event id, to answer questions about a specific event. For match courts and start times use get_schedule instead. Read-only.Not declaredNot declaredNot declaredNot declared
import_playersBulk-add players to a tournament's roster (organizer step 2, right after create_tournament; needs that tournament's manage_code). Each player needs a name; email, phone and division are optional per player. The same email may appear on more than one row — one person entering two events takes two roster rows, each with its own player id — so set a different division per row for the two entries; within the same division a repeated email is skipped as a duplicate. This roster is what generate_bracket seeds from. Returns how many were imported and which rows were skipped, and why.Not declaredNot declaredNot declaredNot declared
open_tournament_consoleOpen the visual tournament console (MCP Apps): returns the full event snapshot for the console UI to render — bracket, roster, schedule, call screens and pending actions in one call. Read-only; opening the console writes nothing. The host renders the ui://pofa/tournament-console resource with the returned snapshot.Not declaredNot declaredNot declaredNot declared
register_playerRegister one player into a tournament (player-side sign-up; no manage code needed). Duplicate-checked by email within the same division: the same email in a different division registers as a second entry. TWO STEPS: first call WITHOUT confirm — it returns a summary and writes nothing; show that summary to the user, and only after they explicitly approve, call again with the same fields plus confirm=true to commit.Not declaredNot declaredNot declaredNot declared
report_resultReport a match result (organizer step 5, on match day; needs manage_code). Recording a score advances the winner into the next round automatically and returns where they advanced to. Pass undo=true with the match_id to revert a result (cascades to auto-filled downstream slots); pass undo_preview=true together with undo=true to first see — without writing anything — what the undo would clear downstream and whether a downstream result currently blocks it. Overwriting an existing result is logged as a correction. Consistency is enforced whenever score_sets are provided: the sets must produce the declared winner, and the text score must match the sets set-for-set written p1-first (e.g. '6-4 6-3'); a contradictory combination — or a text score that cannot be parsed for checking — is rejected and nothing is written. Optional safety: pass expect_winner and/or expect_score with the values you last read for this match (e.g. from get_bracket); if the stored result has since changed, the call is refused with a conflict error instead of overwriting the other referee's work.Not declaredNot declaredNot declaredNot declared
schedule_matchesAssign the bracket's matches to courts and start times (organizer step 4, after generate_bracket; needs manage_code). Scheduling is dependency-aware: rounds run in waves across the courts and a round never starts before the previous round has ended, so no match is ever scheduled before the matches feeding it have finished. PREVIEW FIRST: call without confirm_preview_id — returns a preview_id plus per-match court/time assignments and a validation block whose court_time_conflicts and dependency_violations are computed from the produced schedule, and nothing is written. Show the preview to the user, then commit with {tournament_id, code, confirm_preview_id}.Not declaredNot declaredNot declaredNot declared
screen_clearTake a match off the venue call screen (needs manage_code). Pass a court to clear only that court's screen — the other courts keep showing their matches. Clearing EVERY court's screen at once requires the explicit all=true flag; a call with neither a court nor all=true is refused, so a forgotten court can never wipe all screens by accident. A cleared screen falls back to the console calling queue board, or to the standby face when the queue is empty. Safe to call when nothing is on screen — it simply reports that. Does not touch the calling queue.Not declaredNot declaredNot declaredNot declared
screen_showPut ONE match on the venue call screen FOR ITS COURT — every court has its own screen with its own link, and the screen_url this tool returns is that court's link (open one display per court). The court's screen immediately shows the court number huge with both player names, and keeps showing it until cleared; other courts' screens are unaffected. Use on match day when a specific match must be called out on the big screen. Needs the tournament's manage_code. This is an independent on-screen slot: it does NOT change the console calling queue — the queue board (or the standby face) comes back on that display when you clear with screen_clear. Takes effect immediately, no preview step.Not declaredNot declaredNot declaredNot declared
search_tournamentsFind POFA tournaments (tennis & pickleball) by keyword, city, or start date. Returns each event's id, name and one-line summary. Start here whenever the user wants to discover, browse or pick an event; follow with get_tournament for one event's full details. Read-only, no credentials needed.Not declaredNot declaredNot declaredNot declared

Details

Registry status
Active
Published
Nov 12, 2026
Updated
Nov 12, 2026
Repository
Not given
Categories
Uncategorized
GDPR
Not declared

Are you the operator? Claim this listing