ต้นแบบ · รุ่นทดลอง: มีทุก server ในทะเบียนทางการ อัปเดตทุก 30 นาที รีวิวและบัญชีผู้ใช้จะมาในขั้นถัดไป
PopNx MCPที่รวม MCP สำหรับคนใช้ AI · อธิบายเป็นภาษาคน

MCP FHIR

โดย pcmedsingeรุ่น 1.1.1i★ –iรันบนเครื่อง
ชื่อใน registryio.github.pcmedsinge/mcp-fhir

ติดตั้ง

ภาพรวม

คำอธิบายจากผู้ทำ (ภาษาอังกฤษตามต้นฉบับ)

FHIR R4 read/search/validate MCP server — US Core/IPS profiles, SMART-on-FHIR auth (Epic/Cerner).

สามเสาของ PopNx MCP

สามเรื่องนี้ไม่รวมเป็นคะแนนเดียว เพราะความเห็น การวัด และความนิยม เป็นคนละเรื่องกัน

ใช้ทำอะไรได้

ตัวนี้ยังไม่ได้เรียบเรียงเป็นภาษาไทย ด้านล่างคือข้อเท็จจริงที่เราอ่านจาก registry

  • การเชื่อมต่อ: รันบนเครื่อง
  • ช่องทาง (transport): stdio
  • หมวด: คลินิกและสุขภาพ

ติดตั้ง

เลือกโปรแกรม AI ที่คุณใช้ แล้วคัดลอกค่าตั้งไปวาง

ก่อนติดตั้ง

ต้องเตรียมก่อน

  • PyPIติดตั้ง uv ของ Python (มีคำสั่ง uvx) ในเครื่อง

คุณใช้แอปไหน

เลือกแอปด้านบน เราจำไว้ให้ ครั้งหน้าปุ่มจะขึ้นว่า “ติดตั้งลง …”

เปิด Claude Desktop → Settings → Developer → Edit Config แล้ววางค่านี้ในไฟล์ claude_desktop_config.json

{
  "mcpServers": {
    "fhir": {
      "command": "uvx",
      "args": [
        "mcp-fhir"
      ],
      "env": {
        "FHIR_BASE_URL": "ใส่ค่าของคุณ",
        "SMART_ENABLED": "ใส่ค่าของคุณ"
      }
    }
  }
}

พิมพ์คำสั่งนี้ใน Terminal

claude mcp add fhir --env FHIR_BASE_URL='ใส่ค่าของคุณ' --env SMART_ENABLED='ใส่ค่าของคุณ' -- uvx mcp-fhir

เติมค่าที่เว้นว่างไว้ก่อนรัน

เปิดใน Cursor

หรือคัดลอกค่าตั้งเอง

วางในไฟล์ .cursor/mcp.json ของโปรเจกต์ หรือ ~/.cursor/mcp.json

{
  "mcpServers": {
    "fhir": {
      "command": "uvx",
      "args": [
        "mcp-fhir"
      ],
      "env": {
        "FHIR_BASE_URL": "ใส่ค่าของคุณ",
        "SMART_ENABLED": "ใส่ค่าของคุณ"
      }
    }
  }
}

เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง

เปิดใน VS Code

หรือคัดลอกค่าตั้งเอง

วางในไฟล์ .vscode/mcp.json ของโปรเจกต์

{
  "servers": {
    "fhir": {
      "type": "stdio",
      "command": "uvx",
      "args": [
        "mcp-fhir"
      ],
      "env": {
        "FHIR_BASE_URL": "ใส่ค่าของคุณ",
        "SMART_ENABLED": "ใส่ค่าของคุณ"
      }
    }
  }
}

เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง

ตัวนี้รันในเครื่องคุณ แต่ ChatGPT ต่อได้เฉพาะ server บนอินเทอร์เน็ต ลองเลือกแอปอื่น

ตัวเลือกเก็บในคุกกี้บนเครื่องนี้ ไม่ต้องมีบัญชี

