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.

ToolRiskSide effectsApproval
zenoti-guests-appointments
Appointment history (and upcoming appointments) for one guest, paginated.
unknownunknownunknown
zenoti-invoices-get
Retrieve an invoice with its line items and payments. invoice_item_id values from here are needed for rescheduling.
readfalseunknown
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).
readfalseunknown
zenoti-appointments-undo-checkin
Revert a checked-in appointment to its prior status. Requires the appointment GROUP id.
readfalseunknown
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.
readfalseunknown
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.
readfalseunknown
zenoti-guests-memberships
A guest's memberships (status, credits, dues).
readfalseunknown
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.
readfalseunknown
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.
writetrueunknown
zenoti-guests-get
Retrieve a guest profile by guest GUID.
readfalseunknown
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.
readfalseunknown
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).
readfalseunknown
zenoti-guest-forms-list
List forms on a guest profile (intake/consent forms not tied to one appointment).
readfalseunknown
zenoti-services-get
Full details of one service at a center (pricing, duration, add-ons).
readfalseunknown
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.
writetrueunknown
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.
unknownunknownunknown
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.
readfalseunknown
zenoti-centers-list
List all centers (locations) of the organization. Use this to find the center GUID for other tools.
readfalseunknown
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.
destructivetruetrue
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.
readfalseunknown
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.
writetrueunknown
zenoti-invoices-close
Close an invoice. Zenoti only allows closing after the balance is zero (fully paid). This is a financial finalization — use deliberately.
unknownunknownunknown
zenoti-invoices-email
Email the invoice (receipt/confirmation) to the guest's email on file.
unknownunknownunknown
zenoti-appointments-get
Retrieve full details of one appointment by its appointment_id (not group id).
readfalseunknown
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).
unknownunknownunknown
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.
readfalseunknown
zenoti-forms-list
List the forms attached to an appointment (uses appointment_id, not group id).
readfalseunknown
zenoti-forms-get
Retrieve submitted form data for an appointment. Uploaded files, signatures, and annotations are not returned by the Zenoti API.
readfalseunknown
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.
readfalseunknown
zenoti-guests-notes-add
Add a note to a guest profile.
writetrueunknown
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.
readfalseunknown
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.
unknownunknownunknown
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).
readfalseunknown
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).
readfalseunknown
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).
readfalseunknown
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.
unknownunknownunknown
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.
writetrueunknown

02Install & source
npx -y zenoti-mcp-server
npx

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_statusindex8 unique facts >= 5

06Badge

Add the “as seen on MCPExplorer” badge to your README. com.jamesrosingmd/zenoti MCP — as seen on mcpexplorer.com

[![com.jamesrosingmd/zenoti MCP — as seen on mcpexplorer.com](https://mcpexplorer.com/badge/com-jamesrosingmd-zenoti.svg)](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 →