@cyanheads/openfda-mcp-server

中文文档
0.9.1发布于 2026/10/27Apache-2.0TypeScriptES Module近 30 天下载 2143

通过OpenFDA查询FDA关于药物,食物,设备的数据并召回. (原始内容存档于2012-10-12). STIO or Streamable HTTP.

中文使用文档
文档目录30 节
  1. 概览
  2. 工具
  3. 能力参考
  4. openfda_drug_profile 工具
  5. openfda_search_adverse_events 工具
  6. openfda_search_animal_events 工具
  7. openfda_search_drug_shortages 工具
  8. openfda_search_tobacco_reports 工具
  9. openfda_search_recalls 工具
  10. openfda_count_values 工具
  11. openfda_describe_fields 工具
  12. openfda_get_drug_label 工具
  13. openfda_search_drug_approvals 工具
  14. openfda_search_device_clearances 工具
  15. openfda_lookup_ndc 工具
  16. openfda_dataframe_describe 工具
  17. openfda_dataframe_query 工具
  18. openfda_dataframe_drop 工具
  19. 特征
  20. 开始
  21. 配置
  22. 本地散装镜像
  23. 运行服务器
  24. 地方发展
  25. 夹克
  26. 项目结构
  27. 发展指南
  28. 数据属性
  29. 捐款
  30. 许可证

@cyanheads/openfda-mcp-服务器

通过OpenFDA查询FDA关于药物,食物,设备的数据并召回. (原始内容存档于2012-10-12). STIO or Streamable HTTP.

15 个工具

Version License Docker MCP SDK npm TypeScript Bun

Install in Claude Desktop Install in Cursor Install in VS Code

Framework


概览

FDA关于药物,食品,设备的数据,并从openFDA公共API中召回. 搜索不良事件,召回,药品批准,设备审核;查询NDC代码和药品标签;跨越任何终点的汇总字段计数.

工具

工具说明
openfda_drug_profile1个药品名称-林业发展局综合概况:身份、标签、不良事件、召回、批准、短缺
openfda_search_adverse_events各种药物、食品和器具的搜索不良事件报告
openfda_search_animal_events兽药和装置的搜索不良事件报告
openfda_search_drug_shortages按状况、供应情况、治疗类别、制造商分列的搜索FDA药物短缺记录
openfda_search_tobacco_reports烟草产品、电子香烟和蒸发装置的搜索问题报告
openfda_search_recalls搜查执法报告和跨毒品、食品和装置的召回行动
openfda_count_values所有打开的FDA端点上的任何字段的集合和计数独有值
openfda_describe_fields返回可搜索的已打开的 FDA 端点的字段路径, 按类别分组
openfda_get_drug_label查阅FDA药品标签(包装插入/SPL文件)
openfda_search_drug_approvals为 NDA/ ANDA 申请批准搜索药物@ FDA 数据库
openfda_search_device_clearances搜索FDA设备预售通知:510(k)批准和PMA批准
openfda_lookup_ndc在《国家药品法典》目录中查找毒品
openfda_dataframe_describe列表表格和在 DataCanvas 上设置的列图
openfda_dataframe_query运行只读的 SQL 运行在 DataCanvas 上设置的结果集
openfda_dataframe_drop删除一个在 DataCanvas 上播放的表格( 默认关闭 )

能力参考

