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에서 Acuity Scheduling 사용자 ID와 API 키가 필요합니다: 비즈니스 설정 → 통합 → API. 연결하려는 각 Acuity 계정마다 한 쌍씩 필요합니다.
⚠️ Acuity는 요금제에 따라 API 액세스를 제한합니다. 일부 요금제에서는 모든 요청에 대해 403: API access is only available on Powerhouse plans를 반환합니다 — 이는 여기의 버그가 아니라 Acuity가 계정을 거부하는 것입니다. 기본 인증은 성공하지만(401 없음) 모든 호출이 여전히 403을 반환하는 것이 이 현상의 특징입니다. 이 문제가 발생하면 요금제를 업그레이드하거나 동일한 계정에 대한 대체 경로(예: 경험적으로 동일한 제한을 받지 않은 Zapier Acuity 커넥터)를 사용하세요.
설치
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 credentialsClaude 세션 내에서 계정 전환은 다시 등록할 필요가 없습니다 — 이 서버가 노출하는 모든 도구는 선택적 account 인수를 허용합니다:
"샌드박스 계정의 약속 유형 목록 보기" → Claude가
{"account": "sandbox"}와 함께list_appointment_types를 호출합니다.
언제든지 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환경 변수 (직접 재정의, 계정 파일 불필요)도구 호출 시
account인수 또는ACUITY_ACCOUNT환경 변수 — 이름으로 조회accounts.json자체의default계정정확히 하나의 계정이 구성된
accounts.json— 자동으로 사용레거시 플랫
~/.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로 특정 약속의 전체 세부 정보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필드를 조용히 무시했습니다. 수정 방법은cancel_appointment가 이미 사용한 패턴(/appointments/:id/cancel)과 일치하는 전용PUT /appointments/:id/reschedule경로를 사용하는 것이었습니다. 쓰기 후에는 항상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