Round-robin ladders and match scores for small clubs. Players join by QR poster; no app, no account.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Bearer API key. Free key at https://ladder.rowb.app/signup (50 recorded matches/month, no card).
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.
Register one player by name. Returns a 6-character code and a personal URL so the player can be identified at the courts without an account.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Register one player by name. Returns a 6-character code and a personal URL so the player can be identified at the courts without an account.
| Argument | Type | Description |
|---|
| name* | string |
{
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string"
}
}
}Create or update the club ladder: club name and sport. Returns the join URL (the poster target) that players scan.
| Argument | Type | Description |
|---|---|---|
| club* | string | |
| sport | string |
{
"type": "object",
"required": [
"club"
],
"properties": {
"club": {
"type": "string"
},
"sport": {
"type": "string"
}
}
}The current table (rank, wins, losses, set percentage) plus the single most useful match to play next. Standings are computed with a fixed rule order, so the same results always give the same table.
No arguments.
{
"type": "object",
"properties": {}
}Record a finished match result. Identify players by name, numeric id, or 6-character code. Give the set score (sets_a, sets_b) and optionally the games.
| Argument | Type | Description |
|---|---|---|
| round | integer | |
| sets_a* | integer | |
| sets_b* | integer | |
| games_a | integer | |
| games_b | integer | |
| player_a* | string | |
| player_b* | string |
{
"type": "object",
"required": [
"player_a",
"player_b",
"sets_a",
"sets_b"
],
"properties": {
"round": {
"type": "integer"
},
"sets_a": {
"type": "integer"
},
"sets_b": {
"type": "integer"
},
"games_a": {
"type": "integer"
},
"games_b": {
"type": "integer"
},
"player_a": {
"type": "string"
},
"player_b": {
"type": "string"
}
}
}Put a match on the calendar before it is played. It appears as a pending card in the standings output.
| Argument | Type | Description |
|---|---|---|
| round | integer | |
| player_a* | string | |
| player_b* | string |
{
"type": "object",
"required": [
"player_a",
"player_b"
],
"properties": {
"round": {
"type": "integer"
},
"player_a": {
"type": "string"
},
"player_b": {
"type": "string"
}
}
}