使用说明
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列表。
配置
-
创建或编辑位于以下位置的Claude Desktop配置文件:
- 在 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 Desktop以应用更改。
发展
设置
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检查器运行
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 图片:
- 导航到项目根目录:
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.
跑步 test_tools.py 在Docker Compose场景中
运行单元测试(test_tools.py)在Docker环境中:
- 启动服务:确保
mcp-nvd服务正在通过运行docker-compose up. - 执行到容器中:
- 识别容器名称(例如。,
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访问中。
- 日志:存储在a中
log-data音量(可选)。 - 图像:必须构建一次并标记为
mcp-nvd:test跑步前docker-compose.
把归 @西达斯拉赫拉姆 对于其基于SSE的MCP客户端和服务器的工作模式: https://github.com/sidharthrajaram/mcp-sse