openfda_drug_profile 工具

  • 一个 drug 名称、品牌或通用名称,一次确定为身份(通用名称、NDC、RxCUI、SPL套用ID);召回、批准和短缺 meta.fanOutKey - 当名称是已解决的通用名称的成分时,输入名称; meta.resolvedVia (单位:千美元)label, (中文(简体) ), ndc, (中文(简体) ), none) 命名源,并且偏好一种单一依赖性产品而不是组合
  • 检索和核准还打开FDA从未统一过的搜索记录(product_description, (中文(简体) ), products.active_ingredients.name(三); recalls_total 给比对数,在最新的5个调用
  • 节 label, (中文(简体) ), adverse_events, (中文(简体) ), recalls, (中文(简体) ), approval,以及 shortage 做最好的,回来 null (或为空) recalls失事时; degraded[] 命名上游未成功子干流的每个区域, 因此列表的区段未知而非缺失
  • 权限、配置和取消失败, 整个调用失败, 而不是贬低一节

openfda_search_adverse_events 工具

  • category (单位:千美元)drug, (中文(简体) ), food, (中文(简体) ), device)选择终点及其记录计划;每页最多1000个记录
  • 可排序日期字段按类别不同: receivedate (药物), date_created (粮食), date_received (device); 其它类的字段失败为 query_error
  • 文本输出解码药物管理路线、反应结果和病人年龄组编码(原始值外)(via oral (048), (中文(简体) ), fatal (5), (中文(简体) ), elderly (6));结构输出保存代码

openfda_search_animal_events 工具

  • 可选 search 超过兽医报告,例如:. animal.species, (中文(简体) ), drug.active_ingredients.name, (中文(简体) ), reaction.veddra_term_name, (中文(简体) ), serious_ae; 每页最多1000个记录
  • 品牌和制造商名称被掩盖为 MSK 在每一个记录上, 搜索的活性成分; drug.manufacturer.registration_number 仅限一次核准
  • 记录载有动物物种、品种、年龄和重量、药物和路线、VEDDRA反应术语和结果

openfda_search_drug_shortages 工具

  • 可选 search 结束 status (单位:千美元)Current 编号 : To Be Discontinued 编号 : Resolved, (中文(简体) ), therapeutic_category, (中文(简体) ), generic_name,或 company_name; 每页最多1000个记录
  • 每张唱片 openfda 块载 brand_name, (中文(简体) ), product_ndc,以及 rxcui 用于链入 openfda_get_drug_label 或者说 openfda_lookup_ndc

openfda_search_tobacco_reports 工具

  • 可选 search 结束 tobacco_products, (中文(简体) ), reported_health_problems, (中文(简体) ), reported_product_problems,或 nonuser_affected; 每页最多1000个记录
  • 报告带有问题阵列 number_tobacco_products, (中文(简体) ), number_health_problems,以及 number_product_problems 计数

openfda_search_recalls 工具

  • category (单位:千美元)drug, (中文(简体) ), food, (中文(简体) ), device+) 加上 (中文(简体) ) endpoint数字 : enforcement (默认,每类)或 recall (只有设备;其他类别失效) recall_endpoint_non_device; 每页最多1000个记录
  • 执法记录携带 recall_number, (中文(简体) ), classification (第I/II/III类)和 status; 设备召回记录携带 product_res_number 财务报告和审定财务报表 recall_status 相反,没有危险分类

