Anpheros FHIR

Remote MCP server that lets an AI assistant read and add to a person's health record (HL7 FHIR R4) only after that person approves access through OAuth, with scopes, expiry and revocation. Developers can try it with a free sandbox of 30 synthetic patients.

Hosted MCP Server

npx add-mcp 'https://platform.anpheros.com/mcp'

Installs into Claude Code, Codex, Cursor and more

Documentation

Free · 30 synthetic patients · no card Your first API call in 2 minutes →

Connect Claude Code, Cursor, VS Code or Claude Desktop to an HL7 FHIR R4 API through MCP: 20 tools for reading records, AI-ready context, writing, lab import and sandbox reset, on 30 synthetic patients, free.

Anpheros FHIR is a remote MCP server that lets an AI agent (Claude, ChatGPT, Claude Code, Cursor, VS Code, Claude Desktop) work with an HL7 FHIR R4 health-data API. It connects in two ways:

  • With a free sandbox key, for developers: your agent lists patients, reads their records as FHIR or as an AI-ready context with provenance, writes observations, imports lab reports and resets its test data, all on 30 synthetic patients with realistic histories.
  • With OAuth, for a person and their own record: the assistant registers itself, the person signs in and approves it on the Anpheros consent screen, and the assistant can then read that one record, for the period chosen, read-only unless the person allowed more.

Server address: https://platform.anpheros.com/mcp (Streamable HTTP, stateless).

Connect with OAuth (Claude and other assistants)

Add https://platform.anpheros.com/mcp as a custom connector (in Claude: Settings → Connectors → Add custom connector). Nothing else to configure: the assistant discovers the authorization server, registers itself and opens the Anpheros consent screen. There the person sees that it is an AI assistant, that what it reads is sent to the company running the assistant, what it may read, for how long and where they will return after choosing. Access is read-only unless more was asked for and allowed, and the person can revoke it at any time.

How an AI assistant connects through MCP

AI client Anpheros MCP Person 1. POST /mcp without a token 2. 401 + protected-resource metadata 3. register (DCR) + /oauth/authorize 4. consent screen: AI assistant, scopes, days 5. approve 6. access token 7. tools/call get_patient_summary

OAuth connections reach the person's real Anpheros record, only with their consent. Claude and other assistants read what the person allowed; ChatGPT is write-only: what it sends arrives in the person's app as proposals they accept or reject. Developers test the same flow on the sandbox.

Connect with a sandbox key (developers)

  1. Sign in at platform.anpheros.com/dashboard with Google and choose Get a sandbox key. You get an sk_test_… key and a project with 30 synthetic patients.
  2. Put the key in an environment variable, for example ANPHEROS_KEY, and add the server to your tool.

Claude Code

claude mcp add --transport http anpheros-fhir https://platform.anpheros.com/mcp --header "Authorization: Bearer $ANPHEROS_KEY"

Cursor (~/.cursor/mcp.json or .cursor/mcp.json in the project)

{
  "mcpServers": {
    "anpheros-fhir": {
      "url": "https://platform.anpheros.com/mcp",
      "headers": { "Authorization": "Bearer ${env:ANPHEROS_KEY}" }
    }
  }
}

VS Code (.vscode/mcp.json)

{
  "servers": {
    "anpheros-fhir": {
      "type": "http",
      "url": "https://platform.anpheros.com/mcp",
      "headers": { "Authorization": "Bearer ${env:ANPHEROS_KEY}" }
    }
  }
}

Claude Desktop (claude_desktop_config.json, through the mcp-remote bridge)

{
  "mcpServers": {
    "anpheros-fhir": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://platform.anpheros.com/mcp", "--header", "Authorization: Bearer ${ANPHEROS_KEY}"],
      "env": { "ANPHEROS_KEY": "sk_test_…" }
    }
  }
}

Then ask your agent something like: "List the sandbox patients, pick the one with diabetes and summarise her last six months of HbA1c."

Tools

