Back: Research

For developers & clinicians

Use Janus from other tools

Janus's checks and open datasets are available to other software: an MCP server for AI assistants, a CDS Hooks service for EHR sandboxes, a public read-only API and open data packages. All of it is open source.

Research prototype, not a medical device and not for clinical use. Do not connect Janus to a live EHR.

MCP server for AI assistants

Seven read-only tools over the Janus API

janus-mcp lets Claude, Kiro or any MCP client resolve a medicine, check a list for possible prescribing cascades and read the PIPC rows and the time machine. It is a thin client: every tool sends one request to the API and returns its answer unchanged. Set JANUS_API_URL to a local API or to this deployment's /api.

Every result carries Janus's safety rules for the assistant: a finding is a possible pattern, never a verdict, and no advice to start, change or end a medicine.

Claude Code (from the repository root)
claude mcp add janus -e JANUS_API_URL=http://127.0.0.1:8000 -- uv run --directory apps/mcp janus-mcp

Claude Desktop (claude_desktop_config.json)
{
  "mcpServers": {
    "janus": {
      "command": "uv",
      "args": ["run", "--directory", "/absolute/path/to/janus/apps/mcp", "janus-mcp"],
      "env": { "JANUS_API_URL": "http://127.0.0.1:8000" }
    }
  }
}

Kiro (.kiro/settings/mcp.json, already in the repository)
{
  "mcpServers": {
    "janus": {
      "command": "uv",
      "args": ["run", "--directory", "apps/mcp", "janus-mcp"],
      "env": { "JANUS_API_URL": "http://127.0.0.1:8000" },
      "disabled": false,
      "autoApprove": ["janus_cascade_package_rows", "janus_time_machine_catalogue", "janus_time_machine_cascade"]
    }
  }
}

The server logs nothing of a call and keeps nothing between calls. The medicines an assistant sends are seen by the assistant's provider.

Documentation: docs/mcp.md

CDS Hooks service

order-select and order-sign, CDS Hooks 2.0

For sandboxes and evaluation only.

The service reads draft orders and prefetched medicines as FHIR R4, maps NDC, RxNorm and ATC codes through the Janus resolution layer and answers with information cards for possible prescribing cascades from the PIPC list. Nothing is stored.

Discovery and service
GET https://<host>/api/cds-services
POST https://<host>/api/cds-services/janus-cascade

Prefetch templates
medicationRequests:   MedicationRequest?patient={{context.patientId}}&status=active,on-hold
medicationStatements: MedicationStatement?patient={{context.patientId}}&status=active,on-hold

Cards are always "info", with the PIPC row, the evidence and the disclaimer; no suggestions and no actions. No card does not mean the medicines are free of problems.

Documentation: docs/cds-hooks.md

Public read-only API

OpenAPI 3.1, no personal data in or out

The public routes take no request body and only read precomputed or released data: the onset table, the data-quality report, the cascade package, the open outcome dataset, the time machine and the CDS Hooks discovery.

Examples
curl -s https://<host>/api/open/faers-onset/5 | jq '.row.status, .row.median_days'
curl -s https://<host>/api/open/data-quality | jq '.version, .summary.by_class'
curl -s -o pipc.json https://<host>/api/open/cascade-package/pipc

Errors are codes. Medical routes are not cached and log only route, status and latency. Counts are reports, never people.

OpenAPI document: docs/openapi-public.jsonRoute list and rules: docs/open-api.md

Open data packages

Frictionless data packages in the repository

Each package has a datapackage.json with the licence, the sources and a hash per file.

How to read and cite them: docs/open-data.md