openfda_count_values 工具

  • endpoint (20个开放FDA终点中的任何一个),a count 字段表达式和可选 search; 返回最多 1000 个顶名词( 默认 100), 按数排序; 一个日期字段返回每个不同的名词 YYYYMMDD 日期,排名相同
  • truncated 旗帜 更明确的术语过去 limit,除1000个最长期限外,通知中说无法知道完整性(一个日期计数在任意限度上是准确的,因为openFDA每个日期发送);一个表达式 OpenFDA不能合并为: not_aggregatable (拿着 countAs 窗体从 openfda_describe_fields(中文(简体) )
  • 总是运行在活的 API 上, 即使大宗镜像启用

openfda_describe_fields 工具

  • endpoint:相同的20个终点 openfda_count_values 接受
  • 按类别分组的字段路径,每条 type,描述,和 countAs (经核实的计数表达式,或 null ),加 queryTips 引文和/或, .exact和日期范围

openfda_get_drug_label 工具

  • 需求 search 标签字段 (openfda.brand_name, (中文(简体) ), openfda.generic_name, (中文(简体) ), openfda.manufacturer_name, (中文(简体) ), set_id(三); limit 默认为 5, 最大 1000
  • 24 000字节内含预算回报的一页 kind: "outline" (区名和大小,最大第一)而不是标签文本;用 sections: [...] 获取这些章节加身份元数据(openfda, (中文(简体) ), set_id, (中文(简体) ), id, (中文(简体) ), effective_time, (中文(简体) ), version),即使超出预算,也全部返回
  • *_table 区域在文本输出中渲染为 Markdown 表格; 结构化结果保留原始的 SPL 标记

openfda_search_drug_approvals 工具

  • 可选 search 结束 openfda.brand_name, (中文(简体) ), sponsor_name (存储大写,所以小写引用的值与无匹配), submissions.submission_type,或 submissions.review_priority; 每页最多1000个记录
  • 记录携带 application_number, (中文(简体) ), sponsor_name, (中文(简体) ), products[],应用程序已满 submissions[] 历史

openfda_search_device_clearances 工具

  • pathway (单位:千美元)510k 或者说 pma)加上可选 search 结束 applicant, (中文(简体) ), product_code, (中文(简体) ), advisory_committee_description,或 openfda.device_name; 每页最多1000个记录
  • 510(k) 记录携带 k_number, (中文(简体) ), device_name,以及 decision_date; PMA 记录携带 pma_number, (中文(简体) ), trade_name,以及 supplement_number

openfda_lookup_ndc 工具

  • 需求 search 结束 product_ndc, (中文(简体) ), brand_name, (中文(简体) ), generic_name, (中文(简体) ), openfda.manufacturer_name,或 active_ingredients.name; 每页最多1000个记录
  • 记录携带 product_ndc, (中文(简体) ), labeler_name, (中文(简体) ), dosage_form, (中文(简体) ), route, (中文(简体) ), marketing_category, (中文(简体) ), active_ingredients[],以及 packaging[]

openfda_dataframe_describe 工具

  • canvas_id ; 列出每个表格的 name, (中文(简体) ), kind,全阶段 row_count,并带有 DuckDB 类型和无效性的列
  • 失败作为 canvas_disabled 何时 CANVAS_PROVIDER_TYPE=none,或 canvas_not_found 当 canvas_id 已经过期或从未存在

openfda_dataframe_query 工具

  • canvas_id 加上一个只读 SELECT; DDL, DML, COPY, 和文件读取功能被拒绝. Scalars 作为文本存储 (CAST 作为 JSON 列)
  • 行被封在画布行限处,和 truncated: true 表示与 ORDER BY 加号 LIMIT编号 :OFFSET; 失败 canvas_disabled, (中文(简体) ), canvas_not_found, (中文(简体) ), missing_table,或 invalid_query

openfda_dataframe_drop 工具

  • 默认关闭: 设置 OPENFDA_DATAFRAME_DROP_ENABLED=true 使其具有调用性; 否则在登陆页上被列为已禁用, 不在 tools/list
  • canvas_id 加减 table 名称来自 openfda_dataframe_describe; 删除该表格或视图并返回 remaining_tables,将帆布和其他表格留在原地
  • 失败的是 canvas_disabled, (中文(简体) ), canvas_not_found,或 missing_table (已经投放、过期或打错)

特征

建造在 @cyanheads/mcp-ts-core: stdio和可流式的 HTTP 传输器,可插接式(none 编号 : jwt 编号 : oauth),可互换存储(in-memory, (中文(简体) ), filesystem, (中文(简体) ), Supabase, (中文(简体) ), Cloudflare KV/R2/D1),结构化记录,可选择的OpenTeleometry tracking.

打开FDA 特性 :

  • 所有20个开通FDA端点都有一个客户端,在429和5xx上重试. 不需要 API 密钥 (1K 请求/ 天); 免费 OPENFDA_API_KEY 涨到每天120K
  • 查询是 field:value 超过由 AND/OR 加入的已点路径( URL 类) + (a) 将条款作为空间加以解释; openfda_describe_fields 列出路径,一个错误的查询失败为 malformed_search 任何请求之前
  • 呼号 : limit 不超过1 000人 skip 最高为25,000个记录的上限(pagination_limit_reached 通过它);每页为24 000字节的预算
  • fields 在任意 openfda_search_* 工具或设备 openfda_lookup_ndc 将每个记录修剪到您命名的被点的路径, 所以大型记录适合内置
  • 数据扫描(默认情况下); CANVAS_PROVIDER_TYPE=none 关了它) stage: true 或一个 canvas_id,以及可选的本地散装镜(OPENFDA_MIRROR_ENABLED=true在不花API预算的情况下解答精确的密钥检查

方便代理输出 :

  • 已披露界限 : page_omitted, (中文(简体) ), page_bytes, (中文(简体) ), page_largest_fields, (中文(简体) ), projected_fields标签 outline,以及 staged_rows 报告每次剪接
  • 已打入失败: 调用器分支打开 error.data.reason (单位:千美元)rate_limited, (中文(简体) ), query_error, (中文(简体) ), not_aggregatable,.)而不是解析信件
  • 未知 vs 缺席 : openfda_drug_profile 返回时 null 没有林业发展局记录的科室,并列出失效科室 degraded[]
  • 空结果引导: 无匹配搜索点 openfda_describe_fields 和更广泛的术语

