servers / com-jamesrosingmd-zenoti
com.jamesrosingmd/zenoti MCP server
communitystdiolocaldestructive capablehealthy
MCP server for Zenoti spa/wellness/medspa — guests, appointments, bookings, invoices
01Tools · 37
How to read this: tool names here are observed from a live tools/list handshake. The Risk label is a heuristic inferred from the tool name (write/destructive verbs), not from executing the tool — a conservative guess, not a verified capability. We never escalate risk from a description. Found one that's wrong? Tell us — we fix on report.
| Tool | Risk | Side effects | Approval |
|---|---|---|---|
| zenoti-guests-appointments Appointment history (and upcoming appointments) for one guest, paginated. | unknown | unknown | unknown |
| zenoti-invoices-get Retrieve an invoice with its line items and payments. invoice_item_id values from here are needed for rescheduling. | read | false | unknown |
| zenoti-reports-collections Collections (money received) report for a center over a date range of at most 7 days, optionally with individual transactions and employee tips. Note: Zenoti marks this report API as deprecated — figures may not reconcile with the newer in-UI sales reports; treat results as indicative. Date range is capped at 7 days by Zenoti (query longer periods in chunks). | read | false | unknown |
| zenoti-appointments-undo-checkin Revert a checked-in appointment to its prior status. Requires the appointment GROUP id. | read | false | unknown |
| zenoti-employee-schedules Work schedules of center employees for a date range — who is on shift when. Use this (not zenoti-therapists-list, which has no date filter) to check staffing for a day. | read | false | unknown |
| zenoti-guests-search Search guests by any combination of name, email, phone, username, code, zip, or tags. At least one criterion is required. Scope (this center vs whole organization) is controlled by the org-level Zenoti setting "Search Guest Across Centers", not by this call — if expected guests are missing, they may belong to another center. | read | false | unknown |
| zenoti-guests-memberships A guest's memberships (status, credits, dues). | read | false | unknown |
| zenoti-appointments-checkin Mark a guest as arrived/checked in. Requires the appointment GROUP id (appointment_group_id from the appointment list), not the individual appointment id. | read | false | unknown |
| zenoti-invoices-pay-custom Record a payment on an invoice using a custom payment method — this is also how CASH is recorded (Zenoti has no cash-specific endpoint). FINANCIAL ACTION: confirm amount with the operator first. Zenoti does not publicly document this body; amount is sent as "amount" and extra org-specific fields can be passed via payload. If the API rejects the shape, the error will say what is missing. | write | true | unknown |
| zenoti-guests-get Retrieve a guest profile by guest GUID. | read | false | unknown |
| zenoti-guests-packages A guest's purchased packages/series (e.g. a 6-session laser course) with remaining redemptions. Set show_redeemable to only list packages that can still be redeemed. | read | false | unknown |
| zenoti-therapists-list List therapists of a center. Pass service_id to list only therapists qualified to perform that service (including service pricing per therapist). | read | false | unknown |
| zenoti-guest-forms-list List forms on a guest profile (intake/consent forms not tied to one appointment). | read | false | unknown |
| zenoti-services-get Full details of one service at a center (pricing, duration, add-ons). | read | false | unknown |
| zenoti-invoices-pay-card Charge the guest's saved card for an invoice via Zenoti online payments. FINANCIAL ACTION: this moves real money — confirm with the operator before calling. The documented body is {tip_amount, source}; source defaults to 1. | write | true | unknown |
| zenoti-appointments-progress Update service progress for one appointment (start / open / complete). Uses the individual appointment_id. Zenoti does not publicly document this request body; the tool sends an UNVERIFIED mapping (start=1, open=2, complete=3 — only start=1 is corroborated). Verify the effect before reporting success; pass progress_code to override the numeric value. | unknown | unknown | unknown |
| zenoti-appointments-noshow Mark an appointment as no-show. Requires the appointment GROUP id. May trigger no-show fees per center policy — confirm with the operator before using. | read | false | unknown |
| zenoti-centers-list List all centers (locations) of the organization. Use this to find the center GUID for other tools. | read | false | unknown |
| zenoti-appointments-cancel Cancel a service booking. Zenoti cancels by INVOICE id (each confirmed booking has one) — get it from the appointment details or list. This frees the slot; refunds are handled separately. | destructive | true | true |
| zenoti-guests-notes-list List notes on a guest profile (clinical notes, profile alerts). Set only_profile_alerts to see just the alerts shown at check-in. | read | false | unknown |
| zenoti-guests-create Create a new guest profile in a center. Provide at least an email or mobile number so the guest can be found later. Note: required fields are configurable per Zenoti org, so the API may reject a create that omits org-mandatory fields. | write | true | unknown |
| zenoti-invoices-close Close an invoice. Zenoti only allows closing after the balance is zero (fully paid). This is a financial finalization — use deliberately. | unknown | unknown | unknown |
| zenoti-invoices-email Email the invoice (receipt/confirmation) to the guest's email on file. | unknown | unknown | unknown |
| zenoti-appointments-get Retrieve full details of one appointment by its appointment_id (not group id). | read | false | unknown |
| zenoti-booking-confirm Confirm a reserved booking. This finalizes the appointment and creates the invoice (the response includes invoice details — keep invoice_id for cancel/reschedule/payment). | unknown | unknown | unknown |
| zenoti-invoices-confirm-visit Mark an appointment visit as confirmed (or undo that) using the booking's invoice id. Despite the URL, this is a scheduling status change, not a financial operation. | read | false | unknown |
| zenoti-forms-list List the forms attached to an appointment (uses appointment_id, not group id). | read | false | unknown |
| zenoti-forms-get Retrieve submitted form data for an appointment. Uploaded files, signatures, and annotations are not returned by the Zenoti API. | read | false | unknown |
| zenoti-availability-slots Find open appointment slots for a service on a date. Creates a Zenoti booking draft and returns its booking_id plus the available slots — pass booking_id and a chosen slot Time to zenoti-booking-reserve next. Alternatively pass an existing booking_id (e.g. from zenoti-appointments-reschedule) to just fetch its slots. Slot holds are short-lived: reserve and confirm promptly. | read | false | unknown |
| zenoti-guests-notes-add Add a note to a guest profile. | write | true | unknown |
| zenoti-services-list List services offered by a center, paginated (size max 100). Returns compact rows (id, code, name, duration, price) by default; set verbose for full objects. | read | false | unknown |
| zenoti-booking-reserve Hold a specific slot on a booking draft (from zenoti-availability-slots). slot_time must be one of the returned slot Time values (e.g. 2026-08-07T14:30:00). Holds expire quickly — confirm right after. Set create_invoice to generate a temporary invoice at this step instead of at confirmation. | unknown | unknown | unknown |
| zenoti-reports-sales Sales report for a center over a date range of at most 7 days (what was sold: services, products, memberships, packages). item_type and status filters are optional Zenoti codes. Note: Zenoti marks this report API as deprecated — figures may not reconcile with the newer in-UI sales reports; treat results as indicative. Date range is capped at 7 days by Zenoti (query longer periods in chunks). | read | false | unknown |
| zenoti-appointments-reschedule Start rescheduling an existing booking to a new date: creates a reschedule booking draft tied to the existing invoice. Then continue the normal flow — zenoti-availability-slots (pass the returned booking_id), zenoti-booking-reserve, zenoti-booking-confirm. Requires the invoice_id and invoice_item_id of the booked service (see zenoti-invoices-get). | read | false | unknown |
| zenoti-appointments-list List appointments of a center for a date range. Returns compact rows by default (id, group_id, invoice_id, guest, service, therapist, times, status); set verbose for full API payloads. Results are paginated (size max 100). | read | false | unknown |
| zenoti-feedback-submit Insert guest feedback collected outside Zenoti (e.g. a survey tool) for an appointment GROUP. Zenoti does not publicly document the payload schema, so pass the exact payload object your Zenoti org expects; common fields like rating/comments can be provided directly and are sent as-is. | unknown | unknown | unknown |
| zenoti-guests-update Update fields on a guest profile. Fetches the current profile first and merges your changes (Zenoti replaces the whole object on update, so partial writes would otherwise erase data). Only the provided fields change. Known limitation: Zenoti has no conditional-write support, so a concurrent edit between the read and the write can be overwritten — avoid parallel updates to the same guest. | write | true | unknown |
02Install & source
npx -y zenoti-mcp-server
npx- repohttps://github.com/tacit-code/zenoti-mcp-server
- homepagehttps://github.com/tacit-code/zenoti-mcp-server
- licenseMIT
- adoption0 stars · 0 forks
05Provenance & freshness
sourcesOfficial MCP Registry [p1]
last_checked2026-08-21 13:05Z
next_check2026-08-21 15:56Z
cadenceevery 3h
verifiedtools_list:passed handshake:passed metadata:passed metadata:passed tools_list:passed handshake:passed metadata:passed tools_list:passed handshake:passed metadata:passed
index_statusindex — 8 unique facts >= 5
06Badge
Add the “as seen on MCPExplorer” badge to your README.
[](https://mcpexplorer.com/servers/com-jamesrosingmd-zenoti)
Next step
This is one server. A loadout combines the right servers, governance, and proven plays for a whole job — assembled deliberately, not tool-dumped.
Explore loadouts →