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格式验证
- 全面的错误处理
