npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

smatch-mcp

v1.7.3

Published

MCP server for smatch club administration

Readme

smatch-mcp

MCP server for Smatch club administration — courts, reservations, tournaments, matches, players, staff, and payments.

Setup

npm install smatch-mcp

Environment variables

| Variable | Required | Description | |----------|----------|-------------| | SMATCH_MONGODB_URI | Yes | MongoDB connection URI | | SMATCH_CLUB_ID | No | Club ID for single-club mode. Omit for admin mode (multi-club) |

Claude Desktop / MCP config

{
  "mcpServers": {
    "smatch": {
      "command": "npx",
      "args": ["-y", "smatch-mcp"],
      "env": {
        "SMATCH_MONGODB_URI": "mongodb+srv://...",
        "SMATCH_CLUB_ID": "optional-club-id"
      }
    }
  }
}

Tools

Context

| Tool | Description | |------|-------------| | list_clubs | List all clubs (admin mode only) | | get_club_context | Full club dashboard: info, courts, reservations, matches, tournaments, stats | | update_club_profile | Update club profile (name, description, logo, contact, etc.) |

Courts

| Tool | Description | |------|-------------| | list_courts | List all courts with rates and details | | get_availability | Court availability for a specific date | | create_court | Create a new court | | update_court | Update a court (name, rates, color, etc.) | | delete_court | Delete a court (if no future reservations) |

Reservations

| Tool | Description | |------|-------------| | list_reservations | List reservations with optional filters (date, status, court) | | create_reservation | Create a new court reservation | | cancel_reservation | Cancel a reservation | | update_reservation | Update a reservation (status, notes, participants) |

Tournaments

| Tool | Description | |------|-------------| | list_tournaments | List tournaments, optionally filtered by status | | get_tournament | Detailed tournament info with categories and registrations | | create_tournament | Create a new tournament | | update_tournament | Update a tournament (status, dates, description, etc.) | | delete_tournament | Delete a tournament and all related data | | create_category | Add a category to a tournament | | register_pair | Register a pair of players in a tournament category | | create_stage | Create a stage (phase) within a tournament category | | update_stage | Update an existing stage (order, round, settings, status) | | delete_stage | Delete a stage and all its matches | | get_stage | Get a single stage with all its matches | | create_stage_match | Create a match within a tournament stage | | bulk_create_stage_matches | Create multiple matches at once (e.g. full bracket) | | list_category_stages | List all stages with their matches | | get_category | Get a single category with registration/stage counts | | update_category | Update a category (name, gender, level, maxPairs, status, awards) | | delete_category | Delete a category and all related data | | list_category_registrations | List pair registrations with player names and seeds | | update_registration | Update a registration (seed, status, group) | | withdraw_pair | Withdraw a pair from a category | | update_pair | Update a pair's players | | list_pairs | Search pairs by player name or user ID |

Stage types (StageType)

| Value | Description | |-------|-------------| | groups | Group stage | | elimination | Elimination stage |

Stage status (StageStatus)

| Value | Description | |-------|-------------| | pending | Not started | | in_progress | Currently playing | | completed | Finished |

Stage rounds (COMMON_ROUNDS)

Standardized values for the round field in stages (not enforced, for reference):

| Value | Label | |-------|-------| | group | Fase de grupos | | playoff | Playoff | | r128 | Ronda de 128 | | r64 | Ronda de 64 | | r32 | Ronda de 32 | | r16 | Octavos de final | | quarter | Cuartos de final | | semi | Semifinales | | third_place | Tercer puesto | | final | Final |

Gender

| Value | Label | |-------|-------| | feminine | Femenino | | masculine | Masculino | | mixed | Mixto |

Category level (CategoryLevel)

Both level and feminineLevel are arrays — a category can span multiple levels. feminineLevel is optional and used in mixed-gender categories to specify the feminine side's level separately.

| Value | Label | |-------|-------| | open | Open | | first_category | 1ra categoría | | second_category | 2da categoría | | third_category | 3ra categoría | | fourth_category | 4ta categoría | | fifth_category | 5ta categoría | | sixth_category | 6ta categoría |

Category status

| Value | Description | |-------|-------------| | open | Accepting registrations | | in_progress | Currently playing | | completed | Finished |

Matches

| Tool | Description | |------|-------------| | list_matches | List matches with optional filters | | get_match | Detailed info for a specific match | | get_upcoming_matches | Matches scheduled in the next N days | | create_friendly_match | Create a friendly (non-tournament) match | | update_match_score | Update score and optionally mark as completed | | reschedule_match | Reschedule a match to a new date/time/court | | cancel_match | Cancel a match (keeps record, sets status to cancelled) | | delete_match | Delete a scheduled or cancelled match |

Players

| Tool | Description | |------|-------------| | search_players | Search by name, email, or phone | | get_player | Detailed player info | | create_player | Register a new player |

Staff

| Tool | Description | |------|-------------| | list_staff | List staff members with roles and permissions | | add_staff | Add a user as staff member | | remove_staff | Remove a staff member |

Payments

| Tool | Description | |------|-------------| | get_revenue_stats | Revenue statistics for a period (day, week, month) | | list_pending_payments | Reservations with pending payments | | update_payment_status | Update payment status of a reservation participant |

Backup

| Tool | Description | |------|-------------| | dump_database | Export all collections (or a specific one) as JSON | | list_collections | List all MongoDB collections with document counts |

Modes

  • Club mode: Set SMATCH_CLUB_ID to scope all operations to a single club
  • Admin mode: Omit SMATCH_CLUB_ID — tools accept an optional clubId parameter for multi-club access

Development

npm run dev    # Run with tsx
npm run build  # Build with tsup