mcpField
C
cdc-health-mcp-server

cdc-health-mcp-server

远程服务
github.com/cyanheads健康医疗52 周前更新
代码仓库

关于 cdc-health-mcp-server

面向研究人员和分析人员的 MCP 服务,用于探索 CDC 公共卫生数据。它结合可搜索的 Socrata 数据集与可查询的 CDC WONDER 死亡统计数据,并提供目录和模式工具。

主要功能

  1. 01搜索 CDC 数据集目录
  2. 02查看数据集模式和元数据
  3. 03使用 SoQL 查询数据集
  4. 04获取 CDC WONDER 死亡统计
  5. 05访问目录资源和分析提示词

适用场景

  1. 01查找疫苗接种或监测数据集
  2. 02按年份和人口特征分析死亡率
  3. 03筛选并汇总 CDC 数据集记录

MCP 相关

向 MCP 客户端提供五个工具、两个资源和一个分析提示词。支持 STDIO 和 Streamable HTTP,并提供公共托管端点。

配置

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

服务地址https://cdc.caseyjhand.com/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 配置后重启。需要授权的服务会在首次连接时提示登录。

安装包
npm@cyanheads/cdc-health-mcp-server0.10.0

工具

5
参数类型必填说明
tagsarray否按领域标签筛选(例如,["covid19", "surveillance"])。标签会扩大搜索范围,而不是缩小范围:数据集只要带有其中任一标签就会匹配,因此每添加一个标签都会返回更多结果;无法识别的标签不会匹配任何内容,也不会改变结果集。值与目录自身的标签词汇表进行不区分大小写的匹配;调用 cdc_list_catalog_vocabulary 可查看正在使用的值及其条目数,也可读取任一结果中的 tags 字段。若要缩小范围,请将标签与 query 或 category 结合使用,这些条件会与标签集取交集。
limitinteger否要返回的结果数(默认值为 10)。单次调用最多返回 100 条:limit 较大时(最高 10,000)会被限制为 100;如果仍有匹配的数据集,响应会说明这一点并提供用于继续获取的 offset。limit 被限制后,offset 加 limit 不得超过 10000。
orderenum否结果排序方式。"dataset_id"(默认值)按每个数据集唯一的目录 ID 确定性排序,这是稳定进行 offset 分页的必要条件,因为连续页面可以无遗漏、无重复地遍历结果。"relevance" 按关键字搜索的最佳匹配度排序,但无法跨页面稳定分页,因此遍历 offset 时可能会跳过或重复数据集。dataset_id | relevance
querystring否跨数据集名称和描述进行全文搜索(例如,“diabetes mortality”“lead exposure children”)。
domainenum否要搜索的 CDC Socrata 主机。"data.cdc.gov"(默认值)和 "chronicdata.cdc.gov" 指向同一目录并返回相同条目,因此切换主机既不会扩大也不会缩小搜索范围;PLACES、Heart Disease & Stroke Atlas 和 Environmental Public Health Tracking 等慢性病和小区域数据集可从任一主机找到。data.cdc.gov | chronicdata.cdc.gov
offsetinteger否用于浏览第一页之后内容的分页偏移量(最大 9999)。limit 被限制后,offset 加 limit 不得超过 10000;两个 CDC 门户的条目都远少于两千个,因此接近该上限的 offset 会翻到目录末尾之后。
categorystring否按领域类别筛选(例如,“NNDSS”“Vaccinations”“Behavioral Risk Factors”)。值来自目录自身的词汇表,并进行区分大小写的精确匹配:“Vaccinations”匹配 89 个条目,而“Vaccination”一个也不匹配。调用 cdc_list_catalog_vocabulary 查看每个值及其条目数,不要猜测值。

详细介绍

@cyanheads/cdc-health-mcp-server

通过 MCP 搜索和查询 CDC 公共卫生数据——死亡率、疫苗接种、监测、行为风险(Socrata SODA API)。支持 STDIO 或 Streamable HTTP。

5 个工具 • 2 个资源 • 1 个提示词

版本 许可证 Docker MCP SDK npm TypeScript Bun

