Build clinical AI on a PHI proxy.
De-identify inside your own infrastructure, call any model, re-identify on return — and write results back to the EHR over FHIR. All 18 Safe Harbor identifiers stripped, deterministically and auditably. No BAA with a model vendor.
$ curl localhost:8080/api/deidentify \ -d '{"text": "Jane Doe, K+ 6.1, call (415) 555-0132"}' { "text": "[NAME_1], K+ 6.1, call [PHONE_1]", "session": "sess_8f2…" # key never leaves your infra } $ curl localhost:8080/api/fhir/ServiceRequest \ -H "X-Session: sess_8f2…" -d @order.json → 201 Created · written to the EHR, signed by the clinician
Every surface you'd want
One proxy. Six ways in.
REST API
HTTPPOST /api/deidentify · /api/reidentify · /api/fhir/deidentify. JSON in, JSON out. Any language, any framework.
Native MCP server
MCPFirst-class Model Context Protocol support so Claude Desktop, Claude Code, and any MCP-compatible host can call the proxy as a tool.
FHIR R4 client
FHIR R4Read structured resources — Patient, Condition, Observation, MedicationRequest, DocumentReference — straight from Epic, Oracle Health, athenahealth, or eClinicalWorks.
FHIR write-back
CREATECreate DocumentReference notes and PDFs, ServiceRequest and MedicationRequest orders, Condition problems, Communication, and Task — gated on clinician signature, written immediately.
CDR persistent context
CDRA built-in FHIR Clinical Data Repository keeps a full longitudinal record per patient, so every call has the whole chart — not just the latest payload.
Reversible tokenization
De-idPHI becomes deterministic tokens ([NAME_1], [DATE_1], …). The session key lives only in your infra — re-identify after the model responds.
API reference
Four endpoints. Infinite clinical context.
Authenticate with an API key. Every endpoint returns JSON. All FHIR resources are de-identified in-flight before the response leaves the proxy.
# clinical text de-identification
POST /api/deidentify
POST /api/reidentify
# FHIR R4 resources (de-identified)
POST /api/fhir/deidentify
POST /api/fhir/reidentify
# session management
GET /api/session
DELETE /api/session
# health
GET /health
# pull and run in your environment
docker pull ghcr.io/1putt-health/medscrub-proxy
# configure your EHR credentials
cp .env.example .env
# start the stack
docker compose up -d
# proxy running at localhost:3001
→ 500 free credits · no credit card required
Ship past the CISO
Compliance you can read, not just claim.
The de-identification is documented, deterministic code — not a black-box classifier. Your security team can audit exactly what gets removed and why.
No PHI leaves your infra
The proxy runs in your environment. PHI is stripped and the session key never travels to a model API.
No BAA with a model vendor
The model only sees de-identified data, so you are not disclosing PHI to it — no Business Associate Agreement required.
All 18 Safe Harbor identifiers removed
Names, dates, MRNs, SSNs, addresses, phones, and every other 45 CFR §164.514(b)(2) identifier — stripped on every request.
Deterministic, auditable de-id
Documented code, not a black-box ML classifier. Read exactly what gets removed and why.
First call in five minutes.
docker compose up, grab a key, and de-identify your first payload. 500 free credits on sign-up.