M

MCP-NVD服务器

@marcoeg/mcp-nvd
0 Stars 340 次浏览 marcoeg 更新于 2026-08-23

一种用于通过其API查询NIST国家漏洞数据库(NVD)的模型上下文协议服务器实现。

该服务暂未提供标准配置,请参考 README 手动接入

服务介绍

NVD 数据库 MCP 服务器

PyPI - 版本

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

作为先决条件,需要一个 NVD API 密钥。(在此请求)。

状态

与 Claude 桌面应用程序以及其他使用 stdiosse 传输的符合 MCP 标准的主机和客户端兼容。

功能

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

工具

该服务器实现了以下工具来查询 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. 先决条件:

    • Python 3.10 或更高版本。
    • 一个 NVD API 密钥 (在此请求)。
    • uv 包管理器 (安装)。
  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

在检查器中自由切换 stdiosse 传输类型。

使用 SSE 客户端进行测试

运行服务器:

cd /path/to/the/repo
source .env

uv run mcp-nvd --transport sse --port 9090
  • 默认情况下在端口 9090 上使用 SSE 传输运行。

运行客户端:

测试 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.yamlREADME.md 文件中:

使用 Docker Compose 进行测试

docker-compose.yaml 位于 tests/ 目录中,定义了一个用于使用预构建的 Docker 镜像测试 MCP-NVD 服务器的服务。它适用于测试用例,类似于独立服务如 clickhouse,并假设镜像是事先构建好的而不是每次重新构建。

假设

  • 预构建镜像:该服务使用一个标签为 mcp-nvd:test 的预构建镜像,可以在本地或注册表中获取。该镜像是基于父目录中的 Dockerfile 构建的,该文件设置了使用 uv 并在端口 9090 上以 SSE 模式运行的 MCP-NVD 服务器。

如何构建镜像

要创建 mcp-nvd:test 镜像:

  1. 导航到项目根目录:
    cd ./mcp-nvd
    
  2. 使用 Dockerfile 构建镜像:
    docker build -t mcp-nvd:test .
    
    • 这将根据 pyproject.tomlmcp_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

相关 MCP 服务