Skip to main content
Glama

clinic-engine

Action Engine de agendamento da Clínica Horizonte.

O agente (Claude, ChatGPT, Cursor, um app ou a CLI) só pede o resultado. A política da clínica — expediente, buffer, aviso mínimo e quem atende o quê — mora aqui, uma vez, e todo mundo passa por engine.invoke.

paciente / recepção / agente
        ↓
appointments.list-valid-slots
appointments.schedule
appointments.reschedule
appointments.cancel
        ↓
política da clínica + calendário
        ↓
horário válido, consulta marcada, ou recusa estável

O que este engine faz

Capability

Quem pode chamar

Resultado

appointments.list-valid-slots

público

Horários que a clínica permite oferecer

appointments.schedule

autenticado

Consulta confirmada ou conflito estável

appointments.reschedule

autenticado

Novo horário, se o aviso mínimo permitir

appointments.cancel

autenticado

Cancelamento, se o aviso mínimo permitir

A clínica de demonstração:

  • Expediente: segunda a sexta, 08:00–18:00; sábado, 08:00–12:00; domingo fechado

  • Fuso: America/Sao_Paulo (-03:00)

  • Buffer: 10 minutos entre consultas

  • Aviso mínimo: 2 horas para marcar, remarcar ou cancelar

  • Profissionais: Dra. Ana Souza (consulta-geral, retorno) e Dr. Carlos Mendes (consulta-geral, exame)

O calendário padrão é em memória, com duas consultas já marcadas no dia 2026-09-07, para o README e os testes serem determinísticos. O relógio padrão também está congelado nesse dia. Trocar para relógio real ou Google Calendar é só injetar outra dependência — as capabilities não mudam.

Related MCP server: northstar-clinic

Requisitos

  • Node.js 22.20 ou posterior

Primeiro run

npm install
npm run check
npm run direct

npm run check typecheck, testa, builda e valida o catálogo MCP. npm run direct lista horários de consulta-geral no dia de demonstração.

CLI

A CLI entra como a recepção local (local:clinic-desk), então as actions autenticadas funcionam.

npm run build

npm run cli -- list

npm run cli -- run appointments.list-valid-slots --input '{"appointmentType":"consulta-geral","date":"2026-09-07"}'

npm run cli -- run appointments.schedule --input '{
  "patientName": "Ada Lovelace",
  "appointmentType": "consulta-geral",
  "practitionerId": "dra-ana-souza",
  "start": "2026-09-07T14:00:00-03:00"
}'

MCP stdio

npm run mcp:stdio
npm run mcp:install

Depois o Cursor, Claude Code ou outro cliente MCP local vê as quatro tools. mcp:uninstall remove o engine dos clientes gerenciados pelo Senda.

MCP HTTP

  1. Copie .env.example para .env

  2. Defina CLINIC_ENGINE_HTTP_TOKEN

  3. Suba o servidor:

cp .env.example .env
npm run mcp:http

O endpoint é POST http://127.0.0.1:3000/mcp. Sem Authorization: Bearer <token> a resposta é 401. Não existe modo de desenvolvimento sem autenticação.

Devtools

npm run devtools

Abre o inspector do Senda (em geral em http://localhost:4100/). Dá para chamar a mesma capability por direct, CLI, MCP stdio ou MCP HTTP e comparar o resultado.

Como a fronteira funciona

  • MCP, CLI e HTTP são tomadas. Eles não conhecem Google Calendar nem a regra de sábado.

  • O Action Engine é o microsserviço de domínio. Ele valida entrada, autoriza, aplica a política e só então fala com o calendário.

  • Google Calendar é um adapter. src/infrastructure/google-calendar.ts implementa o mesmo CalendarPort da agenda em memória via defineConnector. O default não chama a API do Google, para o clone do repositório funcionar sem credencial.

Para usar Google Calendar no composition root:

import { googleCalendarConnector } from "./infrastructure/google-calendar.js";

const { ports } = googleCalendarConnector.create(
  {
    calendarId: process.env.GOOGLE_CALENDAR_ID,
    accessToken: process.env.GOOGLE_CALENDAR_ACCESS_TOKEN,
  },
  {},
);

export const engine = createClinicEngine({
  calendar: ports.calendar,
  clock: { now: () => new Date() },
  createId: createIdFactory(),
});

Mapa do projeto

src/capabilities/     contratos públicos (input, output, access, run)
src/domain/           política da clínica e geração de slots
src/application/      CalendarPort e dependências
src/infrastructure/   agenda em memória e conector Google
src/engine.ts         um mapa de capabilities, um invoke
src/direct.ts         smoke test
src/cli.ts            CLI
src/mcp-stdio.ts      MCP local
src/mcp-http.ts       MCP Streamable HTTP
test/                 provas pela fronteira engine.invoke

Licença

MIT

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Simulates a third-party appointment booking agent, enabling your AI platform to check availability and book appointments via MCP interoperability.
    -
  • F
    license
    Not graded
    quality
    C
    maintenance
    Exposes vaccination-appointment scheduling as standardized MCP tools backed by an in-memory mock backend. Enables agents to list available slots by date and vaccine type, book appointments, check confirmation status, and cancel bookings.
    -
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables LLMs and MCP clients to interact with patient records, encounters, and practice information through tools for clinical, scheduling, messaging, and administrative workflows.
    MIT