关于 CVErdict
CVErdict 是供 Agent 进行 CVE 分流的只读 MCP 服务,提供带证据链接的风险等级和评分。它列出相关信号、未知项及数据来源,无需账户或 API 密钥。
主要功能
- 01含评分和证据链接的 CVE 判定
- 02搜索并筛选近期 CVE
- 03列出即将到期和逾期的 KEV 项
- 04追踪新出现的利用证据
- 05显示数据时效和来源文件
- 06无需账户的只读工具
适用场景
- 01依据关联证据对 CVE 分流
- 02按厂商或产品查找近期漏洞
- 03检查临近到期的 CISA KEV 项
- 04查看旧 CVE 的利用信号变化
MCP 相关
服务在本机通过 stdio 运行,为 MCP 客户端提供六种只读工具,用于 CVE 判定、搜索、信号列表、KEV 截止日期、利用情况变化和历史记录。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
6收录的工具列表 · 更新于 4 天前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| ids | array | 是 | CVE ID,例如 ["CVE-2026-96951"]。 |
| knob | integer | 否 | Likely next 所需证据量,范围为 30 到 80。默认值为 50,与网站上的设置相同。 |
| detail | boolean | 否 | 同时返回描述、受影响产品、CWE、SSVC、漏洞利用链接、时间线和参考资料。最多 5 个 ID。 |
详细介绍
CVErdict MCP 服务
一个只读的模型上下文协议服务,为 AI Agent 提供与 CVErdict 相同的判定结果:等级、分数、每个理由标签及其分值和证据链接,以及未知信息。每个回答都会说明数据的生成时间和来源文件。无需密钥或账户。
它在你的计算机上通过 stdio 运行,并读取 raw.githubusercontent.com 上已发布的 data 分支;如果 GitHub 访问失败,则改用网站的 /data/ 副本。只有 GitHub 访问失败时才需要网站,因此即使网站宕机,它仍能正常工作。
安装
需要 Node 22.12 或更高版本。该 npm 软件包名为 cverdict-mcp:单个文件,无运行时依赖。0.1.0 之后的版本通过 GitHub Actions 发布,并附带 npm 来源证明,可将每个版本关联到构建它的提交和工作流。
# Claude Code
claude mcp add cverdict -- npx -y cverdict-mcp
其他客户端使用 mcpServers 条目(键名因客户端而异):
{
"mcpServers": {
"cverdict": {
"command": "npx",
"args": ["-y", "cverdict-mcp"]
}
}
}
在 Windows 上,对于无法直接启动 npx 的客户端,请使用 "command": "cmd" 和
"args": ["/c", "npx", "-y", "cverdict-mcp"]。npx -y 会运行最新版本;如需固定版本,请使用
cverdict-mcp@<version>(版本信息见 npm 页面)。
从克隆版本运行
需要 Node 22.12 或更高版本。
git clone --single-branch https://github.com/markusweldon/cverdict.git
cd cverdict && npm ci
# Claude Code
claude mcp add cverdict -- npm --prefix "$PWD" run -s mcp
其他客户端使用 mcpServers 条目(键名因客户端而异):
{
"mcpServers": {
"cverdict": {
"command": "npm",
"args": ["--prefix", "/path/to/cverdict", "run", "-s", "mcp"]
}
}
}
请保留 -s:直接运行 npm run 会将自己的横幅输出到 stdout,而 stdout 是 JSON-RPC 通道。
如需在启动时跳过 npm 和 TypeScript(以及在无法直接启动 npm 的 Windows 客户端上),请先构建一次单文件服务,然后用 Node 启动:
npm run build:mcp # writes mcp/dist/cverdict-mcp.mjs
claude mcp add cverdict -- node "$PWD/mcp/dist/cverdict-mcp.mjs"
运行 git pull && npm ci(如果使用打包文件,还需运行 npm run build:mcp)以更新。
选项
环境变量,均为可选项。MCP 客户端会以精简环境启动服务,因此请将这些变量放入该服务对应的客户端 env 块中。
| 变量 | 默认值 | 用途 |
|---|---|---|
CVERDICT_DATA_BASE | https://raw.githubusercontent.com/markusweldon/cverdict/data/v1/,https://cverdict.dev/data/v1/ | 以逗号分隔、以 /v1/ 结尾的基础 URL,按顺序尝试。仅支持 https,或 localhost 和 127.0.0.1 上的 http(例如,与 npm run mock 和 npm run dev 搭配使用时的 http://localhost:5173/data/v1/)。用于分支或镜像 |
NODE_USE_ENV_PROXY、HTTPS_PROXY | 未设置 | 使用代理时:NODE_USE_ENV_PROXY=1 和 HTTPS_PROXY=http://proxy.example:3128。需要 Node 22.21 或更高版本;较旧版本会忽略 NODE_USE_ENV_PROXY,且不会发出警告。NODE_EXTRA_CA_CERTS 可添加私有 CA |
启动时,服务会向 stderr 写入一行信息,包含其版本、Node 版本、是否检测到代理以及数据基础 URL。stdout 中只会输出 JSON-RPC。
工具
这 6 个工具均为只读(readOnlyHint: true),并返回 structuredContent 以及内容相同的 JSON 文本块。结果类型见 shared/contract.ts 中的“MCP 工具结果”部分。
| 工具 | 答案来自 | 返回内容 | 限制 |
|---|---|---|---|
get_verdict | meta.json、cve/<xx>.json | 等级、通俗易懂的判定、评分、score_math、每个带有分值和链接的原因标签、未知项、KEV、EPSS、CVSS、CVE 页面、分片文件和 cve.org 的链接。detail: true 会增加描述、受影响产品、CWE、SSVC、漏洞利用、标签、时间线和参考资料 | 1 到 15 个 ID;使用 detail 时最多 5 个;knob 为 30 到 80 |
list_signal | signal.json;对于 Watch、Quiet 或低于 35 的 knob,则来自 index.json | 所选等级中的时间窗口内 CVE(默认优先显示 Exploited 和 Likely),按评分从高到低排序。筛选条件:vendor 文本、published_since、kev_only | limit 为 1 到 50(默认 25),offset |
kev_due | kev.json | 未来 within_days 天内到期(0 到 60,默认 7)以及最多逾期 overdue_days 天(0 到 14,默认 7)的 CISA KEV 条目,按最早到期排序,并以 UTC 日历日表示 days_left | limit 为 1 到 50(默认 50),offset |
woke_up | woke.json | 自 since 以来新增利用证据的旧 CVE(默认从数据生成时间往前推 7 天),以及带日期的信号。可按 kinds 筛选 | limit 为 1 到 50(默认 25),offset |
receipts | receipts.json | CVErdict、CVSS 7 或更高以及 EPSS 10% 或更高的评分,在 CISA 将 CVE 列入清单之前对其发出标记的频率:正向日志和事后回测,不包含逐个 CVE 的列表。id 会增加一个 CVE 的条目 | |
search_cves | index.json | 时间窗口内 ID、CNA、供应商、产品或标题中包含 query 所有词语的 CVE,按评分从高到低排序 | query 为 2 到 100 个字符,最多 8 个词;limit 为 1 到 50(默认 20),offset |
日期(published_since、since)均为 UTC:2026-10-01、2026-10-01T06:00Z 或
2026-10-01T06:00:00.000Z。无效日期会报错。服务器无法应用的筛选条件一定会报错,绝不会被静默忽略。
根据 2026-11-03 的实时数据(16,747 个时间窗口内的 CVE)测算,任何工具在其最大限制下返回的最大答案都低于 20,000 个 token;scripts/mcp-measure.ts 会检查这一点。
每个答案都以 data 开头
| 字段 | 含义 |
|---|---|
generated_at、age_hours | 答案所依据的流水线运行时间,以及服务器作答时数据的整小时龄期 |
score_model、knob_default、window | 与 meta.json 中相同 |
sources_down、sources_stale | 本次运行中没有可用数据的来源(其证据为未知,而非不存在),以及提供缓存副本的来源。osv 不列在其中:它只为 packages.json 提供数据,从不用于判定 |
files[] | 读取的每个文件:数据分支上的 path、文件来源 url、文件自身的 generated_at |
warning | 刷新失败且答案来自最后一个可用副本时设置 |
每小时发布后,CDN 可能在几分钟内提供一个来自上次运行的文件;此时 files[] 会显示这两个时间,而不会将其中一个隐藏。
如实解读答案
- Quiet 表示目前还没有证据,绝不表示安全。 数据之外的 CVE(
found: false)是未知的,并非安全:数据涵盖过去 30 天内发布的 CVE、CISA KEV 中的所有 CVE,以及重新出现的旧 CVE。 - 文本不可信。 标题、描述、KEV 名称和必需操作,以及标签文字,均引用自 CNA、CISA 和漏洞利用信息源。服务器指令会告知 Agent,绝不要遵循其中出现的指令。这能降低提示词注入风险,但不能消除风险。
- 隐私。 GitHub 可以看到服务器请求了 256 个分片文件中的哪些文件,但看不到你的 CVE ID 或搜索词。如果 GitHub 拒绝请求或发生故障,同一请求会发送到该站点的
/data/副本。不会上传任何内容,也不会向磁盘写入任何内容。
错误
失败会作为工具结果返回,包含 isError: true 和纯文本消息,例如:
| 情况 | 消息 |
|---|---|
| 文件尚未发布 | woke.json is not on the data branch yet, so this tool has nothing to read. The other tools still work. |
第一个响应的基础位置缺少 meta.json | meta.json is not at the first data base that answered, so no tool can answer. Check CVERDICT_DATA_BASE, ... |
| 所有基础位置均失败,且没有缓存 | CVErdict could not load its data right now (raw.githubusercontent.com: HTTP 503 for meta.json; ...). Try again in a few minutes, or read the files directly: https://github.com/markusweldon/cverdict/tree/data/v1 |
| 调用的 10 s 时限内没有数据 | CVErdict could not load its data in time (...) |
| 数据已迁移到新架构 | The published data uses schema version 2; this server reads version 1. Update the server: ... |
detail 包含超过 5 个 ID | detail: true takes at most 5 IDs; ask again in groups of 5. |
| 参数错误 | Input validation error: Invalid arguments for tool get_verdict: ... |
数据读取方式
- 按顺序尝试基础位置。遇到 404 时不再尝试其他位置。遇到 429 或 403,或超时(4 s 内未收到响应标头,或响应正文停止到达 4 s),则转到下一个基础位置,并将该位置移至队列末尾 10 分钟。网络错误、重定向(被拒绝)、5xx 和格式错误的文件都会转到下一个基础位置。持续到达的缓慢响应正文不会被截断。
- 每次工具调用的时限为 10 s。
get_verdict的分片并行获取,每次最多 6 个。 - 解码后的响应正文上限为 24 MB,这也能防止镜像站的压缩炸弹。文件必须包含
schema_version1 和generated_at;行表必须恰好包含已发布的列。 - 解析后的文件会在进程生命周期内保留在内存中。每隔 5 分钟重新检查
meta.json(raw.githubusercontent.com 无论如何都会缓存 5 分钟);当meta.json指向较新的运行版本时,会重新获取其他文件。空闲的服务不会发出请求,也不会运行定时器。
开发
npx vitest run mcp/test # unit, protocol and spawn tests (what the release workflow runs)
npm test # every test in the repository
npm run build:mcp # the single-file bundle in mcp/dist/
npx tsx scripts/mcp-measure.ts # answer sizes against the live data branch
npx tsx mcp/test/smoke.ts mcp/dist/cverdict-mcp.mjs <data dir> # what CI runs on mock data
SDK(@modelcontextprotocol/server)和 zod 是仓库中精确锁定版本的开发依赖项,并会打包到 dist/cverdict-mcp.mjs 中,因此该软件包没有运行时依赖项。网站不会导入它们:shared/mcp.ts 中存放着两者共用的副本。
发布
仅限维护者。设置 mcp/package.json 中的新版本、shared/mcp.ts 中的 MCP_SERVER.version,以及 mcp/server.json 中的两个 version 字段(测试会确保它们一致),然后提交并推送标签 mcp-v<version>,例如
git tag mcp-v0.1.1 && git push origin mcp-v0.1.1。发布工作流
(.github/workflows/release-mcp.yml) 会检查标签是否与版本匹配,运行 MCP 测试和冒烟测试,打包并通过可信发布(附带来源证明)发布到 npm。最后一个作业会使用工作流的 GitHub OIDC 身份登录,并根据 mcp/server.json 在 MCP Registry 中列出该版本。任何地方都不会存储 npm 或 Registry 令牌。
一次性设置:第一个版本需手动发布(在根目录运行 npm run build:mcp,然后在 mcp/ 中运行 npm login 和 npm publish)。接着在 npmjs.com 上,进入软件包 cverdict-mcp → Settings → Trusted publishing → GitHub Actions:所有者 markusweldon,仓库 cverdict,工作流 release-mcp.yml,不设置环境。在 Publishing access 下,选择要求双重身份验证并禁止使用令牌。
许可证
MIT(LICENSE)。该软件包包含 MCP TypeScript SDK(Apache-2.0,贡献内容采用 MIT 许可)、zod(MIT)以及 SDK 捆绑的库;相关声明见 LICENSE-THIRD-PARTY。数据条款:docs/DATA.md。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。