关于 Openfda
Openfda 是面向 Agent 和研究人员的 MCP 服务,可查询 FDA 药品及相关安全数据。它涵盖 FAERS 报告、审批、标签、召回、短缺和警告信,并支持网关或本地 stdio 连接。
主要功能
- 01搜索 FAERS 不良事件报告
- 02统计反应并分析安全信号
- 03查询药品审批和标签
- 04查找召回、短缺和警告信
适用场景
- 01查看某种药品的事件报告
- 02比较反应统计和安全信号
- 03核查审批历史或标签内容
- 04查询药品召回和短缺情况
MCP 相关
通过 Pipeworx 网关端点或本地 stdio 服务向 MCP 客户端提供 OpenFDA 数据工具。网关连接还包含 Pipeworx 共享元工具。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://gateway.pipeworx.io/openfda/mcpclaude mcp add --transport http pipeworx-io-openfda https://gateway.pipeworx.io/openfda/mcp{"mcpServers":{"pipeworx-io-openfda":{"type":"http","url":"https://gateway.pipeworx.io/openfda/mcp"}}}在 Cursor 中打开{"servers":{"pipeworx-io-openfda":{"type":"http","url":"https://gateway.pipeworx.io/openfda/mcp"}}}在 VS Code 中打开{"mcpServers":{"pipeworx-io-openfda":{"type":"http","url":"https://gateway.pipeworx.io/openfda/mcp"}}}{"mcpServers":{"pipeworx-io-openfda":{"serverUrl":"https://gateway.pipeworx.io/openfda/mcp"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
工具
详细介绍
OpenFDA — FDA 药品、器械和食品数据
美国食品药品监督管理局(FDA)的开放数据平台。本工具包涵盖药品相关数据:不良事件报告和安全性信号工具(FAERS 搜索、事件计数、失衡分析/ROR-PRR、反应概况、趋势)、药品和新药审批(Drugs@FDA、按公司查询申请历史)、药品标签、药品和食品召回、药品短缺及短缺变化、完整回应函、警告函,以及跨来源上市后风险概况复合工具。这是查询已向 FDA 报告或由 FDA 发布的信息的官方来源。免费,无需认证(有速率限制)。
属于 Pipeworx — 一个将 AI Agent 连接到 1819+ 个实时数据源的 MCP 网关。这是独立、非官方的集成,与上游提供方无关联,未获其认可,也非由其发布。
为什么这对 AI Agent 很重要
药品安全问题可以在这里找到答案。不良事件数量、标签变更、审批时间线、召回情况——均为结构化数据。要全面了解药品,可搭配 RxNorm(规范 ID)和 ClinicalTrials.gov(临床试验)使用。
常见工作流:
- 查询某种药品的不良事件。 “Ozempic 的报告” →
fda_drug_events({query: "ozempic"})→ 单条安全性报告和计数。 - 汇总反应类别。 “Ozempic 报告最多的反应” →
fda_event_counts({query: "ozempic", count_field: "patient.reaction.reactionmeddrapt.exact"})→ 按 MedDRA 编码的计数。 - 审批历史。 “Ozempic 何时获批?适用于什么用途?” →
fda_drug_approvals({query: "ozempic"})。 - 召回。 “Ozempic 有召回吗?” →
fda_drug_recalls({query: "ozempic"})。 - 标签内容。 “FDA 标签对禁忌症有何说明?” →
fda_drug_labels({query: "ozempic"})。 - 查询某公司的所有申请。 “Eli Lilly 提交过的所有 Drugs@FDA 申请” →
fda_applications_by_cik({cik_or_ticker: "LLY"})。该工具通过 SEC 解析公司,并汇总其以各种sponsor_name拼写提交的申请——使用猜测的申办方名称调用fda_drug_approvals前,请先查看下方的注意事项。
pharma_drug_profile 和 pharma_safety_report 复合工具使用本工具包。
认证
公开访问,无需密钥。匿名访问限制约为每分钟 240 次请求、每天 1,000 次,按 IP 计算——因此,共享同一出口地址的所有调用方共用每天 1,000 次的额度,而非各自拥有 1,000 次。
api.fda.gov 运行于 api-umbrella,与 api.data.gov 使用相同的技术栈,因此 api.data.gov 密钥可用于认证,并将每日限额提升至 120,000 次。Pipeworx 会注入平台密钥(PLATFORM_DATAGOV_KEY);也可通过 _apiKey 使用自己的密钥,此时调用会占用你的配额。可在 https://open.fda.gov/apis/authentication/ 免费注册。
如果密钥遭拒或被撤销,调用不会失败——由于 openFDA 完全可以在不使用密钥的情况下访问,本工具包会在匿名模式下重试一次。
数据集
| 数据集 | 端点系列 | 覆盖范围 |
|---|---|---|
| 药品不良事件(FAERS) | fda_drug_events | 1968 年至今,约 2000 多万份报告 |
| 药品审批 | fda_drug_approvals | 1939 年至今(NDA/BLA/ANDA) |
| 药品标签 | fda_drug_labels | 当前 SPL 标签 |
| 药品召回 | fda_drug_recalls | I/II/III 类执法行动 |
| 器械不良事件 | (独立工具) | MAUDE 数据库 |
| 食品召回 | (独立工具) | FSIS + FDA 召回 |
| 警告函 | fda_warning_letters | 自 2021-01 起在 fda.gov 发布的 3,680 份警告函(非 api.fda.gov);另包括 FDA 的合规行动档案中可追溯至 2010 年的记录,适用于在该时间段内没有警告函的企业 |
常见注意事项
- 报告并不等于独立患者。 一次住院可能会产生多份 FAERS 报告。
total字段表示报告数,而不是遭受不良事件的个体数。 - 这并不意味着存在因果关系。 FAERS 报告将药物与时间上相关的事件关联起来;这并不能证明该药物导致了该事件。措辞请务必谨慎。
- 品牌名与通用名。 搜索“ozempic”会找到标记为 Ozempic 的报告。搜索“semaglutide”会找到任何司美格鲁肽产品的报告。两者可能不同,应根据用户意图决定搜索哪一个。
- 查询语法由 FDA 规定,并非我们制定。 OpenFDA 使用按字段查询的 Lucene 风格搜索。Pipeworx 工具说明中列出了语法。引号很重要。
- 反应名称采用 MedDRA 词序。 自然语言表述可能不同于 FDA 存储的首选术语——
ISCHAEMIC OPTIC NEUROPATHY以OPTIC ISCHAEMIC NEUROPATHY归档。按反应筛选的工具会针对两词和三词短语重试其他词序,并在reaction_resolved中说明解析出的术语。 - 反应筛选器只匹配一个完整的首选术语。 它们不进行子串或词元匹配,因此
NEUROPATHY只会返回归档在该精确术语下的报告(约 1,700 份),而不是所有包含该词的术语(约 117,000 份)。这是有意为之:比例失衡表需要统一的病例定义,而不是临时分组。若要查找 FDA 实际存储的术语,请按patient.reaction.reactionmeddrapt.exact计数。 - 未匹配的术语会明确报告,不会静默归零。 如果没有任何词序匹配,工具会返回
reaction_resolution: "not_a_meddra_preferred_term",并附上提示。应将其视为“筛选条件未匹配”,绝不能视为“不存在报告”。 - 警告信搜索默认匹配收件方。
fda_warning_letters基于 fda.gov 的 solr 索引,该索引涵盖每封信的完整正文以及公司列,因此原始全文查询回答的是“提及 X 的信件”,而不是“发给 X 的信件”。对于具名公司,这两者是截然不同的说法,而且这种差异确实出现过:search: "Merck"恰好返回一封信,收件方是 Elanco Animal Health,信中只是提到了 Merck。现在,search会筛选信件所针对的公司,每一行都带有matched_field(company或letter_text),而match: "fulltext"则用于选择正文搜索。收件方搜索没有结果时,会返回found: false以及全文匹配数,因此“没有信件”不会与“我们没有查找”混为一谈。 - 已发布的警告信列表采用滚动五年窗口,过去曾因此让人误以为“这家公司没有问题”。 fda.gov 的视图包含从 2021-01-05 至今的 3,680 封信,涵盖所有中心——CDER、CFSAN、CTP、CVM 和 Human Foods 均在其中,因此排除条件只有信件年份,而非主题。Hospira 的真实 CGMP 信件日期为 2017-02-14,查询却返回
candidates_scanned: 0,并自信地表示“完全没有与 "Hospira" 匹配的警告信”(fleet #2123)。现在,当收件方搜索在该窗口内没有结果时,工具会查询 FDA Data Dashboard 的合规行动档案,该档案记录了至少可追溯至 2010 年的同类执法事件。这些记录包含公司、地点、产品类型和发布日期,但没有主题行,也没有信件 URL——FDA 不会重新发布这么早的信件正文——因此每条记录和响应本身都会带有source,档案记录也绝不会与已发布的信件混在一起。即使搜索成功,响应仍会包含archive_note,因为某家公司有一封 2024 年的信件和十封 2015 年的信件时,本来就只应在这里计为 1 封。若未找到结果,响应会包含archive_checked,以区分“我们查了两处但都没找到”和“档案无法访问”。 - 宽泛词语的警告信计数是下限。 收件方匹配会分页读取全文结果集,最多扫描 600 个候选项。超过该数量时,响应会设置
scan_complete: false并提供scope_note,而total_matching是下限——请缩小搜索词范围以获取精确计数。 - 事件到报告的延迟。 FAERS 报告往往比事件晚几个月,有时甚至几年。“最近 30 天”视图具有误导性;随着报告陆续提交,近期计数还会继续增长。
sponsor_name没有公司 ID,且采用完全匹配,而非全文匹配。fda_drug_approvals中类似search=sponsor_name:"ELI LILLY AND COMPANY"的查询只会匹配该字面字符串——Eli Lilly 的实际申请分散在“LILLY”(116 条)、“ELI LILLY AND CO”(22 条)、“ELI LILLY CO”(4 条)和“LILLY RES LABS”(1 条)之下,SEC 注册名称与这些名称都不匹配。请使用fda_applications_by_cik(输入 CIK 或股票代码,汇总所有sponsor_name形式),而不是猜测拼写。
快速开始
添加到你的 MCP 客户端(Claude Desktop、Cursor、Windsurf 等):
{
"mcpServers": {
"openfda": {
"url": "https://gateway.pipeworx.io/openfda/mcp"
}
}
}
此端点实际提供的内容
https://gateway.pipeworx.io/openfda/mcp 上的 tools/list 会返回上表中的工具,以及 Pipeworx 共享元工具——ask_pipeworx、
discover_tools、search_within、remember/recall 和网关范围内的其他工具。因此,你看到的工具数量会多于表中的数量:目前,单个工具包端点除了列出该工具包自己的工具外,还会列出大约 30 个共享工具。连接的 initialize 响应会说明其确切范围,是当天适用情况的权威依据。
这是有意设计的,并非意外的多路复用。元工具可让范围受限的连接回答本工具包未涵盖的问题——通过 ask_pipeworx 跨整个目录进行路由——而无需添加第二个 MCP 服务。目前无法挂载不含这些元工具的工具包端点;如果额外的架构定义耗费的上下文超过路由带来的收益,请连接一次完整网关,而不是连接多个工具包端点。
或者,连接完整的 Pipeworx 网关,直接列出每个工具包的所有工具,而不只是当前工具包的工具:
{
"mcpServers": {
"pipeworx": {
"url": "https://gateway.pipeworx.io/mcp"
}
}
}
两个 URL 都连接到同一网关和相同的 1819+ 个数据源。唯一的区别是直接列出哪个工具包的工具;从任一端点使用 ask_pipeworx 都能访问所有工具。
没有 MCP 客户端?通过 HTTP 调用
curl -X POST https://gateway.pipeworx.io/v1/tools/fda_drug_events \
-H 'Content-Type: application/json' \
-d '{"query":"patient.drug.medicinalproduct:\"OZEMPIC\""}'
首次调用无需账户。检查任意工具:GET https://gateway.pipeworx.io/v1/tools/fda_drug_events。查找工具:使用 {"query":"..."} 向 POST https://gateway.pipeworx.io/v1/tools/search_packs 发送请求。
独立运行(无需网关账户)
此软件包也可作为本地 stdio MCP 服务运行——无需 Pipeworx 账户,也无需经由网关往返:
{
"mcpServers": {
"openfda": {
"command": "npx",
"args": ["-y", "@pipeworx/mcp-openfda"]
}
}
}
也可以直接运行它,确认服务能够启动:
npx -y @pipeworx/mcp-openfda
它通过 stdin/stdout 使用 MCP 通信,并响应 initialize/tools/list/tools/call,但仅限此工具包的工具——不包含上述网关连接提供的任何共享元工具。数据源相同,工具相同,但没有 ask_pipeworx 路由。
使用 ask_pipeworx
你也可以用通俗英语提问,而不是直接调用工具——这既适用于上面的工具包端点,也适用于完整网关:
ask_pipeworx({ question: "your question about Openfda data" })
网关会自动选择合适的工具并填入参数。
更多信息
许可证
MIT
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。