哪吒网络安全MCP
原创
钟智强
钟智强
哪吒网络安全
2026年7月8日 11:24
马来西亚
在小说阅读器读本章
去阅读
| CVE 漏洞情报 · MCP 服务器 · 部署实战 NezhaCyberMCP 部署实战指南 让 AI 编程助手秒查 CVE 漏洞情报的 MCP 服务器 |
从零到一搭建 CVE 漏洞情报 MCP 服务器,打通 Claude Code / Cursor / VS Code Copilot 实时安全查询链路
基于 Go 语言的生产级 MCP 服务器 · 本地开发 + 云端 Lambda 全场景
前言
在日常开发中,你是否遇到过这样的场景:AI 编程助手帮你生成了依赖配置,却没人告诉你这个第三方库是否存在已知漏洞?等安全扫描在 CI/CD 阶段才报出来,修复成本已经翻了好几倍。
NezhaCyberMCP 就是来解决这个问题的——它是一个基于 Go 语言的生产级 MCP(Model Context Protocol)服务器,将 AI 助手与持续更新的 CVE 漏洞数据库桥接起来,让你在编码阶段就能实时查询最新漏洞、按厂商/产品/CPE 搜索、做趋势分析、把软件资产清单与 CVE 匹配,从源头暴露供应链安全风险。
本文将手把手教你从零部署 NezhaCyberMCP,覆盖本地开发与云端 Lambda 两种场景。
一、项目简介与开发初衷
1.1 项目概览
| 属性 | 信息 |
|---|---|
| 项目名称 | NezhaCyberMCP |
| 作者 | ctkqiang |
| 开源协议 | MIT License (Copyright 2026) |
| GitHub 仓库 | https://www.github.com/ctkqiang/NezhaCyberMCP |
| 官方网站 | www.nezhacyber.xin/zh |
| 编程语言 | Go |
| 提交历史 | 46 次提交,最新提交 2026 年 7 月 7 日 |
1.2 它是什么
NezhaCyberMCP 的本质是一个 MCP(Model Context Protocol)服务器。它从 CIRCL、MyCERT 和 GitHub Advisory Database 三大数据源聚合安全公告数据,通过 MCP JSON-RPC 2.0 协议直接服务于 AI 助手。
目前支持的 AI 客户端包括:
▪Claude Code(Anthropic)
▪Cursor
▪VS Code Copilot
▪OpenAI Codex
▪Trae IDE
简单来说,配置好 NezhaCyberMCP 后,你可以在 AI 助手中直接提问“最近有哪些 CRITICAL 级别的 CVE?”,AI 会自动调用 MCP 工具查询并返回真实漏洞数据。
1.3 解决什么问题
传统的漏洞管理流程是:开发 → 构建 → 安全扫描 → 发现漏洞 → 修复 → 重新构建。漏洞发现得太晚,修复成本高。
NezhaCyberMCP 将这个链路前置:编码阶段 → AI 助手实时查询 CVE → 即时告警 → 当场修复。它让安全意识嵌入到开发最前端,而不是等到 CI/CD 阶段才发现问题。
1.4 设计理念:非阻塞启动
这是 NezhaCyberMCP 最核心的设计决策之一——MCP 服务器先启动完成握手,数据库在后台热注入。
这意味着:
1. AI 助手连接 MCP 服务器时零等待——服务器瞬间就绪,立即响应握手请求
2. 数据库初始化、表迁移、首次数据同步在后台 goroutine 中异步执行
3. 数据库就绪后通过 SetDB() 热注入到 MCP 服务器,之后所有工具调用即可查询完整数据
这种设计保证了用户体验:无论数据库同步需要多长时间,AI 助手的连接和基础功能都不受影响。
二、架构说明
2.1 六层架构总览
NezhaCyberMCP 采用清晰的六层架构,从上到下依次是 AI 客户端层、传输层、MCP 协议层、持久化层、数据库层和数据摄入层:
| AI Client 层 MCP JSON-RPC 2.0 | Claude / Cursor / VS Code / Codex / Trae |
▼
| Transport 层 传输层 | stdio (local) |
▼
| MCP Protocol 层 协议 + 调度 | MCPServer + 18 Tools (mcp.go) Actions Dispatcher — actions.go 查询路由 |
▼
| Persistence 层 Repository Pattern | GORM repositories (3 tables) Upsert / batch write / query |
▼
| Database 层 持久化存储 | PostgreSQL / MySQL / SQLite Amazon Aurora DSQL (AWS) |
▼
| Data Ingestion 层 + Scheduling | CirclService / GithubService / MycertService cron/v3 定时调度 |
▼
| External Data Sources 外部数据源 | CIRCL API / GitHub API MyCERT Portal (HTML scraping) |
| 📷 截图占位 六层架构图,可使用上方图示或 PlantUML 渲染后的 PNG。 |
各层职责说明:
▪AI Client 层:各类支持 MCP 协议的 AI 编程助手,通过 JSON-RPC 2.0 发起工具调用请求
▪Transport 层:本地模式使用 stdio(进程管道通信,无网络暴露);Lambda 云端模式使用 SSE over HTTP(监听 /sse 端点)
▪MCP Protocol 层:核心调度层,包含 MCPServer 实例和 18 个已注册工具,actions.go 负责查询路由分发
▪Persistence 层:基于 GORM 的 Repository 模式,管理三张数据表,提供 Upsert、批量写入和查询能力
▪Database 层:支持 PostgreSQL(推荐生产)、MySQL、SQLite(本地开发)和 Amazon Aurora DSQL(AWS 云端)
▪Data Ingestion 层:三个数据源服务 + cron/v3 定时调度,负责从外部拉取并写入漏洞数据
2.2 通信方式:MCP JSON-RPC 2.0
MCP 协议基于 JSON-RPC 2.0 标准。这是一种请求-响应模型——AI 助手按需调用工具,服务器返回结果。不涉及心跳机制,通信完全由 AI 助手端驱动。
本地模式(stdio):MCP 服务器作为子进程运行,通过标准输入/输出(stdin/stdout)与 AI 助手通信。无网络端口暴露,安全性最高,适合 Claude Desktop 等本地场景。
云端模式(SSE HTTP):在 AWS Lambda 上运行,通过 Server-Sent Events(SSE)over HTTP 提供服务。AI 助手连接 /sse 端点发起请求,适合团队共享或云端部署场景。
2.3 非阻塞启动流程
这是理解 NezhaCyberMCP 设计的关键。启动流程如下:
| ● 启动时序 main() │ ├─ NewMCPServer(nil) ← 立即启动,不需要 DB │ registerTools() │ registerResources() │ registerPrompts() │ ├─ goroutine: BackgroundInit() │ InitDatabase(ctx, cfg) │ mcpServer.SetDB(db) ← 就绪后热注入 │ MigrateAll(ctx) │ RunNow(ctx) ← 立即首次同步 │ advisoryJob.Start(ctx) ← 调度 cron │ └─ mcpServer.Run(ctx) ← 阻塞 stdio 循环 |
| 📷 截图占位 非阻塞启动流程时序图,可使用项目 docs/ 目录下的 sequence.puml 渲染。 |
流程解读:
1. main() 首先调用 NewMCPServer(nil)——传入 nil 表示数据库尚未就绪,但 MCP 服务器立即启动并注册所有工具、资源和提示词
2. 同时启动一个后台 goroutine BackgroundInit(),依次完成数据库初始化 → 热注入 DB → 表迁移 → 首次数据同步 → 启动 cron 定时调度
3. 主线程进入 mcpServer.Run(ctx),阻塞在 stdio 循环上等待 AI 助手的请求
这个设计确保了 AI 助手连接时的零等待体验。
2.4 三种运行模式
| 模式 | 触发条件 | 传输方式 | 典型用途 |
|---|---|---|---|
| Local | IS\_LOCAL=true | stdio (JSON-RPC 2.0) | Claude Desktop,本地开发调试 |
| Lambda Sync | EventBridge cron 触发 | — | 定时数据同步任务 |
| Lambda MCP | MCP\_HTTP\_MODE=true | SSE over HTTP (/sse) | 云端 MCP 端点,团队共享 |
▪Local 模式:最常用,适合个人开发者在本地运行,配合 Claude Desktop 或 Claude Code 使用
▪Lambda Sync 模式:不提供 MCP 服务,纯粹用于定时同步数据到云端数据库,适合生产环境中保持漏洞数据持续更新
▪Lambda MCP 模式:在云端提供 MCP 服务端点,多个 AI 客户端可以共享同一个漏洞数据库
2.5 三大数据源
NezhaCyberMCP 从三个安全情报源聚合数据:
| 数据源 | 端点 | 认证方式 | 同步频率 |
|---|---|---|---|
| CIRCL CVE Search API | vulnerability.circl.lu/api/ | 无需认证 | 每 3 小时(cron 可配) |
| GitHub Advisory Database | api.github.com/advisories | Bearer Token (GITHUB\_TOKEN) | 开关控制,默认关闭 |
| MyCERT Advisory Portal | www.mycert.org.my | 无需认证(HTML 抓取) | 开关控制,默认开启 |
CIRCL 分页算法细节:每页拉取 100 条记录,请求间隔 500ms,最多 5 次重试,采用 2 秒指数退避策略。这保证了大量数据拉取时的稳定性和对上游 API 的友好性。
2.6 18 个 MCP 工具
NezhaCyberMCP 注册了 18 个 MCP 工具,分为四类:
查询工具(9 个):
| 工具名 | 功能 |
|---|---|
| get\_cve | 根据 CVE ID 获取详细信息 |
| search\_cves | 搜索 CVE 漏洞 |
| search\_by\_cpe | 按 CPE(通用平台枚举)搜索 |
| bulk\_get | 批量获取多个 CVE |
| filter\_by\_severity | 按严重级别过滤 |
| get\_cwe | 获取 CWE(弱点枚举)信息 |
| get\_references | 获取参考链接 |
| related\_cves | 查询关联 CVE |
| whats\_new | 获取最新漏洞 |
分析工具(4 个):
| 工具名 | 功能 |
|---|---|
| vuln\_trends | 漏洞趋势分析 |
| top\_vendors | 热门厂商排行 |
| top\_products | 热门产品排行 |
| severity\_distribution | 严重级别分布统计 |
资产匹配工具(1 个):
| 工具名 | 功能 |
|---|---|
| match\_inventory | 将软件资产清单与 CVE 匹配 |
占位工具(4 个,尚未实现):
get\_kev\_status、get\_epss、prioritize、match\_sbom——这些工具已在协议层注册,但功能尚未实现,为未来扩展预留。
三、环境要求与前置准备
3.1 操作系统要求
| 操作系统 | 最低版本 | 备注 |
|---|---|---|
| macOS | 12 Monterey+ | 原生支持,推荐 |
| Linux | Ubuntu 20.04+ / Debian 11+ | 服务器部署推荐 |
| Windows | 10 / 11 | 需通过 WSL2 运行 |
3.2 软件依赖版本
| 软件 | 最低版本 | 用途 |
|---|---|---|
| Go | 1.22+(安装指南)/ 1.26.1+(开发) | 编译构建 MCP 服务器 |
| Git | 2.x | 克隆仓库 |
| Node.js | 18 LTS+ | 运行 Claude Code、Codex CLI、MCP Inspector |
| npm | 9+ | 包管理,运行 MCP Inspector |
| 数据库 | PostgreSQL 推荐 | 也支持 MySQL / SQLite / Aurora DSQL |
3.3 数据库准备
NezhaCyberMCP 支持四种数据库:
▪PostgreSQL(推荐生产环境):功能完整,性能稳定
▪MySQL:广泛使用,兼容性好
▪SQLite:适合本地开发快速测试,无需额外安装数据库服务
▪Amazon Aurora DSQL:AWS 云端无服务器数据库,适合 Lambda 部署
本地快速准备 PostgreSQL(以 macOS Homebrew 为例):
| ● bash # 安装 PostgreSQL brew install postgresql@16 # 启动服务 brew services start postgresql@16 # 创建数据库和用户 createdb nezha\_cyber |
| 📷 截图占位 PostgreSQL 安装与数据库创建成功后的终端输出。 |
3.4 端口说明
▪本地 stdio 模式:无需开放任何网络端口,通信通过进程管道完成
▪SSE 模式:监听 PORT 环境变量指定的端口,默认 8080
3.5 前置检查清单
在开始安装前,建议逐项确认:
| ● bash # 检查 Go 版本 go version # 预期: go version go1.22+ ... # 检查 Git 版本 git --version # 预期: git version 2.x.x # 检查 Node 版本 node --version # 预期: v18.x.x 或更高 # 检查 npm 版本 npm --version # 预期: 9.x.x 或更高 # 检查 PostgreSQL 连接(如果使用 PG) psql -d nezha\_cyber -c \"SELECT version();\" |
| 📷 截图占位 所有前置依赖版本检查通过的终端截图。 |
四、逐步安装配置教程
4.1 第一步:克隆仓库
| ● bash # 克隆 NezhaCyberMCP 仓库 git clone https://github.com/ctkqiang/NezhaCyberMCP.git # 进入项目目录 cd NezhaCyberMCP |
| 📷 截图占位 git clone 成功后的终端输出,显示克隆进度和完成信息。 |
4.2 第二步:配置环境变量
项目根目录下有 .env.example 模板文件,复制一份进行编辑:
| ● bash # 复制环境变量模板 cp .env.example .env |
编辑 .env 文件,根据你的实际环境填写配置:
| ● bash · .env # ============================================ # 运行模式配置 # ============================================ # true = 本地模式(启用 cron 定时同步 + stdio 通信) IS\_LOCAL=true # ============================================ # 数据库配置(PostgreSQL 示例) # ============================================ DB\_HOST=localhost # 数据库主机地址 DB\_PORT=5432 # 数据库端口 DB\_USER=postgres # 数据库用户名 DB\_PASSWORD=your\_password # 数据库密码 DB\_NAME=nezha\_cyber # 数据库名称 DB\_TIMEZONE=Asia/Shanghai # 时区(cron 调度使用) # ============================================ # 可选:GitHub Advisory Database 同步 # ============================================ # 填入 GitHub PAT 即可启用 GitHub Advisory 数据源 # 不填则跳过 GitHub 数据同步(默认关闭) GITHUB\_TOKEN=ghp\_xxxxxxxxxxxx # ============================================ # 日志配置 # ============================================ # 可选值: DEBUG / INFO / WARN / ERROR / VERBOSE LOG\_LEVEL=INFO |
| 📷 截图占位 编辑 .env 文件的编辑器界面截图。 |
关键配置说明:
▪IS\_LOCAL=true:本地模式必填,启用 stdio 通信和 cron 定时同步
▪DB\_\* 系列变量:根据你的数据库实际信息填写
▪GITHUB\_TOKEN:可选,如果你想同步 GitHub Advisory Database 数据,需要提供 GitHub PAT(Personal Access Token)。不填则该数据源默认关闭
▪LOG\_LEVEL:开发调试时可设为 DEBUG,生产环境建议 INFO
4.3 第三步:构建二进制
| ● bash # 构建项目,产出可执行文件 make build |
构建成功后,会在项目根目录下生成 ./advisory 可执行文件。
| 📷 截图占位 make build 成功的终端输出,显示编译过程和最终生成的 advisory 文件。 |
如果你更喜欢手动构建(不使用 Makefile):
| ● bash # 手动构建(等价于 make build) go build -o advisory . |
4.4 第四步:启动 MCP Inspector 验证
MCP Inspector 是官方提供的 MCP 服务器调试工具,可以直观地查看注册的工具、资源和提示词:
| ● bash # 启动 MCP Inspector(会自动打开浏览器界面) make run # 等价于: npx @modelcontextprotocol/inspector ./advisory |
| 📷 截图占位 MCP Inspector 浏览器界面:左侧显示 nezha-cyber 连接状态,右侧显示已注册的 18 个工具列表。 |
你也可以直接运行二进制文件(不通过 Inspector):
| ● bash # 直接运行(stdio 模式,等待 AI 助手连接) ./advisory |
如果遇到权限问题:
| ● bash # 赋予执行权限 chmod +x ./advisory # 再次运行 ./advisory |
4.5 第五步:配置 AI 客户端
▸ 4.5.1 Claude Desktop 配置
编辑 Claude Desktop 的 MCP 配置文件:
▪macOS:~/Library/Application Support/Claude/claude\_desktop\_config.json
▪Windows:%APPDATA%\Claude\claude\_desktop\_config.json
| ● json { \"mcpServers\": { \"nezha-cyber\": { \"command\": \"/absolute/path/to/advisory\", \"env\": { \"IS\_LOCAL\": \"true\", \"DB\_HOST\": \"localhost\", \"DB\_PORT\": \"5432\", \"DB\_USER\": \"postgres\", \"DB\_PASSWORD\": \"your\_password\", \"DB\_NAME\": \"nezha\_cyber\" } } } } |
| ⚠️ 重要提醒 command 字段必须使用绝对路径,不能使用相对路径或 ~ 符号,否则 Claude Desktop 会报 “MCP server not connected” 错误。 |
| 📷 截图占位 Claude Desktop 配置文件编辑界面,及重启后 Settings → Developer 中 nezha-cyber 已连接。 |
▸ 4.5.2 Claude Code 配置
Claude Code 支持通过命令行快速注册 MCP 服务器:
| ● bash # 通过命令行注册 nezha-cyber MCP 服务器 claude mcp add nezha-cyber ./advisory |
注册后,Claude Code 会自动在当前项目中加载该 MCP 服务器。
| 📷 截图占位 claude mcp add 命令执行成功的终端输出。 |
▸ 4.5.3 Trae IDE 配置
Trae IDE 同样支持 MCP 协议。在 Trae 的 MCP 配置文件中添加与 Claude Desktop 类似的配置即可。找到 Trae 的设置 → MCP Servers,添加新的服务器配置,command 指向你的 advisory 二进制路径,env 填入相应的环境变量。
▸ 4.5.4 OpenAI Codex 配置
OpenAI Codex CLI 也支持 MCP。在 Codex 的配置文件中添加 nezha-cyber 服务器条目,配置方式与上述类似:指定 command 为 advisory 二进制的绝对路径,在 env 中设置数据库连接参数。
| 📷 截图占位 各 IDE 中 MCP 服务器配置完成的界面截图。 |
4.6 第六步:验证安装
配置完成后,在你的 AI 助手中尝试以下提问:
| 💬 向 AI 助手提问 What are the latest CRITICAL CVEs? |
如果一切正常,AI 助手会自动调用 whats\_new 工具,查询数据库中最新发布的 CRITICAL 级别漏洞,并返回真实的 CVE 编号、描述、严重级别等信息。
| 📷 截图占位 在 Claude Desktop 中提问 “What are the latest CRITICAL CVEs?” 后,AI 调用 whats\_new 返回漏洞数据的对话截图。 |
你也可以尝试其他查询:
| 💬 更多示例提问 # 按厂商搜索 Search for CVEs related to Apache # 按 CPE 搜索 Find vulnerabilities for cpe:2.3:a:nginx:nginx:1.21.0 # 趋势分析 Show me the vulnerability trends for the last 30 days # 资产匹配 Match my software inventory against known CVEs |
4.7 第七步:Lambda 部署(可选:云端场景)
如果你需要在 AWS Lambda 上部署 NezhaCyberMCP,项目提供了专门的构建目标:
| ● bash # 构建 x86\_64 架构的 Lambda 包 make lambda # 产出: bootstrap.zip # 构建 arm64 Graviton2 架构的 Lambda 包(推荐,成本更低性能更好) make lambda-arm64 # 产出: bootstrap-arm64.zip |
| 📷 截图占位 make lambda-arm64 构建成功的终端输出。 |
构建完成后,将 bootstrap.zip(或 bootstrap-arm64.zip)上传到 AWS Lambda 函数。根据你的需求配置:
▪数据同步模式:通过 EventBridge cron 定时触发,不设置 MCP\_HTTP\_MODE
▪MCP 服务模式:设置 MCP\_HTTP\_MODE=true,Lambda 会启动 SSE HTTP 服务器监听 /sse 端点
五、源码结构简要导读
5.1 技术栈一览
| 组件 | 技术选型 | 说明 |
|---|---|---|
| 编程语言 | Go 1.26.1+(构建需 1.22+) | 高性能、并发友好 |
| MCP 协议 | go-sdk/mcp | JSON-RPC 2.0 实现 |
| ORM | GORM | 支持 postgres/mysql/sqlite 驱动 |
| AWS SDK | aws-sdk-go-v2 | Aurora DSQL、Secrets Manager、S3 |
| 定时任务 | robfig/cron/v3 | 可配置的 cron 表达式 |
| HTML 解析 | golang.org/x/net/html | 用于 MyCERT Portal 数据抓取 |
| Landing 页面 | Vue/Nuxt | 独立部署的官网页面 |
| 架构图 | PlantUML | 时序图和流程图渲染 |
5.2 目录结构
| ● 目录树 NezhaCyberMCP/ ├── main.go # 程序入口,运行时模式选择(Local/Lambda) ├── go.mod # Go 模块定义与依赖声明 ├── Makefile # 构建/测试/lint/Lambda 打包命令集 ├── .env.example # 环境变量模板 ├── docs/ │ ├── en/ # 英文文档 │ │ ├── flow.puml # 流程图(PlantUML 源文件) │ │ └── sequence.puml # 时序图(PlantUML 源文件) │ └── zh/ # 中文文档 │ ├── flow.puml │ └── sequence.puml ├── out/docs/ # 渲染后的架构图/时序图 PNG ├── internal/ │ ├── functions/ │ │ └── actions.go # MCP 工具实现 & DB 查询逻辑(核心) │ ├── job/ │ │ └── advisory\_job.go # cron 调度、数据库迁移、同步编排 │ ├── model/ # GORM 数据模型(3 个表对应 3 个模型) │ ├── repository/ # 仓库层(3 个仓库,CRUD 操作) │ ├── services/ │ │ ├── mcp.go # MCP 服务器核心(工具注册、协议处理) │ │ ├── circl.go # CIRCL 数据源服务 │ │ ├── github.go # GitHub Advisory 数据源服务 │ │ ├── mycert.go # MyCERT 数据源服务 │ │ └── database.go # 数据库初始化与连接管理 │ └── utilities/ │ ├── aws.go # AWS 工具(凭证验证、DSQL 连接等) │ └── logger.go # 日志工具 ├── test/ # 测试文件 └── landing/ # Vue/Nuxt 官网 Landing 页面(独立部署) |
5.3 关键模块解读
▸ main.go —— 程序入口
入口文件负责运行时模式选择。根据环境变量 IS\_LOCAL、MCP\_HTTP\_MODE 等判断当前运行在哪种模式下,然后走不同的初始化路径。核心就是前文提到的非阻塞启动流程:先启动 MCP 服务器,再在后台 goroutine 中完成数据库初始化和数据同步。
▸ internal/services/mcp.go —— MCP 服务器核心
这是 MCP 协议的核心实现文件,负责:
▪创建 MCPServer 实例
▪注册 18 个工具(registerTools())
▪注册资源和提示词
▪处理 JSON-RPC 2.0 请求/响应
▪通过 SetDB() 接收热注入的数据库实例
▸ internal/functions/actions.go —— 工具实现与查询路由
所有 18 个 MCP 工具的具体实现都在这里。当 AI 助手调用某个工具时,actions.go 负责将请求路由到对应的查询逻辑,从数据库中检索数据并返回结构化结果。这是连接 MCP 协议层和持久化层的桥梁。
▸ internal/job/advisory\_job.go —— 调度与同步编排
负责后台数据同步的生命周期管理:
▪数据库表迁移(MigrateAll)
▪首次立即同步(RunNow)
▪cron 定时调度启动(advisoryJob.Start)
▪协调三个数据源服务的同步时序
▸ circl.go / github.go / mycert.go —— 数据源服务
三个数据源各有独立的服务文件,分别处理:
▪circl.go:调用 CIRCL API,实现分页拉取(每页 100 条、500ms 间隔、5 次重试、指数退避)
▪github.go:调用 GitHub Advisory API,使用 Bearer Token 认证
▪mycert.go:抓取 MyCERT Portal HTML 页面并解析(使用 golang.org/x/net/html)
▸ internal/model/ —— 数据模型(三张表)
项目使用三张 GORM 模型表分别存储三个数据源的数据:
circl\_cves 表(CIRCL 数据):
| 字段 | 说明 |
|---|---|
| cve\_id (PK) | CVE 编号,主键 |
| state | 漏洞状态 |
| assigner | 分配者 |
| title | 标题 |
| description | 描述 |
| severity | 严重级别 |
| cwe\_ids | CWE 编号列表 |
| affected | 受影响产品 |
| references | 参考链接 |
| date\_published | 发布日期 |
github\_advisories 表(GitHub Advisory 数据):
| 字段 | 说明 |
|---|---|
| ghsa\_id (PK) | GHSA 编号,主键 |
| cve\_id | 关联的 CVE 编号 |
| summary | 摘要 |
| description | 描述 |
| severity | 严重级别 |
| type | 类型 |
| vulnerabilities | 漏洞详情 |
| published\_at | 发布时间 |
mycert\_advisories 表(MyCERT 数据):
| 字段 | 说明 |
|---|---|
| advisory\_id (PK) | 公告编号,主键 |
| title | 标题 |
| category | 分类 |
| summary | 摘要 |
| detail\_url | 详情链接 |
| full\_content | 完整内容 |
| published\_at | 发布时间 |
5.4 Makefile 目标速查
| 目标 | 命令 | 说明 |
|---|---|---|
| make build | go build -o advisory . | 构建本地二进制,产出 ./advisory |
| make run | npx @…/inspector ./advisory | 启动 MCP Inspector 调试 |
| make lambda | 交叉编译 GOOS=linux amd64 | 构建 Lambda x86\_64 包,产出 bootstrap.zip |
| make lambda-arm64 | 交叉编译 GOOS=linux arm64 | 构建 Lambda arm64 包,产出 bootstrap-arm64.zip |
| make test | go test ./test/... -v -count=1 | 运行测试套件 |
| make lint | golangci-lint run | 代码静态检查 |
六、常见问题与排错(FAQ)
▸ Q1:make build 报错 “go: command not found”
原因:Go 语言环境未安装或未添加到系统 PATH 中。
解决方案
| ● bash # 方式一:macOS 使用 Homebrew 安装 brew install go # 方式二:从官方下载安装包 # 访问 https://golang.org/dl/ 下载对应平台的安装包 # 安装后确保 /usr/local/go/bin(或对应路径)在 PATH 中 # 验证安装 go version # 应输出: go version go1.22+ ... |
▸ Q2:运行 ./advisory 报 “Permission denied”
原因:二进制文件没有执行权限。
解决方案
| ● bash # 赋予执行权限 chmod +x ./advisory # 再次运行 ./advisory |
▸ Q3:Claude Code / Desktop 显示 “MCP server not connected”
原因:MCP 配置文件中 command 字段使用了相对路径或 ~ 符号。
确保配置文件中 command 使用绝对路径。例如:
| ● json { \"mcpServers\": { \"nezha-cyber\": { \"command\": \"/Users/yourname/projects/NezhaCyberMCP/advisory\", \"env\": { ... } } } } |
获取绝对路径的方法:
| ● bash # 在项目目录下执行 realpath ./advisory # 输出: /Users/yourname/projects/NezhaCyberMCP/advisory |
如果你使用 Claude Code,也可以通过命令行重新注册:
| ● bash claude mcp add nezha-cyber ./advisory |
▸ Q4:数据库连接失败
原因:数据库服务未启动,或连接参数配置错误。
排查步骤
| ● bash # 1. 检查数据库服务是否运行 # macOS (Homebrew) brew services list |
确保 .env 中 DB\_HOST、DB\_PORT、DB\_USER、DB\_PASSWORD、DB\_NAME 与实际数据库配置一致。
▸ Q5:MCP Inspector 中工具列表为空
原因:MCP 服务器启动失败或工具注册出错。
排查步骤
| ● bash # 1. 将日志级别调为 DEBUG 重新启动 LOG\_LEVEL=DEBUG ./advisory # 2. 检查输出日志中是否有错误信息 # 特别关注数据库初始化和工具注册阶段的日志 |
▸ Q6:GitHub Advisory 数据没有同步
原因:GITHUB\_TOKEN 环境变量未配置或 Token 无效。GitHub Advisory 数据源默认是关闭的。
解决方案
1. 在 .env 文件中填入有效的 GitHub Personal Access Token
2. 确保 Token 有读取 Advisory Database 的权限
3. 重启 MCP 服务器
| ● bash # 生成 GitHub PAT: https://github.com/settings/tokens # 在 .env 中配置 GITHUB\_TOKEN=ghp\_your\_valid\_token\_here |
▸ Q7:数据同步很慢或超时
原因:CIRCL API 数据量大,首次同步需要拉取全量数据。
说明:这是正常现象。CIRCL 分页算法每页 100 条,请求间隔 500ms,最多 5 次重试,2 秒指数退避。首次全量同步可能需要较长时间,后续增量同步会快很多。得益于非阻塞启动设计,同步期间 AI 助手仍可正常连接和使用已同步的数据。
▸ Q8:Lambda 部署后 MCP 端点无响应
原因:Lambda 函数未配置 MCP\_HTTP\_MODE=true,或 API Gateway / Function URL 未正确路由 /sse 端点。
解决方案
1. 确认 Lambda 环境变量中 MCP\_HTTP\_MODE=true
2. 确认 IS\_LOCAL=false(Lambda 模式不应启用本地模式)
3. 如果使用 Aurora DSQL,确认 IS\_AWS=true 并配置好 AWS 凭证
4. 检查 Lambda 日志(CloudWatch Logs)排查具体错误
七、总结与扩展建议
7.1 总结
NezhaCyberMCP 通过 MCP 协议将 CVE 漏洞情报能力直接注入 AI 编程助手的工作流,实现了从“事后扫描”到“编码时感知”的安全左移。它的核心价值在于:
1. 实时性:cron 定时同步保证漏洞数据持续更新(CIRCL 默认每 3 小时)
2. 零侵入:通过 MCP 协议无缝集成现有 AI 助手,无需改变开发习惯
3. 非阻塞:服务器秒级就绪,数据库后台热注入,AI 助手零等待
4. 多数据源:聚合 CIRCL、GitHub Advisory、MyCERT 三大情报源
5. 多数据库:支持 PostgreSQL / MySQL / SQLite / Aurora DSQL,灵活适配不同部署场景
6. 安全设计:无硬编码凭证、幂等写入、WithContext 防 goroutine 泄漏
7.2 生产部署建议
| 维度 | 建议 |
|---|---|
| 数据库 | 生产环境推荐 PostgreSQL,开启连接池,配置定期备份 |
| 部署方式 | 团队共享推荐 AWS Lambda + Aurora DSQL;个人使用本地 stdio 即可 |
| Lambda 架构 | 优先选择 arm64 Graviton2,性价比更高 |
| 数据同步 | 生产环境建议拆分 Lambda Sync 模式单独运行同步任务,MCP 服务模式专注查询 |
| GitHub Token | 生产环境建议启用 GitHub Advisory 数据源以获得更全面的漏洞覆盖 |
| 日志级别 | 生产环境设为 INFO,排查问题时临时切换 DEBUG |
7.3 安全加固建议
NezhaCyberMCP 本身在安全设计上已经做得很到位:
▪无硬编码凭证:所有敏感信息从环境变量读取,不落盘
▪AWS 凭证验证:IsRunInAWS() 校验密钥非空且不含占位符
▪无 PII 存储:仅存储公开的 CVE 数据,不涉及个人隐私信息
▪goroutine 安全:所有查询使用 WithContext(ctx) 防止 goroutine 泄漏
▪幂等写入:OnConflict{UpdateAll:true} + CreateInBatches(100) + 事务,保证数据一致性
▪网络隔离:stdio 模式无网络暴露;SSE 模式监听 localhost,由 AWS 处理 TLS
在此基础上,生产环境还可以考虑:
▪为 PostgreSQL 配置 TLS 连接
▪使用 AWS Secrets Manager 管理数据库凭证(项目已内置 aws-sdk-go-v2 支持)
▪为 SSE 端点配置 API Gateway 鉴权
▪定期审计环境变量配置,避免凭证泄露
7.4 后续可扩展方向
NezhaCyberMCP 目前已注册但尚未实现的 4 个占位工具指明了未来方向:
▪get\_kev\_status:集成 CISA KEV(Known Exploited Vulnerabilities)目录,标记已被主动利用的漏洞
▪get\_epss:集成 EPSS(Exploit Prediction Scoring System),提供漏洞被利用的概率评分
▪prioritize:基于 KEV + EPSS + CVSS 多维度优先级排序,帮助安全团队聚焦最紧急的漏洞
▪match\_sbom:支持 SBOM(软件物料清单)标准格式输入,实现更精准的供应链漏洞匹配
此外,社区还可以考虑:
▪增加更多区域安全公告数据源(如 CNVD、CNNVD)
▪支持 Webhook 通知,新漏洞入库时主动推送告警
▪提供漏洞去重与关联分析,跨数据源合并同一漏洞的多源信息
▪集成到 CI/CD 流水线,构建时自动检查依赖漏洞
| 🔗 项目链接 GitHub 仓库 github.com/ctkqiang/NezhaCyberMCP 官方网站 www.nezhacyber.xin/zh 开源协议 MIT License 如果这篇文章对你有帮助,欢迎点赞收藏,也欢迎到 GitHub 仓库给作者 ctkqiang 一个 Star ⭐ |
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论