关于 openFDA Regulatory Metadata
openFDA Regulatory Metadata 是供研究者将 FDA 药品、生物制品和器械标识符解析为监管记录的 MCP 服务。工具专注于申请查询和器械分类,并明确区分暂时性故障与记录缺失。
主要功能
- 01将药品名称解析为申请编号
- 02查询 Drugs@FDA 申请记录
- 03解析器械提交编号及分类
- 04搜索药品标签文本
- 05区分记录缺失与暂时故障
适用场景
- 01查询产品对应的 NDA 或 BLA
- 02根据提交编号识别器械类别
- 03为 RWE 名录检索监管元数据
MCP 相关
向 MCP 客户端提供基于 openFDA 的药品和生物制品元数据、器械提交与分类以及标签搜索工具。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
7收录的工具列表 · 更新于 2 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| skip | integer | 否 | 分页偏移量。 |
| term | string | 是 | 搜索词。多词短语请加引号,例如 '"natural history"'。 |
| limit | integer | 否 | 每页最大结果数(1–1000,默认值为 100)。 |
| section | any | 否 | 可选的 SPL 章节,用于限定搜索范围(例如 "clinical_studies")。 默认会同时搜索与 RWE 相关的章节。 |
详细介绍
openFDA MCP
一个 MCP 服务,通过 openFDA API 提供 FDA 监管元数据(药品、生物制品和医疗器械)。
由 Black Swan Causal Labs 构建,作为真实世界证据(RWE)案例名册的标识符解析层:给定 FDA 申请编号或产品名称,即可解析为权威监管元数据。
为什么开发这个工具
还有其他 openFDA MCP 服务,其中有几个覆盖范围更广。本服务刻意聚焦:它正是用于解析某个已发表 RWE 数据集中的申请编号的工具,其存在的目的就是让该数据集能够注明生成它所用的工具。
这比听起来更重要。BLA 125123/2058 是否解析为某个特定产品,或 DEN160026 是否解析为某个特定器械类别,都是由一段软件做出的判断,而不同的封装可能会产生不同的名册。“我们使用了 openFDA”不足以作为方法说明;“openfda-mcp v0.1.0” 才足够。如果你将其用于研究,请固定版本。
与通用 openFDA 客户端相比,本工具的实际优势在于器械部分:将 CDRH 申报编号解析为风险类别,需要经过三步链路(编号 → 产品代码 → 分类),其中有两个不易察觉的陷阱,本工具都已处理。
工具
药品和生物制品(/drug/* — CDER、CBER)
| 工具 | 用途 |
|---|---|
search_drug_label | 搜索 SPL 标签文本,可选择限定在某个章节 |
lookup_drugsfda_application | 查询 NDA/BLA/ANDA 编号对应的 Drugs@FDA 记录 |
resolve_drug_to_application | 品牌名或通用名 → 申请编号 |
screen_for_rwe_signals | 实验性。 扫描标签以查找 RWE 信号 |
器械(/device/* — CDRH)
| 工具 | 用途 |
|---|---|
lookup_device_submission | K / DEN / P / H 编号 → 器械记录 |
classify_device_product_code | 产品代码 → 器械类别 + 医疗专科 |
validate_device_application | 完整链路:编号 → 类别、专科、类别 |
安装
pip install openfda-mcp
添加到你的 MCP 客户端配置中:
{
"mcpServers": {
"openfda": {
"command": "openfda-mcp",
"env": { "OPENFDA_API_KEY": "${OPENFDA_API_KEY:-}" }
}
}
}
API 密钥为可选项。 不使用密钥时,openFDA 每分钟允许 40 次请求,每天允许 1,000 次,足以满足交互式使用需求。免费密钥可将限额提高到每分钟 240 次、每天 120,000 次,批量扫描时值得申请。
两项值得了解的发现
这两项发现均通过实证得出,FDA 文档并未明确说明。
De Novo 批准记录位于 510(k) 端点。 DEN###### 编号存储在 /device/510k 的 k_number 字段中。没有 De Novo 端点,因此寻找该端点会让人误以为 De Novo 编号无法解析。实际上可以解析。
openFDA 中完全没有 HDE 编号。 510(k) 和 PMA 端点都不包含 H######,因此无法检索产品代码,也就无法获取分类。本服务仍会根据法规推断为其报告 device_class: "III":根据定义,HDE 是为原本需要 PMA 的器械设立的途径。medical_specialty 仍为 null,因为该信息确实无法获取;device_class_source 会说明两者的来源。
瞬时故障绝不会被静默处理
确实不存在记录与请求失败是两回事,本软件包会将它们明确区分:
- 未找到(HTTP 404,或 HTTP 200 但没有结果)→ 返回
None;可以安全缓存 - 瞬时故障(超时、连接错误、429、5xx)→ 退避重试,之后抛出
OpenFDATransientError;绝不缓存 - 请求被拒绝(其他 4xx)→ 抛出
OpenFDARequestError
这是针对真实缺陷的直接改进:早期版本会吞掉所有异常并返回 None,因此某个申请编号的一次读取超时会被缓存为确实未找到,导致该记录中的两个字段被静默留空数周。缓存的故障与真实缺失无法区分,因此这是最糟糕的一类静默数据丢失。
关于 screen_for_rwe_signals
它未经验证。发现性扫描没有真实情况的标准答案,而且在最强匹配项之下,结果大多是标签中使用了“registry”一词、但含义无关的应用。请将其输出视为供人工审核的候选项,而非发现结果,也不是可报告的数量。针对留出的已知案例集验证召回率仍是待完成的工作。
开发
pip install -e ".[dev]"
pytest # unit tests, offline
pytest -m live # live checks against api.fda.gov
实时测试会对照已知的正确样例断言(K203571 → II 类眼科,DEN160026 → II 类免疫学,BLA761180 → LEO Pharma),因此 FDA 方面的变更会以测试失败的形式显现,而不会悄然导致数据错误。
许可证
MIT
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。