Skip to main content

The Open-Source FHIR Server for AI-Native Health Apps

Epic, Oracle Health and HL7v2 in. FHIR, SQL and MCP out. One governed clinical data layer for your applications and your AI agents. Self-host it under Apache-2.0, or let us run it for you with a signed BAA.

Free hosted tenant, no credit card. Or self-host in 5 minutes.

FHIR R4 API

Every R4 resource type with create, read, update, patch, delete, history, transactions and batches. Search supports modifiers, chains, _include, _revinclude and Patient/$everything.

/w/acme-health/production/api/v1/fhirFHIR R4
  • GET/Patient?name=williams&_revinclude=Observation:patient200
  • POST/ Bundle, transaction200
  • GET/Patient/kin5pxcy/$everything200
  • PATCH/Observation/f3n8wq2k200
  • GET/Observation/f3n8wq2k/_history200
  • DELETE/Encounter/9hd2kq7m204
Interactions155 types
Instance
read · vread · update · patch · delete · history
Type
create · search · history
System
capabilities · batch · transaction · search · history
Operations
$everything · $expand · $validate-code · custom

Authentication

An OAuth 2.0 and OpenID Connect provider with SMART on FHIR launch, plus federated sign-in through Okta, Azure, Auth0, Keycloak or Google.

Sign in to acme-health
OktaAzureAuth0KeycloakGoogleTOTP MFA
OAuth 2.0 · OpenID Connect · SMART on FHIR

Access control

Attribute-based policies written in FHIRPath decide who can read or write what, for people, client applications and custom operations.

AccessPolicyV2 · own-record
// FHIRPath condition
%request.type = 'read' and
%target.subject.reference
  = 'Patient/' + %user.id
Observation readpermit

AI agents over MCP

Every project serves a Model Context Protocol endpoint beside its REST API, with 31 typed tools generated from its CapabilityStatement. Each call is authenticated, authorized and audited like any other request.

tools/list31 tools
fhir_r4_searchfhir_r4_readfhir_r4_createfhir_r4_updatefhir_r4_patchfhir_r4_transactionfhir_r4_history_instancefhir_op_everythingfhir_op_validate_codefhir_op_expand+21 more
Connects from
  • Claude
  • Gemini
  • OpenAI
  • Any MCP client
OAuth 2.0 · SMART scopes · AuditEvent

Multi-tenant

Tenants and projects are enforced at the storage and search layers, so one deployment serves every customer, environment or business unit.

acme-healthtenant
  • productionproject
  • stagingproject
  • sandboxproject
Own users · own policies · own data

SQL on FHIR

ViewDefinitions flatten resources into CSV, JSON or NDJSON on demand. Point a BI tool at clinical data without building an ETL pipeline.

ViewDefinition · demographics
idbirth_datefamily
kin5px1961-04-12Williams
8dm3qt1974-09-30Okafor
2sh9rk1988-01-05Lindqvist
_formatcsvjsonndjson

Custom operations

Your own FHIR operations as sandboxed TypeScript in an embedded Deno runtime, stored and versioned as OperationDefinition resources. No fork required.

OperationDefinition$recent-bp · v3
export default async function () {
  const bp = await fhir.searchType(
    "Observation",
    { code: "85354-9", _count: 4 },
  );
  return { readings: bp.total };
}
Invoke
POST /$recent-bp
  • Runs in an isolated Deno sandbox
  • Versioned like any other resource
  • Governed by the same access policies

Terminology

CodeSystems and ValueSets are resources like any other, with $expand and $validate-code for the codes your apps and policies depend on.

ValueSet/$expandLOINC
  • 85354-9Blood pressure panel
  • 8480-6Systolic blood pressure
  • 8462-4Diastolic blood pressure
$expand · $validate-code · CodeSystem · ValueSet

Console, CLI and SDKs

An admin console for tenants, users and policies, a CLI for scripting and CI, and SDKs for TypeScript, Rust and React.

  • Admin console
    tenants, users, policies, apps
  • CLI
    haste-health admin client create
  • SDKs
    TypeScript · Rust · React

AI-native

Agents are first-class clients, held to first-class rules

Every project serves a Model Context Protocol endpoint beside its REST API. Agents get typed tools and real FHIR schemas instead of a scraped UI, and each call they make is authenticated, authorized and audited like any other request.

What you can build:Clinical decision supportClinical documentationCare coordinationPatient educationData quality audits

Example agent session. A clinician asks how a patient's blood pressure has trended over the last 30 days. The agent calls the fhir_r4_search MCP tool, and the server verifies its token, checks its SMART scope, evaluates its access policy, runs the search and records an AuditEvent. The agent answers with four readings, trending down from 134 over 88 to 122 over 80.

Tools generated from your server

31 MCP tools cover search, read, write, history, batch and transaction. Their schemas come from your live CapabilityStatement, so agents only see what your deployment supports.

An identity for every agent

Each agent is its own OAuth client with SMART scopes and access policies. Give one read-only access to three resource types, not the keys to the dataset.

The same guardrails as people

Tool calls pass through the same scope checks, policy engine and audit trail as a REST request. There is no side door for AI.

Errors an agent can fix

Errors carry the FHIR OperationOutcome behind them wherever there is one, so an agent can see what was wrong, correct its request and try again.

How it fits

One clinical data layer between your systems of record and everything you build

Point EHRs, HL7v2 interfaces and other FHIR servers at Haste Health. What comes out is a single, normalized FHIR R4 API for your applications, your analysts and your AI agents.

Performance

Fast under load, without oversized infrastructure

A Rust core keeps latency low and throughput high on ordinary hardware.

Create and update latency
<10ms
Writes per second
>25k/s
Typical search response
<50ms
Memory footprint per instance
<100MB

Benchmarked on a single machine with Postgres 18 and a Synthea-generated dataset, 10 threads.

Conformance

Tested against the specification, in public

Every claim about FHIR support is backed by a test you can read. Known gaps are published, not hidden.

154 / 155resource types pass every check

  • Passes every check (154)
  • Known issue, published: Bundle
automated checks
11,667
search parameters
1,606
search backends
2

Each square is one resource type with its own TestScript, run in CI against both PostgreSQL and Elasticsearch.

Security and governance

The controls a security review asks for, on by default

Clinical data needs more than an API key. Haste Health ships its own identity provider, policy engine and audit trail, and applies them to people, services and autonomous agents alike.

Single sign-on

Federate login to Okta, Azure, Auth0, Keycloak or Google over OpenID Connect.

Hardened sign-in

TOTP-based MFA, argon2 password hashing and CSRF-protected authentication flows.

Scoped tokens

OAuth 2.0 with PKCE, client credentials and refresh tokens. SMART scopes are checked on every request.

Attribute-based policies

FHIRPath rules evaluated per request, for users, client applications and custom operations.

Audit trail in FHIR

Requests can be recorded as AuditEvent resources that name the caller, the action and the outcome.

Immutable history

Every write creates a new version. Resource history is immutable at the storage layer.

Build on an open foundation for clinical data and AI

Start on a free hosted tenant in under a minute, self-host in five, or book a demo and talk it through with the founder.