mcpField
C
cpsc-recalls-mcp-server

cpsc-recalls-mcp-server

远程服务
github.com/cyanheads法律与政务1今天更新
代码仓库

关于 cpsc-recalls-mcp-server

面向美国 CPSC 消费品召回记录的 MCP 服务,支持筛选搜索、获取完整召回详情和查看近期召回,并标明其他机构负责的召回范围。

主要功能

  1. 01按产品、品牌、危害和日期搜索召回
  2. 02按召回编号获取完整记录
  3. 03查看指定日期范围内的近期召回
  4. 04提供危害、补救措施、产品和来源信息

适用场景

  1. 01核查某产品或品牌是否被召回
  2. 02查看已知召回的危害和补救说明
  3. 03按日期范围跟踪 CPSC 近期召回

MCP 相关

向 MCP 客户端提供三个召回搜索与查询工具,支持 STDIO 和 Streamable HTTP 传输。

配置

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

服务地址https://cpsc-recalls.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/cpsc-recalls-mcp-server0.3.0

工具

3
参数类型必填说明
limitinteger否此页返回的最大召回数量。默认为 20。达到 64,000-byte 响应大小上限时,返回数量会减少;此时 has_more 会指示是否还有更多结果。
offsetinteger否返回结果前跳过的匹配记录数。要翻阅 total_found 中的结果,请将 offset 增加上一页返回的召回数量;若上一页达到响应大小上限,则应增加 limit。offset 大于或等于 total_found 时会返回空结果集,而不会报错。
remedystring否在自由文本补救说明中搜索关键词,例如 "repair"、"refund"、"firmware update";匹配包含所有词语的说明,不区分词序。此处搜索的是补救文本,而非 remedy_options 类别——即使记录的 remedy_options 仅列出 "Refund",但说明中提到免费维修套件,"repair" 仍会匹配。此筛选条件与其他筛选条件按 AND 组合;若要将补救文本作为多个字段之一进行匹配,请改用 hazard_search。
date_endany否仅包含此日期当天或之前的召回信息。ISO 8601 格式:"YYYY-MM-DD"。必须是有效日历日期,且不得早于 date_start。
importerstring否进口商公司名称。匹配进口商名称中包含所有词语的召回信息,不区分词序。搜索将产品带入美国的公司所涉及的召回时使用。
retailerstring否零售商名称,例如 "Walmart"、"Target"、"Amazon"。匹配零售商文本(门店名称、销售日期和价格)包含所有词语(顺序不限)的召回记录。
date_startany否仅包含此日期当天或之后的召回记录。ISO 8601 格式:"YYYY-MM-DD"。必须是实际日历日期;"2026-02-31" 和 "2026-99-99" 会被拒绝。
distributorstring否分销商公司名称,例如 "Walmart"、"Costco"。匹配分销商名称包含所有词语(顺序不限)的召回记录。分销商与零售商和进口商是不同角色,且仅列于少得多的召回记录中。
updated_endany否仅包含 CPSC 在此日期当天或之前最后发布的召回记录。ISO 8601 格式:"YYYY-MM-DD"。必须是实际日历日期,且不得早于 updated_start。
manufacturerstring否制造商名称,例如 "Samsung"、"LEGO"。匹配制造商名称包含所有词语(顺序不限)的召回记录。许多召回记录列出的是进口商、零售商或分销商,而非制造商;若没有结果,请尝试这些筛选条件。
product_namestring否要搜索的产品名称,例如 "crib"、"space heater"、"bicycle"。匹配产品名称包含所有词语(顺序不限)的召回记录;部分单词也可匹配。
title_searchstring否在召回标题中搜索关键词,例如 "chandelier"、"space heater"、"Graco crib"。匹配标题包含所有词语(顺序不限)的记录。CPSC 标题会注明品牌、产品和危害,因此对于大多数搜索,这是信号最强的单一筛选条件。
hazard_searchstring否危害或安全概念关键词,例如 "fire"、"choking"、"burn"、"tip-over dresser"。危害说明、产品名称或补救说明中任意位置包含所有词语时即匹配;词语可出现在三者中的任一项,顺序不限,且不区分大小写。用于筛选危害类型;若结果范围过广,可与其他筛选条件组合。
updated_startany否仅包含 CPSC 在此日期当天或之后最后发布的召回记录。ISO 8601 格式:"YYYY-MM-DD"。这与 date_start 是不同的维度:2003 年的召回记录若于 2025 年重新发布,则符合 updated_start "2025-01-01"。用于回答“CPSC 最近更新了哪些内容”。必须是实际日历日期。
description_searchstring否仅在召回说明中搜索关键词,不搜索标题、危害文本或补救说明;匹配说明包含所有词语(顺序不限)的记录。用于查找 product_name 未涵盖的产品详情,例如型号、颜色和销售渠道。搜索危害概念时优先使用 hazard_search;搜索召回标题时优先使用 title_search。

