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设备被归类为通用产品代码。该工具通过以下方式处理此问题:
- 同义词扩展 --将60个常用术语映射到FDA正式名称(ECG→ 机器人心电图仪→ 计算机控制仪器→ 光学相干断层扫描等)
- 组合拓宽 --尝试按长度排序的所有术语子序列,优先考虑2-3个术语组合(FDA名称的最佳选择)
- 平行场搜索 --搜索两者
device_name和definition每一步的字段 - 相关性评分 --防止低相关性匹配使搜索短路
- 510(k)网桥回退 --当分类搜索失败时,搜索510(k)设备名称以发现产品代码,然后在分类中查找这些代码
- 智能故障信息 --当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)桥
技术栈
- TypeScript,单文件(
index.ts) - 包子 或Node.js 18+
- @模型上下文协议/sdk
- 黄道带 用于输入验证
- 没有API密钥,没有env变量,没有数据库
- 麻省理工学院许可
