DodoDentist Dental Clinic

Consulta los horarios disponibles de tu clínica dental, los dentistas, los precios de los tratamientos y el nivel de ocupación de cada día.

Servidor MCP alojado

npx add-mcp 'https://mcp.dododentist.com/mcp'

Se instala en Claude Code, Codex, Cursor y más

Documentación

Conecta asistentes a operaciones clínicas sin PHI a través de MCP, o conecta tus propias herramientas a la API REST de DodoDentist con alcance definido y webhooks firmados.

Model Context Protocol

Operaciones clínicas seguras en Claude y ChatGPT

Conecta DodoDentist a Claude, ChatGPT u otro cliente MCP en https://mcp.dododentist.com/mcp.. OAuth solicita el alcance de solo lectura dododentist:read y mantiene cada resultado dentro de la organización que autorices.

{
  "mcpServers": {
    "dododentist": {
      "type": "http",
      "url": "https://mcp.dododentist.com/mcp"
    }
  }
}

Instala el Agent Plugin portátil para combinar este conector de solo lectura con su guía de flujo de trabajo del producto, o inspecciona el catálogo de descubrimiento público. Manifiesto del Agent Plugin Catálogo de IA

Solo herramientas administrativas

El conector puede listar metadatos clínicos seguros, disponibilidad reservable, nombres visibles de proveedores, nombres y precios del catálogo de procedimientos, bloques de calendario no identificativos y recuentos agregados de citas por día. Sus vistas interactivas resumen los mismos datos operativos acotados.

El MCP público nunca devuelve registros de pacientes ni datos de contacto, registros individuales de citas, diagnósticos, información de tratamiento, notas clínicas, anamnesis, odontogramas ni otros datos de salud. No puede crear ni modificar registros y no toma decisiones clínicas ni médicas.

Usa la API REST a continuación solo cuando tu integración revisada realmente necesite acceso a nivel de registro. Las claves de la API REST y sus obligaciones de manejo de datos son independientes del conector MCP más restringido.

CLI

Interfaz de línea de comandos

Las mismas clínicas, pacientes, citas, tratamientos, facturas y pagos están disponibles desde tu terminal a través del CLI de dododentist. Instálalo globalmente con npm o ejecútalo ad hoc con npx.

No hay ningún paso de cuenta que hacer en otro lugar: dododentist signup crea una desde el terminal, y dododentist login inicia sesión en una cuenta existente ya sea a través del navegador o con un secreto de clave API. Para scripts y CI, exporta DODODENTIST_API_KEY y omite por completo el paso de inicio de sesión.

# Install once, globally
npm install -g dododentist
# or run it ad hoc without installing
npx dododentist --help

# Create an account without leaving the terminal
dododentist signup --email dentist@example.com

# Or log in to an existing one — browser, or an API key secret
dododentist login

# The clinics this credential can reach
dododentist clinics list

# This week's schedule for one of them
dododentist appointments list --clinicId CLINIC_ID \
  --startTime 2026-09-01T00:00:00.000Z --endTime 2026-09-08T00:00:00.000Z

# Book a visit
dododentist appointments add --clinicId CLINIC_ID --patientId PATIENT_ID \
  --startTime 2026-09-01T09:00:00.000Z --endTime 2026-09-01T09:30:00.000Z

Cada comando de datos acepta --json para salida analizable, los errores van a stderr con código de salida 1, y dododentist schema imprime todo el árbol de comandos como JSON para que un script nunca tenga que extraer texto de ayuda.

El CLI es de código abierto en github.com/dododentist/cli y se publica como dododentist en npm. Ejecuta cualquier comando con --help para ver sus opciones.

Agent Skills

Enseña a tu agente de codificación DodoDentist

DodoDentist incluye Agent Skills — guías que siguen el estándar agentskills.io y enseñan a los agentes de codificación cómo trabajar con una práctica dental a través del CLI de dododentist y el conector MCP, en lugar de adivinar comandos y herramientas.

# Install the DodoDentist skills into your coding agent
npx skills add dododentist/skills

Un solo comando instala las habilidades en Claude Code, Cursor, Codex, Gemini CLI y cualquier otro agente que siga el estándar de Skills. El CLI también incluye las mismas guías, con versiones coincidentes con los comandos que incluye: dododentist skills get <name> imprime una bajo demanda.

Las dos habilidades reflejan las dos superficies y deliberadamente no son equivalentes. La habilidad del CLI cubre la API REST a nivel de registro y establece el deber de cuidado que conllevan los datos de pacientes; la habilidad de administración clínica cubre el conector MCP, que es solo administrativo y no puede acceder en absoluto a datos de pacientes o clínicos.

Las habilidades son de código abierto en github.com/dododentist/skills. Los usuarios de Claude también pueden instalar el plugin de Claude para DodoDentist, que combina el conector con su habilidad: github.com/dododentist/claude-plugin.

Claves API

Obtén una clave y autentícate

La API REST de DodoDentist es para una práctica que quiera ejecutar sus propias herramientas sobre sus registros: migrar pacientes desde otro sistema de gestión de prácticas, mantener una página de reservas interna o una hoja de informes sincronizada con el calendario, o enviar facturas y pagos a tu stack de contabilidad.

