# @cyanheads/openfda-mcp-server 中文文档

规范地址：https://npmcn.com/package/%40cyanheads/openfda-mcp-server/

版本：0\.9\.1
npm 元数据更新时间：2026-10-26T19:35:05.905Z
中文译文更新时间：2026-11-13T06:53:55.286Z
软件包许可：Apache-2\.0

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40cyanheads/openfda-mcp-server
原文对照：https://npmcn.com/package/%40cyanheads/openfda-mcp-server/?lang=original
项目主页：https://github.com/cyanheads/openfda-mcp-server#readme
源码仓库：https://github.com/cyanheads/openfda-mcp-server

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：1.2 MB，203 个文件
- 模块格式：ES Module
- TypeScript 类型：包内自带
- Node.js 要求：\>=24\.0\.0
- 运行依赖：4 个
- peer 依赖：node-cron \>=4，better-sqlite3 \>=11
- 首次发布：2026-04-03T21:18:28.430Z
- 最新版本发布：2026-10-26T19:35:05.030Z
- 近 30 天下载量：2143（2026-10-11 至 2026-11-09，npm 官方下载统计）
- 已发布版本数：41（近 12 个月 41 个）

## 中文简介

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

## 安装

```sh
npm install @cyanheads/openfda-mcp-server
```

也可以使用：`pnpm add @cyanheads/openfda-mcp-server`、`yarn add @cyanheads/openfda-mcp-server`、`bun add @cyanheads/openfda-mcp-server`

## README

# @cyanheads/openfda-mcp-服务器

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

15 个工具

[![Version](https://img.shields.io/badge/Version-0.9.1-blue.svg?style=flat-square)](https://npmcn.com/package/%40cyanheads/openfda-mcp-server/CHANGELOG.md) [![License](https://img.shields.io/badge/License-Apache%202.0-orange.svg?style=flat-square)](https://npmcn.com/package/%40cyanheads/openfda-mcp-server/LICENSE) [![Docker](https://img.shields.io/badge/Docker-ghcr.io-2496ED?style=flat-square&logo=docker&logoColor=white)](https://github.com/users/cyanheads/packages/container/package/openfda-mcp-server) [![MCP SDK](https://img.shields.io/badge/MCP%20SDK-%5E2.4.0-green.svg?style=flat-square)](https://modelcontextprotocol.io/) [![npm](https://img.shields.io/npm/v/@cyanheads/openfda-mcp-server?style=flat-square&logo=npm&logoColor=white)](https://www.npmjs.com/package/@cyanheads/openfda-mcp-server) [![TypeScript](https://img.shields.io/badge/TypeScript-%5E7.0.2-3178C6.svg?style=flat-square)](https://www.typescriptlang.org/) [![Bun](https://img.shields.io/badge/Bun-v1.4.4-blueviolet.svg?style=flat-square)](https://bun.sh/)

[![Install in Claude Desktop](https://img.shields.io/badge/Install_in-Claude_Desktop-D97757?style=for-the-badge&logo=anthropic&logoColor=white)](https://github.com/cyanheads/openfda-mcp-server/releases/latest/download/openfda-mcp-server.mcpb) [![Install in Cursor](https://cursor.com/deeplink/mcp-install-dark.svg)](https://cursor.com/en/install-mcp?name=openfda-mcp-server&config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsIkBjeWFuaGVhZHMvb3BlbmZkYS1tY3Atc2VydmVyIl0sImVudiI6eyJPUEVORkRBX0FQSV9LRVkiOiJ5b3VyLWFwaS1rZXkifX0=) [![Install in VS Code](https://img.shields.io/badge/VS_Code-Install_Server-0098FF?style=for-the-badge&logo=visualstudiocode&logoColor=white)](https://vscode.dev/redirect?url=vscode:mcp/install?%7B%22name%22%3A%22openfda-mcp-server%22%2C%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22%40cyanheads%2Fopenfda-mcp-server%22%5D%2C%22env%22%3A%7B%22OPENFDA_API_KEY%22%3A%22your-api-key%22%7D%7D)

[![Framework](https://img.shields.io/badge/Built%20on-@cyanheads/mcp--ts--core-67E8F9?style=flat-square)](https://www.npmjs.com/package/@cyanheads/mcp-ts-core)

**公共主机服务器 :** [https://openfda.caseyjhand.com/mcp 页面存档备份,存于互联网档案馆](https://openfda.caseyjhand.com/mcp)

* * *

## 概览

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

### 工具

| 工具 | 说明 |
| :-- | :-- |
| `openfda_drug_profile` | 1个药品名称-林业发展局综合概况:身份、标签、不良事件、召回、批准、短缺 |
| `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`](https://github.com/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` 和更广泛的术语

## 开始

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

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

或者在当地运行它:

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

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

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

不需要 API 密钥 。 一个免费的 [打开FDA API 密钥](https://open.fda.gov/apis/authentication/) 设置为 `OPENFDA_API_KEY` 每天将限制从1K增加到120K。 对于 Docker 或源构建,请参见 [运行服务器](https://npmcn.com/package/%40cyanheads/openfda-mcp-server/#readme-running-the-server)。 。 。 .

## 配置

| 变量 | 说明 | 默认 |
| :-- | :-- | :-- |
| `OPENFDA_API_KEY` | 免费 API 密钥从 [打开. fda.gov](https://open.fda.gov/apis/authentication/); 将每日限制从1K请求增加到120K请求. | 无 |
| `OPENFDA_BASE_URL` | API 基础 URL 覆盖,用于代理或模拟. | `https://api.fda.gov` |
| `OPENFDA_MIRROR_ENABLED` | 回答精确的密钥检查 [本地散装镜像](https://npmcn.com/package/%40cyanheads/openfda-mcp-server/#readme-local-bulk-mirror)。 。 。 . | `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_TYPE` | Data 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_PORT` | HTTP 服务器端口. | `3010` |
| `MCP_SESSION_MODE` | HTTP 会话模式 : `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` | 启用 [打开几何](https://github.com/cyanheads/mcp-ts-core/tree/main/docs/telemetry)。 。 。 . | `false` |

见 [`.env.example`](https://npmcn.com/package/%40cyanheads/openfda-mcp-server/.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.

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

```sh
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 (英语)](https://bun.sh/) 或更高(或Node.js v24+).

-   **克隆并安装 :**
    
    ```sh
    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
    ```
    
-   **构建和运行 :**
    
    ```sh
    # One-time build
    bun run rebuild
    
    # Run the built server
    bun run start:stdio
    # or
    bun run start:http
    ```
    
-   **运行检查和测试 :**
    
    ```sh
    bun run devcheck   # Lint, format, typecheck, security
    bun run test       # Vitest test suite
    bun run lint:mcp   # Validate MCP definitions against spec
    ```
    

### 夹克

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

## 发展指南

见 [`CLAUDE.md`](https://npmcn.com/package/%40cyanheads/openfda-mcp-server/CLAUDE.md) 发展准则和建筑规则。 简本:

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

## 数据属性

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

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

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

## 捐款

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

```sh
bun run devcheck
bun run test
```

## 许可证

这个项目根据Apache 2.0许可证获得许可. 见 [自由主义](https://npmcn.com/package/%40cyanheads/openfda-mcp-server/LICENSE) 详细文件.

## 常见问题

### @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 和提交记录判断。

