Zenoti MCP Server
The Zenoti MCP Server enables AI agents to manage the full lifecycle of spa/wellness operations via the Zenoti API, covering:
Appointment Management: List, retrieve, check in guests, mark as no-show, and update appointment progress/status (confirmed, cancelled, no-show).
Service Booking: Discover available services, therapists, and centers; check available time slots; reserve and confirm bookings.
Guest Management: Search by email/phone/name/ID, create new profiles, retrieve details, and update existing records.
Invoice & Payment Processing: Retrieve invoice details, confirm invoices, and close them with payment (Cash, Card, Check, or Custom).
Forms & Feedback: List and retrieve appointment-related forms, and submit guest feedback including NPS scores and comments.
Center Management: List all centers in the organization.
Webhooks: Subscribe to real-time events such as invoice closures, guest profile changes, and appointment status updates.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Zenoti MCP ServerBook a deep tissue massage for John Doe tomorrow at 3pm"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Zenoti MCP Server
A Model Context Protocol (MCP) server for the Zenoti spa/wellness/medspa management platform. Exposes appointments, guests, service booking, invoices, catalog, and forms as tools an AI agent can call.
Hosted version available
Do not want to manage credentials, hosting, and updates yourself? DOCK is the managed version of this server: encrypted per-practice auth, audit logs, draft-first write actions, and a workflow library. Founding practices lock lifetime pricing: Front Desk $49/mo (Zenoti), Billing Desk $99/mo (Tebra, BAA included), Full Practice $129/mo (both). https://dockhq.vercel.app
Installation
npm install -g zenoti-mcp-serverOr run from source:
git clone https://github.com/tacit-code/zenoti-mcp-server.git
cd zenoti-mcp-server
npm install
npm run buildRelated MCP server: ezyVet MCP Server
Configuration
Variable | Required | Description |
| yes | API key from Zenoti Admin → Settings → Apps (create a backend app) |
| no | Base URL, default |
| recommended | Default center GUID; tools accept |
Claude Desktop / Claude Code config:
{
"mcpServers": {
"zenoti": {
"command": "npx",
"args": ["-y", "zenoti-mcp-server"],
"env": {
"ZENOTI_API_KEY": "your_api_key",
"ZENOTI_CENTER_ID": "your_center_guid"
}
}
}
}The server starts even without credentials and returns a readable configuration error on each tool call, so a misconfigured client shows the problem instead of crash-looping.
Tools
Catalog
Tool | Purpose |
| List organization centers (find center GUIDs) |
| Services of a center (compact by default, |
| Full service details |
| Therapists of a center, optionally filtered to a service |
| Who is on shift for a date range (date-scoped staffing) |
Guests
Tool | Purpose |
| Search by name/email/phone/code/tags (≥1 criterion required) |
| Create a guest profile |
| Guest details by GUID |
| Update fields — does a safe read-merge-write (Zenoti replaces the whole object on update) |
| Appointment history for a guest |
| Guest notes and profile alerts |
| Guest's memberships (status, credits, dues) |
| Guest's packages/series with remaining redemptions |
Appointments
Tool | Purpose |
| Center appointments for a date range (compact by default) |
| Appointment details ( |
| Check-in state ( |
| Mark no-show ( |
| Start/open/complete service ( |
| Cancel a booking (by |
| Start a reschedule (creates a booking draft tied to the invoice) |
Booking flow
zenoti-availability-slots— creates a booking draft for guest+service+date and returnsbooking_idplus open slotszenoti-booking-reserve— hold a chosen slot (holds are short-lived)zenoti-booking-confirm— finalize; the response includes the invoice
Invoices
Tool | Purpose |
| Invoice with line items, payments, and optional dues/fees |
| Record a cash/custom payment (financial action) |
| Charge the guest's card on file (financial action) |
| Close a fully-paid invoice |
| Email the receipt/invoice to the guest |
| Confirm (or undo-confirm) the visit — a scheduling status, despite living on the invoice |
Reports
Tool | Purpose |
| What was sold over a date range |
| Money received over a date range |
Forms & feedback
Tool | Purpose |
| Forms and submitted form data of an appointment |
| Forms on a guest profile |
| Insert externally collected guest feedback |
Zenoti API gotchas this server handles
Three identifiers in one workflow. Check-in/no-show/feedback take
appointment_group_id; details/progress/forms takeappointment_id; cancel and payments takeinvoice_id. Tool schemas name the exact one required.Guest updates replace the whole object. The update tool fetches the current profile and merges your changes; a naive partial
PUTwould erase fields.Rate limit is 60 calls/minute (org-wide). The HTTP layer honors
Retry-Afteron 429. Reads also retry on 5xx/network failures/timeouts; writes retry only on 429 (a rate-limit rejection was never processed, so retrying can't duplicate a booking — any other write failure surfaces immediately).Pagination caps at
size=100; larger values are rejected by Zenoti with a 422.Webhooks have no subscription API — they are configured in the Zenoti web UI (Admin → Webhooks) and require the Zenoti API package. This server intentionally has no webhook tool.
Undocumented numeric enums. Gender and appointment-progress codes aren't in Zenoti's public docs; the mappings used here are documented in the tool descriptions and can be overridden (
progress_code).
Development
npm run dev # run from source (tsx)
npm test # unit + end-to-end tests (mock Zenoti API; no real credentials needed)
npm run typecheck # tsc --noEmit
npm run build # emit dist/The e2e suite spawns the real server over stdio via the MCP SDK client and asserts every tool's method, path, query, and body against Zenoti's documented endpoints.
License
MIT
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseCqualityCmaintenanceProvides AI assistants with complete access to the Mindbody API for fitness and wellness studio management, including class scheduling, client management, bookings, payments, and staff operations across 50+ tools.39296MIT
- AlicenseCqualityDmaintenanceEnables AI agents to manage veterinary practice data through ezyVet API, including animals, contacts, appointments, consults, invoices, and products.8MIT
- AlicenseAqualityDmaintenanceEnables AI agents to automate Epiphany booking tasks, including checking availability and creating bookings.7MIT
- AlicenseAqualityBmaintenanceEnables AI assistants to find, book, and cancel salon appointments via SalonRunner accounts. Self-hosted for local or remote use.643MIT
Related MCP Connectors
Agentic scheduling & booking for field service: availability, jobs, customers, crews, fleet.
Calendar API for AI agents: events, availability, Google/Microsoft setup, scheduling, and iCal.
Scheduling, availability, clients, billing and CRM for appointment-based services.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/tacit-code/zenoti-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server