mcpField
N
NVD Database MCP Server

NVD Database MCP Server

本地服务
github.com/marcoeg数据库1583 周前更新

关于 NVD Database MCP Server

NVD Database MCP Server 通过 NVD API 查询 NIST 国家漏洞数据库,适合需要检索漏洞记录的安全工作流。它支持按 CVE ID 获取详情,也可按关键词搜索,并要求配置 NVD API 密钥。

主要功能

  1. 01按 CVE ID 获取漏洞详情
  2. 02按关键词搜索 CVE
  3. 03设置精确匹配与结果数量
  4. 04提供详细或精简记录
  5. 05支持 stdio 与 SSE 传输

适用场景

  1. 01核查特定 CVE 的评分与引用
  2. 02查找某关键词相关漏洞
  3. 03在安全分析流程中查询 NVD 记录

MCP 相关

该 MCP 服务向兼容客户端提供 `get_cve` 和 `search_cve` 工具,用于访问 NVD。支持 stdio 和 SSE 传输,需要 NVD API 密钥。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"nvd": {
"command": "uvx",
"args": [
"mcp-nvd"
],
"env": {
"NVD_API_KEY": "<NVD_API_KEY>"
}
}
}
}
启动命令uvx mcp-nvd
需要配置的环境变量
NVD_API_KEY密钥

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypimcp-nvd

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

NVD 数据库 MCP 服务

PyPI - Version

README 配图

一个 模型上下文协议 服务实现,可通过 API 查询 NIST 国家漏洞数据库(NVD)。https://nvd.nist.gov/

需要先准备一个 NVD API 密钥。(在此申请)。

状态

可与 Claude 桌面应用及其他符合 MCP 规范的托管端和客户端配合使用,支持 stdio 和 sse 两种传输方式。

功能

  • 按 ID 查询特定 CVE,并获取详细漏洞数据。
  • 按关键词搜索 NVD 数据库,并自定义结果选项。
  • 支持 Server-Sent Events(SSE)传输,实现实时通信。
  • 兼容 Claude 桌面应用等符合 MCP 规范的客户端。
工具

该服务实现了以下工具,用于查询 NVD 数据库:

  • get_cve:

    • 描述:按 ID 获取 CVE 记录。
    • 参数:
      • cve_id(str):CVE ID(例如,CVE-2019-1010218)。
      • concise(bool,默认值为 False):如果为 True,则返回更简短的格式。
    • 返回值:详细的 CVE 信息,包括评分、弱点和参考资料。
  • search_cve:

    • 描述:按关键词搜索 NVD 数据库。
    • 参数:
      • keyword(str):搜索词(例如,Red Hat)。
      • exact_match(bool,默认值为 False):如果为 True,则要求完全匹配短语。
      • concise(bool,默认值为 False):如果为 True,则返回更简短的 CVE 记录。
      • results(int,默认值为 10):CVE 记录的最大数量(1-2000)。
    • 返回值:匹配的 CVE 列表及总数。

配置

  1. 创建或编辑 Claude 桌面应用的配置文件,路径如下:

    • macOS:~/Library/Application Support/Claude/claude_desktop_config.json
    • Windows:%APPDATA%/Claude/claude_desktop_config.json
  2. 添加以下内容:

{
  "mcpServers": {
    "mcp-nvd": {
      "command": "/path/to/uvx",
      "args": ["mcp-nvd"],
      "env": {
        "NVD_API_KEY": "your-api-key"
      }
    }
  }
}
  1. 将 /path/to/uvx 替换为 uvx 可执行文件的绝对路径。在终端中运行 which uvx 命令即可查找路径。这样可以确保启动服务时使用正确版本的 uvx。

  2. 重启 Claude 桌面应用以应用更改。

开发

设置
  1. 前置条件:

  2. 克隆仓库:

git clone https://github.com/marcoeg/mcp-nvd
cd mcp-nvd
  1. 设置环境变量:

    • 在项目根目录中创建 .env 文件:
      NVD_API_KEY=your-api-key
      
    • 将 your-api-key 替换为你的 NVD API 密钥。
  2. 安装依赖项:

uv sync
uv pip install -e .
使用 MCP Inspector 运行
cd /path/to/the/repo
source .env

npx @modelcontextprotocol/inspector uv \
    --directory /path/to/repo/mcp-nvd run mcp-nvd

