MLLP (Minimal Lower Layer Protocol)
MLLP (Minimal Lower Layer Protocol) frames HL7 v2 messages over TCP: a start block byte (0x0B, vertical tab) before the message, an end block byte (0x1C, file separator) plus a carriage return (0x0D) after it. The receiver reads bytes until it sees the end sequence, so many messages can flow over one long-lived socket, and the acknowledgment for each message returns over the same connection in its own frame.
| Start block | 0x0B (vertical tab) |
|---|---|
| End block | 0x1C (file separator) |
| Trailer | 0x0D (carriage return) |
| Transport | TCP, typically one long-lived socket per interface |
| Acknowledgment | The ACK returns over the same socket, MLLP-framed itself |
Example
<0x0B>MSH|^~\&|PIDGEON^^L|PIDGEON_FACILITY|TARGET^^L|TARGET_FACILITY|20260722160739||ACK|289558|P|2.3|||SU|AL|||es^Spanish^ISO639^^^<0x0D>MSA|CE|169768||1|D|ID223583^^^ID349682^^<0x0D><0x1C><0x0D>An engine-generated ACK (`pidgeon generate ACK --seed 42`; timestamps vary per run) shown inside its MLLP frame. The <0x..> markers stand in for the raw bytes: 0x0B opens the frame, 0x0D ends each segment, and 0x1C 0x0D closes the frame.
Validation context
Strict and compatibility validation notes land here with the phase-1 data export.
This answer, in your terminal
pidgeon generate ACK --seed 42Wire it into your AI agent:
claude mcp add pidgeon -- npx -y @pidgeonhealth/mcpDownload Post free to browse this reference with generation attached.