mcpField
N
Nessus MCP Server

Nessus MCP Server

本地服务
github.com/Cyreslab-AI安全176 周前更新

关于 Nessus MCP Server

Nessus MCP Server 通过 REST API 让 AI 助手操作 Tenable Nessus 漏洞扫描。它支持扫描管理和漏洞查询,并提供无需 Nessus 凭据的模拟模式,用于本地开发与测试。

主要功能

  1. 01启动并监控漏洞扫描
  2. 02列出扫描并获取结果
  3. 03搜索漏洞发现
  4. 04获取漏洞详情
  5. 05用于开发和测试的模拟模式

适用场景

  1. 01对目标启动扫描
  2. 02检查扫描状态和发现结果
  3. 03在扫描结果中搜索漏洞
  4. 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(用于开发)
从源代码构建
  1. 克隆代码仓库:

    git clone https://github.com/Cyreslab-AI/nessus-mcp-server.git
    cd nessus-mcp-server
    
  2. 安装依赖:

    npm install
    
  3. 构建服务:

    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 配合使用:

  1. 编辑 Claude for Desktop 配置文件:

    • macOS:~/Library/Application Support/Claude/claude_desktop_config.json
    • Windows:%APPDATA%\Claude\claude_desktop_config.json
  2. 添加服务配置:

{
  "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/:实用函数
添加新工具
  1. 在 src/tools/ 中相应的文件里定义工具架构和处理程序
  2. 在 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. 的商标。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。