关于 fdarecords
fdarecords 是 openFDA API 的查询客户端,面向需要查找药品标签与申请记录、追踪医疗器械申报及分类的研究人员和开发者。它提供七种查询工具,并明确区分无匹配、暂时性错误和实验性信号筛查结果。
主要功能
- 01搜索药品标签及指定章节
- 02查询药品申请记录与编号
- 03按申报编号查找器械记录
- 04查询器械产品代码分类
- 05组合验证器械申请信息
- 06筛查标签中的真实世界证据信号
适用场景
- 01查找药品标签中的适应症信息
- 02从药品名称解析申请编号
- 03追踪器械申报记录及监管分类
- 04筛选需人工复核的证据信号
MCP 相关
提供七种 openFDA 查询工具,供 MCP 客户端检索药品标签、申请记录和器械申报及分类信息。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
7收录的工具列表 · 更新于 1 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| limit | integer | 否 | 要返回的最大结果数(可选)。 |
| query | string | 是 | 搜索查询文本。 |
| section | string | 否 | 本次调用使用的章节。 |
详细介绍
fdarecords
无需在 FDA 门户中费力查找记录。fdarecords 是一个小型 openFDA API 客户端,涵盖人们反复进行的两类查询:查找药品信息——标签文本、产品背后的 Drugs@FDA 申请,以及某个名称对应的申请编号;追溯医疗器械从提交编号到监管类别的信息。
七个工具负责完成这些工作。其中三个工具依赖原项目中的发现,值得提前了解:De Novo(DEN)编号记录在 510(k) 端点的 k_number 字段中,因为 openFDA 没有自己的 De Novo 端点;openFDA 中没有 HDE(H)编号,因此 H 编号查询会返回 null,不会假装能查到;验证链仍会为 H 编号报告 III 类,并明确标注这是监管推断,而非数据。
其中一个工具是研究辅助工具,不是权威答案:
screen_for_rwe_signals 会扫描药品标签中的真实世界证据词汇,并返回找到的内容。它仍处于实验阶段,尚未经过验证——请将其命中结果视为等待人工审核的候选项,绝不要视为结论。
配置
OPENFDA_API_KEY(可选)——openFDA API 密钥。设置后,密钥会作为api_key查询参数传递,并可提高速率限制。不设置也没有影响;所有工具都可在无需密钥的情况下使用。OPENFDA_BASE_URL(可选)——API 基础 URL。默认为https://api.fda.gov。
结果约定
所有工具都遵循相同的规则,值得明确说明,因为这些规则决定了如何理解“未找到”:
- 查询没有匹配项时,返回 JSON 文本
null。这包括 HTTP 404 和返回空结果列表的 200 响应。 - 遇到暂时性故障——超时、连接错误、429、5xx——会进行两次带退避的重试。如果仍然失败,工具会抛出
openfda transient failure: ...。暂时性故障绝不会被报告为未找到,因此null始终表示“没有此记录”,而不是“无法查询”。 - 遇到其他被拒绝的请求(其他 4xx)时,会立即抛出
openfda request error: HTTP <status>。 - 参数错误会在发出任何请求前报错:
<arg> must be a non-empty string,或limit must be an integer between 1 and 100。
单条记录查询工具会将第一条匹配记录作为 JSON 返回。两个标签工具会原样返回上游响应正文。
工具
search_drug_label— 搜索 SPL 标签文本中的query。传入section(例如indications_and_usage这样的 SPL 字段名),即可将搜索范围限制在该章节。可选参数limit,默认值为 10。lookup_drugsfda_application— 查询application_number对应的 Drugs@FDA 记录(NDA、BLA 和 ANDA 编号均可)。resolve_drug_to_application— 根据品牌名或通用name查找相关申请编号,并以去重、排序后的字符串 JSON 数组返回。screen_for_rwe_signals— 进行上述实验性扫描。可选参数query可在固定信号集合中添加一个搜索词;可选参数limit,默认值为 10。lookup_device_submission— 查询submission_number对应的器械记录。K 和 DEN 编号搜索 510(k) 端点;P 编号搜索 PMA 端点;H 编号返回null(openFDA 中没有);其他编号会因前缀无法识别而被拒绝。classify_device_product_code— 根据product_code查询器械类别和医疗专科。validate_device_application— 一次调用完成整条查询链:从submission_number经由产品代码,查到device_class、medical_specialty和device_name,并通过device_class_source说明类别的来源。H 编号会直接返回带标签的推断结果;没有产品代码的记录会合并返回"device_class": null。
端点来源
GET /drug/label.json 是 openFDA
API 索引中固定的路径。其余路径遵循相应端点系列中记录的
相同模式,并标注为基于模式推导,而非固定路径:
GET /drug/drugsfda.json— 基于模式推导GET /device/510k.json— 基于模式推导GET /device/pma.json— 基于模式推导GET /device/classification.json— 基于模式推导
有三种行为是为此客户端组合而成,
并在代码中作了相应标注:resolve_drug_to_application
如何合并其品牌名称和通用名称查询、信号词集合
screen_for_rwe_signals 搜索的内容,以及
validate_device_application 根据两条记录组合出的结构。
CLI
每个工具都是一个子命令,接受一个 JSON 参数字符串:
npx @reneturcios/fdarecords search_drug_label '{"query":"aspirin"}'
npx @reneturcios/fdarecords search_drug_label '{"query":"chest pain","section":"indications_and_usage","limit":25}'
npx @reneturcios/fdarecords lookup_drugsfda_application '{"application_number":"NDA021457"}'
npx @reneturcios/fdarecords resolve_drug_to_application '{"name":"Tylenol"}'
npx @reneturcios/fdarecords screen_for_rwe_signals '{"query":"diabetes"}'
npx @reneturcios/fdarecords lookup_device_submission '{"submission_number":"K123456"}'
npx @reneturcios/fdarecords classify_device_product_code '{"product_code":"ABC"}'
npx @reneturcios/fdarecords validate_device_application '{"submission_number":"H123456"}'
npx @reneturcios/fdarecords --version
输出为工具的结果文本(null、一条记录、
一个数组或上游响应正文)。退出代码:成功时为 0,
运行时出错(包括验证失败或上游失败)时为 1,用法错误时为 2。
MCP 服务
npx -y @reneturcios/fdarecords mcp
MCP 客户端配置:
{
"mcpServers": {
"fdarecords": {
"command": "npx",
"args": ["-y", "@reneturcios/fdarecords", "mcp"]
}
}
}
Docker
docker run -i ghcr.io/cloudcorprecords/fdarecords
docker run --rm ghcr.io/cloudcorprecords/fdarecords lookup_device_submission '{"submission_number":"DEN200001"}'
开发
npm install
npm run build # tsc -> dist/
npm test # tsx --test test/*.test.ts (fake fetch only, no network)
npm run dev # run the CLI from source
许可证
MIT — Copyright (c) 2026 Rene Turcios
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。