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
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 mcp add janus -e JANUS_API_URL=http://127.0.0.1:8000 -- uv run --directory apps/mcp janus-mcp{
"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" }
}
}
}{
"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.mdCDS Hooks service
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.
GET https://<host>/api/cds-services
POST https://<host>/api/cds-services/janus-cascademedicationRequests: MedicationRequest?patient={{context.patientId}}&status=active,on-hold
medicationStatements: MedicationStatement?patient={{context.patientId}}&status=active,on-holdCards 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.mdPublic read-only API
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.
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/pipcErrors 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.mdOpen data packages
- data/open/cascade-packageThe 65 PIPC rows with Janus's class mapping, name rules and ATC exclusions. CC BY 4.0 and Apache-2.0 per file.
- data/open/data-qualityThe weekly data-quality report: findings as CSV, JSON and a summary. CC BY 4.0.
- data/open/faers-onsetThe FAERS onset table for the 65 PIPC rows as CSV and JSON. CC BY 4.0.
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