开始

连接到主机实例, 没有安装 :

claude mcp add --transport http openfda-mcp-server https://openfda.caseyjhand.com/mcp

或者在当地运行它:

claude mcp add openfda-mcp-server -- npx -y @cyanheads/openfda-mcp-server

对于其他客户端,请将此添加到 MCP 配置文件中 :

{
  "mcpServers": {
    "openfda-mcp-server": {
      "command": "npx",
      "args": ["-y", "@cyanheads/openfda-mcp-server"]
    }
  }
}

不需要 API 密钥 。 一个免费的 打开FDA API 密钥 设置为 OPENFDA_API_KEY 每天将限制从1K增加到120K。 对于 Docker 或源构建,请参见 运行服务器。 。 。 .

配置

变量说明默认
OPENFDA_API_KEY免费 API 密钥从 打开. fda.gov; 将每日限制从1K请求增加到120K请求.无
OPENFDA_BASE_URLAPI 基础 URL 覆盖,用于代理或模拟.https://api.fda.gov
OPENFDA_MIRROR_ENABLED回答精确的密钥检查 本地散装镜像。 。 。 .false
OPENFDA_MIRROR_PATH目录按镜像数据集持有一个 SQLite 文件 ../data/openfda-mirror
OPENFDA_MIRROR_REFRESH_CRON用于进程内镜像刷新(只有HTTP传输)的克龙表达式.无
OPENFDA_MIRROR_FALLBACK_LIVE倒回活API,当镜子冷了,错过了记录,或者失败了.true
OPENFDA_MIRROR_REFRESH_TIMEOUT_MS一次刷新时间的预算在中止前,以毫秒计.21600000 (6小时)
OPENFDA_MIRROR_BASE_URL提供大宗下载单的东道主download.json) (中文(简体) ).https://api.fda.gov
CANVAS_PROVIDER_TYPEData Canvas 中转和 SQL. none 禁用它们; 保留数据框工具并返回 canvas_disabled。 。 。 .duckdb
OPENFDA_DATAFRAME_DROP_ENABLED启用 openfda_dataframe_drop,删除一个已上演的表格。 需求 CANVAS_PROVIDER_TYPE=duckdb。 。 。 .false
MCP_TRANSPORT_TYPE运输: stdio 或者说 http。 。 。 .stdio
MCP_HTTP_PORTHTTP 服务器端口.3010
MCP_SESSION_MODEHTTP 会话模式 : stateless, (中文(简体) ), stateful,或 auto。 。 。 .stateless
MCP_AUTH_MODE认证 : none, (中文(简体) ), jwt,或 oauth。 。 。 .none
MCP_LOG_LEVEL日志级别 (debug, (中文(简体) ), info, (中文(简体) ), warning, (中文(简体) ), error(见a/c.5/49/70,附件).info
LOGS_DIR日志文件目录(只有Node.js).<app-root>/logs
STORAGE_PROVIDER_TYPE存储后端 : in-memory, (中文(简体) ), filesystem, (中文(简体) ), supabase, (中文(简体) ), cloudflare-kv/r2/d1。 。 。 .in-memory
OTEL_ENABLED启用 打开几何。 。 。 .false

见 .env.example 用于完整可选覆盖列表.

Claude桌面 MCPB 捆绑禁用 DataCanvas ,因为它排除了特定平台 DuckDB 绑定. Npm 或 Docker 用于中和 SQL .

本地散装镜像

与 OPENFDA_MIRROR_ENABLED=true 服务器保存了四个开口FDA散装垃圾堆的本地SQLite副本(drug/label, (中文(简体) ), drug/ndc, (中文(简体) ), drug/enforcement, (中文(简体) ), drug/drugsfda) (中文(简体) ). 本地只回答精确的检查: 引用一次 field:"value" 任期 id, (中文(简体) ), set_id, (中文(简体) ), product_id, (中文(简体) ), product_ndc, (中文(简体) ), recall_number, (中文(简体) ), event_id,或 application_number,没有 count 或者说 sort, (中文(简体) ), skip 0,和一个匹配记录。 其他的都交给API.

初期收成分开进行,从不启动:

bun run mirror:init                  # all four datasets
bun run mirror:init drug/enforcement # one dataset
bun run mirror:status                # sync state per dataset
bun run mirror:verify                # integrity check + row counts
bun run mirror:refresh               # re-harvest datasets whose dump has advanced

整个垃圾场都重新读过 设定 OPENFDA_MIRROR_REFRESH_CRON 在HTTP运输中运行; 在stdio上运行 bun run mirror:refresh 从东道. 镜像的反应 meta.lastUpdated 与现场API不同.

在节点上安装可选 better-sqlite3 端点依赖( Bun 使用内置 bun:sqlite) (中文(简体) ). OPENFDA_MIRROR_REFRESH_CRON 还需要可选的 node-cron 对等者依赖; 没有它, 服务器在启动时失败 .

运行服务器

地方发展

要求数 Bun v1.4.0 (英语) 或更高(或Node.js v24+).

  • 克隆并安装 :

    git clone https://github.com/cyanheads/openfda-mcp-server.git
    cd openfda-mcp-server && bun install
    cp .env.example .env   # optionally set OPENFDA_API_KEY and the mirror or canvas options
    
  • 构建和运行 :

    # One-time build
    bun run rebuild
    
    # Run the built server
    bun run start:stdio
    # or
    bun run start:http
    
  • 运行检查和测试 :

    bun run devcheck   # Lint, format, typecheck, security
    bun run test       # Vitest test suite
    bun run lint:mcp   # Validate MCP definitions against spec
    

夹克

docker run --rm -p 3010:3010 ghcr.io/cyanheads/openfda-mcp-server:latest

图像默认为 HTTP 传输、 无国籍会话模式和日志到 /var/log/openfda-mcp-server运行到一个 MCP 客户端的 stdio,使用 "command": "docker" 与 "args": ["run", "-i", "--rm", "-e", "MCP_TRANSPORT_TYPE=stdio", "ghcr.io/cyanheads/openfda-mcp-server:latest"]为了在当地建设, docker build -t openfda-mcp-server .; OpenTeleometry 端点依赖性默认安装——用 --build-arg OTEL_ENABLED=false 以略去他们。 为了保持镜像收成 整个集装箱更换, 挂出一卷 /usr/src/app/data/openfda-mirror。 。 。 .

项目结构

目录目的
src/index.tscreateApp() 入站点:工具注册,服务设置,镜像刷新接线.
src/config服务器特定环境变量与Zod解析并验证.
src/mcp-server/tools/definitions工具定义*.tool.ts),共15个.
src/mcp-server/tools共享工具帮助器:每端点字段目录,输入计和守护器,格式化器,SPL表渲染.
src/services/openfdaopenFDA API 客户端( 重试、 速率限制、 错误常态化), 内置页面预算, fields 记录投影,帆布中转.
src/services/openfda/mirrorOpt-in 本地批量镜:数据集注册,垃圾阅读器,收割机,镜像-vs-live查询门,刷新时间表.
src/services/canvas用于中转和SQL的数据扫描仪.
scripts/openfda-mirror.ts镜像生命周期 CLI 后方 mirror:* 剧本.
tests/单位和综合测试,反映 src/ 结构.

