Rotate partners, print & score
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 wants to check social doubles schedule limits before making a rotating partners schedule. Reports usable courts, balanced sit-out totals, unavoidable consecutive rests and a counting lower bound on partner repeats for 4 to 48 players and 1 to 24 rounds. Does not claim that bounded scheduling reaches the lower bound or balance player ratings.
Available courts, a whole number from 1 to 12, e.g. 2. Unfillable courts are left unused.
Number of rounds, a whole number from 1 to 24, e.g. 7.
4 to 48 distinct player names, e.g. ["Alex","Blair","Casey","Drew"]. Names are limited to 40 characters.
Repeatable seed, a whole number from 0 to 4294967295, e.g. 42. Defaults to 1; four players in one round enumerate ordered rotations before repeating (24 without groups, 16 with groups). Larger configurations use seeded bounded search.
Optional group A names, e.g. ["Alex","Blair"]. Supply both groups; each player must be in one group.
Optional group B names, e.g. ["Casey","Drew"]. Partners cross groups; unequal groups may be refused if balanced rests are impossible.
Use this when the user wants to check social doubles schedule limits before making a rotating partners schedule. Reports usable courts, balanced sit-out totals, unavoidable consecutive rests and a counting lower bound on partner repeats for 4 to 48 players and 1 to 24 rounds. Does not claim that bounded scheduling reaches the lower bound or balance player ratings.
| Argument | Type | Description |
|---|---|---|
| seed | number | Repeatable seed, a whole number from 0 to 4294967295, e.g. 42. Defaults to 1; four players in one round enumerate ordered rotations before repeating (24 without groups, 16 with groups). Larger configurations use seeded bounded search. |
| courts* | number | Available courts, a whole number from 1 to 12, e.g. 2. Unfillable courts are left unused. |
| rounds* | number | Number of rounds, a whole number from 1 to 24, e.g. 7. |
| group_a | array | Optional group A names, e.g. ["Alex","Blair"]. Supply both groups; each player must be in one group. |
| group_b | array | Optional group B names, e.g. ["Casey","Drew"]. Partners cross groups; unequal groups may be refused if balanced rests are impossible. |
| players* | array | 4 to 48 distinct player names, e.g. ["Alex","Blair","Casey","Drew"]. Names are limited to 40 characters. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"players",
"courts",
"rounds"
],
"properties": {
"seed": {
"type": "number",
"description": "Repeatable seed, a whole number from 0 to 4294967295, e.g. 42. Defaults to 1; four players in one round enumerate ordered rotations before repeating (24 without groups, 16 with groups). Larger configurations use seeded bounded search."
},
"courts": {
"type": "number",
"description": "Available courts, a whole number from 1 to 12, e.g. 2. Unfillable courts are left unused."
},
"rounds": {
"type": "number",
"description": "Number of rounds, a whole number from 1 to 24, e.g. 7."
},
"group_a": {
"type": "array",
"items": {
"type": "string",
"maxLength": 160,
"description": "Player name, up to 40 characters, e.g. Alex."
},
"maxItems": 46,
"description": "Optional group A names, e.g. [\"Alex\",\"Blair\"]. Supply both groups; each player must be in one group."
},
"group_b": {
"type": "array",
"items": {
"type": "string",
"maxLength": 160,
"description": "Player name, up to 40 characters, e.g. Alex."
},
"maxItems": 46,
"description": "Optional group B names, e.g. [\"Casey\",\"Drew\"]. Partners cross groups; unequal groups may be refused if balanced rests are impossible."
},
"players": {
"type": "array",
"items": {
"type": "string",
"maxLength": 160,
"description": "Player name, up to 40 characters, e.g. Alex."
},
"maxItems": 48,
"description": "4 to 48 distinct player names, e.g. [\"Alex\",\"Blair\",\"Casey\",\"Drew\"]. Names are limited to 40 characters."
}
}
}Use this when the user wants a pickleball round robin generator, pickleball mixer, rotating partners schedule, tennis mixer schedule or padel americano. Makes balanced rests, partner rotations, a fairness summary, printable PDF score sheets and CSV for 4 to 48 players, 1 to 12 courts and 1 to 24 rounds. Does not balance ratings or make fixed-team brackets; bounded optimization can leave partner repeats above the lower bound.
| Argument | Type | Description |
|---|---|---|
| seed | number | Repeatable seed, a whole number from 0 to 4294967295, e.g. 42. Defaults to 1; four players in one round enumerate ordered rotations before repeating (24 without groups, 16 with groups). Larger configurations use seeded bounded search. |
| paper | string | Print sheet size, e.g. "letter" (US Letter, default) or "a4". |
| courts* | number | Available courts, a whole number from 1 to 12, e.g. 2. Unfillable courts are left unused. |
| rounds* | number | Number of rounds, a whole number from 1 to 24, e.g. 7. |
| group_a | array | Optional group A names, e.g. ["Alex","Blair"]. Supply both groups; each player must be in one group. |
| group_b | array | Optional group B names, e.g. ["Casey","Drew"]. Partners cross groups; unequal groups may be refused if balanced rests are impossible. |
Use this when the user wants individual standings from a social doubles schedule and game scores. Counts wins, losses, draws, points for, points against, difference and win percent for up to 48 players and 288 scores. Accepts a generated schedule_request or an indexed schedule; unscored games stay pending. Does not use rating systems or governing tournament rules.
| Argument | Type | Description |
|---|---|---|
| scores* | array | Game scores, e.g. [{round:1,court:1,score_a:11,score_b:7}]. Ties count as draws; supply at least one score. |
| schedule* | any | The returned schedule_request, e.g. {players:["Alex","Blair","Casey","Drew"],courts:1,rounds:3,seed:42}, or a full indexed schedule JSON. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"schedule",
"scores"
],
"properties": {
"scores": {
"type": "array",
"items": {
"type": "object",
"required": [
"round",
"court",
"score_a",
"score_b"
],
"properties": {
"court": {
"type": "number",
"description": "Court number, e.g. 1."
},
"round": {
"type": "number",
"description": "Round number, e.g. 1."
},
"score_a": {
"type": "number",
"description": "Team A points, a whole number 0 to 999, e.g. 11."
},
"score_b": {
"type": "number",
"description": "Team B points, a whole number 0 to 999, e.g. 7."
}
}
},
"maxItems": 288,
"description": "Game scores, e.g. [{round:1,court:1,score_a:11,score_b:7}]. Ties count as draws; supply at least one score."
},
"schedule": {
"anyOf": [
{
"type": "object",
"required": [
"players",
"courts",
"rounds"
],
"properties": {
"seed": {
"type": "number",
"description": "Repeatable seed, a whole number from 0 to 4294967295, e.g. 42. Defaults to 1; four players in one round enumerate ordered rotations before repeating (24 without groups, 16 with groups). Larger configurations use seeded bounded search."
},
"courts": {
"type": "number",
"description": "Available courts, a whole number from 1 to 12, e.g. 2. Unfillable courts are left unused."
},
"rounds": {
"type": "number",
"description": "Number of rounds, a whole number from 1 to 24, e.g. 7."
},
"group_a": {
"type": "array",
"items": {
"type": "string",
"maxLength": 160,
"description": "Player name, up to 40 characters, e.g. Alex."
},
"maxItems": 46,
"description": "Optional group A names, e.g. [\"Alex\",\"Blair\"]. Supply both groups; each player must be in one group."
},
"group_b": {
"type": "array",
"items": {
"type": "string",
"maxLength": 160,
"description": "Player name, up to 40 characters, e.g. Alex."
},
"maxItems": 46,
"description": "Optional group B names, e.g. [\"Casey\",\"Drew\"]. Partners cross groups; unequal groups may be refused if balanced rests are impossible."
},
"players": {
"type": "array",
"items": {
"type": "string",
"maxLength": 160,
"description": "Player name, up to 40 characters, e.g. Alex."
},
"maxItems": 48,
"description": "4 to 48 distinct player names, e.g. [\"Alex\",\"Blair\",\"Casey\",\"Drew\"]. Names are limited to 40 characters."
}
}
},
{
"type": "object",
"required": [
"players",
"rounds"
],
"properties": {
"rounds": {
"type": "array",
"items": {
"type": "object",
"required": [
"round",
"matches"
],
"properties": {
"round": {
"type": "number",
"description": "Round number, e.g. 1."
},
"matches": {
"type": "array",
"items": {
"type": "object",
"required": [
"court",
"team_a",
"team_b"
],
"properties": {
"court": {
"type": "number",
"description": "Court number, e.g. 1."
},
"team_a": {
"type": "array",
"items": {
"type": "number",
"description": "Zero-based player index, e.g. 0 for the first player."
},
"maxItems": 2,
"description": "Team A player indexes, e.g. [0,1]."
},
"team_b": {
"type": "array",
"items": {
"type": "number",
"description": "Zero-based player index, e.g. 0 for the first player."
},
"maxItems": 2,
"description": "Team B player indexes, e.g. [2,3]."
}
}
},
"maxItems": 12,
"description": "Doubles matches, e.g. [{court:1,team_a:[0,1],team_b:[2,3]}]."
},
"sit_out": {
"type": "array",
"items": {
"type": "number",
"description": "Zero-based player index, e.g. 0 for the first player."
},
"maxItems": 48,
"description": "Indexes sitting out, e.g. [4]. Omit to calculate from matches."
}
}
},
"maxItems": 24,
"description": "The schedule rounds, e.g. one round with one court."
},
"players": {
"type": "array",
"items": {
"type": "string",
"maxLength": 160,
"description": "Player name, up to 40 characters, e.g. Alex."
},
"maxItems": 48,
"description": "4 to 48 distinct player names, e.g. [\"Alex\",\"Blair\",\"Casey\",\"Drew\"]. Names are limited to 40 characters."
}
}
}
],
"description": "The returned schedule_request, e.g. {players:[\"Alex\",\"Blair\",\"Casey\",\"Drew\"],courts:1,rounds:3,seed:42}, or a full indexed schedule JSON."
}
}
}| players* | array | 4 to 48 distinct player names, e.g. ["Alex","Blair","Casey","Drew"]. Names are limited to 40 characters. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"players",
"courts",
"rounds"
],
"properties": {
"seed": {
"type": "number",
"description": "Repeatable seed, a whole number from 0 to 4294967295, e.g. 42. Defaults to 1; four players in one round enumerate ordered rotations before repeating (24 without groups, 16 with groups). Larger configurations use seeded bounded search."
},
"paper": {
"enum": [
"letter",
"a4"
],
"type": "string",
"description": "Print sheet size, e.g. \"letter\" (US Letter, default) or \"a4\"."
},
"courts": {
"type": "number",
"description": "Available courts, a whole number from 1 to 12, e.g. 2. Unfillable courts are left unused."
},
"rounds": {
"type": "number",
"description": "Number of rounds, a whole number from 1 to 24, e.g. 7."
},
"group_a": {
"type": "array",
"items": {
"type": "string",
"maxLength": 160,
"description": "Player name, up to 40 characters, e.g. Alex."
},
"maxItems": 46,
"description": "Optional group A names, e.g. [\"Alex\",\"Blair\"]. Supply both groups; each player must be in one group."
},
"group_b": {
"type": "array",
"items": {
"type": "string",
"maxLength": 160,
"description": "Player name, up to 40 characters, e.g. Alex."
},
"maxItems": 46,
"description": "Optional group B names, e.g. [\"Casey\",\"Drew\"]. Partners cross groups; unequal groups may be refused if balanced rests are impossible."
},
"players": {
"type": "array",
"items": {
"type": "string",
"maxLength": 160,
"description": "Player name, up to 40 characters, e.g. Alex."
},
"maxItems": 48,
"description": "4 to 48 distinct player names, e.g. [\"Alex\",\"Blair\",\"Casey\",\"Drew\"]. Names are limited to 40 characters."
}
}
}