Ladderboard — round-robin ladders and match scores for small clubs
Round-robin ladders and match scores for small clubs. Players join by QR poster; no app, no account.
Should I use this
Quality & Safety
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"board": {
"url": "https://ladder.rowb.app/mcp"
}
}
}Remote endpoints
https://ladder.rowb.app/mcpstreamable-httpWhat it can do
Tool inventory
Tools (5)
🟡create_ladder(club, sport)
Create or update the club ladder: club name and sport. Returns the join URL (the poster target) that players scan.
Input Schema
{
"type": "object",
"properties": {
"club": {
"type": "string"
},
"sport": {
"type": "string"
}
},
"required": [
"club"
]
}🟡add_player(name)
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.
Input Schema
{
"type": "object",
"properties": {
"name": {
"type": "string"
}
},
"required": [
"name"
]
}🟡record_match(player_a, player_b, sets_a, sets_b, games_a, ...)
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.
Input Schema
{
"type": "object",
"properties": {
"player_a": {
"type": "string"
},
"player_b": {
"type": "string"
},
"sets_a": {
"type": "integer"
},
"sets_b": {
"type": "integer"
},
"games_a": {
"type": "integer"
},
"games_b": {
"type": "integer"
},
"round": {
"type": "integer"
}
},
"required": [
"player_a",
"player_b",
"sets_a",
"sets_b"
]
}🟡schedule_match(player_a, player_b, round)
Put a match on the calendar before it is played. It appears as a pending card in the standings output.
Input Schema
{
"type": "object",
"properties": {
"player_a": {
"type": "string"
},
"player_b": {
"type": "string"
},
"round": {
"type": "integer"
}
},
"required": [
"player_a",
"player_b"
]
}🟡get_standings
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.
Input Schema
{
"type": "object",
"properties": {}
}Community
Evidence