Una clave pertenece a tu organización y solo puede crearla un administrador de la organización. El secreto se muestra cuando se crea la clave; después, un administrador puede revelarlo nuevamente desde el panel reingresando su contraseña. Como la clave lleva su propio inquilino, la organización está implícita en la clave y nunca es necesario enviarla.

Autentica cada solicitud con autenticación básica HTTP que lleve solo el secreto de la clave, codificado en base64, en el encabezado Authorization.

# The Authorization header is HTTP Basic auth carrying only the key secret,
# with no username and no colon.
Authorization: Basic $(printf %s YOUR_API_KEY_SECRET | base64)

Cada endpoint se encuentra bajo https://api.dododentist.com. Las solicitudes realizadas con una clave tienen límite de velocidad por clave; superar el límite devuelve 429.

Inicio rápido

Tus primeras tres llamadas

Encuentra tu clínica, lista sus pacientes y luego reserva una cita para uno de ellos.

# List the clinics your key can reach
curl https://api.dododentist.com/api/clinics \
  -H "Authorization: Basic $(printf %s YOUR_API_KEY_SECRET | base64)"

# List the patients of one of those clinics
curl "https://api.dododentist.com/api/patients?clinicId=CLINIC_ID" \
  -H "Authorization: Basic $(printf %s YOUR_API_KEY_SECRET | base64)"

# Book an appointment for one of them.
# Times are ISO 8601 instants.
curl -X POST https://api.dododentist.com/api/appointments \
  -H "Authorization: Basic $(printf %s YOUR_API_KEY_SECRET | base64)" \
  -H "Content-Type: application/json" \
  -d '{
    "clinicId": "CLINIC_ID",
    "patientId": "PATIENT_ID",
    "startTime": "2026-09-01T09:00:00.000Z",
    "endTime": "2026-09-01T09:30:00.000Z"
  }'

Explora la referencia completa de la API — cada endpoint con sus parámetros, cuerpo de solicitud, respuestas y alcance requerido.

Alcances

Privilegio mínimo por defecto

Cada clave lleva una lista de alcances, por lo que un script de informes que solo necesita leer tu calendario nunca obtiene la capacidad de cambiar un registro de paciente. Las claves nuevas comienzan con solo lectura; amplíalas explícitamente. Una solicitud cuya clave carece del alcance que requiere un endpoint se rechaza con 403.

  • patients:readLista los pacientes de una clínica y lee un paciente individual.
  • patients:writeCrea, actualiza y elimina pacientes.
  • appointments:readLista citas y lee una cita individual.
  • appointments:writeCrea, actualiza y elimina citas.
  • clinics:readLista las clínicas de tu organización.
  • treatments:readLee el catálogo de tratamientos de una clínica.
  • invoices:readLee facturas.
  • invoices:writeCrea, actualiza y elimina facturas.
  • payments:readLee pagos.
  • payments:writeCrea, actualiza y elimina pagos.

Los registros de pacientes son datos de salud. Una clave es una credencial sobre esos datos, así que da a cada integración su propia clave con los alcances más restringidos con los que pueda trabajar, y elimina una clave en el momento en que la integración se retire.

Webhooks

Webhooks firmados

Agrega una suscripción de webhook a tu clínica y DodoDentist envía por POST los eventos que elegiste a tu servidor a medida que ocurren, para que tus propios sistemas no tengan que hacer sondeos.

  • patient.createdSe creó un paciente.
  • patient.updatedSe modificó un registro de paciente.
  • patient.deletedSe eliminó un paciente.
  • appointment.createdSe reservó una cita.
  • appointment.updatedSe movió una cita o cambió su estado.
  • appointment.deletedSe eliminó una cita.
  • invoice.createdSe emitió una factura.
  • invoice.updatedSe editó una factura.
  • invoice.deletedSe eliminó una factura.
  • payment.createdSe registró un pago.
  • payment.updatedSe editó un pago.
  • payment.deletedSe eliminó un pago.
POST https://your-server.com/dododentist-webhook

{
  "event": "appointment.created",
  "timestamp": 1719000000,
  "data": { "...": "..." }
}

Verifica la firma

Cada entrega lleva un encabezado X-Dododentist-Signature de la forma t=timestamp,v1=firma, donde la firma es un HMAC-SHA256 de timestamp.cuerpo con clave secreta de suscripción que se te muestra una vez cuando se crea la suscripción. Recalcúlala sobre el cuerpo sin procesar y compara antes de confiar en el payload.

import crypto from 'node:crypto'

// body must be the RAW request body, byte for byte
function verify(header, body, secret) {
  const [t, v1] = (header || '').split(',').map(part => part.split('=')[1])
  if (!t || !v1) return false

  const expected = crypto
    .createHmac('sha256', secret)
    .update(\`${t}.${body}\`)
    .digest('hex')

  // timingSafeEqual throws on a length mismatch, so a malformed signature
  // has to be rejected before the comparison rather than by it.
  if (v1.length !== expected.length) return false

  return crypto.timingSafeEqual(Buffer.from(v1), Buffer.from(expected))
}

La entrega es un único intento de mejor esfuerzo con un tiempo de espera de cinco segundos y sin reintentos, así que responde 2xx rápidamente y haz el trabajo de forma asíncrona. Un endpoint que falle veinte veces seguidas se desactiva automáticamente y debe reactivarse.

Comienza a crear