Make a tournament bracket in the chat, record results by clicking the winners, and print it.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Use this when the user reports results of a tournament made with generate_tournament_bracket (or describes one) and wants the updated bracket, who advances, the standings table or what is next. Takes the same format and participants plus every result so far (winner or scores per match) and returns the advanced bracket, the round robin or Swiss table (points, head-to-head, score difference; Buchholz for Swiss), final places, the next Swiss round's pairings, and the next matches to play. Do not use to predict outcomes; it only records results the user gives.
Tournament format: single_elimination (knockout), double_elimination (out after two losses, losers bracket, grand final), round_robin (everyone plays everyone once; league), swiss (fixed number of rounds, players with equal scores meet, no rematches). Example: single_elimination
Paper size for the landscape PDF: letter (default) or a4. Example: a4
Tournament name for the bracket, PDF and CSV. Example: "Friday Ping Pong Cup"
Courts, tables, boards or fields available at the same time (1-64), used for the timetable. Example: 3
Results already played, in any order for elimination formats and round by round for Swiss. Each needs the players (p1, p2) or a match id, plus a winner or both scores. Example: [{"p1":"Ann","p2":"Finn","score1":21,"score2":12}]
standard (default): list order is the seed ranking, 1 plays the lowest seed, top seeds get the byes and seeds 1 and 2 can only meet in the final. random: a reproducible random draw (see random_seed), then placed like seeds. as_listed: fill the bracket top to bottom in list order, 1st vs 2nd, 3rd vs 4th, with byes spread evenly. Example: random
Round robin only: 1 (default) = every pair meets once; 2 = home and away (double round robin). Example: 2
Start time of the first matches, 24-hour HH:MM (default 09:00). Example: "18:30"
Round robin / Swiss table points for a win (default 3 for round robin, 1 for Swiss). Example: 2
Points for a draw (default 1 for round robin, 0.5 for Swiss). Example: 1
Points for a loss (default 0). Example: 0
Draw number for random seeding (1-999999). The same participants and number always give the same draw. Example: 4821
Players or teams, 2-128 unique names. With standard seeding the order is the ranking: first = seed 1. Example: ["Ann","Bob","Cy","Dee","Eve","Finn"]
Swiss only: number of rounds (default log2 of the field, rounded up; maximum depends on the field size). Example: 5
Changeover time between matches on a court, in minutes (0-120, default 0). Example: 5
Length of one match in minutes (5-600). Giving this adds start times and courts to every match. Example: 20
Double elimination only (default true): if the losers-bracket champion wins the grand final, a second deciding match is played, so nobody is out after one loss. Example: false
Use instead of participants when the user gives only a number: makes Team 1 ... Team N (2-128). Example: 12
Single elimination only: add a third-place match between the semifinal losers. Example: true
Use this when the user reports results of a tournament made with generate_tournament_bracket (or describes one) and wants the updated bracket, who advances, the standings table or what is next. Takes the same format and participants plus every result so far (winner or scores per match) and returns the advanced bracket, the round robin or Swiss table (points, head-to-head, score difference; Buchholz for Swiss), final places, the next Swiss round's pairings, and the next matches to play. Do not use to predict outcomes; it only records results the user gives.
| Argument | Type | Description |
|---|---|---|
| paper | string | Paper size for the landscape PDF: letter (default) or a4. Example: a4 |
| title | string | Tournament name for the bracket, PDF and CSV. Example: "Friday Ping Pong Cup" |
| courts | number | Courts, tables, boards or fields available at the same time (1-64), used for the timetable. Example: 3 |
| format* | string | Tournament format: single_elimination (knockout), double_elimination (out after two losses, losers bracket, grand final), round_robin (everyone plays everyone once; league), swiss (fixed number of rounds, players with equal scores meet, no rematches). Example: single_elimination |
| results | array | Results already played, in any order for elimination formats and round by round for Swiss. Each needs the players (p1, p2) or a match id, plus a winner or both scores. Example: [{"p1":"Ann","p2":"Finn","score1":21,"score2":12}] |
| seeding | string | standard (default): list order is the seed ranking, 1 plays the lowest seed, top seeds get the byes and seeds 1 and 2 can only meet in the final. random: a reproducible random draw (see random_seed), then placed like seeds. as_listed: fill the bracket top to bottom in list order, 1st vs 2nd, 3rd vs 4th, with byes spread evenly. Example: random |
| meetings | number | Round robin only: 1 (default) = every pair meets once; 2 = home and away (double round robin). Example: 2 |
| start_time | string | Start time of the first matches, 24-hour HH:MM (default 09:00). Example: "18:30" |
| win_points | number | Round robin / Swiss table points for a win (default 3 for round robin, 1 for Swiss). Example: 2 |
| draw_points | number | Points for a draw (default 1 for round robin, 0.5 for Swiss). Example: 1 |
| loss_points | number | Points for a loss (default 0). Example: 0 |
| random_seed | number | Draw number for random seeding (1-999999). The same participants and number always give the same draw. Example: 4821 |
| participants | array | Players or teams, 2-128 unique names. With standard seeding the order is the ranking: first = seed 1. Example: ["Ann","Bob","Cy","Dee","Eve","Finn"] |
| swiss_rounds | number | Swiss only: number of rounds (default log2 of the field, rounded up; maximum depends on the field size). Example: 5 |
| break_minutes | number | Changeover time between matches on a court, in minutes (0-120, default 0). Example: 5 |
| match_minutes | number | Length of one match in minutes (5-600). Giving this adds start times and courts to every match. Example: 20 |
| grand_final_reset | boolean | Double elimination only (default true): if the losers-bracket champion wins the grand final, a second deciding match is played, so nobody is out after one loss. Example: false |
| participant_count | number | Use instead of participants when the user gives only a number: makes Team 1 ... Team N (2-128). Example: 12 |
| third_place_match | boolean | Single elimination only: add a third-place match between the semifinal losers. Example: true |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"format"
],
"properties": {
"paper": {
"enum": [
"letter",
"a4"
],
"type": "string",
"description": "Paper size for the landscape PDF: letter (default) or a4. Example: a4"
},
"title": {
"type": "string",
"maxLength": 100,
"description": "Tournament name for the bracket, PDF and CSV. Example: \"Friday Ping Pong Cup\""
},
"courts": {
"type": "number",
"description": "Courts, tables, boards or fields available at the same time (1-64), used for the timetable. Example: 3"
},
"format": {
"enum": [
"single_elimination",
"double_elimination",
"round_robin",
"swiss"
],
"type": "string",
"description": "Tournament format: single_elimination (knockout), double_elimination (out after two losses, losers bracket, grand final), round_robin (everyone plays everyone once; league), swiss (fixed number of rounds, players with equal scores meet, no rematches). Example: single_elimination"
},
"results": {
"type": "array",
"items": {
"type": "object",
"properties": {
"p1": {
"type": "string",
"maxLength": 80,
"description": "First player or team in this result, e.g. \"Ann\"."
},
"p2": {
"type": "string",
"maxLength": 80,
"description": "Second player or team, e.g. \"Bob\"."
},
"match": {
"type": "string",
"maxLength": 12,
"description": "Match id from the bracket or schedule, e.g. \"M5\". Optional when p1 and p2 are given."
},
"score1": {
"type": "number",
"description": "Score of p1 (or of the match's first slot when only match is given), e.g. 21."
},
"score2": {
"type": "number",
"description": "Score of p2, e.g. 15."
},
"winner": {
"type": "string",
"maxLength": 80,
"description": "Name of the winner, e.g. \"Ann\", or \"draw\" (round robin and Swiss only). Can be left out when both scores are given."
}
}
},
"maxItems": 600,
"description": "Results already played, in any order for elimination formats and round by round for Swiss. Each needs the players (p1, p2) or a match id, plus a winner or both scores. Example: [{\"p1\":\"Ann\",\"p2\":\"Finn\",\"score1\":21,\"score2\":12}]"
},
"seeding": {
"enum": [
"standard",
"random",
"as_listed"
],
"type": "string",
"description": "standard (default): list order is the seed ranking, 1 plays the lowest seed, top seeds get the byes and seeds 1 and 2 can only meet in the final. random: a reproducible random draw (see random_seed), then placed like seeds. as_listed: fill the bracket top to bottom in list order, 1st vs 2nd, 3rd vs 4th, with byes spread evenly. Example: random"
},
"meetings": {
"type": "number",
"description": "Round robin only: 1 (default) = every pair meets once; 2 = home and away (double round robin). Example: 2"
},
"start_time": {
"type": "string",
"maxLength": 5,
"description": "Start time of the first matches, 24-hour HH:MM (default 09:00). Example: \"18:30\""
},
"win_points": {
"type": "number",
"description": "Round robin / Swiss table points for a win (default 3 for round robin, 1 for Swiss). Example: 2"
},
"draw_points": {
"type": "number",
"description": "Points for a draw (default 1 for round robin, 0.5 for Swiss). Example: 1"
},
"loss_points": {
"type": "number",
"description": "Points for a loss (default 0). Example: 0"
},
"random_seed": {
"type": "number",
"description": "Draw number for random seeding (1-999999). The same participants and number always give the same draw. Example: 4821"
},
"participants": {
"type": "array",
"items": {
"type": "string",
"maxLength": 200
},
"maxItems": 200,
"description": "Players or teams, 2-128 unique names. With standard seeding the order is the ranking: first = seed 1. Example: [\"Ann\",\"Bob\",\"Cy\",\"Dee\",\"Eve\",\"Finn\"]"
},
"swiss_rounds": {
"type": "number",
"description": "Swiss only: number of rounds (default log2 of the field, rounded up; maximum depends on the field size). Example: 5"
},
"break_minutes": {
"type": "number",
"description": "Changeover time between matches on a court, in minutes (0-120, default 0). Example: 5"
},
"match_minutes": {
"type": "number",
"description": "Length of one match in minutes (5-600). Giving this adds start times and courts to every match. Example: 20"
},
"grand_final_reset": {
"type": "boolean",
"description": "Double elimination only (default true): if the losers-bracket champion wins the grand final, a second deciding match is played, so nobody is out after one loss. Example: false"
},
"participant_count": {
"type": "number",
"description": "Use instead of participants when the user gives only a number: makes Team 1 ... Team N (2-128). Example: 12"
},
"third_place_match": {
"type": "boolean",
"description": "Single elimination only: add a third-place match between the semifinal losers. Example: true"
}
}
}Use this when the user wants a tournament bracket or schedule (tournament bracket maker, bracket generator, single elimination or double elimination bracket, round robin schedule generator, Swiss pairings, a bracket for 6, 10 or 12 teams with byes). Builds the full structure for 2-128 players or teams: standard seeding so top seeds meet last, byes for the top seeds when the field is not a power of two, optional third-place match, grand final reset, round robin via the circle method with balanced home/away, Swiss round 1, optional timetable over several courts, a printable PDF bracket and a CSV schedule. Results already known can be included to advance winners. Does not predict winners, fill in picks for famous tournaments, or schedule leagues with venue or travel constraints.
| Argument | Type | Description |
|---|---|---|
| paper | string | Paper size for the landscape PDF: letter (default) or a4. Example: a4 |
| title | string | Tournament name for the bracket, PDF and CSV. Example: "Friday Ping Pong Cup" |
| courts | number | Courts, tables, boards or fields available at the same time (1-64), used for the timetable. Example: 3 |
| format* | string | Tournament format: single_elimination (knockout), double_elimination (out after two losses, losers bracket, grand final), round_robin (everyone plays everyone once; league), swiss (fixed number of rounds, players with equal scores meet, no rematches). Example: single_elimination |
| results |
| array |
| Results already played, in any order for elimination formats and round by round for Swiss. Each needs the players (p1, p2) or a match id, plus a winner or both scores. Example: [{"p1":"Ann","p2":"Finn","score1":21,"score2":12}] |
| seeding | string | standard (default): list order is the seed ranking, 1 plays the lowest seed, top seeds get the byes and seeds 1 and 2 can only meet in the final. random: a reproducible random draw (see random_seed), then placed like seeds. as_listed: fill the bracket top to bottom in list order, 1st vs 2nd, 3rd vs 4th, with byes spread evenly. Example: random |
| meetings | number | Round robin only: 1 (default) = every pair meets once; 2 = home and away (double round robin). Example: 2 |
| start_time | string | Start time of the first matches, 24-hour HH:MM (default 09:00). Example: "18:30" |
| win_points | number | Round robin / Swiss table points for a win (default 3 for round robin, 1 for Swiss). Example: 2 |
| draw_points | number | Points for a draw (default 1 for round robin, 0.5 for Swiss). Example: 1 |
| loss_points | number | Points for a loss (default 0). Example: 0 |
| random_seed | number | Draw number for random seeding (1-999999). The same participants and number always give the same draw. Example: 4821 |
| participants | array | Players or teams, 2-128 unique names. With standard seeding the order is the ranking: first = seed 1. Example: ["Ann","Bob","Cy","Dee","Eve","Finn"] |
| swiss_rounds | number | Swiss only: number of rounds (default log2 of the field, rounded up; maximum depends on the field size). Example: 5 |
| break_minutes | number | Changeover time between matches on a court, in minutes (0-120, default 0). Example: 5 |
| match_minutes | number | Length of one match in minutes (5-600). Giving this adds start times and courts to every match. Example: 20 |
| grand_final_reset | boolean | Double elimination only (default true): if the losers-bracket champion wins the grand final, a second deciding match is played, so nobody is out after one loss. Example: false |
| participant_count | number | Use instead of participants when the user gives only a number: makes Team 1 ... Team N (2-128). Example: 12 |
| third_place_match | boolean | Single elimination only: add a third-place match between the semifinal losers. Example: true |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"format"
],
"properties": {
"paper": {
"enum": [
"letter",
"a4"
],
"type": "string",
"description": "Paper size for the landscape PDF: letter (default) or a4. Example: a4"
},
"title": {
"type": "string",
"maxLength": 100,
"description": "Tournament name for the bracket, PDF and CSV. Example: \"Friday Ping Pong Cup\""
},
"courts": {
"type": "number",
"description": "Courts, tables, boards or fields available at the same time (1-64), used for the timetable. Example: 3"
},
"format": {
"enum": [
"single_elimination",
"double_elimination",
"round_robin",
"swiss"
],
"type": "string",
"description": "Tournament format: single_elimination (knockout), double_elimination (out after two losses, losers bracket, grand final), round_robin (everyone plays everyone once; league), swiss (fixed number of rounds, players with equal scores meet, no rematches). Example: single_elimination"
},
"results": {
"type": "array",
"items": {
"type": "object",
"properties": {
"p1": {
"type": "string",
"maxLength": 80,
"description": "First player or team in this result, e.g. \"Ann\"."
},
"p2": {
"type": "string",
"maxLength": 80,
"description": "Second player or team, e.g. \"Bob\"."
},
"match": {
"type": "string",
"maxLength": 12,
"description": "Match id from the bracket or schedule, e.g. \"M5\". Optional when p1 and p2 are given."
},
"score1": {
"type": "number",
"description": "Score of p1 (or of the match's first slot when only match is given), e.g. 21."
},
"score2": {
"type": "number",
"description": "Score of p2, e.g. 15."
},
"winner": {
"type": "string",
"maxLength": 80,
"description": "Name of the winner, e.g. \"Ann\", or \"draw\" (round robin and Swiss only). Can be left out when both scores are given."
}
}
},
"maxItems": 600,
"description": "Results already played, in any order for elimination formats and round by round for Swiss. Each needs the players (p1, p2) or a match id, plus a winner or both scores. Example: [{\"p1\":\"Ann\",\"p2\":\"Finn\",\"score1\":21,\"score2\":12}]"
},
"seeding": {
"enum": [
"standard",
"random",
"as_listed"
],
"type": "string",
"description": "standard (default): list order is the seed ranking, 1 plays the lowest seed, top seeds get the byes and seeds 1 and 2 can only meet in the final. random: a reproducible random draw (see random_seed), then placed like seeds. as_listed: fill the bracket top to bottom in list order, 1st vs 2nd, 3rd vs 4th, with byes spread evenly. Example: random"
},
"meetings": {
"type": "number",
"description": "Round robin only: 1 (default) = every pair meets once; 2 = home and away (double round robin). Example: 2"
},
"start_time": {
"type": "string",
"maxLength": 5,
"description": "Start time of the first matches, 24-hour HH:MM (default 09:00). Example: \"18:30\""
},
"win_points": {
"type": "number",
"description": "Round robin / Swiss table points for a win (default 3 for round robin, 1 for Swiss). Example: 2"
},
"draw_points": {
"type": "number",
"description": "Points for a draw (default 1 for round robin, 0.5 for Swiss). Example: 1"
},
"loss_points": {
"type": "number",
"description": "Points for a loss (default 0). Example: 0"
},
"random_seed": {
"type": "number",
"description": "Draw number for random seeding (1-999999). The same participants and number always give the same draw. Example: 4821"
},
"participants": {
"type": "array",
"items": {
"type": "string",
"maxLength": 200
},
"maxItems": 200,
"description": "Players or teams, 2-128 unique names. With standard seeding the order is the ranking: first = seed 1. Example: [\"Ann\",\"Bob\",\"Cy\",\"Dee\",\"Eve\",\"Finn\"]"
},
"swiss_rounds": {
"type": "number",
"description": "Swiss only: number of rounds (default log2 of the field, rounded up; maximum depends on the field size). Example: 5"
},
"break_minutes": {
"type": "number",
"description": "Changeover time between matches on a court, in minutes (0-120, default 0). Example: 5"
},
"match_minutes": {
"type": "number",
"description": "Length of one match in minutes (5-600). Giving this adds start times and courts to every match. Example: 20"
},
"grand_final_reset": {
"type": "boolean",
"description": "Double elimination only (default true): if the losers-bracket champion wins the grand final, a second deciding match is played, so nobody is out after one loss. Example: false"
},
"participant_count": {
"type": "number",
"description": "Use instead of participants when the user gives only a number: makes Team 1 ... Team N (2-128). Example: 12"
},
"third_place_match": {
"type": "boolean",
"description": "Single elimination only: add a third-place match between the semifinal losers. Example: true"
}
}
}