漏洞数据库查询服务

一个通过NIST国家漏洞数据库(NVD) API查询漏洞信息的MCP协议服务器实现,支持CVE检索和关键词搜索功能。

  • by marcoeg
  • Python
  • 本地部署
  • 15 星标
  • 更新于
在 GitHub 查看 marcoeg/mcp-nvd

使用说明

NVD数据库MCP服务器

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

作为先决条件,需要NVD API密钥。 (在这里申请).

状态

与Claude Desktop应用程序和其他兼容MCP的主机和客户端一起使用 stdio 和 sse 运输。

特性

  • 通过ID查询特定的CVE,并提供详细的漏洞数据。
  • 使用可定制的结果选项按关键字搜索NVD数据库。
  • 支持服务器发送事件(SSE)传输以进行实时通信。
  • 与Claude Desktop等MCP兼容的客户端兼容。

工具

服务器实现了以下工具来查询NVD数据库:

  • get_cve:

    • 描述:通过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 Desktop配置文件:

    • 在 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 Desktop以应用更改。

发展

设置

  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检查器运行

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

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

然后打开浏览器到MCP检查器指示的URL,通常 http://localhost:8077?proxyPort=8078

在以下之间自由切换 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

使用env变量:

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 在父目录中,该目录用于设置MCP-NVD服务器 uv 并在端口9090上以SSE模式运行它。

如何塑造形象

要创建 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.

跑步 test_tools.py 在Docker Compose场景中

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

  1. 启动服务:确保 mcp-nvd 服务正在通过运行 docker-compose up.
  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访问中。
  • 日志:存储在a中 log-data 音量(可选)。
  • 图像:必须构建一次并标记为 mcp-nvd:test 跑步前 docker-compose.

把归 @西达斯拉赫拉姆 对于其基于SSE的MCP客户端和服务器的工作模式: https://github.com/sidharthrajaram/mcp-sse