Mirobody
Lab results to LOINC codes and UCUM units, symptoms and diagnoses to ICPC-3. Offline, no API key.
คำอธิบายจากผู้ทำ (ภาษาอังกฤษตามต้นฉบับ)
FHIR R4 read/search/validate MCP server — US Core/IPS profiles, SMART-on-FHIR auth (Epic/Cerner).
สามเรื่องนี้ไม่รวมเป็นคะแนนเดียว เพราะความเห็น การวัด และความนิยม เป็นคนละเรื่องกัน
ตัวนี้ยังไม่ได้เรียบเรียงเป็นภาษาไทย ด้านล่างคือข้อเท็จจริงที่เราอ่านจาก registry
เลือกโปรแกรม AI ที่คุณใช้ แล้วคัดลอกค่าตั้งไปวาง
FHIR_BASE_URL, SMART_ENABLEDต้องเตรียมก่อน
คุณใช้แอปไหน
เลือกแอปด้านบน เราจำไว้ให้ ครั้งหน้าปุ่มจะขึ้นว่า “ติดตั้งลง …”
เปิด 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/mcp.json ของโปรเจกต์ หรือ ~/.cursor/mcp.json
{
"mcpServers": {
"fhir": {
"command": "uvx",
"args": [
"mcp-fhir"
],
"env": {
"FHIR_BASE_URL": "ใส่ค่าของคุณ",
"SMART_ENABLED": "ใส่ค่าของคุณ"
}
}
}
}เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง
วางในไฟล์ .vscode/mcp.json ของโปรเจกต์
{
"servers": {
"fhir": {
"type": "stdio",
"command": "uvx",
"args": [
"mcp-fhir"
],
"env": {
"FHIR_BASE_URL": "ใส่ค่าของคุณ",
"SMART_ENABLED": "ใส่ค่าของคุณ"
}
}
}
}เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง
ตัวนี้รันในเครื่องคุณ แต่ ChatGPT ต่อได้เฉพาะ server บนอินเทอร์เน็ต ลองเลือกแอปอื่น
ตัวเลือกเก็บในคุกกี้บนเครื่องนี้ ไม่ต้องมีบัญชี
FHIR_BASE_URL envSMART_ENABLED envค่าตั้งนี้สร้างจากข้อมูลใน registry ของผู้ทำ ถ้าไม่ตรงกับ README ให้เชื่อ README
รันในเครื่องคุณ รายการเครื่องมือจะขึ้นในแอป AI หลังติดตั้ง
เราตรวจจากข้อมูลที่ใครก็เปิดดูได้ ยังไม่ได้อ่านโค้ด ข้อที่ไม่เกี่ยวกับตัวนี้ไม่นับในตัวหาร · ตรวจเมื่อ 10 พ.ย. 2569
ชื่อใน registry ยืนยันด้วยบัญชี GitHub pcmedsinge ซึ่งเป็นเจ้าของ repo
ยังไม่ได้อ่านข้อมูล repo จาก GitHub
ยังไม่ได้อ่านข้อมูล repo จาก GitHub
ตัวนี้รันบนเครื่องคุณ ไม่มี endpoint บนอินเทอร์เน็ต
ตัวนี้รันบนเครื่อง ใช้ค่าที่ตั้งในเครื่องแทน
รันในเครื่องคุณ เราอ่านรายการเครื่องมือได้เฉพาะตัวที่มี endpoint บนอินเทอร์เน็ต
เทียบกับทุก server ที่ยังใช้งานในหมวดนี้ทั้งทะเบียน ดาวนับเฉพาะเมื่อผู้ลงทะเบียนเป็นเจ้าของ repo
จากการตรวจเบื้องต้นของเรา ผ่าน 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
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
ส่วนนี้คัดจาก repo ของผู้ทำตามต้นฉบับ PopNx MCP ไม่ได้ตรวจหรือรับรองเนื้อหา ตัด HTML รูปภาพ และสคริปต์ออกแล้ว ลิงก์จะพาออกนอกเว็บ
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.
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.
| Tool | Description |
|---|---|
fhir_capabilities | CapabilityStatement summary — what the server supports |
fhir_read | Read a single resource by type + logical ID |
fhir_search | Search a resource type with FHIR query params; returns Bundle with _next_url when paginated |
fhir_search_next | Follow a _next_url pagination link (SSRF-guarded) |
validate_against_profile | Validate a resource via the HAPI validator; supports US Core & IPS aliases |
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 │ └───────────────────────────────┘
# requires Python 3.12+ and uv
uvx mcp-fhir # stdio transport (Claude Desktop, default)
MCP_TRANSPORT=sse uvx mcp-fhir
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.
Golden query suite — run against the public HAPI demo server (hapi.fhir.org/baseR4):
| Category | Cases | Pass rate |
|---|---|---|
fhir_capabilities | 2 | 100 % |
fhir_read | 4 | 100 % |
fhir_search | 6 | 100 % |
fhir_search_next | 2 | 100 % |
validate_against_profile | 6 | 100 % |
| Total | 20 | 100 % |
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).
All settings via environment variables (see .env.example):
| Variable | Default | Description |
|---|---|---|
FHIR_BASE_URL | https://hapi.fhir.org/baseR4 | FHIR server base URL |
HAPI_VALIDATOR_URL | http://localhost:8082 | HAPI validator sidecar (runs on port 3500 internally; map 8082:3500) |
FHIR_TIMEOUT_S | 30 | HTTP timeout in seconds |
FHIR_MAX_RESULTS | 20 | Default _count for searches |
MCP_TRANSPORT | stdio | stdio or sse |
MCP_PORT | 8000 | Port for SSE transport |
LOG_FORMAT | json | json (prod) or console (dev) |
LANGFUSE_PUBLIC_KEY | _(unset)_ | LangFuse observability (optional) |
LANGFUSE_SECRET_KEY | _(unset)_ | LangFuse observability (optional) |
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.
| Variable | Default | Description |
|---|---|---|
SMART_ENABLED | false | Set 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_SCOPES | system/*.read | Space-separated OAuth 2.0 scopes |
SMART_GRANT_TYPE | client_credentials | OAuth grant type (only client_credentials supported) |
SMART_TOKEN_TIMEOUT_S | 15.0 | HTTP 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.
.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
.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
{
"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" } } } }
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,
"FHIR_BASE_URL": "https://hapi.fhir.org/baseR4", "SMART_ENABLED": "false",
}, )
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).
# Requires real sandbox credentials in .env
uv run pytest packages/mcp-fhir/tests -m smart_integration -v
The validate_against_profile tool supports shorthand aliases:
| Alias | Profile URL |
|---|---|
us-core-patient | http://hl7.org/fhir/us/core/StructureDefinition/us-core-patient |
us-core-observation | http://hl7.org/fhir/us/core/StructureDefinition/us-core-observation-clinical-result |
us-core-condition | http://hl7.org/fhir/us/core/StructureDefinition/us-core-condition-problems-health-concerns |
us-core-medication-request | http://hl7.org/fhir/us/core/StructureDefinition/us-core-medicationrequest |
us-core-encounter | http://hl7.org/fhir/us/core/StructureDefinition/us-core-encounter |
ips-patient | http://hl7.org/fhir/uv/ips/StructureDefinition/Patient-uv-ips |
Profile validation requires the HAPI validator sidecar (included in docker-compose.yml at repo root).
# From monorepo root
uv sync uv run pytest packages/mcp-fhir/tests -v
uv run pytest packages/mcp-fhir/tests -m integration
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)
Apache-2.0