使用说明
vuln-nist-mcp-server 翻译为中文是:“NIST MCP 服务器漏洞”
一个用于查询NIST国家漏洞数据库(NVD)API端点的模型上下文协议(MCP)服务器。
目的
这个MCP服务器提供了工具来查询NVD/CVE REST API,并通过MCP协议返回适合LLM消费的格式化文本结果。它包括对大日期范围的自动查询分块以及并行处理以提高性能。
基础API文档:https://nvd.nist.gov/developers/vulnerabilities
特点/特性
可用工具
-
get_temporal_context- 获取当前日期和时间上下文,以用于时间相关的查询- 对于“今年”、“去年”、“6个月前”等查询至关重要
- 提供当前日期映射及日期参数构建示例
- 使用方法/用途当用户提出与时间相关的问题时,首先调用这个工具
-
search_cves- 通过关键词搜索CVE描述,并支持灵活的日期过滤- 参数:
keyword,resultsPerPage(默认:20),startIndex(默认:0),last_days(recent_days已被弃用),start_date,end_date - v1.1.0 新增功能支持绝对日期范围的
start_date并且end_date参数 - 日期过滤优先级:
start_date/end_date→last_days→ 默认30天 - 将超过120天的自动分块查询转换为并行请求
- 按发布日期排序的结果(最新优先)
- 参数:
-
get_cve_by_id- 获取特定CVE的详细信息- 参数:
cve_id - 返回内容:CVE 详情、参考信息、标签和发布日期
- 参数:
-
cves_by_cpe- 列出与通用平台枚举(CPE)相关联的CVE(通用漏洞和暴露)- 参数:
cpe_name(需提供完整的CPE 2.3格式),is_vulnerable(可选) - 在查询前验证CPE格式
- 参数:
-
kevs_between- 查找在特定日期范围内添加到CISA KEV目录中的CVE(常见漏洞和暴露)- 参数:
kevStartDate,kevEndDate,resultsPerPage(默认:20),startIndex(默认:0) - 将超过90天的自动分块查询转换为并行请求
- 按发布日期排序的结果(最新优先)
- 参数:
-
cve_change_history- 获取CVE(通用漏洞和暴露)的变更历史记录- 参数:
cve_id或(changeStartDate+changeEndDate)resultsPerPage(默认值:20),startIndex(默认:0) - 将超过120天的日期范围查询自动拆分为并行请求
- 结果按更改创建日期排序(最新在前)
- 参数:
主要特点
- 时间意识新
get_temporal_context用于精确时间相关查询的工具 - 灵活的日期过滤支持相对(
last_days)和绝对(start_date/end_date日期范围 - 改进的结果排序所有结果按时间顺序排序(最新在前),以提高相关性
- 并行处理大的日期范围会自动被拆分成多个部分,并并发处理
- 输入验证CPE格式验证、日期解析、参数清理
- 表情符号指示器清晰的视觉反馈(✅ 成功,❌ 错误,⚠️ 警告,🔍 搜索,🔥 关键事件列表(KEV),🌐 受感染的计算机(CPE),🌙 历史记录,📅 时间线)
- 全面日志记录详细的错误输出日志记录,用于调试
- 错误处理优雅地处理API错误、超时和格式错误的响应
先决条件
- Docker(推荐)或 Python 3.11+
- 访问NVD端点的网络连接(
services.nvd.nist.gov) - MCP兼容客户端(例如,Claude Desktop)
快速入门
使用 Docker(推荐)
# Clone and build
git clone https://github.com/HaroldFinchIFT/vuln-nist-mcp-server
cd vuln-nist-mcp-server
docker build -t vuln-nist-mcp-server .
# Run
docker run --rm -it vuln-nist-mcp-server
配置
环境变量:
NVD_BASE_URLNVD API的基础URL(默认:https://services.nvd.nist.gov/rest/json)NVD_VERSIONAPI版本(默认:/2.0)NVD_API_TIMEOUT请求超时时间(以秒为单位)(默认:10)
使用示例
使用Claude Desktop或MCP客户端
为时间相关查询获取时间上下文:
Tool: get_temporal_context
Params: {}
搜索最近的CVE(相对时间):
Tool: search_cves
Params: {
"keyword": "Microsoft Exchange",
"resultsPerPage": 10,
"last_days": 7
}
按绝对日期范围搜索CVE(通用漏洞和披露)条目:
Tool: search_cves
Params: {
"keyword": "buffer overflow",
"start_date": "2024-01-01T00:00:00",
"end_date": "2024-03-31T23:59:59"
}
搜索“今年”的CVE(首先使用get_temporal_context):
# First, get temporal context
Tool: get_temporal_context
# Then use the provided date mappings
Tool: search_cves
Params: {
"keyword": "remote code execution",
"start_date": "2025-01-01T00:00:00",
"end_date": "2025-09-17T12:00:00"
}
获取CVE详情:
Tool: get_cve_by_id
Params: {"cve_id": "CVE-2024-21413"}
检查CPE(客户驻地设备)漏洞:
Tool: cves_by_cpe
Params: {
"cpe_name": "cpe:2.3:a:microsoft:exchange_server:2019:*:*:*:*:*:*:*",
"is_vulnerable": "true"
}
查找最近的KEV(关键事件/漏洞)新增内容:
Tool: kevs_between
Params: {
"kevStartDate": "2024-01-01T00:00:00.000Z",
"kevEndDate": "2024-03-31T23:59:59.000Z"
}
性能说明
- 查询日期范围超过90-120天的查询会自动分块处理,以提高性能
- 并行处理减少了大日期范围的总查询时间
- 结果会自动按发布日期(最新优先)对所有片段进行排序
发展
文件结构
vuln-nist-mcp-server/
├── Dockerfile
├── glama.json
├── LICENSE
├── nvd_logo.png
├── README.md
├── requirements.txt
├── SECURITY.md
└── vuln_nist_mcp_server.py
安全考量
- 无需API密钥(公共NVD端点)
- 容器以非root用户身份运行(
mcpuser) - 输入验证可防止注入攻击
- 不持久存储敏感数据
- 仅在需要时通过Docker标志添加网络功能
做出贡献
- 为仓库创建分支(或:克隆仓库)
- 创建一个特性分支
- 做出你的更改
- 在本地测试
- 提交一个拉取请求
许可证
麻省理工学院(MIT)- 详见LICENSE文件
更新日志
v1.1.0
- 新已添加
get_temporal_context用于时间感知和时间相关查询的工具 - 增强的:
search_cves现在支持使用绝对日期范围start_date并且end_date参数 - 增强的改进了日期过滤逻辑,优先级顺序为:绝对日期 → 相对天数 → 默认30天
- 增强的所有工具现在均返回按时间顺序(最新优先)排列的结果,以提高相关性
- 改进的改进ISO-8601日期解析的错误处理
- 已弃用:
recent_days参数在search_cves(使用last_days(相反) - 已更新标志和视觉效果的改进
版本1.0.0
- 首次发布
- 支持所有主要的NVD API终端节点
- 自动查询分块与并行处理
- CPE格式验证
- 全面的错误处理