<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: NyxTools</title>
    <description>The latest articles on DEV Community by NyxTools (@nyxtoolsdev).</description>
    <link>https://dev.to/nyxtoolsdev</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3858510%2Fa8f1d756-1df1-45e2-a1c5-a428b9ec18db.png</url>
      <title>DEV Community: NyxTools</title>
      <link>https://dev.to/nyxtoolsdev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/nyxtoolsdev"/>
    <language>en</language>
    <item>
      <title>Testing LLM Hallucination on HL7, DICOM, and FHIR: 4 Models, 50 Questions</title>
      <dc:creator>NyxTools</dc:creator>
      <pubDate>Wed, 29 Jul 2026 21:54:46 +0000</pubDate>
      <link>https://dev.to/nyxtoolsdev/testing-llm-hallucination-on-hl7-dicom-and-fhir-4-models-50-questions-192d</link>
      <guid>https://dev.to/nyxtoolsdev/testing-llm-hallucination-on-hl7-dicom-and-fhir-4-models-50-questions-192d</guid>
      <description>&lt;h2&gt;
  
  
  None of them ever said "I don't know"
&lt;/h2&gt;

&lt;p&gt;I asked four LLMs 50 questions about HL7 v2, DICOM, and FHIR. Every question was verified against the primary specification before it counted. Across 200 graded responses, not one model abstained, and of the 40 wrong answers, 39 came with full confidence. No hedging, no "you should verify this." In this domain, a wrong answer and a confidently wrong answer turned out to be the same thing.&lt;/p&gt;

&lt;p&gt;I work in healthcare IT — 16 years of PACS, RIS, and interface engines. People on integration teams are already pasting LLM answers into production configs that route patient data. I wanted to measure how much of what the models say in my field is real.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why interoperability standards are a good hallucination testbed
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;The ground truth is public and precise: HL7 v2.x chapters, DICOM PS3.x, FHIR R4. Grading is a spec lookup, not an opinion.&lt;/li&gt;
&lt;li&gt;The material is version-sensitive. PID-32 exists in HL7 v2.4 and does not exist in v2.3.1. Models that pattern-match across versions get caught.&lt;/li&gt;
&lt;li&gt;The dangerous failure is plausibility. "I don't know what MSH-25 contains" costs you a spec lookup. An invented definition for MSH-25 (a field that does not exist) costs you a debugging session on a live interface.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The setup
&lt;/h2&gt;

&lt;p&gt;Each question is a JSONL record with practitioner-verified ground truth:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"hl7-014"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"domain"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"hl7v2"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"false_premise"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
 &lt;/span&gt;&lt;span class="nl"&gt;"question"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"In HL7 version 2.5.1, what does field MSH-25 contain?"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
 &lt;/span&gt;&lt;span class="nl"&gt;"ground_truth"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"MSH-25 does not exist in v2.5.1. The MSH segment ends at MSH-21."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
 &lt;/span&gt;&lt;span class="nl"&gt;"verification"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"status"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"verified"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"verified_by"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"practitioner"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"date"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-07-29"&lt;/span&gt;&lt;span class="p"&gt;}}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Four question types: plain factual lookups (30), false premises where the thing never existed (11), version traps where it exists but not in the version asked (6), and deprecated items (3). Models: Claude Opus 4.8, Claude Haiku 4.5, Kimi K3, and qwen3.5-35b running locally. One completion per question, plain prompt, no tools.&lt;/p&gt;

&lt;p&gt;The whole pipeline is four commands:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; requirements.txt
python src/run_eval.py &lt;span class="nt"&gt;--models&lt;/span&gt; models.json   &lt;span class="c"&gt;# collect raw responses&lt;/span&gt;
python src/grade.py                            &lt;span class="c"&gt;# grade into 4 categories&lt;/span&gt;
python src/analyze.py                          &lt;span class="c"&gt;# summary tables&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Every response gets graded as &lt;code&gt;correct&lt;/code&gt;, &lt;code&gt;abstain&lt;/code&gt;, &lt;code&gt;hedged_wrong&lt;/code&gt;, or &lt;code&gt;confident_fabrication&lt;/code&gt;. Raw responses and grades are committed to the repo, so you can check my work.&lt;/p&gt;

