mcp-nvd
一个模型上下文协议服务器实现,用于通过其 API 查询 NIST 国家漏洞数据库 (NVD)。
README
NVD 数据库 MCP 服务器
<a href="https://glama.ai/mcp/servers/@marcoeg/mcp-nvd"> <img width="380" height="200" src="https://glama.ai/mcp/servers/@marcoeg/mcp-nvd/badge" /> </a>
一个 模型上下文协议 服务器实现,用于通过其 API 查询 NIST 国家漏洞数据库 (NVD)。 https://nvd.nist.gov/
作为前提条件,需要一个 NVD API 密钥。 (在此处申请)。
状态
可以使用 stdio 和 sse 传输方式与 Claude Desktop 应用程序和其他 MCP 兼容的主机和客户端一起使用。
特性
- 通过 ID 查询特定的 CVE,获取详细的漏洞数据。
- 通过关键字搜索 NVD 数据库,并具有可自定义的结果选项。
- 支持服务器发送事件 (SSE) 传输,用于实时通信。
- 与 Claude Desktop 等 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 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 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>
# 预期: 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 服务器,并在端口 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。
在 Docker Compose 场景中运行 test_tools.py
要在 Docker 环境中运行单元测试 (test_tools.py):
- 启动服务: 确保
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 访问。
- 日志: 存储在
log-data卷中(可选)。 - 镜像: 必须构建一次并标记为
mcp-nvd:test,然后才能运行docker-compose。
感谢 @sidharthrajaram 为基于 SSE 的 MCP 客户端和服务器提供的有效模式:https://github.com/sidharthrajaram/mcp-sse
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。