详细介绍

@cyanheads/cpsc-recalls-mcp-server

通过 MCP 搜索和检索美国消费品安全委员会(CPSC)的消费品召回信息。支持 STDIO 或 Streamable HTTP。

3 个工具

Version License Docker MCP SDK npm TypeScript Bun

Install in Claude Desktop Install in Cursor Install in VS Code

Framework


概述

CPSC saferproducts.gov 数据库中的消费品召回信息,涵盖玩具、电子产品、家具、家用电器、儿童用品、工具和服装。可按产品、品牌、零售商或危害搜索召回信息,获取特定召回编号的完整详情,或按日期范围获取近期召回列表。

工具
工具描述
cpsc_search_recalls按标题、产品名称、品牌、零售商、进口商、分销商、危害、补救措施或描述关键词搜索消费品召回信息,支持可选日期筛选和偏移分页
cpsc_get_recall按召回编号获取单条召回的完整详情,包括危害、补救措施、产品、伤害、图片和 CPSC 官方页面
cpsc_get_recent获取最新召回信息,按时间从新到旧排序,并限定在可配置的日期范围内

CPSC 的管辖范围仅限消费品——食品和药品(FDA)、机动车辆和轮胎(NHTSA)、船只(USCG)、农药(EPA)以及枪支(ATF)均不在此数据库中;每个响应都会附带管辖范围说明。

功能参考

cpsc_search_recalls 工具
  • 至少提供一个筛选条件,多个条件以 AND 组合:9 个文本筛选项,每项最多 500 个字符(title_search 通常信号最强,另有 product_name、manufacturer、retailer、importer、distributor、description_search、remedy、hazard_search),以及两个日期范围(date_start/date_end 筛选发布日期,updated_start/updated_end 筛选 CPSC 最近一次发布日期);limit(1–200,默认值为 20)和 offset 用于分页浏览 total_found
  • 返回危害、补救方案及说明、产品、UPC、按角色分类的公司名称、图片、cpsc_url 和每条召回记录的 data_quality_notes;无匹配项时会返回空的成功结果,其中 effectiveQuery 会回显筛选条件,提示信息会指出应放宽的筛选条件。失败情况:missing_criteria、invalid_date_range、upstream_rejected(不可重试)、upstream_error(可重试)
  • has_more 是分页信号;若页面因 64,000 字节的响应预算而被截断,会附带提示信息,告知可继续查询的 offset

cpsc_get_recall 工具
  • 一个 recall_number:2002 年至今的记录使用 5 位数字("25043"),1998–2001 年的记录使用 5 位数字加字母 a–d("99003a")
  • 返回完整记录——可为空的 description(型号通常位于此处)、危害、补救方案及说明、所有产品变体、UPC、伤害情况叙述、按角色分类的公司名称、制造国家、图片、跨机构协调召回的 URL,以及 data_quality_notes
  • 失败情况:not_found(通过 cpsc_search_recalls 或 cpsc_get_recent 查找编号)、upstream_rejected(不可重试)、upstream_error(可重试)

cpsc_get_recent 工具
  • days 回溯窗口(1–365,默认值为 30),以今天为基准;limit(1–100,默认值为 20)和 offset 用于分页浏览 total_found。缩小 days 会舍弃最早的召回记录,而不是进行分页。较早的召回记录可通过 cpsc_search_recalls 的日期范围查询
  • 每条召回记录返回精简信息——编号、日期、标题、危害、补救类型、产品名称、cpsc_url、data_quality_notes——供 cpsc_get_recall 获取完整信息;has_more 是分页信号,若时间窗口内无记录、offset 超出末尾或页面因响应预算而被截断,则会附带提示信息。失败情况:upstream_rejected(不可重试)、upstream_error(可重试)

功能

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

CPSC 专属功能:

  • 完整对接 CPSC saferproducts.gov 公共召回 API,支持搜索、查看单项召回详情和获取最新召回列表
  • 九种文本筛选条件均支持逐词匹配:任意顺序、不区分大小写,并针对结果中显示的纯文本进行匹配;匹配范围涵盖分页前的完整结果集,确保 total_found 和 has_more 保持准确;hazard_search(别名 hazard)涵盖危险描述、产品名称和补救说明
  • 同时支持现代的 5 位数召回编号,以及带字母后缀的 1998–2001 年历史记录
  • 在每个响应中说明管辖范围边界,在 Agent 错误归属前标记超出范围的食品、车辆和药品召回

