← Files Zovo Tournament MakerARCHIVED FILE
.codex-plugin/plugin.json
16 KB · Nov 3, 2026 · 19:17 UTC
{
"name": "bracket-maker",
"version": "1.0.0",
"description": "Make seeded tournament brackets, round robin schedules and Swiss pairings with byes, timetables and printable PDFs.",
"author": {
"name": "Zovo",
"email": "support@zovo.one",
"url": "https://zovo.one"
},
"homepage": "https://bracket-maker.zovo.one",
"license": "Proprietary",
"keywords": [
"tournament bracket maker",
"bracket generator",
"single elimination bracket",
"double elimination bracket",
"round robin schedule generator",
"swiss pairings",
"seeded bracket",
"bracket with byes",
"printable bracket"
],
"skills": "./skills/",
"mcpServers": "./.mcp.json",
"interface": {
"displayName": "Zovo Tournament Maker",
"shortDescription": "Brackets, round robins, Swiss",
"longDescription": "Make a tournament bracket in the chat, record results by clicking the winners, and print it.\n\nTournament bracket maker: single elimination and double elimination brackets for 2 to 128 players or teams. Standard seeding puts seed 1 against the lowest seed, so seeds 1 and 2 can only meet in the final; when the field is not a power of two (a bracket for 6, 10 or 12 teams), the byes go to the top seeds and are placed exactly where a seeded bracket needs them. Add a third-place match, or use double elimination with a losers bracket and a grand final with an optional reset match. Seeding can follow your ranking, a reproducible random draw, or the order you list.\n\nRound robin schedule generator: everyone plays everyone exactly once (or home and away), nobody plays twice in a round, one team sits out each round when the number is odd, and home and away games are balanced. Swiss pairings: players with the same score meet each round, with no rematches whenever they can be avoided, and a fair rotation of byes.\n\nTimetable: give the number of courts, tables or fields, the match length and the start time to get a start time and court for every match and the finish time of the event.\n\nResults and standings: tell it who won, or click a player in the bracket, and winners advance, the next matches appear and the champion and final places are shown. Round robin tables use points, then head-to-head, then score difference; Swiss tables use Buchholz.\n\nPrint and share: a landscape PDF bracket that stays readable up to 64 players, with an order-of-play page, and a CSV schedule for spreadsheets. For coaches, teachers, clubs, office leagues, school sports days and gaming nights.\n\nLimitations: up to 128 participants; round robin up to 500 matches; Swiss pairing is a simplified score-group method without chess colour allocation; timetables assume equal match lengths.",
"developerName": "Zovo",
"category": "Productivity",
"capabilities": [
"Interactive",
"Read"
],
"websiteURL": "https://bracket-maker.zovo.one",
"supportURL": "https://bracket-maker.zovo.one/support",
"privacyPolicyURL": "https://bracket-maker.zovo.one/privacy",
"termsOfServiceURL": "https://bracket-maker.zovo.one/terms",
"defaultPrompt": [
"Make a single elimination bracket for 6 teams: Hawks, Bears, Lions, Wolves, Eagles, Sharks",
"Round robin for 5 pickleball players: Ann, Ben, Cara, Dev, Eli on 2 courts, 15-minute games from 18:00",
"Double elimination bracket for 8 players: Ava, Ben, Cole, Dana, Eli, Fay, Gus, Hana"
],
"brandColor": "#2F5BD3",
"brandColorDark": "#8FB0FF",
"composerIcon": "./assets/icon.svg",
"logo": "./assets/logo.png"
},
"extensions": {
"com.openai": {
"onboardingSkill": "./skills/bracket-maker/SKILL.md",
"review": {
"test_cases": {
"positive": [
{
"description": "Single elimination bracket with byes for a non-power-of-two field",
"prompt": "Make a single elimination bracket for 6 teams: Hawks, Bears, Lions, Wolves, Eagles, Sharks",
"tools_triggered": "generate_tournament_bracket",
"expected_behavior": "Calls generate_tournament_bracket once with the 6 teams in the given order and format single_elimination. Result: a bracket of 8 with 2 first-round byes for seed 1 Hawks and seed 2 Bears, 5 matches in 3 rounds: quarterfinals M1 Wolves vs Eagles and M2 Lions vs Sharks, semifinals M3 Hawks vs winner of M1 and M4 Bears vs winner of M2, final M5. The widget draws the bracket with connectors; clicking Wolves records that Wolves won M1 and moves them into M3. The reply links a landscape PDF bracket and a CSV schedule."
},
{
"description": "Round robin schedule with courts and a timetable",
"prompt": "Round robin for 5 pickleball players: Ann, Ben, Cara, Dev, Eli on 2 courts, 15-minute games from 18:00",
"tools_triggered": "generate_tournament_bracket",
"expected_behavior": "Calls generate_tournament_bracket once with format round_robin, courts 2, match_minutes 15 and start_time 18:00. Result: 10 matches in 5 rounds, every pair meets exactly once, nobody plays twice in a round and one player sits out each round (Ann in round 1). Every match gets a start time and court; the schedule runs from 18:00 to about 19:15. The widget shows the rounds with click-to-record winners and a Table tab; the PDF lists every round with write-in score blanks."
},
{
"description": "Double elimination bracket for 8 players",
"prompt": "Double elimination bracket for 8 players: Ava, Ben, Cole, Dana, Eli, Fay, Gus, Hana",
"tools_triggered": "generate_tournament_bracket",
"expected_behavior": "Calls generate_tournament_bracket once with format double_elimination. Result: a bracket of 8 with no byes and 14 matches (2n-2) plus a grand final reset only if the losers-bracket champion wins the grand final; the winners bracket has 3 rounds and the losers bracket 4 rounds. Round 1 is Ava vs Hana, Dana vs Eli, Ben vs Gus, Cole vs Fay. The widget shows the winners bracket and the losers bracket with the grand final; the PDF has bracket pages and an order-of-play page."
},
{
"description": "Round robin standings from reported results",
"prompt": "Our 4-team round robin is Reds, Blues, Greens, Golds. Reds beat Blues 3-1, Greens and Golds drew 2-2, Reds beat Greens 2-0, Blues beat Golds 4-2. Show the table.",
"tools_triggered": "calculate_bracket_standings",
"expected_behavior": "Calls calculate_bracket_standings once with format round_robin, the 4 teams and the 4 results. The table is Reds 6 pts, Blues 3 pts, then Golds and Greens on 1 pt each with Golds ahead on scores for (equal head-to-head after the draw and equal score difference). The reply names the 2 matches still to play: Golds vs Reds and Blues vs Greens."
},
{
"description": "Swiss pairings for a club night",
"prompt": "Swiss pairings for our chess club, 4 rounds, 10 players: Alice, Bram, Chen, Dora, Emil, Faye, Gabe, Hugo, Iris, Jon",
"tools_triggered": "generate_tournament_bracket",
"expected_behavior": "Calls generate_tournament_bracket once with format swiss and swiss_rounds 4. Round 1 pairs the top half against the bottom half: Alice vs Faye, Bram vs Gabe, Chen vs Hugo, Dora vs Iris, Emil vs Jon. The reply explains that round 2 is paired from the round 1 results (points, then seed, no rematches). Reporting results later with calculate_bracket_standings returns the table and the next round's pairings."
}
],
"negative": [
{
"description": "Predicting who will win a real tournament is out of scope: the assistant answers in text and calls no tool.",
"prompt": "Who do you think will win the 2026 World Cup?"
},
{
"description": "Explaining what a bye is needs no bracket: the assistant explains in text and calls no tool.",
"prompt": "What does it mean when a team gets a bye in a tournament?"
},
{
"description": "Writing a team chant is unrelated to brackets: the assistant writes it directly and calls no tool.",
"prompt": "Write a fun team chant for our office volleyball team"
}
]
},
"commerce": false,
"commerce_description": "This plugin does not sell products or process payments.",
"demo_recording_url": "https://bracket-maker.zovo.one/demo.mp4"
},
"publication": {
"countries": [],
"release_notes": "Initial release: single and double elimination brackets with standard seeding and correct byes, round robin schedules, Swiss pairings, timetables across courts, click-to-advance results with standings, printable PDF bracket and CSV schedule.",
"translations": {
"pl-PL": {
"subtitle": "Drabinki turniejowe i ligi",
"description": "Tw\u00f3rz drabinki turniejowe w czacie, zapisuj wyniki klikni\u0119ciem zwyci\u0119zcy i drukuj je. Pojedyncza i podw\u00f3jna eliminacja dla 2-128 graczy lub dru\u017cyn: standardowe rozstawienie (rozstawiony nr 1 gra z najni\u017cej rozstawionym, numery 1 i 2 mog\u0105 spotka\u0107 si\u0119 dopiero w finale), wolne losy dla najwy\u017cej rozstawionych, gdy liczba uczestnik\u00f3w nie jest pot\u0119g\u0105 dw\u00f3jki, opcjonalny mecz o 3. miejsce, drabinka przegranych i wielki fina\u0142. Terminarz systemem ka\u017cdy z ka\u017cdym (metoda ko\u0142a): ka\u017cda para gra dok\u0142adnie raz, nikt nie gra dwa razy w rundzie, mecze u siebie i na wyje\u017adzie s\u0105 zr\u00f3wnowa\u017cone. System szwajcarski bez powt\u00f3rek, gdy da si\u0119 ich unikn\u0105\u0107. Harmonogram na kilku kortach lub boiskach z godzinami mecz\u00f3w. Tabela: punkty, bezpo\u015brednie mecze, r\u00f3\u017cnica punkt\u00f3w. PDF do druku w poziomie (czytelny do 64 graczy) i plik CSV."
},
"de-DE": {
"subtitle": "Turnierbaum, Jeder gegen Jeden",
"description": "Erstelle Turnierb\u00e4ume im Chat, trage Ergebnisse per Klick auf den Sieger ein und drucke sie aus. K.-o.-System und Doppel-K.-o. f\u00fcr 2 bis 128 Spieler oder Teams: Standard-Setzliste (Platz 1 gegen den niedrigsten Setzplatz, 1 und 2 k\u00f6nnen sich erst im Finale treffen), Freilose f\u00fcr die Topgesetzten, wenn die Teilnehmerzahl keine Zweierpotenz ist, optionales Spiel um Platz 3, Verliererrunde und gro\u00dfes Finale. Spielplan Jeder gegen Jeden nach der Kreismethode: jedes Paar spielt genau einmal, niemand spielt zweimal pro Runde, Heim- und Ausw\u00e4rtsspiele sind ausgeglichen. Schweizer System ohne vermeidbare Wiederholungspaarungen. Zeitplan \u00fcber mehrere Pl\u00e4tze oder Tische mit Ansto\u00dfzeiten. Tabelle nach Punkten, direktem Vergleich und Differenz. Druckbares PDF im Querformat (lesbar bis 64 Spieler) und CSV-Spielplan."
},
"es-ES": {
"subtitle": "Cuadros, liguillas y suizo",
"description": "Crea cuadros de torneo en el chat, registra resultados con un clic en el ganador e impr\u00edmelos. Eliminaci\u00f3n simple y doble para 2 a 128 jugadores o equipos: cabezas de serie est\u00e1ndar (el 1 juega contra el \u00faltimo, el 1 y el 2 solo pueden cruzarse en la final), exenciones para los mejores cabezas de serie cuando el n\u00famero de participantes no es potencia de dos, partido por el tercer puesto opcional, cuadro de perdedores y gran final. Calendario de liguilla (todos contra todos) con el m\u00e9todo del c\u00edrculo: cada pareja juega exactamente una vez, nadie juega dos veces por jornada y local y visitante est\u00e1n equilibrados. Sistema suizo sin repetir enfrentamientos cuando se puede evitar. Horario en varias pistas o campos con hora de cada partido. Clasificaci\u00f3n por puntos, enfrentamiento directo y diferencia. PDF horizontal para imprimir (legible hasta 64 jugadores) y CSV."
},
"fr-FR": {
"subtitle": "Tableaux, poules et suisse",
"description": "Cr\u00e9ez des tableaux de tournoi dans le chat, saisissez les r\u00e9sultats d'un clic sur le vainqueur et imprimez-les. \u00c9limination directe et double \u00e9limination de 2 \u00e0 128 joueurs ou \u00e9quipes : t\u00eates de s\u00e9rie standard (le 1 affronte la plus faible t\u00eate de s\u00e9rie, le 1 et le 2 ne peuvent se rencontrer qu'en finale), exemptions pour les meilleures t\u00eates de s\u00e9rie quand le nombre d'inscrits n'est pas une puissance de deux, petite finale en option, tableau des perdants et grande finale. Calendrier de poule (chacun contre chacun) par la m\u00e9thode du cercle : chaque paire se rencontre exactement une fois, personne ne joue deux fois dans un tour, domicile et ext\u00e9rieur \u00e9quilibr\u00e9s. Syst\u00e8me suisse sans revanche lorsqu'on peut l'\u00e9viter. Horaires sur plusieurs terrains ou tables. Classement aux points, confrontation directe puis diff\u00e9rence. PDF paysage imprimable (lisible jusqu'\u00e0 64 joueurs) et CSV."
},
"ja-JP": {
"subtitle": "\u30c8\u30fc\u30ca\u30e1\u30f3\u30c8\u8868\u30fb\u7dcf\u5f53\u305f\u308a\u30fb\u30b9\u30a4\u30b9\u5f0f",
"description": "\u30c1\u30e3\u30c3\u30c8\u3067\u30c8\u30fc\u30ca\u30e1\u30f3\u30c8\u8868\u3092\u4f5c\u308a\u3001\u52dd\u8005\u3092\u30af\u30ea\u30c3\u30af\u3057\u3066\u7d50\u679c\u3092\u8a18\u9332\u3057\u3001\u5370\u5237\u3067\u304d\u307e\u3059\u30022\u301c128\u4eba\u307e\u305f\u306f\u30c1\u30fc\u30e0\u306e\u30b7\u30f3\u30b0\u30eb\u30fb\u30c0\u30d6\u30eb\u30a4\u30ea\u30df\u30cd\u30fc\u30b7\u30e7\u30f3\u306b\u5bfe\u5fdc\u3002\u6a19\u6e96\u30b7\u30fc\u30c9(\u7b2c1\u30b7\u30fc\u30c9\u306f\u6700\u4e0b\u4f4d\u30b7\u30fc\u30c9\u3068\u5bfe\u6226\u3057\u3001\u7b2c1\u30fb\u7b2c2\u30b7\u30fc\u30c9\u306f\u6c7a\u52dd\u307e\u3067\u5f53\u305f\u308a\u307e\u305b\u3093)\u3001\u53c2\u52a0\u6570\u304c2\u306e\u7d2f\u4e57\u3067\u306a\u3044\u3068\u304d\u306f\u4e0a\u4f4d\u30b7\u30fc\u30c9\u306b\u4e0d\u6226\u52dd\u3092\u6b63\u3057\u304f\u914d\u7f6e\u30013\u4f4d\u6c7a\u5b9a\u6226\u3001\u6557\u8005\u5fa9\u6d3b\u5074\u306e\u30d6\u30e9\u30b1\u30c3\u30c8\u3068\u30b0\u30e9\u30f3\u30c9\u30d5\u30a1\u30a4\u30ca\u30eb\u3082\u4f5c\u6210\u3002\u7dcf\u5f53\u305f\u308a(\u30b5\u30fc\u30af\u30eb\u65b9\u5f0f)\u306f\u5168\u30da\u30a2\u304c\u3061\u3087\u3046\u30691\u56de\u5bfe\u6226\u3057\u3001\u540c\u3058\u30e9\u30a6\u30f3\u30c9\u30672\u8a66\u5408\u3059\u308b\u3053\u3068\u306f\u306a\u304f\u3001\u30db\u30fc\u30e0\u3068\u30a2\u30a6\u30a7\u30fc\u3082\u5747\u7b49\u3067\u3059\u3002\u30b9\u30a4\u30b9\u5f0f\u306f\u907f\u3051\u3089\u308c\u308b\u9650\u308a\u518d\u6226\u306a\u3057\u3002\u30b3\u30fc\u30c8\u6570\u30fb\u8a66\u5408\u6642\u9593\u30fb\u958b\u59cb\u6642\u523b\u304b\u3089\u5168\u8a66\u5408\u306e\u958b\u59cb\u6642\u523b\u3068\u30b3\u30fc\u30c8\u3092\u5272\u308a\u5f53\u3066\u307e\u3059\u3002\u9806\u4f4d\u8868\u306f\u52dd\u3061\u70b9\u3001\u76f4\u63a5\u5bfe\u6c7a\u3001\u5f97\u5931\u70b9\u5dee\u306e\u9806\u3002\u6a2a\u5411\u304d\u306e\u5370\u5237\u7528PDF(64\u4eba\u307e\u3067\u8aad\u307f\u3084\u3059\u3044)\u3068CSV\u3092\u51fa\u529b\u3057\u307e\u3059\u3002"
},
"pt-BR": {
"subtitle": "Chaves, pontos corridos, su\u00ed\u00e7o",
"description": "Monte chaves de torneio no chat, registre resultados clicando no vencedor e imprima. Elimina\u00e7\u00e3o simples e dupla para 2 a 128 jogadores ou equipes: cabe\u00e7as de chave padr\u00e3o (o 1 enfrenta o \u00faltimo, o 1 e o 2 s\u00f3 podem se cruzar na final), folgas (byes) para os melhores cabe\u00e7as de chave quando o n\u00famero de participantes n\u00e3o \u00e9 pot\u00eancia de dois, disputa de terceiro lugar opcional, chave dos perdedores e grande final. Tabela de todos contra todos pelo m\u00e9todo do c\u00edrculo: cada dupla joga exatamente uma vez, ningu\u00e9m joga duas vezes na mesma rodada e mando de campo equilibrado. Sistema su\u00ed\u00e7o sem revanches quando \u00e9 poss\u00edvel evit\u00e1-las. Hor\u00e1rios em v\u00e1rias quadras ou campos. Classifica\u00e7\u00e3o por pontos, confronto direto e saldo. PDF em paisagem para imprimir (leg\u00edvel at\u00e9 64 jogadores) e CSV."
}
}
}
}
},
"apps": "./.app.json"
}
SHA-256: f5e2ce77b30e57c27f3582ec028ed4e6c217490c3c3c6d66f67ae6488ceb5b62