返回市场
漏洞nist MCP服务器

漏洞nist MCP服务器

作者:HaroldFinchIFT7 星标更新:2025-09-24

项目介绍

vuln-nist-mcp-server

一个用于查询美国国家标准与技术研究院(NIST)国家漏洞数据库(NVD)API端点的模型上下文协议(MCP)服务器。

目的

此MCP服务器提供了工具来查询NVD/CVE REST API,并通过MCP协议返回适合LLM消费的格式化文本结果。它包括自动查询分块以处理大日期范围以及并行处理以提高性能的功能。

基础API文档:https://nvd.nist.gov/developers/vulnerabilities

功能

可用工具

  • get_temporal_context - 获取当前日期和时间相关的查询的时间上下文

    • 对于类似“今年”、“去年”、“六个月前”的查询至关重要
    • 提供当前日期映射和日期参数构造示例
    • 使用方法:当用户询问时间相关问题时,首先调用此工具
  • search_cves - 根据关键词搜索CVE描述,并支持灵活的日期过滤

    • 参数:keywordresultsPerPage(默认值:20),startIndex(默认值:0),last_daysrecent_days已弃用),start_dateend_date
    • 新特性v1.1.0:支持使用start_dateend_date参数进行绝对日期范围查询
    • 日期过滤优先级start_date/end_datelast_days → 默认30天
    • 自动将超过120天的查询分割成并行请求
    • 结果按发布时间排序(最新在前)
  • get_cve_by_id - 根据特定CVE ID检索详细信息

    • 参数:cve_id
    • 返回:CVE详情、参考文献、标签及发布时间
  • cves_by_cpe - 列出与通用平台枚举(CPE)关联的CVE

    • 参数:cpe_name(需要完整的CPE 2.3格式),is_vulnerable(可选)
    • 在查询之前验证CPE格式
  • kevs_between - 查找在指定日期范围内添加到CISA KEV目录中的CVE

    • 参数:kevStartDatekevEndDateresultsPerPage(默认值: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,🕘 历史,📅 时间)
  • 详细的日志记录:详细的stderr日志记录用于调试
  • 错误处理:优雅地处理API错误、超时和畸形响应

预备条件

  • Docker(推荐)或Python 3.11+
  • 网络访问NVD端点(services.nvd.nist.gov
  • 兼容MCP的客户端(例如,Claude Desktop)

快速开始

使用Docker(推荐)

# 克隆并构建
git clone https://github.com/HaroldFinchIFT/vuln-nist-mcp-server
cd vuln-nist-mcp-server
docker build -t vuln-nist-mcp-server .

# 运行
docker run --rm -it vuln-nist-mcp-server

配置

环境变量:

  • NVD_BASE_URL:NVD API的基础URL(默认值:https://services.nvd.nist.gov/rest/json
  • NVD_VERSION:API版本(默认值:/2.0
  • NVD_API_TIMEOUT:请求超时时间(秒)(默认值:10

使用示例

与Claude Desktop或MCP客户端一起使用

获取时间相关的查询的时间上下文:

工具:get_temporal_context
参数:{}

搜索最近的CVE(相对时间):

工具:search_cves
参数:{
  "keyword": "Microsoft Exchange",
  "resultsPerPage": 10,
  "last_days": 7
}

根据绝对日期范围搜索CVE:

工具:search_cves
参数:{
  "keyword": "缓冲区溢出",
  "start_date": "2024-01-01T00:00:00",
  "end_date": "2024-03-31T23:59:59"
}

搜索“今年”的CVE(先获取时间上下文):

# 首先,获取时间上下文
工具:get_temporal_context

# 然后使用提供的日期映射
工具:search_cves
参数:{
  "keyword": "远程代码执行",
  "start_date": "2025-01-01T00:00:00",
  "end_date": "2025-09-17T12:00:00"
}

获取CVE详情:

工具:get_cve_by_id
参数:{"cve_id": "CVE-2_2024-21413"}

检查CPE漏洞:

工具:cves_by_cpe
参数:{
  "cpe_name": "cpe:2.3:a:microsoft:exchange_server:2019:*:*:*:*:*:*:*",
  "is_vulnerable": "true"
}

查找最近的KEV添加项:

工具:kevs_between
参数:{
  "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标志添加网络能力

贡献

  1. 分叉仓库
  2. 创建功能分支
  3. 进行更改
  4. 本地测试
  5. 提交拉取请求

许可证

MIT - 详见LICENSE文件

更新日志

v1.1.0

  • 新增:增加了get_temporal_context工具以实现时间感知和时间相关查询
  • 增强search_cves现在支持使用start_dateend_date参数进行绝对日期范围查询
  • 增强:改进了日期过滤逻辑,优先级为:绝对日期 → 相对天数 → 默认30天
  • 增强:所有工具现在返回按时间顺序排序的结果(最新在前),以提高相关性
  • 改进:更好地处理ISO-8601日期解析的错误
  • 弃用search_cves中的recent_days参数(改为使用last_days
  • 更新:徽标和视觉改进

v1.0.0

  • 初始发布
  • 支持所有主要的NVD API端点
  • 自动查询分块和并行处理
  • CPE格式验证
  • 综合错误处理