一个模型上下文协议服务器,通过使用SMART on FHIR将人工智能工具与电子健康记录连接起来,允许对兼容电子健康记录中的患者数据进行安全的搜索、查询和分析。
362 查看 · 2026-07-07 更新
简介
一个模型上下文协议服务器,通过使用SMART on FHIR将人工智能工具与电子健康记录连接起来,允许对兼容电子健康记录中的患者数据进行安全的搜索、查询和分析。
简介
一个模型上下文协议服务器,通过使用SMART on FHIR将人工智能工具与电子健康记录连接起来,允许对兼容电子健康记录中的患者数据进行安全的搜索、查询和分析。
EHR Tools with MCP and FHIR

https://youtu.be/K0t6MRyIqZU?si=Mz4d65DcAD3i2YbO
该项目充当一个专门的服务器,为大型语言模型(LLMs)和其他AI代理提供与电子健康记录(EHRs)交互的工具。它利用SMART on FHIR标准进行安全的数据访问,并通过**模型上下文协议(MCP)**来暴露这些工具。
可以将其视为一个安全的网关和工具包,使AI能够安全地访问和分析来自不同EHR系统的患者数据。
核心理念
系统的工作分为三个主要阶段:
- SMART on FHIR 客户端(在本项目中实现): 使用标准的SMART App Launch框架安全地连接到EHR。它提取广泛的患者信息,包括结构化数据(如病情、药物、实验室结果)和非结构化的临床笔记或附件。
- MCP 服务器(本项目): 将提取的EHR数据通过一组强大的工具公开,这些工具可以通过模型上下文协议访问。这些工具允许外部系统(如AI模型)查询和分析数据,而无需直接访问EHR本身。
- AI / LLM 接口(外部消费者): AI代理或大型语言模型连接到MCP服务器,并使用提供的工具对患者的记录“提问”,执行搜索或运行自定义分析。
可用工具
MCP服务器提供了几个用于与加载的EHR数据交互的工具:
grep_record:在整个获取的记录(结构化FHIR数据+笔记/附件中的文本)中执行文本或正则表达式搜索。适用于查找关键词或特定提及(例如,“糖尿病”、“阿司匹林”)。query_record:直接针对结构化FHIR数据执行只读SQLSELECT查询。对于基于已知FHIR资源结构的精确查找非常有用(例如,通过LOINC代码查找特定的实验室结果)。eval_record:在获取的数据(FHIR资源+附件)上直接执行自定义JavaScript代码。为复杂计算、组合多个来源的数据或自定义格式提供最大的灵活性。
这种设置使AI工具能够通过标准化和安全的接口利用全面的EHR数据。
(开发人员设置和使用细节可以在代码库和特定模块文档中找到。)
组件与使用
该项目提供了不同的方式来获取EHR数据并通过MCP工具公开:
1. 独立的SMART on FHIR Web客户端
该项目包含一个独立的Web应用程序,允许用户通过SMART on FHIR连接到他们的EHR并获取数据。
- 托管版本: 您可以使用公开托管的版本:
https://mcp.fhir.me/ehr-connect#deliver-to-opener:$origin
(将$origin替换为实际打开此链接的窗口的源)。 - 工作原理: 打开此页面时,会提示用户选择他们的 EHR 提供商。然后它会启动标准的 SMART 应用启动流程,将用户重定向到其 EHR 的登录页面。成功认证和授权后,客户端会获取一套全面的 FHIR 资源(如患者、状况、观察结果、药物、文档等),并尝试从任何关联的附件(如在
DocumentReference中找到的 PDF、RTF、HTML 等)中提取纯文本。 - 数据输出 (
ClientFullEHR): 获取完成后,客户端会将所有数据汇总成一个ClientFullEHRJSON 对象。该对象包含:fhir:一个字典,其中键是 FHIR 资源类型(例如,“Patient”),值是相应的 FHIR 资源数组。attachments:一个已处理的附件对象数组,每个对象包括元数据(源资源、路径、内容类型)以及内容本身(contentBase64用于原始数据,contentPlaintext用于提取的文本)。
- 数据传递: 如果通过
#deliver-to-opener:$origin哈希打开,则客户端会提示用户确认,然后使用window.opener.postMessage(data, targetOrigin)将ClientFullEHR对象发送回打开它的窗口。
2. 通过 Stdio 的本地 MCP 服务器 (src/cli.ts)
这种模式非常适合于本地运行 MCP 服务器,常与 Cursor 或其他命令行 AI 客户端工具一起使用。
- 两步过程:
- 将数据提取到数据库: 首先,使用
--create-db和--db标志运行命令行界面。这将启动一个临时的Web服务器,并使用上述相同的SMART on FHIR Web客户端逻辑来获取数据。与通过postMessage发送数据不同,它会将ClientFullEHR数据保存到本地SQLite数据库文件中。
按照提示(在浏览器中打开链接)连接到您的EHR。# 示例:提取数据并保存到 data/my_record.sqlite bun run src/cli.ts --create-db --db ./data/my_record.sqlite - 运行MCP服务器: 一旦数据库文件创建完成,再次运行CLI,仅指向数据库文件。这将把数据加载到内存中,并启动MCP服务器,在标准输入/输出上监听命令。
# 示例:使用保存的数据启动MCP服务器 bun run src/cli.ts --db ./data/my_record.sqlite
- 将数据提取到数据库: 首先,使用
- 客户端配置(例如,光标): 配置您的MCP客户端以执行此命令。至关重要的是,对
src/cli.ts和数据库文件都使用绝对路径。{ "mcpServers": { "local-ehr": { "name": "本地EHR搜索", "command": "bun", // 或者bun的绝对路径 "args": [ "/home/user/projects/smart-mcp/src/cli.ts", // cli.ts的绝对路径 "--db", "/home/user/projects/smart-mcp/data/my_record.sqlite" // 数据库文件的绝对路径 ] } } }
3. 通过SSE的完整MCP服务器 (src/sse.ts / index.ts)
这种模式运行一个持久化的服务器,适用于多个客户端可能通过网络连接的场景。它使用Server-Sent Events (SSE) 作为MCP通信通道。
- 认证: 客户端认证依赖于Model Context Protocol指定的OAuth 2.1。服务器提供标准端点(如
/authorize、/token、/register等)。 - 数据提取: 当客户端发起OAuth连接时,服务器自己处理SMART on FHIR流程,在授权过程中获取
ClientFullEHR数据,并在整个客户端连接期间将其保留在内存中(或持久化会话中)。 - 状态: 尽管功能可用,但MCP规范对于OAuth 2.1客户端交互仍在发展中。目前,客户端对该认证方法的支持极其有限,使得除了专门的开发者或调试工具外,很难用标准客户端测试这种模式。应将此SSE模式视为实验性。
来源
- 来源:github
- 链接:https://github.com/jmandel/health-record-mcp