mcp-nvd

mcp-nvd

一个模型上下文协议服务器实现,用于通过其 API 查询 NIST 国家漏洞数据库 (NVD)。

Category
访问服务器

README

NVD 数据库 MCP 服务器

PyPI - Version

<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 密钥。 (在此处申请)。

状态

可以使用 stdiosse 传输方式与 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 列表,包含总数。

配置

  1. 创建或编辑位于以下位置的 Claude Desktop 配置文件:

    • 在 macOS 上:~/Library/Application Support/Claude/claude_desktop_config.json
    • 在 Windows 上:%APPDATA%/Claude/claude_desktop_config.json
  2. 添加以下内容:

{
  "mcpServers": {
    "mcp-nvd": {
      "command": "/path/to/uvx",
      "args": ["mcp-nvd"],
      "env": {
        "NVD_API_KEY": "your-api-key"
      }
    }
  }
}
  1. /path/to/uvx 替换为 uvx 可执行文件的绝对路径。 使用终端中的 which uvx 命令找到该路径。 这确保在启动服务器时使用正确版本的 uvx

  2. 重新启动 Claude Desktop 以应用更改。

开发

设置

  1. 先决条件:

  2. 克隆存储库:

git clone https://github.com/marcoeg/mcp-nvd
cd mcp-nvd
  1. 设置环境变量:

    • 在项目根目录中创建一个 .env 文件:
      NVD_API_KEY=your-api-key
      
    • your-api-key 替换为您的 NVD API 密钥。
  2. 安装依赖项:

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 中自由切换 stdiosse 传输类型。

使用 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.yamlREADME.md 等文件中:

使用 Docker Compose 进行测试

docker-compose.yaml 位于 tests/ 目录中,定义了一个服务,用于使用预构建的 Docker 镜像测试 MCP-NVD 服务器。 它专为测试用例而设计,类似于 clickhouse 等独立服务,并假定镜像已预先构建,而不是每次都重新构建。

假设

  • 预构建镜像: 该服务使用标记为 mcp-nvd:test 的预构建镜像,该镜像在本地或注册表中可用。 该镜像基于父目录中的 Dockerfile,该文件使用 uv 设置 MCP-NVD 服务器,并在端口 9090 上以 SSE 模式运行它。

如何构建镜像

要创建 mcp-nvd:test 镜像:

  1. 导航到项目根目录:
    cd ./mcp-nvd
    
  2. 使用 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):

  1. 启动服务: 确保 mcp-nvd 服务通过 docker-compose up 运行。
  2. 进入容器:
    • 使用以下命令识别容器名称(例如,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 . 重新构建镜像。
  3. 替代方案: 针对容器化服务在本地运行测试:
    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

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选