sh. kicksma/ kicksmash
by kicksma.sh · remote · no sign-in to list tools · v1.1.0 · published by sh.kicksma
Padel matches for people and agents: create, share one link, join, americano schedules, levels.
15 tools: 1 can delete or cancel things, 11 change things and 3 only read.
Scanned Oct 21, 2026
- Deletes or cancels1Claude Code: deny: see these tools
- Can't be undone0Claude Code: ask
- Changes things11Claude Code: ask: see these tools
- Only reads3Claude Code: allow: see these tools
5 checks matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.
claude mcp add --transport http kicksmash https://kicksma.sh/mcpFindings
Matches of fixed checks, with the text they matched.
- Warnget_match
The server marks "get_match" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "get_match" says "get": a word for reading.
- Warnfind_matches
The server marks "find_matches" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "find_matches" says "find": a word for reading.
- Warnget_group
The server marks "get_group" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "get_group" says "get": a word for reading.
The server marks "generate_schedule" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "generate_schedule" says "generate": a word for a change.
- Warncancel_lesson
The server marks "cancel_lesson" not destructive (destructiveHint: false), and its own name, description or input give the class "destructive".
What this check looks forMatched text
annotations: {"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}; The name "cancel_lesson" says "cancel": a word for removing or ending something.
Tools
Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.
15 tools
Deletes or cancels 1Claude Code: deny
cancel_lessonCancel a student's lesson under the coach's rules; the outcome says whether it was refunded, covered by a free pass, or counted.1 finding
Why it is in this group
- The name "cancel_lesson" says "cancel": a word for removing or ending something.
- The server marks it not destructive (destructiveHint: false), but an annotation never lowers a class.
Findings
- Warn
The server marks "cancel_lesson" not destructive (destructiveHint: false), and its own name, description or input give the class "destructive".
What this check looks forMatched text
annotations: {"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}; The name "cancel_lesson" says "cancel": a word for removing or ending something.
Description, as the server wrote it Cancel a student's lesson under the coach's rules; the outcome says whether it was refunded, covered by a free pass, or counted. Say the rule to the person before cancelling late.
Annotations the server declares
- title: Cancel a lesson
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: false
Changes things 11Claude Code: ask
about_kicksmashWhat Kicksmash is and how to use it: matches, levels, groups, boards, the API and what we ask of assistants.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it What Kicksmash is and how to use it: matches, levels, groups, boards, the API and what we ask of assistants. Read this once before acting.
Annotations the server declares
- title: About Kicksmash
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
book_lessonBook one lesson at a free start for an accepted student (their personal token).No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
Description, as the server wrote it Book one lesson at a free start for an accepted student (their personal token). Draws from their open package when they have one. Confirm the time with the person first.
Annotations the server declares
- title: Book a lesson
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: false
coach_slotsFree starts inside a coach's hours for the next days (default 14).No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it Free starts inside a coach's hours for the next days (default 14). Only accepted students can book them: request_coach first.
Annotations the server declares
- title: A coach's free times
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
create_api_keyGet a free key instantly for roomier limits and webhooks.No findings
Why it is in this group
- The name "create_api_key" says "create": a word for a change.
Description, as the server wrote it Get a free key instantly for roomier limits and webhooks. Shown once. Not needed for reading or for a few writes a day.
Annotations the server declares
- title: Create an API key
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: false
create_matchCreate a padel match (4 players) or an americano tournament for a person.No findings
Why it is in this group
- The name "create_match" says "create": a word for a change.
Description, as the server wrote it Create a padel match (4 players) or an americano tournament for a person. A tournament may keep fixed pairs (fixedPairs: true): two partners play every round together and the table ranks pairs. Returns the share link for the players and the organizer's private links. Give the person all links; keep personalToken and manageUrl private. Ask before creating; one request, one match.
Annotations the server declares
- title: Create a match
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: false
find_matchesOpen, organizer-listed matches at a venue (its public board), with spots left and level ranges.1 finding
Why it is in this group
- The name "find_matches" says "find": a word for reading.
- The description's first verb is "open": a word for a change.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Findings
- Warn
The server marks "find_matches" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "find_matches" says "find": a word for reading.
Description, as the server wrote it Open, organizer-listed matches at a venue (its public board), with spots left and level ranges. Give the venue name; the slug is derived.
Annotations the server declares
- title: Find open matches at a venue
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
generate_scheduleRounds of rotating-partner doubles for 4 to 64 players.1 finding
Why it is in this group
- The name "generate_schedule" says "generate": a word for a change.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Findings
- Warn
The server marks "generate_schedule" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "generate_schedule" says "generate": a word for a change.
Description, as the server wrote it Rounds of rotating-partner doubles for 4 to 64 players. Exact when the field is in fours (every pair partners once in players−1 rounds), fair sit-outs otherwise. Nothing is stored.
Annotations the server declares
- title: Generate an americano schedule
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
get_groupA crew that plays together: members' first names and count (their levels are for members only, so null here), weekly slot, whether it asks to join, upcoming matches, calendar feed.1 finding
Why it is in this group
- The name "get_group" says "get": a word for reading.
- The input takes a statement or command to run (input.code), which can change anything it can reach.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Findings
- Warn
The server marks "get_group" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "get_group" says "get": a word for reading.
Description, as the server wrote it A crew that plays together: members' first names and count (their levels are for members only, so null here), weekly slot, whether it asks to join, upcoming matches, calendar feed.
Annotations the server declares
- title: Get a group
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
get_matchA match or tournament by its 4-character code: players with levels, spots left, venue, time, level range, result.1 finding
Why it is in this group
- The name "get_match" says "get": a word for reading.
- The input takes a statement or command to run (input.code), which can change anything it can reach.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Findings
- Warn
The server marks "get_match" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "get_match" says "get": a word for reading.
Description, as the server wrote it A match or tournament by its 4-character code: players with levels, spots left, venue, time, level range, result. Public data only.
Annotations the server declares
- title: Get a match
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
join_matchPut a person into a match by first name (or by their personal token from an earlier call).No findings
Why it is in this group
- The description's first verb is "put": a word for a change.
- The input takes a statement or command to run (input.code), which can change anything it can reach.
Description, as the server wrote it Put a person into a match by first name (or by their personal token from an earlier call). Handles waitlists and level ranges; when the level is outside the range, the organizer is asked to approve, unless the player already played a finished, scored match with that organizer. On a fixed-pairs tournament pass partner (a first name) to sign up as a pair: the answer's partner.inviteUrl is the link the partner opens to claim their spot; without partner the person is listed as needing a partner. For a group's match the answer says whether the person is now a member of the group; a group that asks to join is never joined through a match. A place the organizer holds for the same name refuses the join (name_held) and writes nothing: if it is that person, they take the place on the match page; if not, they join with a fuller name, such as a last name. A name (with no token) that a player already in the match carries refuses the join (name_seated) and writes nothing: if it is that player, call again with their personal token; if not, join with a fuller name.
Annotations the server declares
- title: Join a match
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: false
request_coachAsk a coach to accept a person as their student, by first name or personal token.No findings
Why it is in this group
- The name "request_coach" says "request": a word for a change.
Description, as the server wrote it Ask a coach to accept a person as their student, by first name or personal token. The coach answers with one tap. Keep the returned personalToken private to the student; book_lesson needs it. Ask the person before calling.
Annotations the server declares
- title: Ask to become a student
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: false
Only reads 3Claude Code: allow
find_clubsPadel clubs: booking link and platform, courts, today's free courts (from the club's own calendar feed, or read from its booking platform's public page: freeCourts.source says whic…No findings
Why it is in this group
- The name "find_clubs" says "find": a word for reading.
Description, as the server wrote it Padel clubs: booking link and platform, courts, today's free courts (from the club's own calendar feed, or read from its booking platform's public page: freeCourts.source says which, and freeCourts.platform names it), founding status. Every row says `claimed`: true when the club runs the page itself, false when Kicksmash listed it from public sources, where the courts and links are our reading and may be out of date. Pass include:'listed' to get both — that is what answers "where can I play here?". Filter by city (phuket, singapore) or ask for one club by name.
Annotations the server declares
- title: Find clubs
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
find_coachesPadel coaches who listed their page: clubs, lesson length, languages, the rules students book under (cancellation cutoff, free late passes, notice).No findings
Why it is in this group
- The name "find_coaches" says "find": a word for reading.
Description, as the server wrote it Padel coaches who listed their page: clubs, lesson length, languages, the rules students book under (cancellation cutoff, free late passes, notice). Filter by city. Prices are the coach's to tell; nothing is paid through Kicksmash.
Annotations the server declares
- title: Find coaches
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
find_seriesTournament series: same weekday and time every week, fortnight or month, with the next edition to sign up for and the past podiums.No findings
Why it is in this group
- The name "find_series" says "find": a word for reading.
Description, as the server wrote it Tournament series: same weekday and time every week, fortnight or month, with the next edition to sign up for and the past podiums. Filter by city, or pass a slug for one series. Players sign up on the edition's match page.
Annotations the server declares
- title: Find series (Opens that repeat)
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.
Install
Pinned to version 1.1.0. Values in angle brackets are yours to fill in.
claude mcp add --transport http kicksmash https://kicksma.sh/mcpRun in a terminal.
Claude Code permissions
Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [
"mcp__kicksmash__find_clubs",
"mcp__kicksmash__find_series",
"mcp__kicksmash__find_coaches"
],
"ask": [
"mcp__kicksmash__about_kicksmash",
"mcp__kicksmash__get_match",
"mcp__kicksmash__find_matches",
"mcp__kicksmash__get_group",
"mcp__kicksmash__generate_schedule",
"mcp__kicksmash__coach_slots",
"mcp__kicksmash__request_coach",
"mcp__kicksmash__book_lesson",
"mcp__kicksmash__create_match",
"mcp__kicksmash__join_match",
"mcp__kicksmash__create_api_key"
],
"deny": [
"mcp__kicksmash__cancel_lesson"
]
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as kicksmash. Review it before you use it.