然后在浏览器中打开 MCP Inspector 指定的 URL,通常为 http://localhost:8077?proxyPort=8078

可在 Inspector 中随时切换 stdio 和 sse 传输类型。

使用 SSE 客户端测试
运行服务:
cd /path/to/the/repo
source .env

uv run mcp-nvd --transport sse --port 9090
  • 默认使用 SSE 传输,端口为 9090。
运行客户端:

测试 get_cve:

uv run client.py http://localhost:9090/sse CVE-2019-1010218

测试 search_cve(默认 10 个结果):

uv run client.py http://localhost:9090/sse "search:Red Hat"

测试 search_cve(精确匹配,5 个结果):

uv run client.py http://localhost:9090/sse "search:Microsoft Windows:exact:5"

Docker 设置

构建
docker build -t mcp-nvd:latest .
运行

使用 .env:

docker run -d -p 9090:9090 -v /path/to/.env:/app/.env mcp-nvd:latest

使用环境变量:

docker run -d -p 9090:9090 -e NVD_API_KEY="your-key" mcp-nvd:latest

自定义端口:

docker run -d -p 8080:8080 -v /path/to/.env:/app/.env mcp-nvd:latest uv run mcp-nvd --transport sse --port 8080 --host 0.0.0.0
验证
docker logs <container_id>
# Expect: INFO: Uvicorn running on http://0.0.0.0:9090

测试:

uv run client.py http://localhost:9090/sse CVE-2019-1010218
说明
  • 确保 .env 中包含 NVD_API_KEY=your-key,或使用 -e。
  • 默认端口:9090。

以下是以代码块中的 Markdown 注释格式整理的摘要,可用于 docker-compose.yaml 或 README.md 等文件:

使用 Docker Compose 进行测试

此 docker-compose.yaml 位于 tests/ 目录中,定义了一个服务,用于使用预构建的 Docker 镜像测试 MCP-NVD 服务。它面向测试场景,类似于独立服务(如 clickhouse),并假设镜像已提前构建,而不是每次都重新构建。

前提假设
  • 预构建镜像:该服务使用标记为 mcp-nvd:test 的预构建镜像,该镜像已在本地或镜像仓库中。此镜像基于上级目录中的 Dockerfile,使用 uv 配置 MCP-NVD 服务,并以 SSE 模式在端口 9090 上运行。
如何构建镜像

创建 mcp-nvd:test 镜像:

  1. 切换到项目根目录:
    cd ./mcp-nvd
    
  2. 使用 Dockerfile 构建镜像:
    docker build -t mcp-nvd:test .
    
    • 这会使用 pyproject.toml 中的所有依赖项和 mcp_nvd/ 模块构建镜像,并将运行该服务设为默认命令。
运行服务

在 tests/ 目录中运行:

cd tests
docker-compose up
  • 访问:服务运行在 http://localhost:9090。
  • 停止:docker-compose down。
  • 环境:确保 NVD_API_KEY 位于 ../.env 中,或使用 docker-compose --env-file ../.env up。
在 Docker Compose 场景中运行 test_tools.py

在 Docker 环境中运行单元测试(test_tools.py):

  1. 启动服务:确保通过 docker-compose up 运行 mcp-nvd 服务。
  2. 进入容器:
    • 使用以下命令识别容器名称(例如 mcp-nvd-mcp-nvd-1):
      docker ps
      
    • 在容器内运行测试:
      docker exec -it mcp-nvd-mcp-nvd-1 python /app/tests/test_tools.py
      
    • 注意:假设 test_tools.py 已复制到镜像中的 /app/tests/。如果没有,请修改 Dockerfile 并添加:
      COPY tests/ ./tests/
      
      然后从根目录运行 docker build -t mcp-nvd:test . 重新构建镜像。
  3. 替代方案:在本地针对容器化服务运行测试:
    cd tests
    python test_tools.py
    
    • 服务运行期间,此测试会针对 http://localhost:9090 进行。
关键信息
  • 端口:开放端口 9090 以供 SSE 访问。
  • 日志:存储在 log-data 卷中(可选)。
  • 镜像:运行 docker-compose 前,必须先构建镜像并将其标记为 mcp-nvd:test。

感谢 @sidharthrajaram 提供 SSE MCP 客户端和服务的可用模式:https://github.com/sidharthrajaram/mcp-sse

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。