acuity-mcp
acuity-mcp
Un servidor MCP local que expone la API de Acuity Scheduling como herramientas de Claude Code: listar, crear, reprogramar, cancelar citas, verificar disponibilidad, listar tipos de cita, calendarios y clientes, todo directamente desde una sesión de Claude. Soporta múltiples cuentas de Acuity en paralelo, seleccionables por llamada a herramienta.
Creado a medida porque no existe un MCP gratuito mantenido para Acuity — el único repositorio de GitHub encontrado durante
la investigación apuntaba a un paquete npm que nunca se publicó. Usa @modelcontextprotocol/sdk +
zod, se ejecuta sobre stdio.
Si eres Claude: lee esto primero
Si un usuario te pide configurar esto, añadir una cuenta de Acuity, cambiar de cuenta o solucionar un problema de
conexión, carga .claude/skills/acuity-mcp-setup/SKILL.md en este repositorio — tiene la guía
completa paso a paso para todo eso. Este README es la referencia para humanos; la habilidad es lo que
deberías seguir realmente.
Lo que necesitas antes de la configuración
Un ID de usuario de Acuity Scheduling y una Clave de API, desde Acuity: Configuración del negocio → Integraciones → API. Un par por cada cuenta de Acuity que quieras conectar.
⚠️ Acuity restringe el acceso a la API según el plan contratado. Algunos planes devuelven 403: API access is only available on Powerhouse plans en cada solicitud — esto es Acuity rechazando tu cuenta, no un error aquí.
Si la Autenticación Básica funciona (sin 401) pero todas las llamadas siguen dando 403, esa es la señal. Si
te ocurre, actualiza el plan o usa una vía alternativa para la misma cuenta (por ejemplo, un conector de Acuity para
Zapier, que empíricamente no ha estado sujeto a la misma restricción).
Instalación
npm installInicio rápido — una cuenta
node bin/acuity-accounts.js add production --user-id <your-user-id> --api-key <your-api-key>La primera cuenta que añadas se convierte automáticamente en la predeterminada. Luego registra el servidor con Claude Code:
claude mcp add acuity -s user -- node "$(pwd)/server.js"Inicia una nueva sesión de Claude Code (o ejecuta /mcp en una existente) para que las herramientas aparezcan.
Verifica que funciona sin una sesión de Claude:
node bin/acuity-accounts.js testMúltiples cuentas
Añade tantas cuentas con nombre como quieras:
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"Las credenciales residen en ~/.config/acuity-mcp/accounts.json (chmod 600, nunca dentro de este repositorio,
nunca se confirman). Gestiona con:
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 credentialsCambiar de cuenta dentro de una sesión de Claude no requiere volver a registrar nada — cada
herramienta que expone este servidor acepta un argumento account opcional:
"Lista los tipos de cita para la cuenta sandbox" → Claude llama a
list_appointment_typescon{"account": "sandbox"}.
Pide a Claude que ejecute list_accounts en cualquier momento para ver qué está configurado y cuál es la cuenta
predeterminada.
Si prefieres ejecutar registros de servidor MCP completamente separados por cuenta (por ejemplo, para que cada
uno aparezca como un servidor con nombre distinto), también funciona — apunta ACUITY_ACCOUNT a un nombre
en lugar de pasar account en cada llamada:
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"Orden de resolución de credenciales
Variables de entorno
ACUITY_USER_ID+ACUITY_API_KEY(anulación directa, no necesita archivo de cuentas)Argumento
accounten una llamada a herramienta, o la variable de entornoACUITY_ACCOUNT— se busca por nombreCuenta
defaultpropia deaccounts.jsonaccounts.jsoncon exactamente una cuenta configurada — se usa automáticamenteArchivo de credenciales plano heredado
~/.config/acuity-mcp/credentials(líneasACUITY_USER_ID=.../ACUITY_API_KEY=...) — compatible con versiones anteriores para configuraciones antiguas de una sola cuenta
Herramientas
Solo local, sin llamada a la API de Acuity:
list_accounts— lista los nombres/etiquetas de cuentas configuradas y la predeterminada (nunca las claves de API)
Solo lectura:
list_appointment_types— lista los tipos de consulta reservableslist_calendars— lista calendarios/personallist_appointments— filtrable por rango de fechas / calendario / tipo / estado de cancelaciónget_appointment— detalle completo de una cita por IDcheck_availability_dates— fechas disponibles en un mes para un tipo de citacheck_availability_times— franjas horarias disponibles en una fecha para un tipo de citalist_clients— clientes que han reservado citas
Mutación (cambios reales en el calendario activo — Claude pedirá confirmación antes de llamar a estas):
create_appointment— reservar una nueva citareschedule_appointment— cambiar la fecha/hora de una citacancel_appointment— cancelar una cita
Todas las herramientas aceptan un argumento account opcional (ver Múltiples cuentas).
No implementado (mismo patrón, añadir después si es necesario): pagos, bloqueos, formularios, webhooks, certificados de regalo.
Lecciones aprendidas (lee antes de extender este servidor)
Un
200 OKde una llamada de mutación no prueba que la mutación ocurriera.reschedule_appointmentoriginalmente llamaba aPUT /appointments/:id, que devolvía200y repetía la cita sin cambios — Acuity ignoraba silenciosamente el campodatetimeen ese endpoint. La corrección fue la ruta dedicadaPUT /appointments/:id/reschedule, siguiendo el patrón quecancel_appointmentya usaba (/appointments/:id/cancel). Siempre vuelve a obtener conget_appointmentdespués de una escritura antes de confiar en ella, especialmente para cualquier nueva herramienta de mutación que se añada después.npx @modelcontextprotocol/inspector --clino reenvía de forma fiable las variables de entorno ad-hoc al procesonode server.jsque genera. Si estás probando credenciales que no son la predeterminada resuelta (por ejemplo,ACUITY_USER_ID=x ACUITY_API_KEY=y npx @modelcontextprotocol/inspector --cli ...), puede caer silenciosamente en lo que ya esté configurado y dar un falso positivo/negativo. Usanode bin/acuity-accounts.js test <nombre>en su lugar — creado específicamente para evitar esta trampa. El CLI del inspector sigue siendo útil para su propósito original: probar las credenciales predeterminadas resueltas, o--method tools/listpara verificar los esquemas de las herramientas.
Verificación manual
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