acuity-mcp
acuity-mcp
Локальный MCP-сервер, предоставляющий API Acuity Scheduling в виде инструментов Claude Code — создание, просмотр, перенос и отмена записей, проверка доступности, список типов записей, календарей и клиентов — всё напрямую из сессии Claude. Поддерживает несколько аккаунтов Acuity одновременно, переключение между ними через аргумент каждого вызова инструмента.
Создан с нуля, потому что поддерживаемого бесплатного MCP для Acuity не существует — единственный найденный
в ходе исследования репозиторий на 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 Scheduling и API-ключ из Acuity: Business Settings → Integrations → API. Одна пара на каждый аккаунт Acuity, который вы хотите подключить.
⚠️ Acuity ограничивает доступ к API в зависимости тарифного плана. Некоторые планы возвращают
403: API access is only available on Powerhouse plans на каждый запрос — это Acuity отклоняет ваш
аккаунт, а не ошибка здесь. Базовая аутентификация проходит успешно (нет 401), но каждый вызов всё равно
возвращает 403 — это признак данной ситуации. Если вы столкнулись с этим, либо обновите тарифный план,
либо используйте альтернативный путь к тому же аккаунту (например, коннектор Acuity в Zapier, который,
как показала практика, не подвержен тому же ограничению).
Установка
npm installБыстрый старт — один аккаунт
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 credentialsПереключение аккаунтов внутри сессии Claude не требует повторной регистрации — каждый
инструмент, предоставляемый этим сервером, принимает необязательный аргумент account:
«Список типов записей для тестового аккаунта» → Claude вызывает
list_appointment_typesс{"account": "sandbox"}.
Попросите Claude выполнить list_accounts в любое время, чтобы увидеть, какие аккаунты настроены и какой
из них является основным.
Если вы предпочитаете запускать полностью отдельные регистрации MCP-сервера для каждого аккаунта
(например, чтобы каждый отображался как отдельно именованный сервер), это тоже работает — укажите
ACUITY_ACCOUNT на имя вместо передачи 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(прямое переопределение, файл аккаунтов не нужен)Аргумент
accountпри вызове инструмента или переменная окруженияACUITY_ACCOUNT— поиск по имениСобственный аккаунт
defaultвaccounts.jsonaccounts.jsonс ровно одним настроенным аккаунтом — используется автоматическиУстаревший плоский файл
~/.config/acuity-mcp/credentials(строкиACUITY_USER_ID=.../ACUITY_API_KEY=...) — поддерживается для обратной совместимости со старыми однопользовательскими настройками
Инструменты
Локальные, без вызова API Acuity:
list_accounts— список настроенных имён/меток аккаунтов и основного аккаунта (никогда API-ключи)
Только чтение:
list_appointment_types— список доступных для записи типов консультацийlist_calendars— список календарей/сотрудниковlist_appointments— фильтрация по диапазону дат / календарю / типу / статусу отменыget_appointment— полная информация об одной записи по IDcheck_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ненадёжно передаёт ad-hoc переменные окружения процессу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