acuity-mcp
acuity-mcp
ローカルMCPサーバーで、Acuity Scheduling API を Claude Code ツールとして公開します。予約の一覧・作成・再スケジュール・キャンセル、空き状況の確認、予約タイプ、カレンダー、クライアントの一覧を、すべて Claude セッションから直接行えます。複数の Acuity アカウントを並行してサポートし、ツール呼び出しごとに切り替え可能です。
メンテナンスされている無料の Acuity 用 MCP が存在しないため、独自に構築しました。調査中に見つかった唯一の GitHub リポジトリは、公開されていない npm パッケージを指しているだけでした。@modelcontextprotocol/sdk + zod を使用し、stdio 上で動作します。
Claude を使っている場合: 最初にお読みください
ユーザーからセットアップ、Acuity アカウントの追加、アカウントの切り替え、接続のトラブルシューティングを依頼された場合は、このリポジトリ内の .claude/skills/acuity-mcp-setup/SKILL.md を読み込んでください。これにはそのすべての詳細な手順が記載されています。この README は人間向けのリファレンスであり、実際に従うべきはスキルです。
Related MCP server: leximo-ai-call-assistant-mcp-server
セットアップ前に必要なもの
Acuity の Business Settings → Integrations → API から取得する Acuity Scheduling User ID と API Key が必要です。接続する Acuity アカウントごとに 1 組必要です。
⚠️ Acuity はプラン階層によって API アクセスを制限しています。 一部のプランでは、すべてのリクエストに対して 403: API access is only available on Powerhouse plans が返されます。これはアカウントが Acuity に拒否されているだけで、こちらのバグではありません。Basic Auth が成功し(401 が返らず)、それでもすべての呼び出しで 403 が返される場合は、これが典型的な症状です。該当する場合は、プランをアップグレードするか、同じアカウントへの代替経路(例: Zapier Acuity コネクタ。実際に同じ制限を受けていないことが確認されています)を使用してください。
インストール
npm installクイックスタート — 1 アカウント
node bin/acuity-accounts.js add production --user-id <your-user-id> --api-key <your-api-key>最初に追加したアカウントが自動的にデフォルトになります。次に、サーバーを Claude Code に登録します:
claude mcp add acuity -s user -- node "$(pwd)/server.js"新しい Claude Code セッションを開始するか(または既存のセッションで /mcp を実行して)、ツールが表示されるようにしてください。
Claude セッションなしでも動作することを確認する:
node bin/acuity-accounts.js test複数アカウント
名前付きアカウントは好きなだけ追加できます:
node bin/acuity-accounts.js add production --user-id 1111111 --api-key aaaa... --label "Real account"
node bin/acuity-accounts.js add sandbox --user-id 2222222 --api-key bbbb... --label "Trial/test account"認証情報は ~/.config/acuity-mcp/accounts.json に保存されます(chmod 600、このリポジトリ内には置かず、コミットもされません)。管理方法:
node bin/acuity-accounts.js list # see configured accounts (never prints API keys)
node bin/acuity-accounts.js set-default sandbox # change which one is used by default
node bin/acuity-accounts.js remove sandbox # remove one
node bin/acuity-accounts.js test sandbox # verify one specific account's credentialsClaude セッション内でのアカウント切り替えには、再登録は一切必要ありません。このサーバーが公開するすべてのツールは、オプションの account 引数を受け取ります:
「サンドボックスアカウントの予約タイプを一覧表示して」→ Claude は
list_appointment_typesを{"account": "sandbox"}で呼び出します。
いつでも Claude に list_accounts を実行させると、設定内容とデフォルトがどれかを確認できます。
代わりに、アカウントごとに完全に別々の MCP サーバー登録を実行したい場合(たとえば、それぞれが別の名前のサーバーとして表示されるようにする場合)も、引き続き機能します。呼び出しごとに account を渡す代わりに、ACUITY_ACCOUNT を名前に向けてください:
claude mcp add acuity-production -s user -e ACUITY_ACCOUNT=production -- node "$(pwd)/server.js"
claude mcp add acuity-sandbox -s user -e ACUITY_ACCOUNT=sandbox -- node "$(pwd)/server.js"認証情報の解決順序
ACUITY_USER_ID+ACUITY_API_KEY環境変数(直接上書き。accounts ファイルは不要)ツール呼び出しの
account引数、またはACUITY_ACCOUNT環境変数 — 名前で検索accounts.json内のdefaultアカウントaccounts.jsonにアカウントが 1 つだけ設定されている場合 — 自動的に使用従来のフラットな
~/.config/acuity-mcp/credentialsファイル(ACUITY_USER_ID=.../ACUITY_API_KEY=...の行)— 古い単一アカウント設定との後方互換性のためにサポート
ツール
ローカルのみ(Acuity API を呼び出しません):
list_accounts— 設定済みのアカウント名/ラベルとデフォルトを一覧表示(API キーは決して表示しない)
読み取り専用:
list_appointment_types— 予約可能な相談タイプを一覧表示list_calendars— カレンダー/スタッフを一覧表示list_appointments— 日付範囲 / カレンダー / タイプ / キャンセル状態でフィルタリング可能get_appointment— ID による 1 件の予約の完全な詳細check_availability_dates— 予約タイプに対する月内の空き日check_availability_times— 予約タイプに対する日付の空き時間枠list_clients— 予約をしたクライアントを一覧表示
変更(実際のカレンダーに変更が発生します。これらの呼び出し前に Claude が確認を求めます):
create_appointment— 新しい予約を登録reschedule_appointment— 予約の日時を変更cancel_appointment— 予約をキャンセル
すべてのツールはオプションの account 引数を受け取ります(複数アカウント を参照)。
未実装(同じパターンで、必要なら後で追加): 支払い、ブロック、フォーム、ウェブフック、ギフト券。
学んだ教訓(このサーバーを拡張する前に読んでください)
変更を伴う呼び出しからの
200 OKは、変更が実行されたことを証明しません。reschedule_appointmentは当初PUT /appointments/:idを呼び出しており、200を返して 変更されていない予約をエコーバックしました。Acuity はそのエンドポイントのdatetimeフィールドを黙って無視していました。修正は、専用のPUT /appointments/:id/rescheduleルートで、cancel_appointmentがすでに使用していたパターン(/appointments/:id/cancel)に合わせたものでした。書き込み後は、get_appointmentで再取得してから信頼してください。特に、後で追加する新しい変更ツールではそうです。npx @modelcontextprotocol/inspector --cliは、起動するnode server.jsプロセスにアドホックな環境変数を確実に転送しません。 まだ解決済みのデフォルトではない認証情報をテストする場合(例:ACUITY_USER_ID=x ACUITY_API_KEY=y npx @modelcontextprotocol/inspector --cli ...)、既存の設定に静かにフォールバックして、誤った成功/失敗を返す可能性があります。代わりにnode bin/acuity-accounts.js test <name>を使用してください。これはこの罠を避けるために特別に作られています。インスペクター CLI は元の目的、つまり解決済みのデフォルト認証情報のテストには引き続き問題なく使用できます。または--method tools/listでツールスキーマを確認できます。
手動検証
node bin/acuity-accounts.js test # tests the default/env-resolved account
node bin/acuity-accounts.js test <name> # tests one specific named account
npx @modelcontextprotocol/inspector --cli node server.js --method tools/list # confirms the server starts and tools register correctlyThis server cannot be deployed
Maintenance
Related MCP Connectors
Hosted MCP server for Cliniko — patients, appointments, availability, and invoices for AI agents.
MCP server unifying ERPs, CRMs, APIs and knowledge base for Claude, ChatGPT and Gemini.
MCP server for Cronofy — read calendars, events and free/busy, and create, update or delete events.
Hosted Amazon Seller Central and Amazon Ads MCP server for Claude, ChatGPT, Cursor, and agents.
Related MCP Servers
- AlicenseAqualityDmaintenanceAn MCP server that connects Claude Desktop and Claude Code to your Calendly account, enabling natural-language scheduling management.7MIT
- AlicenseAqualityFmaintenanceAn MCP server that lets you schedule AI phone calls and manage Leximo assignments directly from Claude Desktop or Claude Code.1342 npm2MIT
- FlicenseBqualityDmaintenanceMCP server for Cal.com scheduling, providing ~70 tools to manage schedules, event types, bookings, calendars, webhooks, and teams. Enables natural language control of Cal.com from Claude or any MCP-compatible client.68-
- AlicenseNot gradedqualityDmaintenanceA local MCP server for CalDAV that gives Claude read access to your calendar, enabling planning, conflict checking, and schedule summaries.MIT