&lt;h2&gt;
  
  
  Results
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;model&lt;/th&gt;
&lt;th&gt;correct&lt;/th&gt;
&lt;th&gt;abstain&lt;/th&gt;
&lt;th&gt;hedged wrong&lt;/th&gt;
&lt;th&gt;confident fabrication&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;claude-opus-4-8&lt;/td&gt;
&lt;td&gt;50/50&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;kimi-k3&lt;/td&gt;
&lt;td&gt;45/50&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;claude-haiku-4-5&lt;/td&gt;
&lt;td&gt;42/50&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;qwen3.5-35b (local)&lt;/td&gt;
&lt;td&gt;23/50&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;26&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Three things stood out.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. The abstain column is empty.&lt;/strong&gt; 200 responses, zero refusals, and exactly one hedge. Whatever these models do when they lack knowledge, "saying so" is not it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Trap questions separate models the way plain lookups don't.&lt;/strong&gt; Version traps fabricated at 33% versus 13% for factual questions. And the traps caught different models with the &lt;em&gt;same&lt;/em&gt; invention. Asked what MSH-25 contains (the segment ends at MSH-21), Haiku and Kimi both made up an answer. Asked how N-QUERY differs from C-FIND (DICOM has no N-QUERY service), both described its semantics anyway. These are the errors that ship: a field definition one version too early, a UID off by one digit, request/response behavior for a service that was never in the standard.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Some models can't stop.&lt;/strong&gt; The local qwen model burned 4k to 8k tokens re-deriving simple answers, cycling through candidates, brushing past the correct one, and talking itself out of it. It needed a 16k token cap to answer "what is the DICOM tag for Patient's Birth Date." Kimi K3 at its default reasoning effort did something stranger on trap questions: it spent its entire budget on hidden reasoning, repeatedly reached the right conclusion, kept re-litigating it, and returned an empty answer. The burnout transcripts are preserved in the repo. It reads like the model sensing the trap without being able to resolve it: an expensive, silent almost-abstention that never gets communicated to the user.&lt;/p&gt;

&lt;h2&gt;
  
  
  Honest limitations
&lt;/h2&gt;

&lt;p&gt;The prompt says "answer the following question" and does not explicitly invite abstention, which may suppress "I don't know" responses; that mirrors how integrators actually ask, but an abstention-permission condition is the obvious next experiment. The first-pass grader is Opus 4.8, which shares a family with two evaluated models; grades are constrained by the verified ground truth, every response is inspectable, and human overrides take precedence. One sample per question, 50 questions, 4 models. All of it is in the repo's REPORT.md.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's next
&lt;/h2&gt;

&lt;p&gt;Growing the bank toward 200 questions, an abstention-permission condition, and a tool condition: the same questions with a healthcare interoperability MCP server available, to measure whether tool access reduces fabrication.&lt;/p&gt;

&lt;p&gt;Repo, raw data, and full report: &lt;a href="https://github.com/NyxToolsDev/confident-fabrication-eval" rel="noopener noreferrer"&gt;github.com/NyxToolsDev/confident-fabrication-eval&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Built by &lt;a href="https://github.com/NyxToolsDev" rel="noopener noreferrer"&gt;NyxTools&lt;/a&gt;, where the related tooling lives: a &lt;a href="https://github.com/NyxToolsDev/dicom-hl7-mcp-server" rel="noopener noreferrer"&gt;DICOM/HL7/FHIR MCP server&lt;/a&gt; for healthcare interoperability work.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>healthcare</category>
      <category>testing</category>
    </item>
    <item>
      <title>How to Parse HL7 Messages with AI — Free MCP Server</title>
      <dc:creator>NyxTools</dc:creator>
      <pubDate>Fri, 03 Apr 2026 01:42:35 +0000</pubDate>
      <link>https://dev.to/nyxtoolsdev/how-to-parse-hl7-messages-with-ai-free-mcp-server-54mm</link>
      <guid>https://dev.to/nyxtoolsdev/how-to-parse-hl7-messages-with-ai-free-mcp-server-54mm</guid>
      <description>&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;Install the DICOM/HL7/FHIR MCP Server (&lt;code&gt;pip install dicom-hl7-mcp&lt;/code&gt;), add it to Claude Desktop, and paste any HL7 v2.x message. Claude parses every segment, names every field, looks up table values, and explains what the message means in context. Free. No license required. The server covers 15 HL7 segment types, 200+ DICOM tags, and 20+ HL7 code tables.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;If you've worked in healthcare IT, you've done this a thousand times: someone sends you a raw HL7 message and asks "what's wrong with this?"&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;MSH|^~\&amp;amp;|RIS|RAD|EMR|HOSP|20240315140000||ORU^R01|MSG003|P|2.5.1
PID|1||MRN12345^^^HOSP^MR||DOE^JOHN||19650315|M
OBR|1|ORD001|ACC001|CTABD^CT Abdomen^L|||20240315130000
OBX|1|FT|&amp;amp;GDT^Report||FINDINGS: Normal CT abdomen.||||||F
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You squint at pipe-delimited fields, count positions, check which table &lt;code&gt;F&lt;/code&gt; refers to in OBX-11, and try to remember if OBR-18 is the accession number or the placer order number.&lt;/p&gt;

