mcpField
O
openFDA Regulatory Metadata

openFDA Regulatory Metadata

本地服务
github.com/Black-Swan-Causal-Labs法律与政务012 周前更新

关于 openFDA Regulatory Metadata

openFDA Regulatory Metadata 是供研究者将 FDA 药品、生物制品和器械标识符解析为监管记录的 MCP 服务。工具专注于申请查询和器械分类,并明确区分暂时性故障与记录缺失。

主要功能

  1. 01将药品名称解析为申请编号
  2. 02查询 Drugs@FDA 申请记录
  3. 03解析器械提交编号及分类
  4. 04搜索药品标签文本
  5. 05区分记录缺失与暂时故障

适用场景

  1. 01查询产品对应的 NDA 或 BLA
  2. 02根据提交编号识别器械类别
  3. 03为 RWE 名录检索监管元数据

MCP 相关

向 MCP 客户端提供基于 openFDA 的药品和生物制品元数据、器械提交与分类以及标签搜索工具。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"com-blackswancausallabs-openfda": {
"command": "uvx",
"args": [
"openfda-mcp"
]
}
}
}
启动命令uvx openfda-mcp

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypiopenfda-mcp0.1.0

工具

7

收录的工具列表 · 更新于 2 周前

参数类型必填说明
skipinteger否分页偏移量。
termstring是搜索词。多词短语请加引号,例如 '"natural history"'。
limitinteger否每页最大结果数(1–1000,默认值为 100)。
sectionany否可选的 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_submissionK / 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

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。