zenoti について
zenoti は、Zenoti のスパ・ウェルネス・メディスパ管理プラットフォーム向け MCP サーバーで、エージェントを通じて業務データを操作する組織を対象とします。ゲスト、予約、請求書、カタログ、フォームなどをツールとして公開し、識別子や更新方式の違いにも対応します。
主な機能
- 01ゲストプロフィールとメモの管理
- 02予約の検索と状態操作
- 03サービス枠の検索と予約
- 04請求書の取得・支払い・締め
- 05カタログ・シフト・レポートの照会
- 06フォームとゲストフィードバックの管理
活用シーン
- 01ゲストを検索して予約履歴を確認
- 02店舗の空き枠を調べて予約を確定
- 03支払いを記録して請求書やレシートを送信
- 04期間を指定して売上と入金を確認
MCP 対応
この MCP サーバーは、Zenoti のゲスト、予約、請求書、カタログ、フォーム、レポートの操作をツールとして MCP クライアントに公開します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
npx -y zenoti-mcp-serverZENOTI_API_KEYシークレットZenoti API key from Admin → Settings → Apps (backend app)ZENOTI_API_URLZenoti API base URL (default https://api.zenoti.com)ZENOTI_CENTER_IDDefault center GUID used when tools omit center_id (recommended)ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
37掲載時のツール一覧 · 2 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| page | integer | いいえ | |
| size | integer | いいえ | |
| include_working_hours | boolean | いいえ | 営業時間の詳細を含めます |
詳細
Zenoti MCP サーバー
Zenoti のスパ/ウェルネス/メディスパ管理プラットフォーム向けの Model Context Protocol(MCP)サーバーです。予約、ゲスト、サービス予約、請求書、カタログ、フォームを、AI エージェントが呼び出せるツールとして提供します。
ホステッド版を利用できます
認証情報、ホスティング、更新を自分で管理したくない場合は、DOCK がこのサーバーのマネージド版です。施術所ごとの認証情報の暗号化、監査ログ、下書き優先の書き込み操作、ワークフローライブラリを備えています。創業時に参加する施術所は、月額料金を生涯固定できます。Front Desk は月額 $49(Zenoti)、Billing Desk は月額 $99(Tebra、BAA 込み)、Full Practice は月額 $129(両方)です。https://dockhq.vercel.app
インストール
npm install -g zenoti-mcp-server
または、ソースから実行します。
git clone https://github.com/tacit-code/zenoti-mcp-server.git
cd zenoti-mcp-server
npm install
npm run build
設定
| 変数 | 必須 | 説明 |
|---|---|---|
ZENOTI_API_KEY | はい | Zenoti Admin → Settings → Apps で取得した API キー(バックエンドアプリを作成してください) |
ZENOTI_API_URL | いいえ | ベース URL。デフォルトは https://api.zenoti.com(/v1 の有無は問いません) |
ZENOTI_CENTER_ID | 推奨 | デフォルトのセンター GUID。ツール呼び出しごとに center_id を指定して上書きできます |
Claude Desktop/Claude Code の設定:
{
"mcpServers": {
"zenoti": {
"command": "npx",
"args": ["-y", "zenoti-mcp-server"],
"env": {
"ZENOTI_API_KEY": "your_api_key",
"ZENOTI_CENTER_ID": "your_center_guid"
}
}
}
}
認証情報がなくてもサーバーは起動し、各ツール呼び出しで読みやすい設定エラーを返します。そのため、設定ミスがあるクライアントでもクラッシュを繰り返すのではなく、問題を表示できます。
ツール
カタログ
| ツール | 用途 |
|---|---|
zenoti-centers-list | 組織内のセンターを一覧表示します(センター GUID の確認) |
zenoti-services-list | センターのサービスを一覧表示します(デフォルトは簡潔な表示、verbose で生データを表示) |
zenoti-services-get | サービスの詳細を取得します |
zenoti-therapists-list | センターのセラピストを一覧表示します。サービスによる絞り込みも可能です |
zenoti-employee-schedules | 指定した期間のシフト担当者を確認します(日付に応じたスタッフ配置) |
ゲスト
| ツール | 用途 |
|---|---|
zenoti-guests-search | 名前/メールアドレス/電話番号/コード/タグで検索します(1 件以上の条件が必要) |
zenoti-guests-create | ゲストプロフィールを作成します |
zenoti-guests-get | GUID でゲストの詳細を取得します |
zenoti-guests-update | フィールドを更新します。安全な読み取り・マージ・書き込みを行います(Zenoti は更新時にオブジェクト全体を置き換えます) |
zenoti-guests-appointments | ゲストの予約履歴を取得します |
zenoti-guests-notes-list / zenoti-guests-notes-add | ゲストのメモとプロフィールアラートを管理します |
zenoti-guests-memberships | ゲストの会員情報(ステータス、クレジット、未払い金)を取得します |
zenoti-guests-packages | ゲストのパッケージ/シリーズと残りの利用回数を取得します |
予約
| ツール | 用途 |
|---|---|
zenoti-appointments-list | 指定した期間のセンターの予約を一覧表示します(デフォルトは簡潔な表示) |
zenoti-appointments-get | 予約の詳細(appointment_id) |
zenoti-appointments-checkin / zenoti-appointments-undo-checkin | チェックイン状態(appointment_group_id) |
zenoti-appointments-noshow | 無断キャンセルとして記録します(appointment_group_id) |
zenoti-appointments-progress | サービスを開始/オープン/完了します(appointment_id) |
zenoti-appointments-cancel | 予約をキャンセルします(invoice_id で指定) |
zenoti-appointments-reschedule | 日程変更を開始します(請求書に紐づく予約の下書きを作成します) |
予約の流れ
zenoti-availability-slots— ゲスト、サービス、日付を指定して予約の下書きを作成し、booking_idと空き枠を返しますzenoti-booking-reserve— 選択した枠を確保します(確保は短時間のみ有効です)zenoti-booking-confirm— 予約を確定します。レスポンスには請求書が含まれます
請求書
| ツール | 用途 |
|---|---|
zenoti-invoices-get | 明細項目、支払い、必要に応じて未払い金/手数料を含む請求書を取得します |
zenoti-invoices-pay-custom | 現金/任意の支払いを記録します(金融操作) |
zenoti-invoices-pay-card | 登録済みのゲストのカードに請求します(金融操作) |
zenoti-invoices-close | 全額支払い済みの請求書を締めます |
zenoti-invoices-email | レシート/請求書をゲストにメールで送信します |
zenoti-invoices-confirm-visit | 来店を確認(または確認を取り消し)します。請求書に属していますが、予約管理のステータスです |
レポート
| ツール | 目的 |
|---|---|
zenoti-reports-sales | 期間内に販売されたもの |
zenoti-reports-collections | 期間内に受領した金額 |
フォームとフィードバック
| ツール | 目的 |
|---|---|
zenoti-forms-list / zenoti-forms-get | 予約のフォームと送信済みフォームデータ |
zenoti-guest-forms-list | ゲストプロフィールのフォーム |
zenoti-feedback-submit | 外部で収集したゲストのフィードバックを登録 |
このサーバーが対応する Zenoti API の注意点
- 1 つのワークフローで 3 種類の識別子を使用します。 チェックイン/無断キャンセル/フィードバックでは
appointment_group_id、詳細/進捗/フォームではappointment_id、キャンセルと支払いではinvoice_idを使用します。ツールのスキーマには、必要な識別子が正確に記載されています。 - ゲスト情報の更新では、オブジェクト全体が置き換えられます。 更新ツールは現在のプロフィールを取得して変更をマージします。単純な部分
PUTではフィールドが消去されてしまいます。 - レート制限は 60 回/分(組織全体)です。HTTP レイヤーは 429 の
Retry-Afterを尊重します。読み取りは 5xx/ネットワーク障害/タイムアウト時にも再試行します。書き込みは 429 の場合のみ再試行します(レート制限による拒否は処理されていないため、再試行しても予約が重複することはありません。それ以外の書き込み失敗は直ちに通知されます)。 - ページネーションの上限は
size=100です。これより大きい値は Zenoti に 422 で拒否されます。 - Webhook には購読 API がありません。 Zenoti の Web UI(Admin → Webhooks)で設定し、Zenoti API パッケージが必要です。このサーバーには Webhook ツールを意図的に含めていません。
- 数値の列挙値は文書化されていません。 性別と予約進捗のコードは Zenoti の公開ドキュメントに記載されていません。ここで使用しているマッピングはツールの説明に記載されており、上書きも可能です(
progress_code)。
開発
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/
e2e テストスイートは MCP SDK クライアント経由で実際のサーバーを stdio で起動し、すべてのツールのメソッド、パス、クエリ、ボディが Zenoti の文書化されたエンドポイントに対して正しいことを検証します。
ライセンス
MIT
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。