mcpField
V
Vaers

Vaers

远程服务
pipeworx.io健康医疗05 周前更新

关于 Vaers

Vaers 是用于查询 VAERS 汇总疫苗报告数量的 MCP 服务,可按疫苗、制造商、症状、年份和严重程度筛选。它只提供计数、不返回个案叙述,并明确标注结果不代表因果关系;数据需人工更新。

主要功能

  1. 01按疫苗和制造商统计数量
  2. 02统计症状提及次数
  3. 03按年份和严重程度细分
  4. 04查看覆盖范围和加载日期
  5. 05响应附带非因果关系声明

适用场景

  1. 01比较不同疫苗或年份的报告数量
  2. 02查看某种疫苗相关的症状报告
  3. 03检查数据覆盖范围和新鲜度

MCP 相关

通过 Pipeworx 端点或独立本地 stdio 服务向 MCP 客户端提供 VAERS 查询工具。网关端点还包含 Pipeworx 共享元工具。

配置

远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。

服务地址https://gateway.pipeworx.io/vaers/mcp
一键复制安装命令
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。

工具

详细介绍

vaers

VAERS(疫苗不良事件报告系统)报告数量——按疫苗、制造商、症状、年份和严重程度统计。Fleet #1294。

属于 Pipeworx——一个将 AI Agent 连接到 1684+ 个实时数据源的 MCP 网关。

VAERS 报告不代表已确认的不良事件——请先阅读

任何人都可以提交 VAERS 报告——患者、家长、临床医生、制造商都可以——而 VAERS 不会核实报告中的内容。某种疫苗的报告数量上升,可能是因为接种剂次增加、媒体关注度提高,或报告要求发生变化,也可能确实反映了安全性信号。CDC 和 FDA 对其自身数据有如下说明:

仅凭报告数量,不能将其解读为疫苗与不良事件之间存在因果关联的证据,也不能据此判断疫苗相关问题是否存在、其严重程度、发生频率或发生率。报告可能包含不完整、不准确、偶然或未经核实的信息。 — https://wonder.cdc.gov/wonder/help/vaers.html

以下每个工具的响应都包含这项免责声明,并且带有字面值为 false 的 is_causal: false 字段,因此读取载荷的模型无法将报告数量夸大为因果结论。这里的工具都不会返回单条报告的自由文本(SYMPTOM_TEXT、HISTORY、LAB_DATA、OTHER_MEDS、CUR_ILL、ALLERGIES 甚至都没有存储——请参阅迁移注释)——所有内容都是按设计提供的计数。

工具

工具回答内容
vaers_events_by_vaccine按疫苗(以及可选的制造商)和年份范围统计报告数量及严重程度细分。省略 vaccine 可查看报告量最高的疫苗——也可借此查找 vax_type 代码。
vaers_events_by_symptom按症状(MedDRA 首选术语)统计报告提及次数,可选按单种疫苗/年份范围缩小范围。省略 symptom 可查看报告最多的症状。
vaers_coverage唯一报告总数、年份范围、不同疫苗/制造商数量、种子数据的最近加载时间,以及报告量最高的前 5 种疫苗。

计数规则——比较不同工具的数字前请先阅读

一份报告若列出多种疫苗,就会按疫苗分别计数——CDC WONDER 本身对 VAERS 也采用这一规则。因此,将某一年的所有疫苗的 report_count 相加,可能会超过该年的唯一报告总数(vaers_coverage.total_unique_reports)。症状计数统计的是提及次数:一份报告若列出多种症状和/或多种疫苗,就会计入每种组合。

身份验证

无——无需密钥或账户。本工具包根据下文所述的种子数据预聚合报告数量,并据此提供答案。

数据来源及获取方式

VAERS 由 CDC 和 FDA 共同运营——公开数据文件见 https://vaers.hhs.gov/data/datasets.html。美国联邦公共领域数据。

CDC 提供的所有 VAERS 自动化访问途径均无法通过脚本使用:

  • 批量下载页面受 CAPTCHA(图片文字验证)保护。
  • CDC WONDER 自身的 XML API 文档将 VAERS(数据库 D8)列为实时数据集,但无论尝试何种请求格式,端点都会返回 HTTP 500,且没有错误消息——系统能够识别该数据集,但未启用访问,且未见相关文档。
  • data.cdc.gov 上 VAERS 的两个条目,其 href 都指向 WONDER,而非可查询的 Socrata 数据集。

完整说明:docs/vaers-access-finding.md。