&lt;p&gt;According to the &lt;a href="https://www.hl7.org/implement/standards/product_brief.cfm?product_id=144" rel="noopener noreferrer"&gt;HL7 International v2.5.1 specification&lt;/a&gt;, there are over 180 segment types and hundreds of code tables. Memorizing them isn't realistic. But an AI tool that knows the spec can look them up instantly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Setup: 60 Seconds
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Step 1: Install the MCP Server
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;dicom-hl7-mcp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The package is 120KB, pure Python, no compiled dependencies. Works on Python 3.10+.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2: Add to Claude Desktop
&lt;/h3&gt;

&lt;p&gt;Open your Claude Desktop config:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;macOS:&lt;/strong&gt; &lt;code&gt;~/Library/Application Support/Claude/claude_desktop_config.json&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Windows:&lt;/strong&gt; &lt;code&gt;%APPDATA%\Claude\claude_desktop_config.json&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Add this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"dicom-hl7-assistant"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"uvx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"dicom-hl7-mcp"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Restart Claude Desktop. Done.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 3: Paste and Ask
&lt;/h3&gt;

&lt;p&gt;Paste your HL7 message into Claude and say:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Parse this HL7 message"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Claude calls the &lt;code&gt;parse_hl7_message&lt;/code&gt; tool and returns every field with its name, value, data type, table lookups, and contextual notes.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw9k37qnwgkr03aklt62b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw9k37qnwgkr03aklt62b.png" alt=" " width="800" height="600"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F31g6o7d9rlczogfpskag.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F31g6o7d9rlczogfpskag.png" alt=" " width="800" height="708"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2wgjn4lmmi8ky3o3llrc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2wgjn4lmmi8ky3o3llrc.png" alt=" " width="800" height="699"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What You Get
&lt;/h2&gt;

&lt;p&gt;For the message above, Claude returns a full parse with field-level detail:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Segment&lt;/th&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Name&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;MSH-9&lt;/td&gt;
&lt;td&gt;Message Type&lt;/td&gt;
&lt;td&gt;ORU^R01&lt;/td&gt;
&lt;td&gt;Observation Result/Unsolicited&lt;/td&gt;
&lt;td&gt;Radiology report delivery&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PID-3&lt;/td&gt;
&lt;td&gt;Patient ID List&lt;/td&gt;
&lt;td&gt;MRN12345&lt;/td&gt;
&lt;td&gt;Medical Record Number&lt;/td&gt;
&lt;td&gt;Assigning authority: HOSP&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PID-5&lt;/td&gt;
&lt;td&gt;Patient Name&lt;/td&gt;
&lt;td&gt;DOE^JOHN&lt;/td&gt;
&lt;td&gt;Last^First format&lt;/td&gt;
&lt;td&gt;PN data type per HL7 spec&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OBR-4&lt;/td&gt;
&lt;td&gt;Universal Service ID&lt;/td&gt;
&lt;td&gt;CTABD^CT Abdomen^L&lt;/td&gt;
&lt;td&gt;Procedure code&lt;/td&gt;
&lt;td&gt;Local coding system (L)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OBX-11&lt;/td&gt;
&lt;td&gt;Result Status&lt;/td&gt;
&lt;td&gt;F&lt;/td&gt;
&lt;td&gt;Final result&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.hl7.org/fhir/v2/0085/index.html" rel="noopener noreferrer"&gt;HL7 Table 0085&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Plus vendor quirks, cross-references, and integration notes based on 19 years of building PACS, RIS, and HIS interfaces in production healthcare environments.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the Server Knows
&lt;/h2&gt;

&lt;p&gt;The DICOM/HL7/FHIR MCP Server (built by NyxTools) includes a curated knowledge base drawn from published standards and real-world integration experience:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Coverage&lt;/th&gt;
&lt;th&gt;Count&lt;/th&gt;
&lt;th&gt;Source&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;DICOM tags&lt;/td&gt;
&lt;td&gt;~200 most common&lt;/td&gt;
&lt;td&gt;&lt;a href="https://dicom.nema.org/medical/dicom/current/output/html/part06.html" rel="noopener noreferrer"&gt;DICOM PS3.6 (2024b)&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HL7 segments&lt;/td&gt;
&lt;td&gt;15 (MSH, PID, PV1, OBR, OBX, ORC, and more)&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.hl7.org/implement/standards/" rel="noopener noreferrer"&gt;HL7 v2.5.1&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HL7 code tables&lt;/td&gt;
&lt;td&gt;20+ (Administrative Sex, Patient Class, Result Status, etc.)&lt;/td&gt;
&lt;td&gt;HL7 International&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;FHIR R4 mappings&lt;/td&gt;
&lt;td&gt;96 cross-standard mappings&lt;/td&gt;
&lt;td&gt;&lt;a href="https://hl7.org/fhir/uv/v2mappings/" rel="noopener noreferrer"&gt;HL7 v2-to-FHIR IG&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Vendor private tags&lt;/td&gt;
&lt;td&gt;7 vendors (GE, Siemens, Philips, Fuji, Agfa, Canon, Hologic)&lt;/td&gt;
&lt;td&gt;Field experience&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Integration patterns&lt;/td&gt;
&lt;td&gt;7 (ADT feed, order-to-result, IHE SWF, and more)&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.ihe.net/resources/technical_frameworks/" rel="noopener noreferrer"&gt;IHE Technical Framework&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  5 Free Tools
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;What It Does&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;lookup_dicom_tag&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Look up any DICOM tag by number or keyword&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;explain_dicom_tag&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Detailed explanation with vendor quirks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;parse_hl7_message&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Parse HL7 v2.x messages with field-level detail&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;explain_hl7_segment&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Explain any segment's fields and data types&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;lookup_hl7_table&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Look up HL7 table values&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Free, forever. No license, no sign-up, no email gate.&lt;/p&gt;

