mcpField
L
Last EHR — Medplum

Last EHR — Medplum

本地服务
lastehr.com健康医疗42 天前更新

关于 Last EHR — Medplum

Last EHR — Medplum 为 MCP 客户端提供基于 Medplum 或本地 HAPI 的 FHIR 病历读取工具,默认只读。启用写入提案后,每项写入都需通过 MCP 征询获得人工批准,适用于需要明确审阅流程的医疗数据工作。

主要功能

  1. 01搜索患者并查看完整病历
  2. 02读取 23 类患者病历分区
  3. 03读取文档内联文本
  4. 04默认只读并标注读取限制
  5. 05写入提案需逐项人工批准
  6. 06检查后端配置与连接

适用场景

  1. 01检索患者并查看病历概览
  2. 02按条件读取指定病历分区
  3. 03读取文档中的文本内容
  4. 04经人工批准后提交观察记录或任务

MCP 相关

该 MCP 服务向客户端提供 FHIR 患者搜索、病历和文档读取工具。设置 LASTEHR_MCP_WRITES=proposal 后,可提供需经 MCP elicitation 人工批准的写入提案;不支持审批呈现的客户端不会看到写入工具。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"cbetz-last-ehr": {
"command": "npx",
"args": [
"-y",
"@lastehr/mcp"
],
"env": {
"MEDPLUM_ACCESS_TOKEN": "<MEDPLUM_ACCESS_TOKEN>",
"MEDPLUM_CLIENT_ID": "<MEDPLUM_CLIENT_ID>",
"MEDPLUM_CLIENT_SECRET": "<MEDPLUM_CLIENT_SECRET>",
"MEDPLUM_BASE_URL": "<MEDPLUM_BASE_URL>"
}
}
}
}
启动命令npx -y @lastehr/mcp
需要配置的环境变量
MEDPLUM_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+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npm@lastehr/mcp0.4.1

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

@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。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。