用途
medical-mcp 是一个 MCP(Model Context Protocol,模型上下文协议)服务器,用于把权威医学信息带入 Cursor、Claude Desktop 等 AI 编程环境。它通过查询多个权威医学 API,让用户在 AI 工作流中直接获取药品信息、健康统计数据、医学文献、临床指南和儿科资料。项目强调本地运行:数据不离开本机,不跟踪、不写日志、不上传云端,无需 API 密钥,开箱即用。
主要能力
药品信息
- search-drugs:检索 FDA、DailyMed、TGA(澳大利亚)、Health Canada、EMA,可按国家过滤(US、AU、CA、EU)。不支持的代码会被拒绝,而不是返回空的监管结果。
- search-drug-nomenclature:通过 RxNorm 获取标准化药品名称(limit 默认 25)。
- search-drug-safety:查询 FDA FAERS 不良事件(含报告 ID)、召回和短缺信息。
健康统计
- get-health-statistics:查询 WHO 全球卫生观察站数据,如预期寿命、死亡率、疾病流行情况。
医学文献
- search-medical-literature:检索 3000 万篇以上 PubMed 文章,并附带证据分级。可选 question 或 rerank 参数会对命中结果重新排序,使真正回答问题的论文排在仅共享关键词的论文之上。
- rank-search-hits:对已有列表(标题 + 摘要)做同样的重新排序。仅用于检索排序,不构成诊断或建议。
- get-article-details:按 PMID 获取文章详细信息。
- search-google-scholar:设置 MONID_API_KEY 时通过 Monid TinyFish(research_paper)检索学术论文;否则使用 Semantic Scholar。
- search-medical-journals:查询顶级期刊(NEJM、JAMA、Lancet、BMJ、Nature Medicine)。
临床工具
- search-clinical-guidelines:查询医学组织的实践建议。
- search-clinical-trials:查询 ClinicalTrials.gov。
- list-sources:列出注册表适配器和专用工具来源(WHO、PubMed、RxNorm、Scholar、AAP)的完整目录,并说明每个来源由哪个 MCP 工具访问。
儿科来源
- search-pediatric-guidelines:通过 PubMed 查询 AAP 政策/临床报告,以及 Bright Futures。会丢弃域外网页命中;标签来自页面本身。
- search-pediatric-literature:查询主要儿科期刊的研究,支持类似医学文献的 question / rerank 参数。
- search-pediatric-drugs:查询带儿科标签的药品,含 NDC、生产商和 DailyMed URL。
可靠性与监控
- health-check:探测所有上游来源,报告延迟/状态、熔断器状态和缓存健康状况。
- get-cache-stats:查看缓存统计(命中率、内存占用、条目数)。
使用方式
在 Cursor 中安装(推荐)
项目提供一键安装链接。
手动安装
要求:Node.js 18+ 与 npm。 将配置加入 claude_desktop_config.json: macOS:~/Library/Application Support/Claude/claude_desktop_config.json Windows:%APPDATA%\Claude\claude_desktop_config.json 配置后重启 Claude Desktop。
容器运行
容器运行 HTTP 服务器,在容器内监听 3000 端口。使用 -p 3000:3000 将该端口发布到本机。可选 API 密钥在运行时传入,不会写入镜像。若本机 3000 端口已被占用,可发布其他主机端口并让客户端指向该端口,容器内进程仍使用 3000。 停止容器:docker stop 发送 SIGTERM,进程停止接受连接并退出。 将 MCP 客户端指向 http://127.0.0.1:3000/mcp。健康检查 URL 不是 MCP 会话;客户端需要发送 initialize,然后调用 tools/call。 可从 shell 传入可选密钥而不写入镜像。 当客户端掌管容器标准输入时,stdio 仍可用:保持 stdin 打开,不要分配终端。使用 -i 保持 stdin 打开以传递协议消息,不要加 -t。TTY 用于交互式终端,可能改变该协议使用的字节。日志保留在 stderr,避免混入 stdout。
示例操作
- 搜索药品信息
- 搜索医学文献(带证据分级),结果包含证据标签
- 运行健康检查
适用场景
- 在 Cursor、Claude Desktop 等 AI 编程环境中进行医学信息检索。
- 查询药品监管、命名、安全(不良事件、召回、短缺)信息。
- 获取 WHO 健康统计数据。
- 检索并排序 PubMed 等医学文献,查看证据分级标签。
- 查询临床指南与临床试验。
- 查询儿科指南、文献和带儿科标签的药品。
- 监控各数据来源可用性与缓存状态。
限制与注意事项
- 证据分级标签是根据标题和摘要自动生成的标签,并非独立核验的等级。
- 排序功能仅为检索排序,不构成诊断或建议。
- 工具提供来自权威来源的信息,但不能替代专业医疗建议、诊断或治疗,医疗决策应咨询合格的医疗专业人员。
- 上游 API 响应会通过 Zod schema 校验,若来源响应格式变化会记录警告但继续以原始数据运行,不会崩溃。
- 限流与熔断策略:按来源令牌桶限制(PubMed 无密钥 3/秒、有密钥 10/秒;FDA 4/秒;Google Scholar 0.2/秒);连续 3 次失败后熔断 60 秒;瞬时失败(429、5xx、网络错误)指数退避重试最多 2 次。
- 缓存响应返回时间 <10ms,API 调用约 800–1500ms,常见查询预期命中率 60%+。
- 设置 MONID_API_KEY 时 Scholar/AAP 搜索和 PMC HTML 抓取走 Monid TinyFish;无密钥时 Scholar 回退到 Semantic Scholar API(免费、结构良好、100 请求/秒、无需 API 密钥)。
- 可选 NCBI_API_KEY 环境变量可将 PubMed 从 3 请求/秒提升到 10 请求/秒。
- 技术栈:Node.js、TypeScript、MCP SDK;依赖 @modelcontextprotocol/sdk、superagent、zod、express、cors;平台 macOS、Windows、Linux。
- 安全与隐私:仅监听 localhost,服务器本地运行,无外部访问;不存储数据,所有查询实时进行,不写磁盘;进程隔离,医学数据留在本机;无需 API 密钥(NCBI 和 Monid 密钥可选)。
- 许可证:MIT License,详见 LICENSE.md。