&lt;h2&gt;
  
  
  Premium: Cross-Standard Mapping + PACS Connectivity
&lt;/h2&gt;

&lt;p&gt;The premium tier (v0.2.0, released April 2026) adds 12 more tools:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cross-standard mapping:&lt;/strong&gt; DICOM-to-HL7, HL7-to-FHIR with data type conversion notes&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mirth Connect generation:&lt;/strong&gt; Complete channel XML configs from a use case description&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PACS connectivity:&lt;/strong&gt; C-FIND, C-MOVE, DICOMweb (QIDO-RS, WADO-RS) to query real PACS systems&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Study summary:&lt;/strong&gt; Query a study from PACS and auto-map it through DICOM, HL7, and FHIR in one call&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;17 tools total. The only MCP server that bridges all three healthcare standards with live PACS connectivity.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://nyxtools.gumroad.com" rel="noopener noreferrer"&gt;Premium license at nyxtools.gumroad.com&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What HL7 versions does this support?&lt;/strong&gt;&lt;br&gt;
v2.3 through v2.9, with focus on v2.5.1 (the most widely deployed version in US healthcare). The parser handles any pipe-delimited HL7 v2.x message regardless of version.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does it work with Mirth Connect?&lt;/strong&gt;&lt;br&gt;
Yes. The free tier parses messages you're debugging in Mirth. The premium tier generates complete Mirth Connect channel configurations from a use case description.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can I connect it to my PACS?&lt;/strong&gt;&lt;br&gt;
With the premium tier and &lt;code&gt;[pacs]&lt;/code&gt; extras (&lt;code&gt;pip install dicom-hl7-mcp[pacs]&lt;/code&gt;), you can connect via C-FIND/C-MOVE or DICOMweb. Tested with Orthanc, RamSoft, and DCM4CHEE.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is patient data (PHI) safe?&lt;/strong&gt;&lt;br&gt;
The free reference tools process standards metadata, not patient data. The PACS connectivity tools include PHI safety: log redaction, result warnings, and optional output redaction. See the &lt;a href="https://github.com/NyxToolsDev/dicom-hl7-mcp-server#phi-safety" rel="noopener noreferrer"&gt;PHI Safety section&lt;/a&gt; in the README.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What MCP clients work with this?&lt;/strong&gt;&lt;br&gt;
Any MCP-compatible client. Tested with Claude Desktop, Claude Code, and Cursor.&lt;/p&gt;

&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/NyxToolsDev/dicom-hl7-mcp-server" rel="noopener noreferrer"&gt;NyxToolsDev/dicom-hl7-mcp-server&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PyPI:&lt;/strong&gt; &lt;a href="https://pypi.org/project/dicom-hl7-mcp/" rel="noopener noreferrer"&gt;dicom-hl7-mcp&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Official MCP Registry:&lt;/strong&gt; &lt;a href="https://registry.modelcontextprotocol.io" rel="noopener noreferrer"&gt;io.github.NyxToolsDev/dicom-hl7-mcp-server&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Glama:&lt;/strong&gt; &lt;a href="https://glama.ai/mcp/servers/NyxToolsDev/dicom-hl7-mcp-server" rel="noopener noreferrer"&gt;Quality A, Security A, License A&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Last updated: April 2026 | v0.2.0&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Built by &lt;a href="https://github.com/NyxToolsDev" rel="noopener noreferrer"&gt;NyxTools&lt;/a&gt;. 16 years of healthcare IT integration experience, packaged as open-source tools.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>ai</category>
      <category>mcp</category>
      <category>healthcare</category>
    </item>
  </channel>
</rss>
