Run small tennis & pickleball tournaments from your AI assistant: brackets, schedules, results.
Connect Remote server
claude mcp add --transport http pofa https://pofa.app/mcp/
{
"mcpServers": {
"pofa": {
"url": "https://pofa.app/mcp/"
}
}
}
{
"servers": {
"pofa": {
"type": "http",
"url": "https://pofa.app/mcp/"
}
}
}
Settings > Connectors > Add custom connector
URL: https://pofa.app/mcp/
Tools 18 found in our last check
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 creden…
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_schedu…
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…
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 —…
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 ret…
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 no…
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 mana…
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…
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 — n…
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…
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);…
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…
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 refuse…
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…
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). Us…
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 {tournamen…
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 s…
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…
Details
| Endpoint | https://pofa.app/mcp/ (Streamable HTTP) |
| First published | 12 Nov 2026 |
| Last updated | 12 Nov 2026 |
| Registry name | app.pofa/pofa |
More search and web servers See all
Listing data from the official MCP registry. Status and tools from NestDaddy's daily check. Browse all MCP servers.
