关于 NVD Database MCP Server
NVD Database MCP Server 通过 NVD API 查询 NIST 国家漏洞数据库,适合需要检索漏洞记录的安全工作流。它支持按 CVE ID 获取详情,也可按关键词搜索,并要求配置 NVD API 密钥。
主要功能
- 01按 CVE ID 获取漏洞详情
- 02按关键词搜索 CVE
- 03设置精确匹配与结果数量
- 04提供详细或精简记录
- 05支持 stdio 与 SSE 传输
适用场景
- 01核查特定 CVE 的评分与引用
- 02查找某关键词相关漏洞
- 03在安全分析流程中查询 NVD 记录
MCP 相关
该 MCP 服务向兼容客户端提供 `get_cve` 和 `search_cve` 工具,用于访问 NVD。支持 stdio 和 SSE 传输,需要 NVD API 密钥。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
NVD 数据库 MCP 服务
一个 模型上下文协议 服务实现,可通过 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 列表及总数。
配置
-
创建或编辑 Claude 桌面应用的配置文件,路径如下:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%/Claude/claude_desktop_config.json
- macOS:
-
添加以下内容:
{
"mcpServers": {
"mcp-nvd": {
"command": "/path/to/uvx",
"args": ["mcp-nvd"],
"env": {
"NVD_API_KEY": "your-api-key"
}
}
}
}
-
将
/path/to/uvx替换为uvx可执行文件的绝对路径。在终端中运行which uvx命令即可查找路径。这样可以确保启动服务时使用正确版本的uvx。 -
重启 Claude 桌面应用以应用更改。
开发
设置
git clone https://github.com/marcoeg/mcp-nvd
cd mcp-nvd
-
设置环境变量:
- 在项目根目录中创建
.env文件:NVD_API_KEY=your-api-key - 将
your-api-key替换为你的 NVD API 密钥。
- 在项目根目录中创建
-
安装依赖项:
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 镜像:
- 切换到项目根目录:
cd ./mcp-nvd - 使用 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):
- 启动服务:确保通过
docker-compose up运行mcp-nvd服务。 - 进入容器:
- 使用以下命令识别容器名称(例如
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 .重新构建镜像。
- 使用以下命令识别容器名称(例如
- 替代方案:在本地针对容器化服务运行测试:
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
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。