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.
- GET/Patient?name=williams&_revinclude=Observation:patient200
- POST/ Bundle, transaction200
- GET/Patient/kin5pxcy/$everything200
- PATCH/Observation/f3n8wq2k200
- GET/Observation/f3n8wq2k/_history200
- DELETE/Encounter/9hd2kq7m204
- 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.
Access control
Attribute-based policies written in FHIRPath decide who can read or write what, for people, client applications and custom operations.
// FHIRPath condition
%request.type = 'read' and
%target.subject.reference
= 'Patient/' + %user.idAI 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.
- Claude
- Gemini
- OpenAI
- Any MCP client
Multi-tenant
Tenants and projects are enforced at the storage and search layers, so one deployment serves every customer, environment or business unit.
- productionproject
- stagingproject
- sandboxproject
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.
| id | birth_date | family |
|---|---|---|
| kin5px | 1961-04-12 | Williams |
| 8dm3qt | 1974-09-30 | Okafor |
| 2sh9rk | 1988-01-05 | Lindqvist |
Custom operations
Your own FHIR operations as sandboxed TypeScript in an embedded Deno runtime, stored and versioned as OperationDefinition resources. No fork required.
export default async function () {
const bp = await fhir.searchType(
"Observation",
{ code: "85354-9", _count: 4 },
);
return { readings: bp.total };
}- 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.
- 85354-9Blood pressure panel
- 8480-6Systolic blood pressure
- 8462-4Diastolic blood pressure
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 consoletenants, users, policies, apps
- CLIhaste-health admin client create
- SDKsTypeScript · Rust · React
Open standards
Built on the standards your stack already speaks, so what you integrate today keeps working with the next vendor.
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.
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.
Open source
Yours to run, with or without us
Everything we build lands in the Apache-2.0 repository, with no feature gates and no license key. The hosted service runs the same server, on the same storage schema, that you can run yourself.
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.