关于 Vaers
Vaers 是用于查询 VAERS 汇总疫苗报告数量的 MCP 服务,可按疫苗、制造商、症状、年份和严重程度筛选。它只提供计数、不返回个案叙述,并明确标注结果不代表因果关系;数据需人工更新。
主要功能
- 01按疫苗和制造商统计数量
- 02统计症状提及次数
- 03按年份和严重程度细分
- 04查看覆盖范围和加载日期
- 05响应附带非因果关系声明
适用场景
- 01比较不同疫苗或年份的报告数量
- 02查看某种疫苗相关的症状报告
- 03检查数据覆盖范围和新鲜度
MCP 相关
通过 Pipeworx 端点或独立本地 stdio 服务向 MCP 客户端提供 VAERS 查询工具。网关端点还包含 Pipeworx 共享元工具。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://gateway.pipeworx.io/vaers/mcpclaude mcp add --transport http pipeworx-io-vaers https://gateway.pipeworx.io/vaers/mcp{"mcpServers":{"pipeworx-io-vaers":{"type":"http","url":"https://gateway.pipeworx.io/vaers/mcp"}}}在 Cursor 中打开{"servers":{"pipeworx-io-vaers":{"type":"http","url":"https://gateway.pipeworx.io/vaers/mcp"}}}在 VS Code 中打开{"mcpServers":{"pipeworx-io-vaers":{"type":"http","url":"https://gateway.pipeworx.io/vaers/mcp"}}}{"mcpServers":{"pipeworx-io-vaers":{"serverUrl":"https://gateway.pipeworx.io/vaers/mcp"}}}命令在终端中运行;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 的自动化途径,刷新流程如下:
- 人工从 https://vaers.hhs.gov/data/datasets.html 下载最新的
AllVAERSDataCSVS.zip。 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
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。