文章总结: 哪吒网络安全MCP是一个基于Go语言的开源MCP服务器,旨在将AI编程助手与CVE漏洞数据库桥接,使开发者在编码阶段即可实时查询漏洞信息。它聚合CIRCL、GitHubAdvisoryDatabase和MyCERT三大数据源,提供18个工具,支持本地stdio和云端Lambda两种部署模式。其核心设计是非阻塞启动,确保AI助手连接零等待。该项目可有效将安全检测左移,降低修复成本。 综合评分: 85 文章分类: 安全工具,漏洞分析,供应链安全,安全开发,解决方案
哪吒网络安全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) | SSE HTTP (Lambda) |
▼
| | | | — | — | | 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 | grep postgresql # Linux (systemd) sudo systemctl status postgresql # 2. 测试数据库连接 psql -h localhost -p 5432 -U postgres -d nezha_cyber -c “SELECT 1;” # 3. 检查 .env 文件中的数据库配置 cat .env | grep DB_ |
确保 .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 ⭐ |
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:哪吒网络安全 钟智强 钟智强《哪吒网络安全MCP》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。








评论