FDA设备MCP服务器

一个将公开的openFDA设备API封装为5个工具的MCP服务器,用于医疗器械监管研究,无需API密钥。

  • by prahlaadr
  • TypeScript
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 prahlaadr/fda-devices-mcp

使用说明

FDA设备MCP服务器

一个封装公共数据的MCP服务器 openFDA设备API 医疗器械监管研究的5个工具。不需要API密钥。

向Claude询问有关FDA器械分类、510(k)批准、PMA批准、召回和不良事件的自然语言问题,并通过源链接获得结构化结果。

安装

需要 包子 或Node.js 18+。

# Clone and install
git clone https://github.com/prahlaadr/fda-devices-mcp.git
cd fda-devices-mcp
bun install  # or: npm install

克劳德代码

claude mcp add fda-devices bun run $(pwd)/index.ts --scope user
# Restart Claude Code

克劳德桌面版

添加到您的配置(~/Library/Application Support/Claude/claude_desktop_config.json 在macOS上, %APPDATA%\Claude\claude_desktop_config.json 在Windows上):

{
  "mcpServers": {
    "fda-devices": {
      "command": "bun",
      "args": ["run", "/absolute/path/to/fda-devices-mcp/index.ts"]
    }
  }
}

替换 /absolute/path/to/ 使用您的实际克隆路径。添加后重新启动Claude Desktop。

工具

工具 目的 关键输入
classify_device 查找产品代码、设备类别、法规编号 query 或 product_code
search_510k 查找510(k)个许可/等效器械 product_code, k_number, applicant
search_pma 查找PMA批准(III类) product_code, pma_number, applicant
search_recalls 查找设备召回 product_code, recalling_firm
search_adverse_events 搜索MAUDE不良事件报告 product_code, brand_name, manufacturer

查询示例

直接问克劳德——它会选择正确的工具:

  • “脉搏血氧仪属于哪一类?”
  • “我正在构建一个可穿戴心电图贴片——我的调节途径是什么?”
  • “查找血压监测仪最近的510(k)秒”
  • “飞利浦最近有召回任何设备吗?”
  • “向我展示Intuitive Surgical da Vinci的不良事件”
  • “AI放射学软件的产品代码是什么?”
  • “查找510(k)K250507”

AI/SaMD设备搜索

这 classify_device 该工具内置了对人工智能和软件作为医疗设备查询的支持。它将非正式术语映射到FDA的正式分类名称,并在仅进行分类搜索还不够时使用510(k)设备名称作为桥梁。

你问 它找到了
“可穿戴心电图贴片” MWJ-心电图机,动态
“手术机器人” NAY--计算机控制仪器
“骨折检测AI” QBS——骨折放射学CAD软件
“胃肠道息肉检测AI” QNP--胃肠道病变软件检测
“低射血分数心电图AI” QLL——左心室射血分数筛查工具
“HeartFlow” PJA——冠状动脉生理模拟软件
“Aidoc公文包” QAS--放射学计算机辅助分型软件

运作原理

搜索策略(classify_device)

美国食品药品监督管理局使用正式的倒置名称(“血氧计,脉搏”而不是“脉搏血氧计”),许多AI/SaMD设备被归类为通用产品代码。该工具通过以下方式处理此问题:

  1. 同义词扩展 --将60个常用术语映射到FDA正式名称(ECG→ 机器人心电图仪→ 计算机控制仪器→ 光学相干断层扫描等)
  2. 组合拓宽 --尝试按长度排序的所有术语子序列,优先考虑2-3个术语组合(FDA名称的最佳选择)
  3. 平行场搜索 --搜索两者 device_name 和 definition 每一步的字段
  4. 相关性评分 --防止低相关性匹配使搜索短路
  5. 510(k)网桥回退 --当分类搜索失败时,搜索510(k)设备名称以发现产品代码,然后在分类中查找这些代码
  6. 智能故障信息 --当AI/SaMD查询完全失败时,建议使用常见的产品代码(QIH、QDQ、MYN等)

每个响应包括

  • 准确的API查询URL(可复制、可引用)
  • FDA访问每条记录的数据源链接
  • meta.last_updated 来自openFDA
  • 美国食品药品监督管理局免责声明

源链接

类型 示例
510(k) accessdata.fda.gov/.../cfpmn/pmn.cfm?ID=K032161
PMA accessdata.fda.gov/.../cfpma/pma.cfm?id=P170019
分类 accessdata.fda.gov/.../cfpcd/classification.cfm?ID=DXN
召回 accessdata.fda.gov/.../cfres/res.cfm?id=212811
毛德 accessdata.fda.gov/.../cfmaude/detail.cfm?mdrfoi__id=19151705
eCFR ecfr.gov/current/title-21/.../section-870.2700

设计决策

  • URL构造 --手动构建,不通过URLSearchParams。URLSearchParams编码 + 作为 %2B 这打破了美国食品药品监督管理局的 +AND+ 语法。
  • 日期格式 --端点之间不一致(510k/PMA/召回使用 YYYY-MM-DD,不良事件使用 YYYYMMDD).工具接受 YYYY-MM-DD 总是在内部转换。
  • 召回严重性差距 --召回终点没有严重性分类。来源链接包括在FDA页面上可见严重程度的地方。
  • MAUDE警告 --每个不良事件反应都包括对未经证实、自我报告的数据性质的强制性警告。

局限性

  • 无谓词设备提取(需要对510(k)摘要文档进行PDF解析)
  • 一些AI/SaMD设备的品牌名称与其分类没有关键字重叠(例如“SKOUT系统”→ QNP)
  • 速率由openFDA限制为240次请求/分钟(无API密钥)
  • 分类数据库有大约6000个通用类别——非常具体的查询可能需要510(k)桥

技术栈