NVD数据库MCP服务器
](https://pypi.org/project/mcp-nvd)
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
- 添加以下内容:
{
"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以应用更改。
发展
设置
- 先决条件:
- Python 3.10或更高版本。 - NVD API密钥(在这里请求). - uv 包管理器(安装).
- 克隆存储库:
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
# 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客户端和服务器的工作模式:
