Thursday, April 23, 2026

FHIR Up the Healthcare Transformation - Interoperability, Data Liquidity, and the Agentic Future

 

A Letter to the Healthcare IT Community

This week, Tim Cook published his farewell letter as Apple CEO. In it, he reflected on how Apple's products had touched lives in ways that defied description — a mother saved by her Apple Watch, a photograph captured at the summit of a mountain that seemed impossible to climb. He spoke of shared humanity, and of the privilege of leading a company that ignites imaginations and enriches lives.

Reading Tim's letter, I found myself thinking not about consumer electronics, but about healthcare. Because the same transformation that Apple brought to how we interact with technology is now quietly, powerfully, underway in how healthcare systems interact with each other — and soon, with intelligent agents that can reason over clinical data in real time.

That transformation has a name: HL7 FHIR.

And after 20 years of working with healthcare interoperability standards — from the early days of HL7v2, HL7 CDA to HL7 FHIR, designing and building Healthier SG FHIR API and Data Grid serving Singapore's Healthier SG transformation — I believe we are at an inflection point. FHIR is no longer just a better way to exchange messages between hospital systems. It is becoming the foundational layer upon which the next generation of healthcare will be built: a generation defined by data liquidity, AI-native clinical workflows, and a new universal protocol layer that connects human clinicians and AI agents to the same trusted data.

Let me explain why.


Part 1: The Interoperability Problem Is Not Technical — It's Business

For decades, healthcare IT has been trapped in a paradox. We have more clinical data than ever, yet it remains locked inside hundreds of proprietary systems, each speaking its own dialect. Every time two systems need to talk, someone builds a bespoke integration — custom mappings, custom APIs, custom testing. Each such integration will not only introduce huge amount of integration effort, it also leads to potential issue of semantic data drift. 

This is not a technology problem. It is an business problem - Data is the most important asset of any healthcare organisation.  It is broken because there has never been a universal agreement on what a patient record looks like, how you ask for one, or where the boundaries of a clinical concept begin and end.

All the business process and rules are all built upon data to record the state change, enforce data integrity and maintain data quality. If we do not put focus and attention on data, then we are just simply pursuing the project as ticking the box as project completed.

HL7 FHIR fixes this. Not partially, not theoretically — practically.

FHIR defines a common data model for clinical resources: Patient, Observation, MedicationRequest, Encounter, CarePlan, Condition, Procedure — each with a standardised structure, a RESTful API contract, and a well-defined set of search parameters. When two systems speak FHIR, they are not just exchanging data — they are sharing a common understanding of what that data means.

This is what I mean by interoperability. Not the ability to move bytes from point A to point B. The ability to move meaning.


Part 2: Data Liquidity — From Locked Vaults to Flowing Rivers

Once you standardise the data model, something remarkable happens: data becomes liquid.

In the old world, clinical data sits in application databases — structured for the application that created it, accessible only through the application's own interface. Extracting it for analytics, research, or even basic care coordination requires custom ETL pipelines, data warehouses, and reconciliation logic that is expensive to build and brittle to maintain.

In the FHIR world, every clinical record is a resource with a URL. It can be created, read, updated, searched, and subscribed to through a universal API. A patient's medication history is not buried in a vendor-specific schema — it is a collection of MedicationRequest resources that any authorised system can query using standard search parameters. A lab result is an Observation with a LOINC code. A diagnosis is a Condition with a SNOMED CT code.

This is data liquidity: the ability for clinical information to flow freely, safely, and meaningfully across organisational boundaries without losing its clinical fidelity.

I have seen this firsthand. When we implemented the Healthier SG FHIR API Platform at Synapxe, we enabled the same FHIR data flow seamlessly between different systems - from upper stream end-user facing systems, and store in central national data repositories, and seamlessly flow to other national systems for reporting and analytics. What changed was the accessibility of the data, because FHIR provided a common language that every application could understand and exchange easily.

And this is just the beginning. I recently used Claude Code to generate millions of FHIR resources — patients, encounters, observations, medication requests, and care plans, complete with SNOMED CT, LOINC, and RxNorm coding , and all these data are interlinked through FHIR's resource reference — it took less than a minute of prompting to create script which can generate any number of records as you requested. Previously, this kind of test data preparation would take days or weeks of manual work by the engineer and also requiring the engineer have good knowledge on SNOMED CT, LOINC and RxNorm.  FHIR's structured, standardised nature makes it inherently machine-friendly — not just for data exchange, but for data prearation, validation, and reasoning


Part 3: The Agentic Era — Why FHIR Is the Foundation for AI in Healthcare

Now we arrive at what I believe is the most consequential development in healthcare IT since FHIR itself: the convergence of FHIR and agentic AI through the Model Context Protocol (MCP).

Let me unpack this.

What Is MCP?

The Model Context Protocol, originally developed by Anthropic and now adopted as an open standard with support from Google, Microsoft, OpenAI, and others, defines how AI agents discover and interact with external tools and data sources. Think of MCP as a universal adapter: it tells an AI agent what tools are available, what each tool can do, and how to invoke it — all through a standardised interface.

In the words of one industry expert, MCP is like "FHIR for AI" — just as FHIR standardised how healthcare systems exchange data, MCP standardises how AI interacts with those systems.

Why FHIR + MCP Is a Game Changer

Here is the key insight: FHIR's resources are inherently self-describing. A FHIR server's CapabilityStatement tells you exactly which resources it supports, which operations are available, and which search parameters are valid. A FHIR StructureDefinition tells you the exact shape of every resource — its fields, data types, cardinality, and validation rules. A FHIR OperationDefinition tells you the input and output parameters of every extended operation.

This means an AI agent, connected to a FHIR server through MCP, can discover the server's capabilities at runtime. It does not need hardcoded knowledge of the API. It does not need custom integration code. It reads the CapabilityStatement, understands what is available, and begins reasoning over the data.

This is exactly what I have built in my open-source project, fhir4java-agents. The server exposes its FHIR resources and operations as MCP tools — just three MCP tools are sufficient for an AI agent to perform full CRUD operations, execute FHIR searches, and invoke extended operations across any supported resource type. The agent does not need separate tools for Patient, Observation, or CarePlan. It discovers the resource types dynamically and interacts with them through a unified interface.

The implications are profound:

For clinicians: Imagine a physician asking an AI assistant, in natural language, to pull up a patient's recent lab results, cross-reference them with current medications, and flag potential drug interactions — all sourced directly from the FHIR server, with full provenance and audit trail. No custom dashboard development. No data extraction pipeline. The agent reads FHIR resources, reasons over them, and presents findings in context.

For care coordination: An AI agent could monitor incoming FHIR Subscription notifications — new lab results, changed medication orders, updated care plans — and proactively alert the care team when clinical thresholds are breached or when care plan goals are at risk.

For population health: Multiple AI agents, each connected to different FHIR endpoints across different institutions, could collaboratively analyse anonymised population data to identify emerging health trends, evaluate intervention effectiveness, or optimise resource allocation — all while respecting data sovereignty because the agents query the data where it lives rather than centralising it.


The Architecture: A Universal MCP Layer

The architecture I envision — and have been building toward — looks like this:

At the base layer, you have FHIR-compliant data platforms storing clinical resources in standardised formats. These platforms support profile-based validation, terminology binding (SNOMED CT, LOINC, RxNorm), and configuration-driven resource management.

Above that sits the MCP layer — a set of MCP servers that expose FHIR capabilities as discoverable tools. Each MCP server can run as a native plugin within the FHIR server (for performance-critical operations) or as an external service in any language — Python, Node.js, Go — communicating over JSON-RPC or HTTP+SSE transport. This hybrid plugin architecture means the system is extensible without being fragile. A new clinical decision support algorithm can be deployed as an MCP plugin without restarting the FHIR server. A machine learning model for sepsis prediction can be wrapped as an MCP tool and made instantly discoverable by any connected agent.

At the top layer, AI agents connect to the MCP layer and dynamically discover available capabilities. These agents can be general-purpose clinical assistants or specialised agents focused on specific workflows — medication reconciliation, discharge planning, surgical scheduling. Because MCP provides a standardised discovery mechanism, agents can be composed and orchestrated without tight coupling.

This is not science fiction. This architecture is running today. I demonstrated it in my recent blog post and video (see the demo to illustrate how AI agent is interacting with the data), showing how an AI agent connected to fhir4java-agents through MCP can create patients, query observations, and manage care plans — all through natural language interaction, with the MCP layer handling tool discovery and FHIR server handling data integrity.


The User Interaction Shift: Transition from fixed menu driven interaction towards natural fluid AI driven interaction

For Healthcare IT vendor/solution: The future of Healthcare IT system will slowly transition towards headless EHR product where the primary focus is to manage the backend data platform to achieve the flexible data model for future readiness, and enforce strong data validation and business control  to ensure data integrity and quality, and robust AI enabled APIs through universal MCP layer with strong control on security and audit trail to guard the safe and appropriate use of data, whereas the user interfaces can leverage on the robust capabilities of AI agent which can create any UI on the fly, and any user can save his/her personalised skills to launch pre-configured and preferred user interface. 

There will be some healthcare specific AI agents available in the market with the ability to interact with any backend systems. These healthcare specific AI agents will provide out of box integration with SmartOnFHIR to perform authentication and authorisation.


Part 4: What This Means for Singapore and Beyond

Singapore is uniquely positioned to lead this transformation. We have practical HL7 FHIR implementation experience, we have designed and implemented more than 10 native HL7 FHIR based systems for production usage. Our Healthier SG implementation received inaugural HL7 FHIR DevDays in 2024, see the Synapxe news here.  We have a passionate team promoting HL7 FHIR within Synapxe and MOH, We have a centralised healthcare IT infrastructure through Synapxe that manages the public healthcare IT estate. And we have a forward-looking AI governance framework through IMDA's Model AI Governance Framework that can guide the responsible deployment of agentic AI in clinical settings.


The pieces are in place. What is needed now is the conviction to connect them.

FHIR is not just a technical standard. It is an instrument for business transformation as outlined below

  1. It is a framework for project delivery transformation - from ticking the box as "project completed" to "data transformation is done"
  2. It is a means for cost discipline — turning what would otherwise be millions in fragmented, one-off integration spend into a governed, reusable, and scalable capability. 
  3. It is a platform for data liquidity — making clinical information accessible wherever it is needed, in real time, without sacrificing governance or security
  4. It is a platform for the agentic future — providing the self-describing, machine-readable data layer that AI agents need to operate safely and effectively in clinical environments.


A Personal Reflection

I started my journey with HL7 standards in 2006 when I started to join a healthcare startup company working on EHR/PHR. I have since been involved with HL7, IHE, ISO TC215, and HITC — drafting and reviewing healthcare interoperability standards for the company I worked for and for Singapore. 

Through all of this, one conviction has remained constant: standards matter. Not because they are fashion, but because they enable innovation, and unlock value. When everyone agrees on how a Patient resource looks, engineers stop spending months on data mapping and start spending days on clinical value. When AI agents can discover capabilities through a standard protocol, developers stop building custom integrations and start building intelligent workflows.

Tim Cook wrote that Apple's products fit into real lives — that technology should serve humanity, not the other way around. I believe the same is true for healthcare IT. FHIR, MCP, and agentic AI are not ends in themselves. They are means to an end that matters deeply: better care for real patients, delivered by empowered clinicians, supported by intelligent systems that earn and deserve our trust.

The future of healthcare interoperability is not about connecting systems. It is about connecting knowledge. And that future is here.

Tuesday, April 14, 2026

Amazing power of HL7 FHIR in agentic era

As mentioned in my previous blog dated in Jan this year,  I started to explore how to implement production quality FHIR API and Data Platform without single line of coding. During the past 3 months during my spare time (btw I am also out of office for few months as I did surgery last Nov and on recovery for few months afterwards), but whenever there is few minutes, I prompted AI to plan out the spec, implementation plan and generate code.