发展指南

见 CLAUDE.md 发展准则和建筑规则。 简本:

  • 搬运工投掷,框架渔获量——否 try/catch 在工具逻辑中
  • 使用 ctx.log 请求范围记录
  • 将新工具登记在枪管内 src/mcp-server/tools/definitions/index.ts
  • 环绕外部 API 调用: 验证原始 = 规范到域类型 = 返回输出计划; 从未编织一个字段打开 FDA 没有返回

数据属性

数据来自 打开FDA一个美国食品药品管理局的服务。 在 打开 FDA 许可证 这些数据在CC0 1.0中专门用于公有领域,但有一个例外:GMDN 设备分类内容(术语代码、名称和术语定义)从GMDN机构获得许可证,再分配或利用它来培训AI需要从该机构获得单独的许可证.

这就是为什么本地镜像只覆盖药物数据集. device/classification 和所有其他设备的端点都被排除在其中,而ingester拒绝任何带有GMDN带场的记录,而不是将其写入磁盘.

林业发展局不赞同这个项目。 不依赖开放式FDA来决定医疗.

捐款

问题值得欢迎。 提交前进行检查和测试:

bun run devcheck
bun run test

许可证

这个项目根据Apache 2.0许可证获得许可. 见 自由主义 详细文件.

版本与发布记录

