DodoDentist Dental Clinic

Veja os horários livres da sua clínica odontológica, dentistas, preços de tratamentos e o quão movimentado é cada dia.

Servidor MCP hospedado

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

Instala no Claude Code, Codex, Cursor e outros

Documentação

Conecte assistentes a operações clínicas sem PHI por meio do MCP, ou conecte suas próprias ferramentas à API REST DodoDentist com escopo definido e webhooks assinados.

Model Context Protocol

Operações clínicas seguras no Claude e ChatGPT

Conecte o DodoDentist ao Claude, ChatGPT ou outro cliente MCP em https://mcp.dododentist.com/mcp.. O OAuth solicita o escopo somente leitura dododentist:read e mantém todos os resultados dentro da organização que você autorizar.

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

Instale o Agent Plugin portátil para emparelhar este conector somente leitura com seu guia de fluxo de trabalho do produto, ou inspecione o catálogo público de descoberta. Manifesto do Agent Plugin Catálogo de IA

Somente ferramentas administrativas

O conector pode listar metadados clínicos seguros, disponibilidade para agendamento, nomes de exibição dos provedores, nomes e preços do catálogo de procedimentos, blocos de calendário não identificadores e contagens agregadas de agendamentos por dia. Suas visualizações interativas resumem os mesmos dados operacionais limitados.

O MCP público nunca retorna registros de pacientes ou detalhes de contato, registros individuais de consultas, diagnósticos, informações de tratamento, notas clínicas, anamnese, gráficos odontológicos ou outros dados de saúde. Ele não pode criar ou alterar registros e não toma decisões clínicas ou médicas.

Use a API REST abaixo somente quando sua própria integração revisada realmente precisar de acesso em nível de registro. As chaves da API REST e suas obrigações de tratamento de dados são separadas do conector MCP mais restrito.

CLI

Interface de linha de comando

As mesmas clínicas, pacientes, consultas, tratamentos, faturas e pagamentos estão disponíveis no seu terminal por meio do CLI dododentist. Instale-o globalmente com npm ou execute-o ad hoc com npx.

Não há etapa de conta para fazer em outro lugar: dododentist signup cria uma conta a partir do terminal, e dododentist login faz login em uma conta existente pelo navegador ou com um segredo de chave de API. Para scripts e CI, exporte DODODENTIST_API_KEY e pule a etapa de login completamente.

# 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

Todo comando de dados aceita --json para saída analisável, erros vão para stderr com código de saída 1, e dododentist schema imprime toda a árvore de comandos como JSON para que um script nunca precise extrair texto de ajuda.

O CLI é open source em github.com/dododentist/cli e publicado como dododentist no npm. Execute qualquer comando com --help para ver suas opções.

Agent Skills

Ensine seu agente de codificação sobre o DodoDentist

O DodoDentist inclui Agent Skills — guias que seguem o padrão agentskills.io e ensinam agentes de codificação a trabalhar com um consultório odontológico por meio do CLI dododentist e do conector MCP, em vez de adivinhar comandos e ferramentas.

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

Um único comando instala as skills no Claude Code, Cursor, Codex, Gemini CLI e em qualquer outro agente que siga o padrão Skills. O CLI também inclui os mesmos guias, com versão correspondente aos comandos que ele fornece: dododentist skills get <name> imprime um sob demanda.

As duas skills espelham as duas superfícies e deliberadamente não são equivalentes. A skill do CLI cobre a API REST em nível de registro e declara o dever de cuidado que acompanha os dados do paciente; a skill de administração clínica cobre o conector MCP, que é somente administrativo e não pode acessar dados de pacientes ou clínicos de forma alguma.

As skills são open source em github.com/dododentist/skills. Usuários do Claude também podem instalar o plugin Claude DodoDentist, que agrupa o conector junto com sua skill: github.com/dododentist/claude-plugin.

Chaves de API

Obtenha uma chave e autentique-se

