使用说明
NIST CVE MCP服务器
模型上下文协议(MCP)服务器,用于与NIST国家漏洞数据库(NVD)API交互,以搜索和检索CVE(常见漏洞和暴露)信息。
特性
- 按关键字、CVE ID、日期范围和严重性搜索CVE
- 具有精确匹配和模糊搜索功能的增强搜索
- 获取特定CVE的详细信息
- 搜索最近的CVE(过去N天)
- 按供应商/产品搜索CVE
- 获取有关最近CVE活动的统计信息
- 新:检查特定库和工具中的漏洞
- 新:分析多个项目的安全风险依赖关系
- 新:全面的漏洞报告和严重性分析
安装
先决条件
- Python 3.8或更高版本(适用于本地安装)
- Docker和Docker Compose(用于容器化部署)- 推荐)
- 用于访问NIST NVD API的互联网连接
选项1:Docker安装(推荐)
脚本快速入门
-
构建Docker镜像:
./build.sh -
部署容器:
./deploy.sh start -
检查状态:
./deploy.sh status -
查看日志:
./deploy.sh logs -f
使用管理脚本
-
启动服务:
./deploy.sh start -
检查状态:
./deploy.sh status -
查看日志:
./deploy.sh logs -f -
停止服务:
./deploy.sh stop
手动Docker命令
塑造形象:
docker build -f Containerfile -t cve-mcp-server:latest .
运行容器:
docker run -d \
--name cve-mcp-server \
--restart unless-stopped \
-v $(pwd)/logs:/app/logs \
--security-opt no-new-privileges:true \
--read-only \
--memory=512m \
--cpus=1.0 \
cve-mcp-server:latest
选项2:本地安装
- 安装所需的依赖项:
pip install -r requirements.txt
- 测试服务器(可选但推荐):
python -c "import mcp_server; print('Server imports successfully')"
用法
选项1:直接使用(用于测试)
直接运行MCP服务器:
python mcp_server.py
选项2:与MCP客户端集成(推荐)
对于Claude Desktop:
-
打开您的Claude Desktop配置文件:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - 视窗:
%APPDATA%\Claude\claude_desktop_config.json
- macOS:
-
添加服务器配置:
{
"mcpServers": {
"nist-cve": {
"command": "python",
"args": ["/full/path/to/your/cve-mcp-server/mcp_server.py"],
"env": {
"MCP_TRANSPORT": "stdio"
}
}
}
}
-
替换
/full/path/to/your/cve-mcp-server/mcp_server.py使用服务器文件的实际路径。 -
重新启动克劳德桌面。
对于其他MCP客户端:
使用适合您客户的配置格式,参考 config_example.json 文件。
可用工具
1. search_cves
使用各种过滤器搜索CVE。
参数:
keyword:CVE描述的搜索词(模糊搜索)keyword_exact_match:CVE描述的精确匹配搜索词cve_id:特定CVE ID(例如“CVE-2023-1234”)pub_start_date:发布的开始日期(ISO 8601格式:YYYY-MM-DTHH:MM:SS.000Z)pub_end_date:已发布的结束日期(ISO 8601格式:YYYY-MM-DTHH:MM:SS.000Z)mod_start_date:修改的开始日期(ISO 8601格式:YYYY-MM-DDTHH:MM:SS.000Z)mod_end_date:修改的结束日期(ISO 8601格式:YYYY-MM-DDTHH:MM:SS.000Z)cvss_v3_severity:CVSS v3严重程度(低、中、高、严重)is_vulnerable:仅筛选易受攻击的配置(需要cpeName-尚未实现)results_per_page:每页结果数(最多2000个)start_index:分页的起始索引
2. get_cve_details
获取特定CVE的详细信息。
参数:
cve_id:CVE标识符(例如“CVE-2023-1234”)
3. search_recent_cves
搜索过去N天内发布的CVE。
参数:
days:回顾的天数(默认值:7)severity:按CVSS v3严重程度(低、中、高、临界)过滤
4. search_cves_by_vendor
按供应商/产品名称搜索CVE。
参数:
vendor:供应商名称(例如“microsoft”、“apache”)product:可选产品名称(例如“windows”、“httpd”)
5. get_cve_statistics
获取最近CVE活动的基本统计数据(过去30天)。
6. check_library_vulnerabilities
检查特定库或工具中的漏洞。
参数:
library_name:库/工具的名称(例如,“express”、“lodash”、“spring boot”)version:要检查的特定版本(例如“4.18.0”)[可选]exact_match:使用精确匹配搜索而不是模糊搜索(默认值:false)severity_filter:按严重程度过滤(低、中、高、临界)[可选]only_vulnerable:仅返回具有易受攻击配置的CVE(默认值:true)
退货:
- CVE结果和漏洞摘要,包括严重性计数和最关键的CVE
7. check_project_dependencies
检查多个项目依赖项是否存在漏洞。
参数:
dependencies:逗号分隔的依赖关系列表(例如,“express、lodash、react”)package_manager:上下文的包管理器类型(npm、pip、maven等)(默认:“npm”)severity_threshold:要报告的最低严重程度(低、中、高、严重)(默认值:“中”)
退货:
- 综合项目漏洞报告,包括汇总统计数据和每个依赖项的结果
使用示例
搜索包含“缓冲区溢出”的CVE
await search_cves(keyword="buffer overflow", results_per_page=10)
获取特定CVE的详细信息
await get_cve_details(cve_id="CVE-2023-1234")
搜索过去7天的关键CVE
await search_recent_cves(days=7, severity="CRITICAL")
搜索Microsoft Windows CVE
await search_cves_by_vendor(vendor="microsoft", product="windows")
获取CVE统计信息
await get_cve_statistics()
检查特定库中的漏洞
# Check Express.js vulnerabilities
await check_library_vulnerabilities(library_name="express", version="4.18.0")
# Check with exact match for more precise results
await check_library_vulnerabilities(library_name="lodash", exact_match=True, severity_filter="HIGH")
检查多个项目依赖关系
# Check Node.js project dependencies
await check_project_dependencies(
dependencies="express,lodash,react,axios",
package_manager="npm",
severity_threshold="MEDIUM"
)
# Check Python project dependencies
await check_project_dependencies(
dependencies="django,requests,flask",
package_manager="pip",
severity_threshold="HIGH"
)
使用精确匹配搜索以获得精确结果
# Search for exact matches only
await search_cves(keyword_exact_match="Spring Boot", is_vulnerable=True)
# Combine with severity filtering
await search_cves(
keyword_exact_match="Apache Log4j",
cvss_v3_severity="CRITICAL",
is_vulnerable=True
)
Docker部署
为了简单和减少依赖性,该项目使用纯Docker而不使用Docker compose。
集装箱特征
- 安全强化:使用只读文件系统以非root用户身份运行
- 资源有限:生产使用的内存和CPU限制
- 健康检查:内置健康监测
- 日志记录:旋转式结构化测井
- 多阶段构建:优化了图像大小和安全性
- 无需作曲:仅限简单的Docker命令
- 符合 OCI 标准使用 Containerfile 而不是 Dockerfile
管理脚本
构建脚本(./build.sh)
# Build with default tag
./build.sh
# Build with custom tag
./build.sh v1.0
# Features:
# - Multi-stage build for smaller images
# - Security scanning with Trivy (if available)
# - Image testing and validation
# - Proper labeling and metadata
部署脚本(./deploy.sh)
# Start container
./deploy.sh start
# Stop container
./deploy.sh stop
# Restart container
./deploy.sh restart
# Show status
./deploy.sh status
# View logs
./deploy.sh logs -f
# Open shell in container
./deploy.sh shell
# Create Docker network
./deploy.sh network
# Clean up everything
./deploy.sh clean
容器配置
Docker设置包括:
- 基本图像:Python 3.11-slim用于最小化攻击面
- 用户:非根
mcp安全用户 - 文件系统:具有特定可写挂载的只读根文件系统
- 资源:512MB内存限制,1个CPU限制
- 安全:无新权限,功能正常下降
- 网络:隔离网桥网络
- 持久性:日志卷装载用于数据持久化
与MCP客户端(Docker)一起使用
当在Claude Desktop等MCP客户端上使用容器化版本时,您有两个选择:
- 通过stdio曝光 (修改容器以使用stdio传输)
- 使用TCP传输 (未来增强)
目前,推荐的方法是使用本地安装进行MCP客户端集成。
API费率限制
NIST NVD API有速率限制:
- 没有API密钥:每30秒5个请求
- 使用API密钥:每30秒50个请求
若要使用API密钥,您需要修改 make_request 函数,以便在标头中包含API键。
数据源
此MCP服务器使用NIST国家漏洞数据库(NVD)API v2.0:
- 基本URL:https://services.nvd.nist.gov/rest/json
- 文档:https://nvd.nist.gov/developers/vulnerabilities
许可证
这个项目是开源的,可以在MIT许可证下使用。