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 — справочник для человека; навык — то,
чему вы должны следовать на самом деле.
Что нужно перед настройкой
Идентификатор пользователя 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 installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Hosted Amazon Seller Central and Amazon Ads MCP server for Claude, ChatGPT, Cursor, and agents.
Hosted MCP server connecting claude.ai, ChatGPT and other AI apps to your own computer
Hosted Amazon Seller and Vendor MCP server for Claude, ChatGPT, Cursor, Codex, Gemini, Copilot.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/walakaka77/acuity-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server