FHIR MCP服务器是一个模型上下文协议(MCP)服务器,它提供了与FHIR API的无缝集成。该服务器设计用于开发者、集成商和医疗创新者,作为现代AI/LLM工具与医疗数据之间的桥梁,使得搜索、检索和分析临床信息变得容易。
此视频展示了当连接到公共HAPI FHIR服务器时,MCP服务器的功能。此示例展示了直接与一个不需要授权流程的开放FHIR服务器进行交互。
https://github.com/user-attachments/assets/cc6ac87e-8329-4da4-a090-2d76564a3abf
此视频展示了MCP服务器在Epic EHR生态系统中的能力。它演示了完整的OAuth 2.0授权码授予流程。
https://github.com/user-attachments/assets/96b433f1-3e53-4564-8466-65ab48d521de
您可以通过安装我们的Python包或克隆此仓库来使用FHIR MCP服务器。
配置环境变量:
要运行服务器,您必须设置FHIR_SERVER_BASE_URL。
FHIR_SERVER_BASE_URL、FHIR_SERVER_CLIENT_ID、FHIR_SERVER_CLIENT_SECRET和FHIR_SERVER_SCOPES。默认情况下,授权是启用的。FHIR_SERVER_DISABLE_AUTHORIZATION设置为True。默认情况下,MCP服务器运行在**http://localhost:8000**,您可以使用FHIR_MCP_HOST和FHIR_MCP_PORT自定义主机和端口。
您可以通过导出它们作为环境变量如下所示,或者创建一个.env文件(参考.env.example)。
export FHIR_SERVER_BASE_URL=""
export FHIR_SERVER_CLIENT_ID=""
export FHIR_SERVER_CLIENT_SECRET=""
export FHIR_SERVER_SCOPES=""
export FHIR_MCP_HOST="localhost"
export FHIR_MCP_PORT="8000"
安装PyPI包并运行服务器
uvx fhir-mcp-server
克隆仓库:
git clone <repository_url>
cd <repository_directory>
创建虚拟环境并安装依赖项:
uv venv
source .venv/bin/activate
uv pip sync requirements.txt
或使用pip:
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
配置环境变量: 复制示例文件并根据需要自定义:
cp .env.example .env
运行服务器:
uv run fhir-mcp-server
您可以使用Docker运行MCP服务器以获得一致且隔离的环境。
关于授权:当通过Docker或Docker Compose本地运行MCP服务器时,应通过设置环境变量
FHIR_SERVER_DISABLE_AUTHORIZATION=True来禁用授权。这将在未来的发布中得到解决。
构建Docker镜像或从容器注册表拉取镜像:
docker build -t fhir-mcp-server .
docker pull wso2/fhir-mcp-server:latest
配置环境变量
复制示例环境文件并根据需要编辑:
cp .env.example .env
# 编辑.env以设置您的FHIR服务器、客户端凭证等。
或者,您可以直接使用-e标志传递环境变量,或使用Docker密钥存储敏感值。详情请参阅配置部分。
运行容器
docker run --env-file .env -p 8000:8000 fhir-mcp-server
这将启动服务器并在端口8000上公开。根据需要调整端口映射。
为了快速设置包括FHIR MCP服务器和HAPI FHIR服务器(带PostgreSQL)的环境,请使用提供的docker-compose.yml。这将设置一个即时开发环境,用于测试FHIR操作。
先决条件:
运行堆栈:
docker-compose up -d
此命令将:
访问服务:
docker-compose down。配置其他环境变量:
如果需要自定义OAuth或其他设置,请调整docker-compose.yml中的环境变量。组合文件设置了基本配置;请参阅配置部分了解全部选项。
FHIR MCP服务器旨在与各种MCP客户端无缝集成。
在VS Code的用户设置(JSON)文件中添加以下JSON块(> V1.101)。您可以通过按Ctrl + Shift + P并键入“Preferences: Open User Settings (JSON)”来完成此操作。
<table> <tr><th>可流式传输的HTTP</th><th>STDIO</th><th>SSE</th></tr> <tr valign=top> <td>"mcp": {
"servers": {
"fhir": {
"type": "http",
"url": "http://localhost:8000/mcp",
}
}
}
</td>
<td>
"mcp": {
"servers": {
"fhir": {
"command": "uv",
"args": [
"--directory",
"/path/to/fhir-mcp-server",
"run",
"fhir-mcp-server",
"--transport",
"stdio"
],
"env": {
"FHIR_SERVER_ACCESS_TOKEN": "您的FHIR访问令牌"
}
}
}
}
</td>
<td>
"mcp": {
"servers": {
"fhir": {
"type": "sse",
"url": "http://localhost:8000/sse",
}
}
}
</td>
</tr>
</table>
在Claude Desktop设置中添加以下JSON块以连接到本地MCP服务器。
{
"mcpServers": {
"fhir": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"http://localhost:8000/mcp"
]
}
}
}
</td>
<td>
{
"mcpServers": {
"fhir": {
"command": "uv",
"args": [
"--directory",
"/path/to/fhir-mcp-server",
"run",
"fhir-mcp-server",
"--transport",
"stdio"
],
"env": {
"FHIR_SERVER_ACCESS_TOKEN": "您的FHIR访问令牌"
}
}
}
}
</td>
<td>
{
"mcpServers": {
"fhir": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"http://localhost:8000/sse"
]
}
}
}
</td>
</tr>
</table>
按照以下步骤启动并运行MCP Inspector:
打开终端并运行以下命令:
npx -y @modelcontextprotocol/inspector
在MCP Inspector界面中:
可流式传输的HTTPhttp://localhost:8000/mcpSTDIOuv--directory /path/to/fhir-mcp-server run fhir-mcp-server --transport stdioSSEhttp://localhost:8000/sse确保您的MCP服务器已经在上述端点上运行并监听。
一旦连接,MCP Inspector将允许您可视化工具调用,检查请求/响应负载,并轻松调试工具实现。
您可以使用以下命令行标志来自定义MCP服务器的行为:
--transport
--log-level
--help
示例用法:
uv run fhir-mcp-server --transport 可流式传输的HTTP --log-level DEBUG
uv run fhir-mcp-server --help
MCP服务器配置:
FHIR_MCP_HOST:MCP服务器绑定的主机名或IP地址(例如,localhost仅限本地访问,或0.0.0.0用于所有接口)。FHIR_MCP_PORT:MCP服务器监听传入客户端请求的端口(例如,8000)。FHIR_MCP_SERVER_URL:如果设置,此值将用作服务器的基本URL,而不是从主机和端口生成。对于自定义URL配置或位于代理之后的情况很有用。FHIR_MCP_REQUEST_TIMEOUT:MCP服务器向FHIR服务器发出请求的超时时间(默认:30秒)。MCP服务器OAuth2与FHIR服务器配置(MCP客户端 ↔ MCP服务器): 这些变量配置了MCP客户端与MCP服务器的安全连接,使用OAuth2授权码授予流程与FHIR服务器。
FHIR_SERVER_CLIENT_ID:用于授权MCP客户端与FHIR服务器的OAuth2客户端ID。FHIR_SERVER_DISABLE_AUTHORIZATION:如果设置为True,则禁用MCP服务器上的授权检查,允许连接到公开访问的FHIR服务器。FHIR_SERVER_CLIENT_SECRET:对应于FHIR客户端ID的客户端密钥。在令牌交换期间使用。FHIR_SERVER_BASE_URL:FHIR服务器的基本URL(例如,https://hapi.fhir.org/baseR4)。用于生成工具URI并将FHIR请求路由到正确的服务器。FHIR_SERVER_SCOPES:从FHIR授权服务器请求的OAuth2范围的空格分隔列表(例如,user/Patient.read user/Observation.read)。添加fhirUser openid以启用get_user工具的用户上下文检索。如果没有配置这两个范围,get_user工具将返回空结果,因为ID令牌缺少用户的FHIR资源引用。FHIR_SERVER_ACCESS_TOKEN:用于对FHIR服务器请求进行身份验证的访问令牌。如果设置了此变量,服务器将绕过OAuth2授权流程,并直接使用此令牌进行所有请求。get_capabilities:检索指定FHIR资源类型的元数据,包括其支持的搜索参数和自定义操作。
type:FHIR资源类型名称(例如,“Patient”,“Observation”,“Encounter”)search:在给定资源类型上执行标准FHIR搜索交互,返回匹配资源的捆绑包或列表。
type:FHIR资源类型名称(例如,“MedicationRequest”,“Condition”,“Procedure”)。searchParam:FHIR搜索参数名称及其期望值的映射(例如,{"family":"Simpson","birthdate":"1956-05-