A API REST DodoDentist é para um consultório que deseja executar suas próprias ferramentas sobre seus registros: migrar pacientes de outro sistema de gestão de consultório, manter uma página de agendamento interna ou planilha de relatórios em sincronia com o calendário, ou enviar faturas e pagamentos para sua stack contábil.

Uma chave pertence à sua organização e só pode ser criada por um administrador da organização. O segredo é exibido quando a chave é criada; depois, um administrador pode revelá-lo novamente pelo painel, reentrando com a senha. Como a chave carrega seu próprio locatário, a organização está implícita na chave e nunca precisa ser enviada.

Autentique cada solicitação com autenticação básica HTTP contendo apenas o segredo da chave, codificado em base64, no cabeçalho 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)

Todo endpoint está sob https://api.dododentist.com. Solicitações feitas com uma chave são limitadas por chave; exceder o limite retorna 429.

Início rápido

Suas três primeiras chamadas

Encontre sua clínica, liste seus pacientes e agende uma consulta para um deles.

# 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"
  }'

Explore a referência completa da API — cada endpoint com seus parâmetros, corpo da solicitação, respostas e escopo necessário.

Escopos

Menor privilégio por padrão

Cada chave carrega uma lista de escopos, então um script de relatórios que só precisa ler seu calendário nunca obtém a capacidade de alterar um registro de paciente. Novas chaves começam somente leitura; amplie-as explicitamente. Uma solicitação cuja chave não tenha o escopo exigido por um endpoint é recusada com 403.

  • patients:readListe os pacientes de uma clínica e leia um único paciente.
  • patients:writeCrie, atualize e exclua pacientes.
  • appointments:readListe consultas e leia uma única consulta.
  • appointments:writeCrie, atualize e exclua consultas.
  • clinics:readListe as clínicas da sua organização.
  • treatments:readLeia o catálogo de tratamentos de uma clínica.
  • invoices:readLeia faturas.
  • invoices:writeCrie, atualize e exclua faturas.
  • payments:readLeia pagamentos.
  • payments:writeCrie, atualize e exclua pagamentos.

Registros de pacientes são dados de saúde. Uma chave é uma credencial sobre esses dados, então dê a cada integração sua própria chave com os escopos mais restritos com os quais ela possa trabalhar e exclua a chave no momento em que a integração for desativada.

Webhooks

Webhooks assinados

Adicione uma assinatura de webhook à sua clínica e o DodoDentist envia via POST os eventos que você escolheu para o seu servidor conforme eles acontecem, para que seus próprios sistemas não precisem fazer polling.

  • patient.createdUm paciente foi criado.
  • patient.updatedUm registro de paciente foi alterado.
  • patient.deletedUm paciente foi excluído.
  • appointment.createdUma consulta foi agendada.
  • appointment.updatedUma consulta foi movida ou seu status foi alterado.
  • appointment.deletedUma consulta foi excluída.
  • invoice.createdUma fatura foi emitida.
  • invoice.updatedUma fatura foi editada.
  • invoice.deletedUma fatura foi excluída.
  • payment.createdUm pagamento foi registrado.
  • payment.updatedUm pagamento foi editado.
  • payment.deletedUm pagamento foi excluído.
POST https://your-server.com/dododentist-webhook

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

Verifique a assinatura

Cada entrega carrega um cabeçalho X-Dododentist-Signature no formato t=timestamp,v1=assinatura, onde a assinatura é um HMAC-SHA256 de timestamp.body com chave no segredo da assinatura mostrado a você uma vez quando a assinatura foi criada. Recalcule-o sobre o corpo bruto e compare antes de confiar no 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))
}

A entrega é uma tentativa de melhor esforço com timeout de cinco segundos e sem novas tentativas, então responda 2xx rapidamente e faça o trabalho de forma assíncrona. Um endpoint que falhar vinte vezes seguidas é desativado automaticamente e precisa ser reativado.

Comece a construir