open-hl7
EMR-agnostic · MLLP + ADT · agentic connector builder

Ship an HL7 interface
by showing it screenshots.

open-hl7 is an open-source, on-demand HL7 integration hub. A vision-capable agent reviews an existing EMR's config screens and sample messages, then synthesizes a working connector on the fly — no per-vendor code. OpenEMR is the first integration.

$ curl -fsSL https://raw.githubusercontent.com/rollingventures/open-hl7/main/install.sh | sh

Linux & macOS · amd64/arm64 · single static binary

Why it's different

Traditional HL7 integration is a human reading interface PDFs and clicking config screens. open-hl7 turns that perception-and-mapping work over to an agent.

◆ Agentic connector builder

Feed Claude screenshots + sample messages of a target EMR. It proposes a connector, generates a test message, diffs it against the real sample, and self-corrects until it matches.

◆ Works with any EMR

The hub speaks a neutral canonical model and never imports EMR code. Each system is a declarative ConnectorSpec, not a new codebase.

◆ Real HL7 transport

MLLP server + client with framing and ACK/NAK — the piece most EMR cores lack. ADT today; lab ORM/ORU next.

◆ Audit & replay built in

Every message and its acknowledgement is persisted. Query, review, and (soon) replay — the backbone an interface engine needs.

◆ Human in the loop

The agent never auto-deploys. It emits a reviewable spec with a confidence score; you approve before a channel goes live.

◆ Open source

A single static Go binary. Run it anywhere, on demand. No black-box engine.

How it works

From screenshots to a live channel.

Perceive

The agent reads screenshots of the target system — config screens, field layouts, a sample message.

Map

It proposes a ConnectorSpec: transport, MSH routing, and a canonical ⇄ HL7 field map.

Validate

It renders a message from the proposed map and diffs it against the system's real sample — looping until they match.

Approve & deploy

You review the spec and confidence report; the hub loads it and runs it as a live channel.

Try the ADT loop

After installing, run the hub and push a patient through it.

open-hl7 -mllp-listen :2575 -http :8088 -dest 127.0.0.1:2576

curl -s localhost:8088/events -H 'content-type: application/json' -d '{
  "mrn":"12345","familyName":"Doe","givenName":"Jane",
  "birthDate":"19800115","sex":"F","event":"create",
  "source":{"emr":"openemr","facility":"CLINIC"}
}'

# -> encodes ADT^A04 over MLLP, records the ACK, archives the message
curl -s localhost:8088/messages | jq .