@cyanheads/openfda-mcp-server 共发布 41 个版本,首次发布于 2026/04/04;过去 12 个月发布了 41 个版本。

版本发布日期距今
0.9.1latest2026/10/2717 天前
0.9.02026/10/2618 天前
0.8.22026/10/2519 天前
0.8.12026/10/131 个月前
0.8.02026/10/041 个月前
0.7.92026/09/231 个月前

关于 @cyanheads/openfda-mcp-server 的常见问题

@cyanheads/openfda-mcp-server 是什么?

通过OpenFDA查询FDA关于药物,食物,设备的数据并召回. (原始内容存档于2012-10-12). STIO or Streamable HTTP.

如何安装 @cyanheads/openfda-mcp-server?

在项目目录运行 npm install @cyanheads/openfda-mcp-server,或使用 pnpm add / yarn add / bun add。它还提供命令行工具 openfda-mcp-server,可以用 npx openfda-mcp-server 直接运行。

@cyanheads/openfda-mcp-server 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@cyanheads/openfda-mcp-server 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@cyanheads/openfda-mcp-server 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=24.0.0。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@cyanheads/openfda-mcp-server 可以商用吗?

@cyanheads/openfda-mcp-server 使用 Apache-2.0 许可。宽松许可:允许商业使用、修改和再分发,并附带明确的专利授权;分发时需保留许可与 NOTICE 文件,修改过的文件要注明改动。以上为概括,不构成法律意见,请以许可原文为准。

@cyanheads/openfda-mcp-server 的下载量有多少?

根据 npm 官方下载统计,@cyanheads/openfda-mcp-server 在 2026/10/11 – 2026/11/09 这 30 天内被下载 2,143 次,日均约 71 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@cyanheads/openfda-mcp-server 还在维护吗?

最新版本 0.9.1 发布于 2026/10/27(17 天前);至今共发布 41 个版本,其中过去 12 个月发布了 41 个;首次发布于 2026/04/04。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。