在 Claude Desktop 中安装 在 Cursor 中安装 在 VS Code 中安装

框架

公共托管服务: https://cdc.caseyjhand.com/mcp


概述

CDC 公共卫生数据来自 CDC Open Data 门户和 CDC WONDER。搜索有关疫苗接种、监测和行为风险的 1,000 多个数据集,查看其架构并使用 SoQL 查询,或按年份、年龄、性别和种族获取全国死亡统计数据。

工具
工具描述
cdc_discover_datasets按关键词、类别或标签搜索 CDC 数据集目录
cdc_get_dataset_schema获取数据集的列架构、行数和元数据
cdc_list_catalog_vocabulary列出目录的类别和标签值及其条目数
cdc_query_dataset执行 SoQL 查询——筛选、聚合、排序、全文搜索、选择字段
cdc_query_wonder查询 CDC WONDER,获取五个数据库中的全国死亡率、人口和死亡率数据
资源
资源描述
cdc://datasets浏览量最高的前 50 个目录条目,供参考
cdc://datasets/{datasetId}特定数据集的元数据和前 100 列

这两项资源与通过 cdc_discover_datasets 和 cdc_get_dataset_schema 也可获取的数据相同,适用于支持资源但不支持工具的客户端。

提示词
提示词描述
analyze_health_trend引导式工作流,用于跨 CDC 数据调查公共卫生问题

功能参考

cdc_discover_datasets 工具
  • 筛选条件:query、category 和 tags。每页最多返回 100 条结果(默认 10 条);offset + limit 上限为 10,000(超过后会返回 page_out_of_range)。order 可设为 dataset_id(默认值,分页稳定)或 relevance
  • 结果包含 assetType、columnCount(值为 0 表示图表、地图或其他非表格资源)、包含 8 个名称的 columnSample,以及截断至 300 个字符的描述;此外还包含 totalCount 和 appliedFilters
  • 当 category 或 tags 的值没有匹配项时,notice 会列出最接近的目录值及其条目数,例如:Vaccination → "Vaccinations" (89 datasets)

cdc_get_dataset_schema 工具
  • 接受四乘四格式的 datasetId(例如 bi63-dtpu)。column_limit(默认 100)和 column_offset 用于分页查看宽表结构,并返回 totalCount、truncated 和 nextOffset
  • 数据集的 description 默认上限为 4,000 个字符(截断时会设置 descriptionTruncated 和 descriptionLength);full_description: true 会返回完整文本
  • 列包含 fieldName、dataType 和 description。rowCountSource 说明 rowCount 是实时值(live)还是 Socrata 的缓存值(cached)。非表格资源会返回 not_queryable 错误

cdc_list_catalog_vocabulary 工具
  • 每个类别都会完整返回;约 1,600 个标签按条目数排序,并通过 tag_limit(默认 50)和 tag_offset 分页。filter(至少 3 个字符)会按词语匹配进行筛选,不进行模糊匹配
  • 每个值都包含 datasetCount;响应还会报告 vocabularySize、categoryCount、tagCount、truncated、nextOffset 和 truncationCeiling(页面之后标签数量的上限)

cdc_query_dataset 工具
  • 查询子句:select、where、group、having、order 和全文搜索 search。每次调用最多返回 5,000 行(默认 100 行),offset 最大为 1,000,000
  • 如需稳定地按偏移量分页,请将唯一的决胜字段放在 order 末尾(未分组行使用 :id,分组查询使用分组列);缺少该字段时,notice 会提示
  • effectiveQuery 会原样回显发送的 SoQL 子句;truncated 和 nextOffset 会报告分页信息,不提供 totalCount。图表或地图 ID 会返回 not_queryable 错误

