关于 Last EHR — Medplum
Last EHR — Medplum 为 MCP 客户端提供基于 Medplum 或本地 HAPI 的 FHIR 病历读取工具,默认只读。启用写入提案后,每项写入都需通过 MCP 征询获得人工批准,适用于需要明确审阅流程的医疗数据工作。
主要功能
- 01搜索患者并查看完整病历
- 02读取 23 类患者病历分区
- 03读取文档内联文本
- 04默认只读并标注读取限制
- 05写入提案需逐项人工批准
- 06检查后端配置与连接
适用场景
- 01检索患者并查看病历概览
- 02按条件读取指定病历分区
- 03读取文档中的文本内容
- 04经人工批准后提交观察记录或任务
MCP 相关
该 MCP 服务向客户端提供 FHIR 患者搜索、病历和文档读取工具。设置 LASTEHR_MCP_WRITES=proposal 后,可提供需经 MCP elicitation 人工批准的写入提案;不支持审批呈现的客户端不会看到写入工具。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
npx -y @lastehr/mcpMEDPLUM_ACCESS_TOKEN密钥FHIR chart tools over Medplum or a local HAPI stack: read-only by default, with an opt-in elicitation-gated write profile (human-approved per action).MEDPLUM_CLIENT_IDFHIR chart tools over Medplum or a local HAPI stack: read-only by default, with an opt-in elicitation-gated write profile (human-approved per action).MEDPLUM_CLIENT_SECRET密钥FHIR chart tools over Medplum or a local HAPI stack: read-only by default, with an opt-in elicitation-gated write profile (human-approved per action).MEDPLUM_BASE_URLFHIR chart tools over Medplum or a local HAPI stack: read-only by default, with an opt-in elicitation-gated write profile (human-approved per action).本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
@lastehr/mcp
面向 MCP 客户端的 FHIR 病历工具,可通过 Medplum 项目或 Last EHR
代码库的本地 HAPI 评估栈使用(FHIR_BACKEND=hapi,仅限合成数据)。
默认只读,读取的内容与 Last EHR Web Agent 使用的内容相同:搜索患者、查看完整病历、通过筛选条件读取 23 个患者专属病历分区中的任意一个,以及读取文档文本。启用一个可选配置 LASTEHR_MCP_WRITES=proposal 后,会添加由询问确认机制控制的写入提案,由人工逐项批准。未经明确批准,绝不会保存任何内容;不支持呈现审批的客户端也看不到写入工具。
注册表元数据位于 server.json 中,并随每个经过验证的 npm 版本一同发布。
安装
npx -y @lastehr/mcp init
该命令会输出可移植的 MCP 配置。对于 Claude Code,请改为输出注册命令:
npx -y @lastehr/mcp init --client claude-code
使用以下命令启动 stdio 服务:
npx -y @lastehr/mcp
无需配置后端即可检查已安装的软件包版本:
npx -y @lastehr/mcp --version
配置
启动服务前,请设置以下一种身份验证方式:
MEDPLUM_ACCESS_TOKEN=...
或:
MEDPLUM_CLIENT_ID=...
MEDPLUM_CLIENT_SECRET=...
对于可自托管的 Medplum 部署,请设置 MEDPLUM_BASE_URL。对于代码库的本地无身份验证 HAPI 栈,请改为设置 FHIR_BACKEND=hapi 和 FHIR_BASE_URL(或 HAPI_BASE_URL)——仅限本地合成数据。
运行 npx -y @lastehr/mcp doctor 可在不启动 MCP 的情况下验证配置。
在 0.4.0 中,doctor --connect 还会检查 stdio 后端的 FHIR R4 元数据,并执行仅返回计数的 Patient 搜索。它不会写入病历,也不会输出患者数据或计数。此检查无法验证单个病历的访问权限、其他资源权限、写入权限或 MCP 客户端的审批支持情况。
HTTP 模式仍仅检查配置;其 --connect 检查会明确失败,而不会将已配置的 URL 视为经过验证的 OAuth 会话。
源代码检出版本可能领先于 npm。使用 --version 检查已安装的版本。代码库的发布流程
会在发布前于干净目录中测试打包后的构件。
安全边界
默认情况下,软件包会公开 search_patients、show_patient_info、
read_chart_section 和 read_document,这些工具均带有 MCP readOnlyHint。
这些读取操作与 Web Agent 共用同一套实现,这是有意为之: 它们的每项诚实性保障都源于在实际运行的 FHIR 服务上发现的真实漏报,而另写一套实现就得重新验证这些保障。回复会说明它无法查看哪些内容,空结果绝不能证明某项内容不存在:
| 字段 | 含义 |
|---|---|
truncated | 服务返回的窗口已满,因此在已读取内容之外可能还有较早的记录。此状态根据窗口而非行数判定。 |
codeFilterUnmatched | 此分区确实包含记录,但其中没有任何记录带有所筛选的代码。仅包含文本的 CodeableConcept 无法匹配按代码进行的搜索。 |
includeUnsupported | 后端拒绝了引用查找。这不代表不存在任何引用。 |
unreadable(文档) | 文档确实存在,但其内容未被读取:可能是扫描件,也可能是以指针而非内联形式存储的正文。 |
病历中的自由文本会以 <chart_text> 标签包裹。此类内容是数据,
绝不是指令。read_document 会解码内联文本附件,且绝不会解析 Attachment.url,因此不会向 FHIR 服务指定的地址发出请求。
设置
LASTEHR_MCP_WRITES=proposal 后,还会以提案形式提供 add_note、
record_observation、record_superseding_observation 和 create_task:
具体字段会通过 MCP elicitation 展示给人工审核者,只有得到批准后才会保存;每项获批写入都会添加 https://lastehr.com/mcp|approved-proposal 标签,并在 meta.security 中携带标准 AIAST 安全标签(“由人工智能断言”);此外,启用 LASTEHR_WRITE_PROVENANCE=true 还会生成 Provenance 资源,注明 Agent 为作者、审核者为验证者。
读取访问权限仍可能返回 PHI。请使用最小权限身份,审查 MCP 客户端的数据处理方式和模型提供商协议,切勿将此软件包视为授权层。
完整的设置说明和支持范围,请参阅 https://www.lastehr.com/docs/mcp。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。