Server data from the Official MCP Registry
MCP server for Zenoti spa/wellness/medspa — guests, appointments, bookings, invoices
MCP server for Zenoti spa/wellness/medspa — guests, appointments, bookings, invoices
This Zenoti MCP server is well-structured with appropriate authentication via API keys and reasonable permissions for a spa management integration. However, there are moderate concerns around input validation, error handling, and potential exposure of sensitive guest data through broad query responses. The codebase demonstrates good intent with duplicate detection and helper logic, but lacks comprehensive safeguards against malicious input and overly verbose data returns. Supply chain analysis found 5 known vulnerabilities in dependencies (0 critical, 3 high severity). Package verification found 1 issue.
5 files analyzed · 14 issues found
Security scores are indicators to help you make informed decisions, not guarantees. Always review permissions before connecting any MCP server.
This plugin requests these system permissions. Most are normal for its category.
Set these up before or after installing:
Environment variable: ZENOTI_API_KEY
Environment variable: ZENOTI_API_URL
Environment variable: ZENOTI_CENTER_ID
Environment variable: ZENOTI_ORG_ID
Add this to your MCP configuration file:
{
"mcpServers": {
"com-jamesrosingmd-zenoti": {
"env": {
"ZENOTI_ORG_ID": "your-zenoti-org-id-here",
"ZENOTI_API_KEY": "your-zenoti-api-key-here",
"ZENOTI_API_URL": "your-zenoti-api-url-here",
"ZENOTI_CENTER_ID": "your-zenoti-center-id-here"
},
"args": [
"-y",
"zenoti-mcp-server"
],
"command": "npx"
}
}
}From the project's GitHub README.
A Model Context Protocol (MCP) server that provides intelligent access to the Zenoti spa/wellness management API. Designed for AI agents to efficiently manage appointments, guests, services, and billing workflows.
git clone https://github.com/yourusername/zenoti-mcp-server.git
cd zenoti-mcp-server
npm install
cp .env.example .env
# Edit .env with your Zenoti API credentials
npm run build
ZENOTI_API_KEY: Your Zenoti API key (required)ZENOTI_API_URL: Zenoti API base URL (default: https://api.zenoti.com)ZENOTI_CENTER_ID: Default center ID for operationsZENOTI_ORG_ID: Your organization ID# Development mode with auto-reload
npm run dev
# Production mode
npm start
# Test the server with example client
npm test
Add to your Claude Desktop configuration (claude_desktop_config.json):
{
"mcpServers": {
"zenoti": {
"command": "node",
"args": ["/path/to/zenoti-mcp-server/dist/index.js"],
"env": {
"ZENOTI_API_KEY": "your_api_key",
"ZENOTI_API_URL": "https://api.zenoti.com",
"ZENOTI_CENTER_ID": "your_center_id"
}
}
}
}
book_serviceComplete 4-step service booking workflow in a single tool.
Parameters:
guest_id (required): Guest ID or search queryservice_id (required): Service ID or namedate (required): Appointment date (YYYY-MM-DD)time (optional): Preferred time (HH:MM)therapist_id (optional): Therapist ID or namenotes (optional): Booking notespay_later (optional): Skip payment (default: true)Example:
{
"guest_id": "john.doe@email.com",
"service_id": "Deep Tissue Massage",
"date": "2025-11-15",
"time": "14:00"
}
search_guestsSearch for guests by name, email, or phone.
Parameters:
query (required): Search querylimit (optional): Max results (default: 10)create_guestCreate a new guest profile.
Parameters:
first_name (required)last_name (required)email (optional)phone (optional)gender (optional)date_of_birth (optional)list_appointmentsList appointments with filters.
Parameters:
start_date (required): Start date (YYYY-MM-DD)end_date (optional): End date (default: start_date)status (optional): Filter by statusguest_id (optional): Filter by guestlimit (optional): Max results (default: 50)check_in_appointmentCheck in a guest for their appointment.
Parameters:
appointment_id (required): Appointment or group IDupdate_appointment_statusUpdate appointment status (confirm, cancel, no-show).
Parameters:
appointment_id (required)status (required): "confirmed", "cancelled", "no_show"reason (optional): Cancellation reasonget_invoiceRetrieve invoice details.
Parameters:
invoice_id (required)include_details (optional): Include line items (default: true)close_invoiceProcess payment and close invoice.
Parameters:
invoice_id (required)payment_method (optional): Payment typeamount (optional): Payment amountlist_appointment_formsGet forms for an appointment.
Parameters:
appointment_id (required)submit_feedbackSubmit guest feedback for appointment.
Parameters:
appointment_id (required)rating (required): 1-5 or 1-10comments (optional)The server provides actionable error messages to guide agents:
{
"error": "No available slots found",
"suggestion": "Try a different date or remove therapist preference",
"alternatives": ["2025-11-16", "2025-11-17"]
}
The server implements intelligent rate limiting:
zenoti-mcp-server/
├── src/
│ ├── index.ts # MCP server entry point
│ ├── zenoti-client.ts # Zenoti API client
│ ├── tools/ # Tool implementations
│ │ ├── booking.ts # Service booking tools
│ │ ├── guests.ts # Guest management tools
│ │ ├── appointments.ts # Appointment tools
│ │ └── invoices.ts # Invoice tools
│ ├── utils/ # Shared utilities
│ │ ├── errors.ts # Error handling
│ │ ├── formatters.ts # Response formatting
│ │ └── validators.ts # Input validation
│ └── test-client.ts # Test client
├── package.json
├── tsconfig.json
└── README.md
Run the test client to verify functionality:
npm test
The test client demonstrates:
API Key Authorization Denied (Error 602)
No Available Slots
Guest Not Found
MIT License - See LICENSE file for details
For issues or questions:
Be the first to review this server!
by Modelcontextprotocol · Developer Tools
Read, search, and manipulate Git repositories programmatically
by Toleno · Developer Tools
Toleno Network MCP Server — Manage your Toleno mining account with Claude AI using natural language.
by mcp-marketplace · Developer Tools
Create, build, and publish Python MCP servers to PyPI — conversationally.