便于 Agent 使用的输出:

  • 每个响应都包含来源信息:source_note、cpsc_url 和 (CPSC source text) 引用块标签,用于区分转述的 CPSC 叙述内容和服务自身的说明
  • 两种输出形式均提供纯文本:CPSC 在部分记录中保存的 HTML 标记和字符代码(&amp;、<br>、多余的表格标签)会在匹配和输出前转换为纯文本;content[] 会转义 Markdown,确保 1HFVE05**K4000003 等型号和序列号中的每个字符都能保留;召回页面和联合召回会呈现为链接,产品图片会与说明文字一起内嵌显示;HTTP(S) 地址会在两种输出形式中保留 CPSC 提供的 URL 值,而其他协议的地址则以文本形式显示
  • 分页标识字段:每个搜索或最新召回响应都包含 total_found、offset、has_more 和 truncated,便于 Agent 判断结果是否被截断并通过 offset 翻页;每种输出形式的单页内容都限制在 64,000 字节以内,如果页面因预算限制而提前结束,会提示下一个偏移量
  • 每个响应都包含 data_quality_notes,说明上游记录中观察到的数据缺失(例如缺少危险描述或没有产品条目);这些说明依据 CPSC 留空的字段生成,而非主观判断
  • 每个响应都包含管辖范围说明(cpsc_jurisdiction),当产品超出 CPSC 管辖范围时,Agent 可据此将用户转介至正确的机构(FDA、NHTSA、USCG、EPA、ATF)

快速开始

公共托管实例

可使用公共实例:https://cpsc-recalls.caseyjhand.com/mcp,无需安装。该实例提供 Streamable HTTP;每种客户端的配置格式各不相同。

Claude Code:

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

Cline(cline_mcp_settings.json):

{
  "mcpServers": {
    "cpsc-recalls-mcp-server": {
      "type": "streamableHttp",
      "url": "https://cpsc-recalls.caseyjhand.com/mcp"
    }
  }
}

Cursor(mcp.json):

{
  "mcpServers": {
    "cpsc-recalls-mcp-server": {
      "url": "https://cpsc-recalls.caseyjhand.com/mcp"
    }
  }
}

Claude Desktop 可在 Settings → Connectors 下添加远程服务。

自托管 / 本地运行

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

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

或者使用 npx(无需安装 Bun):

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

或者使用 Docker:

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

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

MCP_TRANSPORT_TYPE=http MCP_HTTP_PORT=3010 bun run start:http
# Server listens at http://localhost:3010/mcp
前置要求
  • Bun v1.4.0 或更高版本(或 Node.js v24+)。
  • 无需 API 密钥 — CPSC 公共召回 API 可免费访问。
安装
  1. 克隆仓库:
git clone https://github.com/cyanheads/cpsc-recalls-mcp-server.git
  1. 进入目录:
cd cpsc-recalls-mcp-server
  1. 安装依赖:
bun install
  1. 配置环境:
cp .env.example .env
# edit .env if needed — no required API keys

配置

所有配置都会在启动时通过 Zod 架构进行验证。主要环境变量:

变量说明默认值
MCP_TRANSPORT_TYPE传输方式:stdio 或 httpstdio
MCP_HTTP_PORTHTTP 服务端口3010
MCP_HTTP_HOSTHTTP 服务主机127.0.0.1
MCP_HTTP_ENDPOINT_PATHHTTP 端点路径/mcp
MCP_PUBLIC_URL用于 TLS 终止反向代理部署的公共源—
MCP_SESSION_MODE会话处理方式:auto、stateful 或 stateless。服务在 src/index.ts 中声明为 stateless;设置此变量会覆盖该声明。stateless
MCP_AUTH_MODE身份验证方式:none、jwt 或 oauthnone
MCP_LOG_LEVEL日志级别(debug、info、warning、error)info
LOGS_DIR日志文件目录(仅限 Node.js)<project-root>/logs
LOG_TOOL_FAILURE_PAYLOADS记录每次失败工具调用的参数和结果,按键名进行脱敏,并限制为 LOG_TOOL_FAILURE_PAYLOAD_MAX_BYTES(默认值为 16384)。自由格式值中的机密不会被脱敏。false
STORAGE_PROVIDER_TYPE存储后端:in-memory、filesystem、supabase、cloudflare-kv/r2/d1in-memory
OTEL_ENABLED启用 OpenTelemetryfalse

无需配置服务专属 API 密钥。可查看 .env.example,了解所有可选覆盖项。

运行服务

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

    # 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
    
Docker
docker build -t cpsc-recalls-mcp-server .
docker run --rm -p 3010:3010 cpsc-recalls-mcp-server

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

项目结构

目录用途
src/index.tscreateApp() 入口点 — 注册工具并初始化 CPSC 服务
src/mcp-server/tools工具定义(definitions/*.tool.ts)——搜索、获取召回信息、获取近期召回;此外还有 response-budget.ts,供两个列表工具共用的页面大小预算,以及 markdown-escape.ts,用于转义 content[] 中的 CPSC 文本
src/services/cpsc-recallCPSC 召回服务 — API 客户端、类型,以及 normalize-text.ts,用于将 CPSC 的 HTML 标记和字符代码转换为纯文本

开发指南

开发指南和架构规则请参阅 CLAUDE.md / AGENTS.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 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。