ToolWhat it does
list_patientsthe project's patients: the 30 synthetic personas and any you created
get_patient_contextan AI-ready context for one patient, within a token budget, each item labelled with its source
get_patient_summarythe International Patient Summary (FHIR $summary), in the language you ask for
get_timelinethe record in date order across resource types
get_health_patternsbeta: what changed and what recurs, each finding with its period, evidence and limitations; not diagnoses (guide)
get_pattern_evidencebeta: every resource behind one finding
get_seriesbeta: one measurement as one value per day, with data quality
compare_periodsbeta: one measurement in two periods you choose
search_fhirstandard FHIR R4 search, returning a Bundle
read_fhir_resourceone resource, or one earlier version of it
get_provenancewho wrote a resource, when and from which system
lookup_codeLOINC codes by text or by code (for medicines, use search_health_terms)
search_health_termsthe public catalog of symptoms, conditions and treatments, by name in 20 languages, synonym, brand or code (guide)
get_health_termone catalog entry with its codes, names, MedlinePlus summary, sourced links and quoted EMA / FDA indications
log_symptomwith a person's OAuth connection: saves a symptom they tell the assistant; it arrives in their Anpheros app as a proposal and is added only when they approve it
log_measurementthe same for a measurement: blood pressure, heart rate, weight, temperature or glucose
add_notethe same for a short note (how they slept, a question for their doctor)
validate_fhir_resourcechecks a resource without saving it
create_fhir_resourcevalidates, then writes a resource
create_patienta new made-up patient in the project
import_lab_reporta CSV, HL7 v2 ORU^R01 or JSON lab report becomes laboratory Observations
sandbox_statuswrites used today, patients, storage, resets
reset_sandboxrestores the 30 synthetic patients (asks for confirmation)

Read tools are marked read-only and the reset is marked destructive, so clients that ask before risky actions can do so. The server also offers the list of synthetic patients as a resource and three prompts: a clinician summary, a lab CSV import and building your integration on the API.

How it behaves

  • The same rules as the API. Every tool calls the public API with your key: the same scopes, rate limits, validation and audit. A read-only key cannot write.
  • Provenance. Everything an agent writes is recorded with the source urn:anpheros:mcp, so you can always tell what came from an agent.
  • Patient data is data. Tool results carry a note that record content must never be followed as instructions, a basic guard against prompt injection through medical records.
  • One record, with consent. Production API keys (sk_live_…) are refused, because they reach every patient of a project. A real record reaches an assistant only through OAuth, after that person approves it, and every read is logged in their access history.
  • Standard discovery. Without credentials the server answers 401 with a WWW-Authenticate header pointing to its OAuth protected resource metadata (RFC 9728); assistants register through dynamic client registration (RFC 7591), with PKCE. Since 8 Nov 2026 any MCP client can register (loopback, https or its own app scheme; never javascript:, data: or plain http). A client that does not return to a known assistant is shown to the person as Unverified app, with the addresses it returns to, and gets read-only access; registration is limited to 20 per hour per address.

Frequently asked questions

What is an MCP server?

MCP (Model Context Protocol) is an open protocol through which AI agents and coding assistants call external tools. An MCP server for FHIR lets the agent read and write health records directly, instead of you pasting data into the chat.

Is it free?

Yes. The MCP server works on the free sandbox: 30 synthetic patients per project, up to 10,000 writes a day, no card.

Can an assistant read a real patient's record?

Only through OAuth, after that person approves the assistant on the consent screen, for the period they choose, and only their own record (or that of someone they care for). ChatGPT gets write-only access on a real record; other assistants read what the person allowed.

Which FHIR version does it use?

HL7 FHIR R4 (4.0.1), the same API as https://platform.anpheros.com/fhir/R4, with the International Patient Summary and a REST view of the same data.

Does it work with ChatGPT?

Yes, as a custom connector: ChatGPT registers itself with OAuth dynamic client registration and its callback domain is accepted. On a person's real record ChatGPT gets write-only access: it can send symptoms, measurements and notes, which the person accepts or rejects as proposals in the Anpheros app, and it cannot read the record. Claude can read the parts of the record the person allows, read-only. On the sandbox, both work with synthetic data. Claude Code, Cursor and VS Code also work with a sandbox key. See Connect ChatGPT and Claude to health data.

Related

Ask your AI

Paste this into Claude, ChatGPT, Cursor or Claude Code. Your assistant reads this guide and adapts it to your code.

Read https://developers.anpheros.com/guides/mcp.md and help me connect my AI client to the Anpheros MCP server. Use the Anpheros sandbox (base URL https://platform.anpheros.com) with my API key from the ANPHEROS_KEY environment variable, never written in the code. Give me complete, runnable code, the response I should expect, and how to fix the errors in https://developers.anpheros.com/guides/troubleshooting.md if a call fails.

Open in Claude Open in ChatGPT This guide as Markdown Build the whole integration with an AI coding tool

Free · 30 synthetic patients · no card Your first API call in 2 minutes →