Zenoti

com.jamesrosingmd由 jamesrosingmd.com 發布v1.1.0更新於 Oct 25, 2026

MCP server for Zenoti spa/wellness/medspa — guests, appointments, bookings, invoices

已驗證STDIO僅桌面效率與工作流商業與電商

概覽

AI 產生的概覽

針對 Zenoti 水療與醫美平台的本地 MCP 伺服器,讓助理查詢顧客、預約、服務與帳單,並執行預約與櫃檯作業。

可以做什麼
查詢門市、服務、治療師與員工排班,並搜尋、建立、讀取或更新顧客資料,含備註、會員與套裝。列出並檢視預約,辦理報到與取消報到、標記未到、推進服務進度、取消或改約。走完預約流程:建立草稿、保留時段並確認,回傳帳單。讀取帳單並記錄現金或刷卡付款、關閉帳單、以電子郵件寄送收據、確認到訪。取得銷售與收款報表,讀取或提交表單與顧客回饋。
適用情境
適合讓助理協助 Zenoti 據點的櫃檯工作:回答顧客、排班與帳單相關問題,或透過 Zenoti API 完成預約、報到與收款。
執行需求
以 Node.js npm 套件(zenoti-mcp-server)透過 stdio 在本機執行,僅支援桌面用戶端。需在 Zenoti 管理後台建立後端應用程式,並透過 ZENOTI_API_KEY 提供 API 金鑰。ZENOTI_API_URL 為選用(預設指向 Zenoti API),建議設定 ZENOTI_CENTER_ID 作為預設據點。需要能連線至 Zenoti API 的網路。
安裝前請注意
ZENOTI_API_KEY 中的 API 金鑰可存取據點資料,必須妥善保密。許多工具會變更真實紀錄:建立與更新顧客、預約、取消、改約、報到與未到、關閉帳單、寄送郵件給顧客、提交回饋。付款工具會記錄現金付款並對存檔信用卡扣款,涉及真實金流。顧客個人資料與預約細節會傳送至 Zenoti API。README 另宣傳一項獨立的付費託管服務。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Zenoti,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

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

bash
npm install -g zenoti-mcp-server

Or run from source:

bash
git clone https://github.com/tacit-code/zenoti-mcp-server.gitcd zenoti-mcp-servernpm installnpm run build

Configuration

VariableRequiredDescription
ZENOTI_API_KEYyesAPI key from Zenoti Admin → Settings → Apps (create a backend app)
ZENOTI_API_URLnoBase URL, default https://api.zenoti.com (with or without /v1)
ZENOTI_CENTER_IDrecommendedDefault center GUID; tools accept center_id to override per call

Claude Desktop / Claude Code config:

json
{  "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

ToolPurpose
zenoti-centers-listList organization centers (find center GUIDs)
zenoti-services-listServices of a center (compact by default, verbose for raw)
zenoti-services-getFull service details
zenoti-therapists-listTherapists of a center, optionally filtered to a service
zenoti-employee-schedulesWho is on shift for a date range (date-scoped staffing)

Guests

ToolPurpose
zenoti-guests-searchSearch by name/email/phone/code/tags (≥1 criterion required)
zenoti-guests-createCreate a guest profile
zenoti-guests-getGuest details by GUID
zenoti-guests-updateUpdate fields — does a safe read-merge-write (Zenoti replaces the whole object on update)
zenoti-guests-appointmentsAppointment history for a guest
zenoti-guests-notes-list / zenoti-guests-notes-addGuest notes and profile alerts
zenoti-guests-membershipsGuest's memberships (status, credits, dues)
zenoti-guests-packagesGuest's packages/series with remaining redemptions

Appointments

ToolPurpose
zenoti-appointments-listCenter appointments for a date range (compact by default)
zenoti-appointments-getAppointment details (appointment_id)
zenoti-appointments-checkin / zenoti-appointments-undo-checkinCheck-in state (appointment_group_id)
zenoti-appointments-noshowMark no-show (appointment_group_id)
zenoti-appointments-progressStart/open/complete service (appointment_id)
zenoti-appointments-cancelCancel a booking (by invoice_id)
zenoti-appointments-rescheduleStart a reschedule (creates a booking draft tied to the invoice)

Booking flow

  1. zenoti-availability-slots — creates a booking draft for guest+service+date and returns booking_id plus open slots
  2. zenoti-booking-reserve — hold a chosen slot (holds are short-lived)
  3. zenoti-booking-confirm — finalize; the response includes the invoice

Invoices

ToolPurpose
zenoti-invoices-getInvoice with line items, payments, and optional dues/fees
zenoti-invoices-pay-customRecord a cash/custom payment (financial action)
zenoti-invoices-pay-cardCharge the guest's card on file (financial action)
zenoti-invoices-closeClose a fully-paid invoice
zenoti-invoices-emailEmail the receipt/invoice to the guest
zenoti-invoices-confirm-visitConfirm (or undo-confirm) the visit — a scheduling status, despite living on the invoice

Reports

ToolPurpose
zenoti-reports-salesWhat was sold over a date range
zenoti-reports-collectionsMoney received over a date range

Forms & feedback

ToolPurpose
zenoti-forms-list / zenoti-forms-getForms and submitted form data of an appointment
zenoti-guest-forms-listForms on a guest profile
zenoti-feedback-submitInsert 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 take appointment_id; cancel and payments take invoice_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 PUT would erase fields.
  • Rate limit is 60 calls/minute (org-wide). The HTTP layer honors Retry-After on 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

bash
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 --noEmitnpm 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

來源:README.md,提交 e66d943

工具

0
SourceWeft 尚未在沙箱中啟動過該軟體包,因此其工具未知。

版本歷史

1
  1. v1.1.0最新Sep 16, 2026

評分

已滿足適用檢查項的 50%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分

    請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。

  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分