关于 Nessus MCP Server
Nessus MCP Server 通过 REST API 让 AI 助手操作 Tenable Nessus 漏洞扫描。它支持扫描管理和漏洞查询,并提供无需 Nessus 凭据的模拟模式,用于本地开发与测试。
主要功能
- 01启动并监控漏洞扫描
- 02列出扫描并获取结果
- 03搜索漏洞发现
- 04获取漏洞详情
- 05用于开发和测试的模拟模式
适用场景
- 01对目标启动扫描
- 02检查扫描状态和发现结果
- 03在扫描结果中搜索漏洞
- 04无需 Nessus 凭据测试工具流程
MCP 相关
它通过 MCP 工具提供 Nessus 扫描管理和漏洞数据查询。服务器使用 API 密钥连接真实 Nessus 实例;未设置所需连接变量时则运行模拟模式。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
Nessus MCP Server
用于与 Tenable Nessus 漏洞扫描器交互的模型上下文协议(MCP)服务。此服务允许 AI 助手通过 MCP 协议执行漏洞扫描和分析。
它通过 REST API 使用 API 密钥身份验证,与真实的 Nessus 实例通信。如果未设置 NESSUS_URL/NESSUS_ACCESS_KEY/NESSUS_SECRET_KEY,则会回退到独立的模拟模式,供本地开发和测试使用。
功能
- 漏洞扫描:针对指定目标启动并监控漏洞扫描
- 扫描管理:列出、跟踪漏洞扫描,并获取扫描结果
- 漏洞分析:搜索特定漏洞并获取其详细信息
- 模拟模式:功能完备的模拟模式,无需 Nessus API 密钥即可测试
工具
此服务提供以下工具:
| 工具名称 | 描述 |
|---|---|
list_scan_templates | 列出可用的 Nessus 扫描模板 |
start_scan | 针对目标启动新的漏洞扫描 |
get_scan_status | 检查正在运行的扫描的状态 |
get_scan_results | 获取已完成扫描的结果 |
list_scans | 列出所有扫描及其状态 |
get_vulnerability_details | 获取特定漏洞的详细信息 |
search_vulnerabilities | 按关键字搜索漏洞 |
安装
前置条件
- Node.js 20 或更高版本
- TypeScript(用于开发)
从源代码构建
-
克隆代码仓库:
git clone https://github.com/Cyreslab-AI/nessus-mcp-server.git cd nessus-mcp-server -
安装依赖:
npm install -
构建服务:
npm run build
用法
在模拟模式下运行
默认情况下,服务以模拟模式运行,无需 Nessus API 密钥:
node build/index.js
使用真实的 Nessus 实例运行
若要连接真实的 Nessus 实例,请设置以下环境变量:
NESSUS_URL=https://your-nessus-instance:8834
NESSUS_ACCESS_KEY=your-access-key
NESSUS_SECRET_KEY=your-secret-key
这三个变量全部设置后,服务会立即切换到真实模式;否则会以模拟模式运行。
然后运行服务:
node build/index.js
生成 API 密钥对
在 Nessus Web 界面中:Settings > My Account > API Keys > Generate。Nessus 只会在生成时显示一次访问密钥和秘密密钥,因此请将它们妥善保存(例如,保存在密钥管理器或 MCP 客户端的环境变量配置中);Nessus 本身无法再次显示这些密钥。
每次请求都会通过 X-ApiKeys: accessKey=<key>; secretKey=<key> HTTP 标头进行身份验证。无需单独的登录或会话步骤,也没有需要刷新的 Cookie 或令牌。
自签名证书
Nessus 通常使用自签名 TLS 证书部署。默认情况下,此服务会严格验证证书;遇到使用自签名证书的实例时会拒绝连接。若要明确选择跳过证书验证(例如,对于你信任的内部实例),请设置:
NESSUS_ALLOW_SELF_SIGNED=true
如果实例使用由可信 CA 签发的证书,请勿设置此变量(或将其设为 false)。启用此选项时,服务启动后会向 stderr 输出警告。
关于真实模式映射的设计说明
此服务的部分工具在 Nessus REST API 中没有完全对应的功能,因此做出了以下权衡:
start_scan:scan_type(basic-network-scan/web-app-scan/compliance-scan)是逻辑名称,而不是 Nessus 模板 UUID(UUID 因实例而异,可通过GET /editor/scan/templates获取)。此服务会优先匹配已知模板的name值,将逻辑名称映射到模板;如果没有匹配项,则会模糊匹配模板名称/标题。接着,start_scan会创建扫描(POST /scans),并立即启动扫描(POST /scans/{id}/launch),因为该工具的名称是“启动”,而不是“创建”。get_scan_results:真实扫描结果会按插件汇总整个扫描的发现项(来自GET /scans/{id}的vulnerabilities摘要),而不是像模拟数据那样返回包含完整信息的单条漏洞记录。为每个插件获取完整的 CVSS、描述和修复文本,需要针对每个发现项额外调用一次 Nessus API;对于包含大量发现项的扫描,这种做法无法扩展。如需深入查看某个发现项的完整详情,请使用结果中的特定plugin_id调用get_vulnerability_details。get_vulnerability_details:在模拟模式下,此工具接受 CVE ID。在真实 Nessus 实例中,它必须接受数字形式的 Nessus 插件 ID(例如156327),因为本地部署的 Nessus REST API 没有可将任意 CVE 或关键词解析为插件的端点——仅提供GET /plugins/plugin/{id}(按数字插件 ID 查询)。真实模式下,如果输入的格式像 CVE ID,工具会返回清晰且有说明的错误,而不会静默失败。search_vulnerabilities:Nessus 没有单一的“搜索所有漏洞”端点——发现项仅存在于扫描结果中。在真实模式下,此工具接受可选的scan_id,将搜索限定在单个扫描内;如果不提供,则搜索最近更新的已完成扫描(最多 10 个,以限制扫描数量较多的实例上的 API 调用次数)。这是经过权衡的范围限定方案,并已在工具描述中说明。
与 Claude for Desktop 配合使用
如需将此服务与 Claude for Desktop 配合使用:
-
编辑 Claude for Desktop 配置文件:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
- macOS:
-
添加服务配置:
{
"mcpServers": {
"nessus": {
"command": "node",
"args": ["/path/to/nessus-mcp-server/build/index.js"],
"env": {
"NESSUS_URL": "https://your-nessus-instance:8834",
"NESSUS_ACCESS_KEY": "your-access-key",
"NESSUS_SECRET_KEY": "your-secret-key",
"NESSUS_ALLOW_SELF_SIGNED": "false"
}
}
}
}
在模拟模式下,可以省略 env 部分。
交互示例
启动扫描
start_scan:
target: 192.168.1.1
scan_type: basic-network-scan
获取扫描结果
get_scan_results:
scan_id: scan-1234567890
搜索漏洞
search_vulnerabilities:
keyword: log4j
对于真实 Nessus 实例,可以选择将搜索限定在单个扫描内:
search_vulnerabilities:
keyword: log4j
scan_id: 42
开发
项目结构
src/index.ts:服务主入口src/nessus-api.ts:带模拟回退机制的 Nessus API 客户端src/mock-data.ts:用于测试的模拟漏洞数据src/tools/:工具实现src/utils/:实用函数
添加新工具
- 在
src/tools/中相应的文件里定义工具架构和处理程序 - 在
src/index.ts中导入并注册该工具
验证状态
真实模式下的请求直接按照 Tenable Nessus REST API 文档约定(端点、请求正文和响应格式)实现。已通过以下方式验证:
- TypeScript 构建成功(
npm run build)。 - 在真实模式下通过 stdio 调用每个工具,并连接到无法访问的
NESSUS_URL(例如https://localhost:1),确认服务能够启动、接受请求,并返回包含描述性消息(连接被拒绝、TLS、超时等)的正常isError响应,而不会崩溃或悄悄回退到模拟数据。
由于构建此项目的环境中没有可用的 Nessus 实例,因此尚未通过真实的 Nessus 实例验证。如果你将其连接到真实实例后发现不匹配(例如,实例中不存在某个模板名称,或响应字段因 Nessus 版本而异),请提交 issue。
许可证
MIT
免责声明
本服务与 Tenable 无关,也未获得 Tenable 背书。Nessus 是 Tenable, Inc. 的商标。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。