Mirobody
Lab results to LOINC codes and UCUM units, symptoms and diagnoses to ICPC-3. Offline, no API key.
Description from the maker (original English)
FHIR MCP server with SMART Backend Services, response compaction, FHIRPath, and guarded writes.
These three are never merged into one score: opinions, measurements and popularity are different things.
We have not written a plain-language summary for this one yet. Below are the facts we read from the registry.
Pick the AI app you use, then copy the settings.
MCP_TRANSPORT, FHIR_AUTH, FHIR_SERVER_URL, FHIR_TOKEN_URL, FHIR_CLIENT_ID, FHIR_ACTIVE_KEY, FHIR_JWKS_URL, FHIR_VERSIONValues marked secret are keys to your account. Never share them or paste them into a chat.
You need
Which app do you use?
Pick your app above. We remember it, so next time the button says “Install in …”.
Open Claude Desktop → Settings → Developer → Edit Config, and paste this into claude_desktop_config.json
{
"mcpServers": {
"fhirhydrant": {
"command": "npx",
"args": [
"-y",
"fhirhydrant"
],
"env": {
"MCP_TRANSPORT": "your-value",
"FHIR_AUTH": "your-value",
"FHIR_SERVER_URL": "your-value",
"FHIR_TOKEN_URL": "your-value",
"FHIR_CLIENT_ID": "your-value",
"FHIR_ACTIVE_KEY": "your-value",
"FHIR_JWKS_URL": "your-value",
"FHIR_VERSION": "your-value"
}
}
}
}Run this in your terminal
claude mcp add fhirhydrant --env MCP_TRANSPORT=your-value --env FHIR_AUTH=your-value --env FHIR_SERVER_URL=your-value --env FHIR_TOKEN_URL=your-value --env FHIR_CLIENT_ID=your-value --env FHIR_ACTIVE_KEY=your-value --env FHIR_JWKS_URL=your-value --env FHIR_VERSION=your-value -- npx -y fhirhydrantFill in the empty values before running it.
Paste into .cursor/mcp.json in your project, or ~/.cursor/mcp.json
{
"mcpServers": {
"fhirhydrant": {
"command": "npx",
"args": [
"-y",
"fhirhydrant"
],
"env": {
"MCP_TRANSPORT": "your-value",
"FHIR_AUTH": "your-value",
"FHIR_SERVER_URL": "your-value",
"FHIR_TOKEN_URL": "your-value",
"FHIR_CLIENT_ID": "your-value",
"FHIR_ACTIVE_KEY": "your-value",
"FHIR_JWKS_URL": "your-value",
"FHIR_VERSION": "your-value"
}
}
}
}Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.
Paste into .vscode/mcp.json in your project
{
"servers": {
"fhirhydrant": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"fhirhydrant"
],
"env": {
"MCP_TRANSPORT": "your-value",
"FHIR_AUTH": "your-value",
"FHIR_SERVER_URL": "your-value",
"FHIR_TOKEN_URL": "your-value",
"FHIR_CLIENT_ID": "your-value",
"FHIR_ACTIVE_KEY": "your-value",
"FHIR_JWKS_URL": "your-value",
"FHIR_VERSION": "your-value"
}
}
}
}Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.
This one runs on your computer, and ChatGPT can only connect to servers on the internet. Pick another app.
Your choice stays on this device in a cookie; no account needed.
FHIR_TOKEN_URL envFHIR_CLIENT_ID envFHIR_JWKS_URL envFHIR_VERSION envThese settings are generated from the maker’s registry entry. If the README says otherwise, follow the README.
Runs on your computer; the tool list appears in your AI app after you install it.
We check information anyone can see; we have not read the code. Checks that do not apply are left out of the count. · Checked Nov 9, 2026
The registry name was verified with the GitHub account faulkj, which owns the repo
We have not read this repo from GitHub yet
We have not read this repo from GitHub yet
This one runs on your computer; there is no internet endpoint
Runs on your computer and uses local settings instead
Runs on your computer; we can only read tool lists from internet endpoints
Compared with every active server in this category in the registry. Stars count only when the publisher owns the repo.
It passed 1 of 1 applicable basic checks. We have not read the code. Before adding a key or token, see what access the server asks for and use a key with only the permissions you need.
You need to fill in: MCP_TRANSPORT, FHIR_AUTH, FHIR_SERVER_URL, FHIR_ACTIVE_KEY
It runs on your computer. Your AI app starts it when needed, and data does not pass through the maker’s servers (unless it calls an online service itself).
The GitHub repo last changed –, and the latest version (0.17.3) reached the registry 2 months ago.
Apps that support MCP, such as Claude Desktop, Claude Code, Cursor and VS Code. You also need Node.js on your computer.
In the same category: Mirobody, FHIR MCP Server, Google Health MCP
Servers in the same category from other makers, sorted by stars.
Reading a card:↓ Downloads per weeki★ GitHub starsiThree pillars: reviews · checks · usageiUpdated = latest version published to the registryi
Lab results to LOINC codes and UCUM units, symptoms and diagnoses to ICPC-3. Offline, no API key.
MCP server providing seamless access to FHIR APIs for AI tools and healthcare applications
Privacy-first unofficial Google Health API v4 MCP server for health, sleep, activity, HR agents
Copied from the maker’s repo as written. PopNx MCP has not reviewed or endorsed it. HTML, images and scripts are removed. Links lead off this site.
A modern, fully configurable, open-source Node.js Model Context Protocol (MCP) server for R4+ FHIR APIs. It connects MCP-compatible LLM AI clients to clinical data over SMART on FHIR v2 Backend Services using signed JWT client credentials.
fhirHydrant turns FHIR resources, named operations, terminology lookups, and pagination into MCP tools. The default resources and operations are starting points: resources, operations, search controls, instructions, and messages can be expanded, trimmed, or replaced through config files without source changes.
_count shaping, and oversized Bundle retryNote: FHIR data returned through MCP tool calls may contain PHI.
Make sure your MCP client's transcript storage and logging behavior match
your compliance requirements.
To run against a public, unauthenticated FHIR test server, set FHIR_AUTH=none and skip the client and key entirely (see Unauthenticated Access).
The stdio transport usually needs an externally hosted JWKS URL. The built-in /jwks endpoint is available only when fhirHydrant runs over HTTP with SMART auth.
# install globally
npm install -g fhirhydrant
npx fhirhydrant
Run from source:
git clone https://github.com/faulkj/fhirhydrant.git
cd fhirhydrant npm install npm run build
For desktop MCP clients, stdio is usually the simplest transport:
{
"mcpServers": { "fhirhydrant": { "command": "npx", "args": ["-y", "fhirhydrant"], "env": { "MCP_TRANSPORT": "stdio", "FHIR_BASE_URL": "https://fhir.example.org", "FHIR_CLIENT_ID": "your-client-id", "FHIR_ACTIVE_KEY": "LS0tLS1CRUdJTi...base64-of-your-pem...", "FHIR_JWKS_URL": "https://example.org/.well-known/jwks.json" } } } }
FHIR_ACTIVE_KEY is your PKCS#8 private key (RSA or EC P-384), base64-encoded. The kid is derived automatically at startup via a truncated JWK Thumbprint and logged to the console.
To point fhirHydrant at a public, unauthenticated FHIR endpoint (handy for testing against open sandboxes), set FHIR_AUTH=none. No client ID or signing key is required, no token is requested, and requests are sent without an Authorization header:
{
"mcpServers": { "fhirhydrant": { "command": "npx", "args": ["-y", "fhirhydrant"], "env": { "MCP_TRANSPORT": "stdio", "FHIR_AUTH": "none", "FHIR_SERVER_URL": "https://hapi.fhir.org/baseR4" } } } }
fhirHydrant registers tools from configuration and runtime capability checks. The exact list depends on the config/resources/ folder, granted SMART scopes, /metadata, write settings, operation settings, and terminology settings.
| Tool or family | Available when | Purpose |
|---|---|---|
| Resource tools | Resource is configured and allowed by metadata/scopes | Search, direct-read, vread, history, and optionally CRUD FHIR resources |
system_history | Server advertises system history interaction and scopes allow it | Retrieve system-level change history across all resource types |
capabilities | Always registered | Inspect CapabilityStatement summary, registered tools, skipped tools, search params, operations, and metadata notes |
paginate | Always registered | Fetch the next page of a FHIR Bundle using a server-returned next URL |
operate | At least one named operation passes gating | Invoke configured FHIR named operations for clinical data, terminology, IPS, matching, validation, or custom workflows |
bundle | FHIR_BUNDLE_CAPABILITIES is set | Submit a FHIR batch or transaction Bundle; writes require additional opt-in |
terminology_lookup | FHIR_TERMINOLOGY_BASE_URL is set | Look up one LOINC or SNOMED CT code |
code_search | FHIR_TERMINOLOGY_BASE_URL is set | Search LOINC or SNOMED CT codes by text |
Resource tools are generated from the config/resources/ folder — one JSON file per resource (e.g. patient.json), scanned at startup. The shipped config covers common clinical, administrative, medication, practitioner, organization, and document resources. Add a file to add a resource, or delete one to drop it — no source changes required.
Each resource tool supports configured search params, optional direct reads with _id, fhirpath, and, unless compact-locked, responseMode. Direct read only happens when _id is the only non-empty argument; _id plus other params stays a search so caller intent is not silently discarded.
Resource tools are search/read by default. Set FHIR_WRITE_CAPABILITIES to enable metadata-gated CRUD actions:
FHIR_WRITE_CAPABILITIES=create,update,patch,delete
| Action | Required params | FHIR call |
|---|---|---|
vread | _id, _vid | GET /ResourceType/{id}/_history/{vid} |
history | _id (instance) or none (type) | GET /ResourceType/{id}/_history or GET /ResourceType/_history |
create | body | POST /ResourceType |
update | _id, body | PUT /ResourceType/{id} |
patch | _id, body | PATCH /ResourceType/{id} with JSON Patch |
delete | _id | DELETE /ResourceType/{id} |
vread is available when the resource has supportsDirectRead and the server advertises the vread interaction. history is available when the server advertises history-instance or history-type. Both require the SMART r permission. Optional _since and _at parameters filter history results. History responses are Bundles and support compact mode, FHIRPath, and coalescing.
Write bodies are validated before the FHIR call: body.resourceType must match the tool resource, body.id must match _id for update when present, and patch requires a JSON Patch array. Scopes are derived from enabled capabilities: read/search uses system/Patient.rs, create/read/search uses system/Patient.crs, and full write support uses system/Patient.cruds. SMART v2 has no separate patch letter, so patch maps to u.
capabilities returns the cached CapabilityStatement summary, registered and skipped tools, search params, operations, and metadata notes.
paginate fetches one Bundle page using a server-returned next URL validated against the FHIR origin and allowed path prefixes. When compact mode is active and the fetched page has more results, paginate automatically coalesces multiple upstream pages into one compact response (same behavior as resource search tools). Pass prefetch=false to disable coalescing and get a single page.
The operate tool invokes FHIR named operations from config/operations.json. The shipped operation catalog covers clinical aggregation, validation, document lookup, terminology operations, IPS generation, and patient matching. You can expand, trim, replace, or disable the operation catalog without source changes.
Set FHIR_TERMINOLOGY_BASE_URL to enable:
| Tool | Description |
|---|---|
terminology_lookup | Looks up one LOINC or SNOMED CT code |
code_search | Searches codes by text filter with paging support |
These tools call the configured terminology server directly. They do not use the clinical FHIR server credentials. Use a terminology endpoint that matches your selected FHIR release, such as https://tx.fhir.org/r4.
Set FHIR_BUNDLE_CAPABILITIES=batch (or batch,transaction) to enable bundle. This tool submits a FHIR batch or transaction Bundle and returns the server's response through the standard response pipeline.
Safety model:
FHIR_BUNDLE_CAPABILITIES=batch.FHIR_BUNDLE_WRITES_ENABLED=true and the corresponding action in FHIR_WRITE_CAPABILITIES.FHIR_BUNDLE_CAPABILITIES=transaction.V1 exclusions: Conditional requests, system-level _history, absolute URLs, and $operation URLs inside Bundle entries are not supported.
History in Bundles: vread (Resource/id/_history/vid), instance history (Resource/id/_history), and type history (Resource/_history) entries are allowed in Bundles when the server advertises the corresponding interaction and scopes permit it. These count as read entries.
Unless FHIR_METADATA_MODE=off, fhirHydrant fetches the FHIR server's CapabilityStatement at startup. In strict mode:
/metadata_count, _sort, _summary, _elements, _include, and _revinclude are exposed only when advertisedFHIR_WRITE_CAPABILITIES and matching CapabilityStatement interactionsIn warn mode, unadvertised params are allowed with a warning, but absent resource types are still skipped. SMART scopes are also checked at runtime, so a tool can exist in the schema and still be blocked by the granted token scope.
FHIR responses are often much larger than an MCP client needs. fhirHydrant shapes responses for token economy after retrieval, using server-side controls when the FHIR server advertises them.
| Feature | Behavior |
|---|---|
_count default/cap | No _count injected by default (server decides page size). Set FHIR_DEFAULT_COUNT to inject one; FHIR_MAX_COUNT caps explicit caller values (0 = no cap) |
| Page coalescing | When compact mode is active, the server fetches multiple upstream pages sequentially, compacts each immediately, and returns one consolidated Bundle. Controlled by maxResults, prefetch, and FHIR_PREFETCH_* env vars |
| Byte limit | FHIR_MAX_RESPONSE_BYTES limits every model-facing JSON response; oversized
Only the beginning is shown; read the rest in the repo