这是一个实现 Model Context Protocol(MCP)的服务器,用于通过其API查询美国国家标准与技术研究院(NIST)的国家漏洞数据库(NVD)。https://nvd.nist.gov/
作为前提条件,需要一个NVD API密钥。(在这里请求)。
与 Claude Desktop 应用程序和其他支持 MCP 的主机和客户端兼容,使用 stdio 和 sse 传输方式。
该服务器实现了以下工具来查询 NVD 数据库:
get_cve:
cve_id (str): CVE ID(例如:CVE-2019-1010218)。concise (bool, 默认 False): 如果设置为 True,返回较短的格式。search_cve:
keyword (str): 搜索词(例如:Red Hat)。exact_match (bool, 默认 False): 如果设置为 True,要求精确短语匹配。concise (bool, 默认 False): 如果设置为 True,返回较短的CVE记录。results (int, 默认 10): 最大CVE记录数(1-2000)。创建或编辑位于以下位置的 Claude Desktop 配置文件:
~/Library/Application Support/Claude/claude_desktop_config.json%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 以应用更改。
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 .
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传输类型。
cd /path/to/the/repo
source .env
uv run mcp-nvd --transport sse --port 9090
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 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 正在 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。以下是适合包含在 docker-compose.yaml 或 README.md 文件中的 Markdown 注释格式总结:
此 docker-compose.yaml 文件位于 tests/ 目录中,定义了一个服务,用于使用预构建的 Docker 镜像测试 MCP-NVD 服务器。它设计为类似于独立服务(如 clickhouse)的测试用例,并假设镜像是预先构建好的,而不是每次重新构建。
mcp-nvd:test 的预构建镜像,本地可用或在注册表中。该镜像基于父目录中的 Dockerfile,该文件设置了带有 uv 的 MCP-NVD 服务器,并在端口 9090 上以 SSE 模式运行。要创建 mcp-nvd:test 镜像:
cd ./mcp-nvd
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 环境中运行单元测试 (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 进行测试。log-data 卷中(可选)。mcp-nvd:test,然后再运行 docker-compose。感谢 @sidharthrajaram 提供的基于 SSE 的 MCP 客户端和服务器的工作模式:https://github.com/sidharthrajaram/mcp-sse