ค่าที่ต้องใส่เอง

  • FHIR_BASE_URL env
    Base URL of the FHIR R4 server (default: https://hapi.fhir.org/baseR4)
  • SMART_ENABLED env
    Set to 'true' to enable SMART-on-FHIR OAuth 2.0 (Epic/Cerner)

ค่าตั้งนี้สร้างจากข้อมูลใน registry ของผู้ทำ ถ้าไม่ตรงกับ README ให้เชื่อ README

ทำอะไรได้บ้าง

รันในเครื่องคุณ รายการเครื่องมือจะขึ้นในแอป AI หลังติดตั้ง

ผลตรวจเบื้องต้นi

เราตรวจจากข้อมูลที่ใครก็เปิดดูได้ ยังไม่ได้อ่านโค้ด ข้อที่ไม่เกี่ยวกับตัวนี้ไม่นับในตัวหาร · ตรวจเมื่อ 10 พ.ย. 2569

  • ✓ ผ่าน

    ตัวตนผู้ทำตรงกับ repo

    ชื่อใน registry ยืนยันด้วยบัญชี GitHub pcmedsinge ซึ่งเป็นเจ้าของ repo

  • … ยังไม่ตรวจ

    ยังมีคนดูแล

    ยังไม่ได้อ่านข้อมูล repo จาก GitHub

  • … ยังไม่ตรวจ

    มีสัญญาอนุญาต (license)

    ยังไม่ได้อ่านข้อมูล repo จาก GitHub

  • – ไม่เกี่ยว

    endpoint ตอบ

    ตัวนี้รันบนเครื่องคุณ ไม่มี endpoint บนอินเทอร์เน็ต

  • – ไม่เกี่ยว

    ล็อกอินแบบ OAuth

    ตัวนี้รันบนเครื่อง ใช้ค่าที่ตั้งในเครื่องแทน

  • … ยังไม่ตรวจ

    คำอธิบายเครื่องมือไม่มีคำสั่งแอบแฝง

    รันในเครื่องคุณ เราอ่านรายการเครื่องมือได้เฉพาะตัวที่มี endpoint บนอินเทอร์เน็ต

เทียบกับตัวอื่นในหมวด คลินิกและสุขภาพi

  • ดาวมากกว่า 0% ของอีก 1061 ตัวในหมวดนี้
  • ส่งรุ่นใหม่เข้า registry ล่าสุดกว่า 16% ของอีก 1061 ตัวในหมวดนี้
  • ผลตรวจเบื้องต้นดีกว่าหรือเท่ากับ 100% ของอีก 1061 ตัวในหมวดนี้

เทียบกับทุก server ที่ยังใช้งานในหมวดนี้ทั้งทะเบียน ดาวนับเฉพาะเมื่อผู้ลงทะเบียนเป็นเจ้าของ repo

คำถามที่พบบ่อย

MCP FHIR ปลอดภัยไหม?

จากการตรวจเบื้องต้นของเรา ผ่าน 1 จาก 1 ข้อที่ตรวจได้ เรายังไม่ได้อ่านโค้ด ก่อนใส่กุญแจหรือ token ให้ดูว่า server ขอสิทธิ์อะไร และเลือกกุญแจที่ทำได้เท่าที่จำเป็น

ต้องใช้กุญแจหรือรหัสอะไรบ้าง?

registry ไม่ได้ระบุว่าต้องใช้กุญแจ แต่บางตัวจะขอให้ล็อกอินตอนใช้ครั้งแรก

ตัวนี้รันบนเครื่องหรือบนคลาวด์?

รันบนเครื่องของคุณ โปรแกรม AI จะเปิด server ขึ้นมาเองเมื่อใช้ ข้อมูลไม่ต้องผ่านเซิร์ฟเวอร์ของผู้ทำ (ยกเว้นตัวที่ไปเรียกบริการออนไลน์ต่อ)

ยังมีคนดูแลอยู่ไหม?

repo บน GitHub มีการแก้โค้ดล่าสุด – และส่งรุ่นล่าสุด (1.1.1) เข้า registry 5 เดือนที่ผ่านมา

ใช้กับโปรแกรมไหนได้บ้าง?

โปรแกรมที่รองรับ MCP เช่น Claude Desktop, Claude Code, Cursor และ VS Code ตัวนี้ต้องมี Python (uv) ในเครื่องด้วย

มีตัวไหนใช้แทนได้บ้าง?

ในหมวดเดียวกันมี Mirobody, FHIR MCP Server, Google Health MCP

ตัวที่ใช้แทนได้

server หมวดเดียวกันจากผู้ทำคนอื่น เรียงตามดาว

อ่านการ์ด:↓ ดาวน์โหลดต่อสัปดาห์i★ ดาว GitHubiสามเสา: รีวิว · ผลตรวจ · การใช้งานiอัปเดต = วันที่ส่งรุ่นล่าสุดเข้า registryi

Mirobody

Lab results to LOINC codes and UCUM units, symptoms and diagnoses to ICPC-3. Offline, no API key.

โดย thetahealthกำลังโต↓ 290/สัปดาห์★ 1.4Kอัปเดต 3 วันที่ผ่านมา

รันบนเครื่อง✓ thetahealth.ai

FHIR MCP Server

MCP server providing seamless access to FHIR APIs for AI tools and healthcare applications

โดย wso2กำลังโต↓ 823/สัปดาห์★ 137อัปเดต 12 วันที่ผ่านมา

รันบนเครื่อง

Google Health MCP

Privacy-first unofficial Google Health API v4 MCP server for health, sleep, activity, HR agents

โดย davidmosiahกำลังโต↓ 1K/สัปดาห์★ 79อัปเดต 4 เดือนที่ผ่านมา

รันบนเครื่อง

README จากผู้ทำ

เปิดอ่าน README

ส่วนนี้คัดจาก repo ของผู้ทำตามต้นฉบับ PopNx MCP ไม่ได้ตรวจหรือรับรองเนื้อหา ตัด HTML รูปภาพ และสคริปต์ออกแล้ว ลิงก์จะพาออกนอกเว็บ

mcp-fhir

FHIR R4 MCP server — read, search, paginate, validate resources against US Core/IPS profiles,

and authenticate against Epic/Cerner EHR sandboxes via SMART-on-FHIR OAuth 2.0.

Part of the fhir-mcp-suite monorepo.

What it does

mcp-fhir exposes five MCP tools that let any MCP-compatible AI (Claude, GPT-4o, etc.) interact with any FHIR R4 server — and validate resources against US Core and IPS profiles — in a single server process. No other public FHIR MCP server combines search + validation today.

ToolDescription
fhir_capabilitiesCapabilityStatement summary — what the server supports
fhir_readRead a single resource by type + logical ID
fhir_searchSearch a resource type with FHIR query params; returns Bundle with _next_url when paginated
fhir_search_nextFollow a _next_url pagination link (SSRF-guarded)
validate_against_profileValidate a resource via the HAPI validator; supports US Core & IPS aliases

Architecture

Claude Desktop / AI client

│ MCP (stdio or SSE) ▼ ┌───────────────────────────────┐ │ mcp-fhir v1.1 │ │ ┌───────────────────────────┐│ │ │ tools/ ││ │ │ ├─ fhir_capabilities.py ││ │ │ ├─ fhir_read.py ││ │ │ ├─ fhir_search.py ││ ──► FHIR R4 server │ │ └─ validate_profile.py ││ ──► HAPI validator sidecar │ └───────────────────────────┘│ │ fhir-mcp-shared │ │ ├─ LangFuse traces (session) │ │ ├─ Pydantic structured output │ │ └─ structlog JSON logging │ └───────────────────────────────┘

Quick start

# requires Python 3.12+ and uv

uvx mcp-fhir # stdio transport (Claude Desktop, default)

SSE transport (HTTP, for API access)

MCP_TRANSPORT=sse uvx mcp-fhir

Claude Desktop config (claude_desktop_config.json)
{

"mcpServers": { "mcp-fhir": { "command": "uvx", "args": ["mcp-fhir"], "env": { "FHIR_BASE_URL": "https://hapi.fhir.org/baseR4", "HAPI_VALIDATOR_URL": "http://localhost:8082" } } } }

See full installation guide for HAPI validator setup, troubleshooting, and self-hosted FHIR server configuration.

Eval results

Golden query suite — run against the public HAPI demo server (hapi.fhir.org/baseR4):

CategoryCasesPass rate
fhir_capabilities2100 %
fhir_read4100 %
fhir_search6100 %
fhir_search_next2100 %
validate_against_profile6100 %
Total20100 %

CI gate: uv run python evals/mcp-fhir/run_eval.py --ci --threshold 0.9

Validator cases require the HAPI sidecar (docker compose up hapi-validator).

Configuration

All settings via environment variables (see .env.example):

VariableDefaultDescription
FHIR_BASE_URLhttps://hapi.fhir.org/baseR4FHIR server base URL
HAPI_VALIDATOR_URLhttp://localhost:8082HAPI validator sidecar (runs on port 3500 internally; map 8082:3500)
FHIR_TIMEOUT_S30HTTP timeout in seconds
FHIR_MAX_RESULTS20Default _count for searches
MCP_TRANSPORTstdiostdio or sse
MCP_PORT8000Port for SSE transport
LOG_FORMATjsonjson (prod) or console (dev)
LANGFUSE_PUBLIC_KEY_(unset)_LangFuse observability (optional)
LANGFUSE_SECRET_KEY_(unset)_LangFuse observability (optional)

SMART-on-FHIR authentication

mcp-fhir v1.1.0 adds SMART-on-FHIR backend services (client_credentials grant, RFC 6749) so the server can authenticate against real Epic / Cerner sandboxes — no browser redirect needed.

When SMART_ENABLED=true, every FHIR request gets an Authorization: Bearer header. Tokens are cached in-process and refreshed automatically 30 s before expiry.

SMART environment variables
VariableDefaultDescription
SMART_ENABLEDfalseSet true to activate SMART auth
SMART_CLIENT_ID""App client ID from EHR registration portal
SMART_CLIENT_SECRET""Client secret (stored as SecretStr, never logged)
SMART_TOKEN_URL""Token endpoint URL; auto-discovered if blank
SMART_SCOPESsystem/*.readSpace-separated OAuth 2.0 scopes
SMART_GRANT_TYPEclient_credentialsOAuth grant type (only client_credentials supported)
SMART_TOKEN_TIMEOUT_S15.0HTTP timeout for token requests

When SMART_TOKEN_URL is blank the server performs SMART auto-discovery: GET {FHIR_BASE_URL}/.well-known/smart-configuration → token_endpoint. Falls back to {FHIR_BASE_URL}/oauth2/token if discovery returns a non-200.

Epic sandbox quick-start
  1. Register at https://fhir.epic.com/ → My Apps → create a backend-services app.
  2. Note your Client ID and Client Secret.
  3. Create .env in the monorepo root (already in .gitignore):
FHIR_BASE_URL=https://fhir.epic.com/interconnect-fhir-oauth/api/FHIR/R4

SMART_ENABLED=true SMART_CLIENT_ID=your-epic-client-id SMART_CLIENT_SECRET=your-epic-client-secret

SMART_TOKEN_URL is optional — auto-discovered from FHIR_BASE_URL

Cerner sandbox quick-start
  1. Register at https://code.cerner.com/ → create a backend-services app.
  2. Note your Client ID and the token endpoint URL.
  3. Update .env:
FHIR_BASE_URL=https://fhir-ehr-code.cerner.com/r4/your-tenant-id

SMART_ENABLED=true SMART_CLIENT_ID=your-cerner-client-id SMART_CLIENT_SECRET=your-cerner-client-secret SMART_TOKEN_URL=https://authorization.cerner.com/tenants/your-tenant-id/protocols/oauth2/profiles/smart-v1/token

Claude Desktop config with SMART auth
{

"mcpServers": { "mcp-fhir": { "command": "uvx", "args": ["mcp-fhir"], "env": { "FHIR_BASE_URL": "https://fhir.epic.com/interconnect-fhir-oauth/api/FHIR/R4", "SMART_ENABLED": "true", "SMART_CLIENT_ID": "your-epic-client-id", "SMART_CLIENT_SECRET": "your-epic-client-secret" } } } }

Programmatic client (LangGraph / any Python agent)

Use StdioServerParameters to point any Python MCP client at a FHIR server. The same pattern works in LangGraph tool nodes, LangChain agents, or plain asyncio scripts.

from mcp import ClientSession, StdioServerParameters

from mcp.client.stdio import stdio_client import asyncio, os

server = StdioServerParameters( command="uv", args=["run", "--package", "mcp-fhir", "mcp-fhir"], env={ **os.environ,

── Public HAPI (no auth) ──────────────────────────────────

"FHIR_BASE_URL": "https://hapi.fhir.org/baseR4", "SMART_ENABLED": "false",

── Epic sandbox (uncomment + fill in) ────────────────────

"FHIR_BASE_URL": "https://fhir.epic.com/interconnect-fhir-oauth/api/FHIR/R4",

"SMART_ENABLED": "true",

"SMART_CLIENT_ID": os.environ["EPIC_CLIENT_ID"],

"SMART_CLIENT_SECRET": os.environ["EPIC_CLIENT_SECRET"],

── Cerner sandbox (uncomment + fill in) ──────────────────

"FHIR_BASE_URL": "https://fhir-myrecord.cerner.com/r4/ ",

"SMART_ENABLED": "true",

"SMART_CLIENT_ID": os.environ["CERNER_CLIENT_ID"],

"SMART_CLIENT_SECRET": os.environ["CERNER_CLIENT_SECRET"],

"SMART_TOKEN_URL": "https://authorization.cerner.com/tenants/ /...",

}, )

async def main(): async with stdio_client(server) as (read, write): async with ClientSession(read, write) as session: await session.initialize() result = await session.call_tool( "fhir_search", arguments={"resource_type": "Patient", "params": {"_count": "3"}}, ) print(result.content[0].text)

asyncio.run(main())

See demo/fhir_server_configs.py for ready-to-run configs for all supported servers (public HAPI, SMART Health IT, Epic, Cerner, local Docker).

Running SMART integration tests
# Requires real sandbox credentials in .env

uv run pytest packages/mcp-fhir/tests -m smart_integration -v

Profile validation

The validate_against_profile tool supports shorthand aliases:

AliasProfile URL
us-core-patienthttp://hl7.org/fhir/us/core/StructureDefinition/us-core-patient
us-core-observationhttp://hl7.org/fhir/us/core/StructureDefinition/us-core-observation-clinical-result
us-core-conditionhttp://hl7.org/fhir/us/core/StructureDefinition/us-core-condition-problems-health-concerns
us-core-medication-requesthttp://hl7.org/fhir/us/core/StructureDefinition/us-core-medicationrequest
us-core-encounterhttp://hl7.org/fhir/us/core/StructureDefinition/us-core-encounter
ips-patienthttp://hl7.org/fhir/uv/ips/StructureDefinition/Patient-uv-ips

Profile validation requires the HAPI validator sidecar (included in docker-compose.yml at repo root).

Development

# From monorepo root

uv sync uv run pytest packages/mcp-fhir/tests -v

Integration tests (requires HAPI public server access)

uv run pytest packages/mcp-fhir/tests -m integration

Architecture

Client (Claude / GPT-4o)

│ MCP protocol (stdio or SSE) ▼ mcp-fhir server (Python, anyio) ├── fhir_read ──────────► FHIR R4 server (configurable) ├── fhir_search ─────────► FHIR R4 server └── validate_against_profile │ ▼ HAPI validator sidecar (markiantorno/validator-wrapper) │ ▼ LangFuse (optional observability)

License

Apache-2.0

ถาม PopNx