CVE风险MCP服务器
MCP服务器用于CVE查找、KEV丰富和“我应该先修补什么?”排名。它 实施MCP tools/list + tools/call stdio流动与收益结构风险 根据CVE进行评估。
特性
- 使用解析的CVSS v3/v4度量进行CVE详细查找。
- CISA KEV馈电富集(主+镜像回退)。
- EPSS风格的风险评分,包括原因和优先级标签。
- 补丁队列的批量排名。
工具
cve_lookup
- 输入: cve_id, include_kev, include_epss - 输出:CVE摘要+KEV状态+风险评分
cve_rank
- 输入: cve_ids, include_kev, include_epss, fail_fast - 输出:排名列表(最高风险第一)
cve_patch_first
- 输入: cve_ids, top_n, include_kev, include_epss, fail_fast - 输出:排名列表+前N名推荐
cve_status
- 输入:无 - 输出:上游状态+缓存统计数据(时间戳+上次错误摘要)
cve_config
- 输入:无 - 输出:有效的运行时配置(URL、缓存、评分、批量限制)
cve_refresh
- 输入: cve_ids, include_epss, refresh_kev - 输出:缓存热/刷新摘要
cve_export
- 输入: cve_ids, include_kev, include_epss, include_markdown, fail_fast - 输出:排名列表+可选降价摘要
快速入门
make setup
make check可靠性旋钮
--retries和--retry-backoff-seconds暂时HTTP故障(429/5xx+网络错误)的控制限制重试。Retry-After支持增量秒和HTTP日期响应标头。--print-effective-config打印已解析的设置及其源代码(CLI/config/env/内置)以获得调试优先级。--cve-timeout,--kev-timeout,以及--epss-timeout覆盖共享--timeout用于每源代码控制。--config(TOML)集中处理违约。优先级:CLI标志>配置>环境>内置。- MCP和JSON CLI响应现在包括上游故障的结构化错误数据。
- 批量流(
cve_rank,cve_patch_first,cve_export)软故障,按件退货errors而不会丢失成功的结果。 - KEV/EPSS浓缩是最好的努力:浓缩失败记录在
errors,但返回的结果仍然缺少富集字段。 - 可选的严格批处理模式可通过
fail_fast(MCP工具arg)或--fail-fast(JSON-CLI)。 --max-batch-size限制了批处理请求可以处理的唯一CVE数量(0表示禁用)。--max-parallel控制批CVE查找的受控并行性(默认值:1)。--cache-dir为CVE/KEV/EPSS响应启用持久的磁盘缓存(环境:CVE_RISK_CACHE_DIR).--offline禁用所有网络获取并使用仅缓存模式(需要--cache-dir).- 查找/排名/补丁/导出/刷新响应包括
cache在脱机模式下提供过时缓存条目时阻止(cache.served_stale=true每个来源的详细信息)。 - CVE ID经过验证,批处理输入在上游调用之前进行重复数据消除。
- CVE解析允许遗留模式变体(备用CVSS和引用字段)。
- 结构化错误包括补救提示(例如,尊重
Retry-After429秒)。 --epss-weight(或envCVE_RISK_EPSS_WEIGHT)校准EPSS对风险评分的影响程度(默认值:1.0)。--kev-floor(环境CVE_RISK_KEV_FLOOR)以及--kev-boost(环境CVE_RISK_KEV_BOOST)校准KEV评分行为。--age-recent-days/--age-recent-boost(环境CVE_RISK_AGE_RECENT_DAYS/CVE_RISK_AGE_RECENT_BOOST)校准“新CVE”增压。--age-old-days/--age-old-penalty(环境CVE_RISK_AGE_OLD_DAYS/CVE_RISK_AGE_OLD_PENALTY)校准“旧CVE”惩罚。cve_status包括缓存元数据以及请求/延迟计数器、过时缓存计数器和滚动窗口延迟百分位数(request_count,success_count,error_count,stale_served_count,avg_latency_ms,last_latency_ms,p50_latency_ms,p95_latency_ms,latency_sample_count,latency_window_size)每个来源。- stdio MCP模式向stderr发送结构化JSON日志(可通过以下方式配置
--mcp-log-level).
运营
看 docs/OPERATIONS.md 对于小型操作员手册(解释 cve_status,常见补救措施)。
运行(stdio MCP服务器)
python -m cve_risk_mcp --stdio运行(JSON CLI模式)
cve-risk-mcp lookup CVE-2023-23397 --pretty
cve-risk-mcp rank CVE-2023-23397 CVE-2021-44228 --pretty
cve-risk-mcp rank CVE-2023-23397 CVE-2021-44228 --fail-fast --pretty
cve-risk-mcp patch-first CVE-2023-23397 CVE-2021-44228 --top-n 1 --pretty
cve-risk-mcp status --pretty
cve-risk-mcp refresh --no-refresh-kev --pretty
cve-risk-mcp export CVE-2023-23397 CVE-2021-44228 --include-markdown --pretty配置文件(可选)
使用 --config 在TOML文件中设置默认值。看 cve-risk-mcp.example.toml 作为一个起点。
输出到文件
cve-risk-mcp lookup CVE-2023-23397 --output out.json --prettyNDJSON输出
cve-risk-mcp rank CVE-2023-23397 CVE-2021-44228 --format ndjson当存在批处理错误时,NDJSON输出会附加结构化 {"error": ...} 排名项目后的记录。
从文件加载CVE
cve-risk-mcp rank --cve-file cves.txt --format ndjson
cve-risk-mcp patch-first --cve-file cves.txt --top-n 3 --format json
cve-risk-mcp export --cve-file cves.txt --include-markdown --format json从stdin加载CVE(批处理命令)
当没有位置CVE且没有 --cve-file 提供, rank, patch-first,以及 export 将从stdin读取。
cat cves.txt | cve-risk-mcp rank --format ndjson
cat trivy.json | cve-risk-mcp patch-first --top-n 5 --format json--cve-file 还支持从常见扫描程序JSON输出(自动检测)中提取CVE ID:Grype JSON、Trivy JSON和OSV扫描程序JSON。
cve-risk-mcp rank --cve-file grype.json --format ndjson
cve-risk-mcp patch-first --cve-file trivy.json --top-n 5 --format json示例(工具/调用)
{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"cve_lookup","arguments":{"cve_id":"CVE-2023-23397"}}}数据源
- CVE数据:CIRCL漏洞查找API。
- KEV数据:CISA已知漏洞源(主URL)
回到CISA GitHub官方镜像。
- EPSS数据(可选):第一个EPSS API。
备注
- 无身份验证:适用于本地或受控环境。
- 所有出站网络调用都是对已配置API的GET。