cdc_query_wonder 工具
databaseCDC 数据库年份种族组mcd_icd10
underlying_1999_2020 (默认)D76 — 根本死因1999–20204 个衔接组—
provisionalD176 — 临时死亡统计2018 年至当前年份6 个单一种族组是
underlying_2018_2024D158 — 根本死因,单一种族2018–20246 个单一种族组—
multiple_1999_2020D77 — 多重死因1999–20204 个衔接组是
multiple_2018_2024D157 — 多重死因,单一种族2018–20246 个单一种族组是
  • group_by 接受 year、age_group、sex、race 中的 1–4 项(仅限全国数据)。cause_icd10 和 mcd_icd10 接受 ICD-10 代码、范围(X40-X49)或最多包含 50 项的列表。age_groups 接受单独的 NS(未注明年龄),或与全部 11 个已知年龄组一起使用。使用 limit 和 offset(最大 10,000)对表格分页
  • 行包含 deaths、population、crude_rate,以及在可进行年龄标准化时提供的 age_adjusted_rate。CDC 返回为 Suppressed、Unreliable 或 Not Applicable 的单元格会显示为 null,并列在 cellNotes 中;messages 会报告 CDC 隐藏的行,totalCount 为准确值
  • CDC 要求请求间隔至少 15 秒,因此调用会逐个排队,间隔 16 秒

cdc://datasets 资源
  • 按受欢迎程度排列的前 50 个目录条目,每项包含 id、name、assetType、category、columnCount 和 updatedAt,另附目录的 totalCount
  • columnCount: 0 表示非表格条目;cdc_discover_datasets 可搜索完整目录并进行分页
cdc://datasets/{datasetId} 资源
  • 数据集元数据以及前 100 列,格式为 application/json,包含 columnCount 和 truncated;描述最多 4,000 个字符
  • 如需查看更多列或完整描述,请使用 cdc_get_dataset_schema,并设置 column_offset 或 full_description: true

analyze_health_trend 提示词
  • 参数:必填 topic;可选 timeRange 和 geography
  • 返回一条用户消息,将问题路由到 cdc_query_wonder(全国死亡率)或 Socrata 工具(其他所有情况),随后依次进行发现 → 检查 → 建立基线 → 比较 → 综合分析

功能

基于 @cyanheads/mcp-ts-core 构建:支持 stdio 和 Streamable HTTP 传输、可插拔身份验证(none / jwt / oauth)、可替换存储(in-memory、filesystem、Supabase、Cloudflare KV/R2/D1),以及带可选 OpenTelemetry 跟踪的结构化日志记录。

CDC 特有功能:

  • 通过 CDC Open Data 门户访问 Socrata SODA API v2.1(约 1,080 个数据集);无需身份验证,可选应用令牌可提高速率限制
  • 通过 XML 请求 API 访问 CDC WONDER 死亡率数据,涵盖 1999 年至当前年份的五个数据库
  • 三个 Socrata 工具均接受 domain 输入,仅限 data.cdc.gov(默认)和 chronicdata.cdc.gov;两者提供相同的目录
  • category 和 tags 必须与目录自身的取值匹配(类别区分大小写,标签不区分大小写);cdc_list_catalog_vocabulary 可列出这些取值
  • Socrata 会将所有值作为字符串返回,而 year 之类的列在某些数据集中是数字,在另一些数据集中则是文本。请根据列的 dataType 匹配 WHERE 字面量:数字不加引号,字符串使用单引号

便于 Agent 使用的输出:

  • 明确报告分页信息:totalCount、truncated、nextOffset 和 shown/cap。两个查询工具的每页上限均为 200,000 个字符,因此较宽的页面可能会在达到 limit 前结束
  • 每个已声明原因均提供带恢复提示的类型化错误,例如 not_queryable、page_out_of_range 和 invalid_query
  • 上游数据缺失会明确显示:cellNotes 中的 WONDER 状态标记、messages 中的隐藏行提示,以及架构行数中的 rowCountSource
  • effectiveQuery 会回显 SoQL 子句或 WONDER 查询摘要,以便复现结果

开始使用

公共托管实例

公共实例已部署在 https://cdc.caseyjhand.com/mcp,无需安装。通过 Streamable HTTP 将任意 MCP 客户端指向该实例:

{
  "mcpServers": {
    "cdc-health-mcp-server": {
      "type": "streamable-http",
      "url": "https://cdc.caseyjhand.com/mcp"
    }
  }
}
自托管 / 本地部署

将以下内容添加到 MCP 客户端配置文件中。

