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-mcpEnvironment 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_IDto scope all operations to a single club - Admin mode: Omit
SMATCH_CLUB_ID— tools accept an optionalclubIdparameter for multi-club access
Development
npm run dev # Run with tsx
npm run build # Build with tsup