因此,Bruce 对此的裁定(任务 #1294,2026-09-07)是种子数据加手动刷新:他从上述数据集页面手动下载 AllVAERSDataCSVS.zip(唯一一个涵盖所有年份——1990-2026——以及非美国境内报告的压缩包),然后由本工具包的加载器导入。他明确未授权对外联系 CDC、申请启用 API——若今后要推进此事,仍须先取得他的批准。

存储——为何使用聚合数据,而不是原始行

种子数据包含 280 万条报告、340 万条疫苗记录和 377 万条症状记录(未压缩 CSV 为 2.75 GB,压缩包为 589 MB)。这里的 Postgres 规模较小,且此前在未分批加载时发生过崩溃(docs/medical-data-ingest-plan.md §3)。本工具包中的工具只回答计数问题,不会导出原始行,因此加载器(scripts/ingest-vaers.mjs)会完全在内存中进行聚合,并以已提交的批次仅写入聚合数据:

表粒度实测行数(1990-2026 年 + 非美国本土种子数据)
vaers_yearly_totals年37
vaers_severity_by_vaccine年 × 疫苗类型 × 制造商4,975
vaers_symptom_counts年 × 疫苗类型 × 症状961,457

Postgres 占用总量仅为几十 MB,而不是数 GB。三个 RPC(vaers_vaccine_stats、vaers_symptom_stats、vaers_coverage_stats,参见 supabase/migrations/165_vaers_aggregates.sql)在 SQL 中进行筛选和求和,因为这些表足够小,直接使用 GROUP BY 就很快。

压缩说明:此类问题曾影响过相关数据导入(NCHS 出生数据使用了 Deflate64,Node 的 zlib 无法读取)。我们已先行检查:AllVAERSDataCSVS.zip 中的每个条目都使用方法 8(普通 Deflate),可由 node:zlib.inflateRawSync 原生读取。这里不存在 Deflate64 陷阱。

刷新(按设计手动进行)

VAERS 每周更新。由于没有绕过 CAPTCHA 的自动化途径,刷新流程如下:

  1. 人工从 https://vaers.hhs.gov/data/datasets.html 下载最新的 AllVAERSDataCSVS.zip。
  2. node scripts/ingest-vaers.mjs /path/to/AllVAERSDataCSVS.zip

加载器具备幂等性(ON CONFLICT ... DO UPDATE),可以重复运行;使用相同或更新的文件重新运行,只会就地更新聚合数据。若结果看起来被截断(年份少于 20 年、严重程度键少于 1,000 个,或症状键少于 100,000 个),加载器会拒绝加载,而不是悄悄缩减数据集。

建议频率:每周一次,与 VAERS 自身的发布节奏一致——每周重新下载并运行一次,可使 vaers_coverage.data_last_loaded 与最新数据的间隔保持在一周以内。按照 Bruce 的决定,这是有意安排的定期时间成本;如果将来出现自动化途径(CDC 为 D8 开放 WONDER API,或出现便于抓取的新入口),应替换这个加载器,而不是修改架构。

两种写入路径,自动选择

ingest-vaers.mjs 会先在 .env 中查找平台的数据库凭据(快速通过 REST 分批执行 upsert)。如果运行环境中没有这些凭据,则会回退到向 /tmp/vaers-sql/ 写入分块的幂等 SQL 文件,并打印用于执行这些文件的 supabase db query --file ... --linked 命令——与用于应用 supabase/migrations/165_vaers_aggregates.sql 的 Management-API 路径相同。两种路径生成的表完全相同。

不包含的内容

  • 个别报告的叙述文本(SYMPTOM_TEXT、HISTORY 等)——按设计不存储也不返回(见上文)。
  • 超出已加载种子数据时段的内容——依赖数据的新近程度前,请先检查 vaers_coverage。
  • FAERS(药物不良事件)——对应 openfda。VAERS 仅涉及疫苗。

快速开始

添加到 MCP 客户端(Claude Desktop、Cursor、Windsurf 等):

{
  "mcpServers": {
    "vaers": {
      "url": "https://gateway.pipeworx.io/vaers/mcp"
    }
  }
}
此端点实际提供的内容

https://gateway.pipeworx.io/vaers/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 都指向同一个网关和相同的 1684+ 个数据源。唯一的区别是,哪个工具包的工具会被直接列出;无论连接哪一个,ask_pipeworx 都能访问所有工具包的工具。

没有 MCP 客户端?通过 HTTP 调用

curl -X POST https://gateway.pipeworx.io/v1/tools/vaers_events_by_vaccine \
  -H 'Content-Type: application/json' \
  -d '{"vaccine":"COVID19","year_from":2021,"year_to":2022}'

首次调用无需账户。查看任意工具:GET https://gateway.pipeworx.io/v1/tools/vaers_events_by_vaccine。查找工具包:使用 {"query":"..."} 向 https://gateway.pipeworx.io/v1/tools/search_packs 发送 POST 请求。

独立运行(无需网关账户)

此软件包也可以作为本地 stdio MCP 服务运行——无需 Pipeworx 账户,也无需往返网关:

{
  "mcpServers": {
    "vaers": {
      "command": "npx",
      "args": ["-y", "@pipeworx/mcp-vaers"]
    }
  }
}

或者直接运行,确认服务能启动:

npx -y @pipeworx/mcp-vaers

它通过 stdin/stdout 传输 MCP,并为仅属于此工具包的工具响应 initialize/tools/list/tools/call——不包含上述网关连接所添加的任何共享元工具。数据源相同,工具相同,但没有 ask_pipeworx 路由功能。

使用 ask_pipeworx

你可以用通俗英语提问,而不是直接调用工具——此功能既适用于上面的工具包端点,也适用于完整网关:

ask_pipeworx({ question: "your question about Vaers data" })

网关会自动选择合适的工具并填入参数。

更多信息

许可证

MIT

评论

支持 Markdown

第一次接触 MCP?

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

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