Now the the API and Data Platform is fully ready, all is written by AI (Claude Code) with these major features

  1. It provides out of box HL7 FHIR R4B/R5 resources
  2. It supports custom resources
  3. It provides set of skills to define custom resources, define FHIR profiles etc
  4. It supports publish/subscribe notification
  5. It is equipped with BDD to do full end-to-end functional tests
  6. It is also able to deploy to local Docker environment and AWS Cloud Environment where all the AWS services are configured as private  and integrated through VPC endpoint.
  7. It provides out of box integration through MCP server with any AI agent as described below. It only requires 3 MCP tools (Pls see the demo at https://youtu.be/pM-RERPoqrQ



Go check out the source code on GitHub, I welcome passionate contributors to make this open source product more powerful and more robust.







Sunday, January 18, 2026

New way of application development - Transforming from Coding to Requirements and Architecture Design

Recently as we are propopsing HL7 FHIR as national standards for Singapore, I started to think about resuming the FHIR server implementation in Java which I started more than 13 years ago. One way is to use HAPI FHIR open source code which I also shared in my post - https://healthinterconnect.blogspot.com/2024/09/hl7-fhir-difficult-to-implement.html

However with the recent massive development of GenAI, MCP and Skills, I realised maybe the best way to start another FHIR Java server is to completely re-write, but not to write code, instead my effort shall be spent primarily to provide design ideas to AI, let AI come up the implementation, and continuously review and update the implementation plan to have one small footprint FHIR server kernel and then AI will come up all design and development based on the business requirements

Go to this repo - https://github.com/sg-victorchai/fhir4java-agents to check out the implementation plan, you can submit your review and comments if there is any, and best if you are also passionate to contribute to this new way of software development


Below para describes the 7 design steps  which I have collaborated with Claude Code

1. Initial design requirements 

I need to create a project which can fulfill the following purposes                                                                                                                                   

  1.The project shall be Java application using the latest Java 25 with JPA and the database shall be using PostgreSQL. Both applications and database shall run in docker container                    

  2.The java application will expose API services for any CRUD and extended operation to support HL7 FHIR. It needs to support both HL7 FHIR defined resources in both R4B and R5, and any custom       

  resources defined by project team                                                                                                                                                                     

  3.The API services shall provide number of plugins for audit log, telemetry,end-to-end performance tracking of each internal steps for the API services. It also needs to support business logic      

  plugin for project team to implement the buisness workflow                                                                                                                                            

  4.Internally, the API services shall perform these validations - For create/update operation, it shall validate the payload  against defined HL7 FHIR profile which is specified in FHIR              

  StructureDefintion resource; for search operation, it shall validate whether the search parameters are in the list of search parameters defined for the resource; for extended operations, it shall   

  validate whether the operation is defined in OperationDefintion                                                                                                                                       

  5. The API services shall validate whether the interaction is enabled or diaabled before it serves the request                                                                                        

  6. The API services needs to be configuration driven, for any new resources and new extended operation, project team just needs to add new resource or new extended operations without code chanage   

  7. For extended operation, the API service internally perform patch operation to update the database records, or perform search if the extended operation is to search records from datbabase         

  8. For database design, all the audit log and perofrmamce tracking, it shall be created in its own database schema. For all the resources including HL7 FHIR defined resources and custom resources,  

  it shall provide configuraiton to allow project team to decide whether the resource data is stored in its own dedicated database schema, or stored in databse scheam shared with other resources      

  9. The java application can make use of some common libraries in HAPI FHIR server for FHIR compliance, object serialization and de-serializaiotn,  and validation    


2. Corrected Claude on Java version

User answered Claude's questions:

  ⎿  · Java 25 is not yet released (current latest is Java 23). Which Java version would you like to use? → according to openjdk web site, java 25 LTS is available, can you check again

     · How should the plugin system load custom business logic plugins? → Spring Bean-based (Recommended)

     · How should custom FHIR resources be defined? → Configuration files defined in FHIR StructureDefinition json files loaded at startup

     · What web framework would you prefer for the REST API layer? → Spring Boot (Recommended)


3. For each FHIR resource search parameters, request Claude to update the plan to use JSON instead of YAML, and ask it to reference HAPI FHIR server. 

Tool use rejected with user message: for the search parameters specified in the resource configuration file such as patient.yml, pls do not specify the search parameters in patient.yml, instead please

     follow these instructions - 1. create resource specific SearchParamConfig in fhir-config/searchparameters folder; 2. There shall be one base search parameters defined for  HL7 FHIR common search 

    parameters, and another for resource specific search parameters. you can take reference for the complete FHIR server's CapabilityStatement resource. 3. The server shall also expose FHIR server's 

    CapabilityStatement availabe at /metadata path, one example is HAPI server https://hapi.fhir.org/baseR5/metadata

4. Added further design requirements on the plugin design

Tool use rejected with user message: need to further validate two areas. 1. for the plugin, can you elaborate the detail design, how the API service will handle the excution of the series of plugin - 

    from audit log, telemetry and performance tracking, and buisness logic plugin. also there might be 1 or many business logic plugin. how to handle this part. for the technical plugin, we also need to 

    support future plugin for authentication and authorisation. lastly, the plugin needs to support synchronous or asynchronous. 2. pls also include plugin to support cache, for the cache provider, pls 

    support both in-memory cache for dev testing and redis cache for other purposes

5. Added further design requirements on the audit log design

Tool use rejected with user message: few more areas to be refined. 1. for the audit log, we need to ensure it captures the resource id and version for both before and after for update;  for 

    read/create/delete, record the specific resource id and vesion; for search, it needs to record the search parameters; for extended operation, it needs to redcord the operation name and parameters 

    provided. for the payload provided for each interaction, pls store in a separate table. 2. for telemetry, it needs to support OTEL; 3. the telemery plugin shall also support different levels of 

    tracing such as just record the different steps executed for the API services, or include the detail SQL statement executed. 3. In terms of persistence layer, please also provide option so that the 

    actual data is persisted outside of the system instead of internal database. Pls update the implementation plan

6. Added further design requirements on the data persistence design to support both internal database persistence or external data repository

Tool use rejected with user message: for external persistence option, pls provide these capabilities. 1. each resource can be configured either internal databse or external persistence. 2 for external

     persistence, pls store the data in internal database first, and then trigger external service. if external service failed, then provide option to rollback the changes for create/update. Pls update 

    the implementation plan

7. Added further design requirements to the plugin architecture to support native MCP support


for the plugin design, can you explore the posssibility to use MCP protocol?



With the below, I concluded today's design collaboration with Claude Code


⏺ Thank you! It's been a great session. Here's a summary of what we accomplished:


  GitHub Repository: https://github.com/sg-victorchai/fhir4java-agents


  Commits:

  1. 3b11a78 - Initial implementation plan (2,651 lines)

  2. e2a23ee - README with project overview

  3. 9c16a53 - MCP plugin architecture (+305 lines)

  4. 89eb890 - Updated README with hybrid plugin & AI self-discovery


  Key Design Decisions Documented:

  - Java 25 LTS + Spring Boot + PostgreSQL + Docker

  - FHIR R4B/R5 with HAPI FHIR libraries

  - Hybrid plugin architecture (Spring Bean + MCP)

  - AI self-discovery of plugins via MCP protocol

  - OTEL telemetry with configurable tracing levels

  - Enhanced audit logging with before/after versioning

  - Write-through persistence with rollback capability

  - Configuration-driven resources and operations


  When you return, just reference this conversation or the implementation plan in your repo. Enjoy, and see you next time!

Thursday, January 15, 2026

Amazing speed of rapid data preparation with power of HL7 FHIR and AI

Recently I am switching the backend API server of my application to HAPI FHIR server located at http://hapi.fhir.org/baseR5. Previously, I manually created the data using Postman, this time, I choose to use AI tool (Claude Code) to prepare the test data. 

It took me less than 1 minute to write the prompt and Claude is able to generate very comprehensive data including Patient, Observation, MedicationRequest, and CarePlan. I also requested the AI to use the respective terminology code such as SNOMED CT, RxNorm and LOINC. For CarePlan, I also requested the AI to include Goal resource

If doing it manually, it will take days, and it is not repeatable. Secondly it also removed the barrier where the engineer needs to have some understanding of clinical terminologies.


1. First I enter the following prompt - "i need to create HL7 FHIR data in HAPI FHIR public server located at this url - http://hapi.fhir.org/baseR5/. Bewlow is the detail instrucitons to create the sample data " . 

2. Claude immediately highlighted that it seems the message got cut off. So I added further instructions 

create 10 patients, for each patient, please create 5 records of Encounter, Observation, MedicationReqeust and CarePlan, make sure the observation, medicationrequest and careplan have correct reference to the encounter resource.   


For the medicationrequest, can you use the US RxNorm code to represent the medications required to treat the common chronic conditions such as diabetes, high blood pressure and cholestrol. For the Observation, pls use LOINC code for typical measurements for the above said chronic conditions. For careplan, please create some realistic care plan to treat the above said chronic conditions with some goals to reach the specific target, pls use SNOMNED CT code where it is possible  


3. Afterwards, Claude generated the bash file and created all these FHIR records on HAPI server, and show the following summary on terminal. 



4. You can view these generated data on HAPI FHIR server, eg if you need to see the MedicationRequest resources created for patient (Id: 831589), you can type the following URL in browser - http://hapi.fhir.org/baseR5/MedicationRequest?patient=831589


5. Below is the screen how the data is shown in my sample application


Lastly, lets demonstrate how fast we can modify the data with these specific changes

1) Use Singaporean name instead of Western name