{
  "mcpServers": {
    "cdc-health-mcp-server": {
      "type": "stdio",
      "command": "bunx",
      "args": ["@cyanheads/cdc-health-mcp-server@latest"],
      "env": {
        "MCP_TRANSPORT_TYPE": "stdio",
        "MCP_LOG_LEVEL": "info"
      }
    }
  }
}

或使用 npx(无需 Bun):

{
  "mcpServers": {
    "cdc-health-mcp-server": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@cyanheads/cdc-health-mcp-server@latest"],
      "env": {
        "MCP_TRANSPORT_TYPE": "stdio",
        "MCP_LOG_LEVEL": "info"
      }
    }
  }
}

或使用 Docker:

{
  "mcpServers": {
    "cdc-health-mcp-server": {
      "type": "stdio",
      "command": "docker",
      "args": ["run", "-i", "--rm", "-e", "MCP_TRANSPORT_TYPE=stdio", "ghcr.io/cyanheads/cdc-health-mcp-server:latest"]
    }
  }
}

如需使用 Streamable HTTP,请设置传输方式并启动服务:

MCP_TRANSPORT_TYPE=http MCP_HTTP_PORT=3010 bun run start:http
# Server listens at http://localhost:3010/mcp
前置条件
安装
  1. 克隆仓库:
git clone https://github.com/cyanheads/cdc-health-mcp-server.git
  1. 进入目录:
cd cdc-health-mcp-server
  1. 安装依赖:
bun install
  1. 配置环境:
cp .env.example .env
# optionally set CDC_APP_TOKEN

配置

变量描述默认值
CDC_APP_TOKENSocrata 应用令牌;可提高速率限制。无
CDC_BASE_URL未指定 domain 时请求所用的 SODA 主机(cdc://datasets/{datasetId} 资源)。https://data.cdc.gov
CDC_CATALOG_URLSocrata Discovery API 基础 URL。https://api.us.socrata.com/api/catalog/v1
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 等)。info
OTEL_ENABLED启用 OpenTelemetry。false

完整的可选覆盖项列表请参阅 .env.example。

运行服务

本地开发
  • 构建并运行生产版本:

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

    bun run devcheck  # Lints, formats, type-checks, and more
    bun run test      # Runs the test suite
    
Docker
docker build -t cdc-health-mcp-server .
docker run --rm -p 3010:3010 cdc-health-mcp-server

Dockerfile 默认使用 HTTP 传输、无状态会话模式,并将日志写入 /var/log/cdc-health-mcp-server。默认会安装 OpenTelemetry 对等依赖;构建时使用 --build-arg OTEL_ENABLED=false 可省略这些依赖。

项目结构

目录用途
src/index.tscreateApp() 入口点——注册工具/资源/提示词并初始化服务。
src/config解析并验证服务专用环境变量,使用 Zod。
src/mcp-server/tools工具定义(*.tool.ts)。包含四个 Socrata 工具和一个 WONDER 工具。
src/mcp-server/resources资源定义。目录概览和数据集详情。
src/mcp-server/prompts提示词定义。健康趋势分析工作流。
src/services/socrataSocrata 服务——目录搜索、词汇表、元数据和 SoQL 查询。
src/services/wonderCDC WONDER 服务——XML 请求构建器、响应解析器和请求间隔控制。
src/utils共享辅助工具——HTML 转文本、表格单元格转义、词汇匹配和响应预算。
tests/单元测试和集成测试,结构与 src/ 对应。

开发指南

开发指南和架构规则请参阅 CLAUDE.md。简要来说:

  • 处理程序抛出异常,由框架捕获——工具逻辑中不要使用 try/catch
  • 使用 ctx.log 记录日志,使用 ctx.state 存储数据
  • 在 src/index.ts 中的 createApp() 数组里注册新工具和资源
  • 封装外部 API 调用:验证原始数据 → 规范化为领域类型 → 返回输出架构;绝不伪造缺失字段

贡献

欢迎提交问题。提交前请运行检查和测试:

bun run devcheck
bun run test

许可证

Apache-2.0——详情请参阅 LICENSE。

评论

支持 Markdown

第一次接触 MCP?

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

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