2) All the patient resources, and other clinical data shall be created under a specific organisation such as "Good Faith Clinic".


Below is the prompts provided to Claude

 1) for all the patients, please create an organization with organization name as "Good Faith Clinic", and associate all the patient records and other clinical data with this organization, 2) for the patient name, pls use Singaporean name such as Vicky Tan, Jeremy Tan, and Vincent Leong etc,  

3) for all the date, pls use the date range within Oct 2025 to Jan 2026. 


Claude then proceeds to make the change and output the following on console

The script completed successfully. Here's a summary of the created resources:


  Organization

  - Good Faith Clinic (ID: 831851)


  10 Patients (IDs: 831852-831861)

  ┌─────┬───────────────┬────────┐

    #      Name        ID  

  ├─────┼───────────────┼────────┤

  │ 1   │ Vicky Tan     │ 831852 │

  ├─────┼───────────────┼────────┤

  │ 2   │ Jeremy Tan    │ 831853 │

  ├─────┼───────────────┼────────┤

  │ 3   │ Vincent Leong │ 831854 │

  ├─────┼───────────────┼────────┤

  │ 4   │ Michelle Lim  │ 831855 │

  ├─────┼───────────────┼────────┤

  │ 5   │ Wei Ming Lee  │ 831856 │

  ├─────┼───────────────┼────────┤

  │ 6   │ Jia Hui Ng    │ 831857 │

  ├─────┼───────────────┼────────┤

  │ 7   │ Jun Jie Ong   │ 831858 │

  ├─────┼───────────────┼────────┤

  │ 8   │ Xiu Ling Wong │ 831859 │

  ├─────┼───────────────┼────────┤

  │ 9   │ Kai Wen Goh   │ 831860 │

  ├─────┼───────────────┼────────┤

  │ 10  │ Mei Ling Chua │ 831861 │

  └─────┴───────────────┴────────┘

  Total: 211 FHIR Resources

  - 1 Organization

  - 10 Patients

  - 50 Encounters

  - 50 Observations

  - 50 MedicationRequests

  - 50 CarePlans


  You can verify the data at:

  - Organization: http://hapi.fhir.org/baseR5/Organization/831851

  - Patient example: http://hapi.fhir.org/baseR5/Patient/831852



You can search these resources using the following query directly in browser. If you look at the care plan data, you will see that Claude is smart enough to use future date for the care plan end date

https://hapi.fhir.org/baseR5/Organization?name=Good%20Faith%20Clinic

https://hapi.fhir.org/baseR5/Encounter?subject.organization.name=Good%20Faith%20Clinic&_total=accurate

http://hapi.fhir.org/baseR5/MedicationRequest?subject.organization.name=Good%20Faith%20Clinic&_total=accurate

https://hapi.fhir.org/baseR5/Observation?subject.organization.name=Good%20Faith%20Clinic&_total=accurate

https://hapi.fhir.org/baseR5/CarePlan?subject.organization=831851&_total=accurate



FHIR Up the Healthcare Transformation - Interoperability, Data Liquidity, and the Agentic Future

  A Letter to the Healthcare IT Community This week, Tim Cook published his farewell letter as Apple CEO. In it, he reflected on how Apple...