Skip to main content
Glama
io.github.pierre3/zap-mcp

io.github.pierre3/zap-mcp

by pierre3

dotnet-zap-mcp

NuGet NuGet Downloads Release

用于 OWASP ZAP 的 MCP(模型上下文协议)服务器。使 AI 代理(Claude、GitHub Copilot 等)能够通过 MCP 驱动 ZAP 漏洞扫描。

功能特性

  • 45 个 MCP 工具,用于控制 OWASP ZAP(扫描、告警、爬虫、Ajax 爬虫、上下文、认证、报告等)

  • 内置 Docker Compose 管理(通过一次工具调用即可启动/停止 ZAP)

  • 零配置设置:自动生成 API 密钥并提取 Docker 资源

  • 兼容任何支持 MCP 的客户端(Claude Desktop、VS Code 等)

Related MCP server: Grype MCP Server

安装

dotnet tool install -g dotnet-zap-mcp

先决条件

  • .NET 10 SDK

  • 支持 docker compose 的 Docker(Docker Engine 或 Docker Desktop)(用于内置的 ZAP 容器管理)

配置

零配置(推荐)

无需任何配置。代理调用 DockerComposeUp 即可自动:

  1. 将 Docker 资源提取到 ~/.zap-mcp/docker/

  2. 生成随机 API 密钥

  3. 在 localhost:8090 上启动 ZAP 容器

  4. 等待 ZAP 变为健康状态

数据持久化

ZAP 容器使用两个 Docker 命名卷:

卷

容器路径

用途

zap-home

/home/zap/.ZAP

ZAP 设置、上下文、会话、扫描策略(重启后保留)

zap-data

/zap/wrk/data

用于报告、会话文件以及上下文导入/导出的共享目录

首次启动时,模板 config.xml 会被复制到 zap-home 中。后续启动时,仅更新 API 密钥——通过 ZAP 所做的任何更改(上下文、认证设置、扫描策略等)都会被保留。

zap-data 卷包含:

  • reports/ — 生成的扫描报告

  • sessions/ — 保存的 ZAP 会话

  • contexts/ — 导出的上下文文件

Claude Desktop / Claude Code

添加到您的 MCP 配置中:

{
  "mcpServers": {
    "zap": {
      "command": "zap-mcp"
    }
  }
}

VS Code (Copilot)

添加到 .vscode/mcp.json:

{
  "servers": {
    "zap": {
      "command": "zap-mcp"
    }
  }
}

使用现有的 ZAP 实例

如果您已有正在运行的 ZAP 实例,可通过环境变量传递连接信息:

{
  "mcpServers": {
    "zap": {
      "command": "zap-mcp",
      "env": {
        "ZAP_BASE_URL": "http://localhost:8090",
        "ZAP_API_KEY": "your-api-key"
      }
    }
  }
}

可用工具

Docker 管理

工具

参数

描述

DockerComposeUp

—

启动 ZAP 容器并等待其变为健康状态

DockerComposeDown

—

停止并移除 ZAP 容器

DockerComposeStatus

—

检查容器状态

DockerComposeLogs

tail

获取最近的容器日志

ZAP 核心

工具

参数

描述

GetVersion

—

验证 ZAP 连接

GetHosts

—

列出已记录的主机

GetSites

—

列出已记录的站点

GetUrls

baseUrl

列出指定基础 URL 下已记录的 URL

爬虫(Spider)

工具

参数

描述

StartSpider

url、maxChildren、recurse、subtreeOnly、contextName

启动爬虫扫描以抓取和发现页面

GetSpiderStatus

scanId

检查爬虫进度(0-100%)

GetSpiderResults

scanId

获取爬虫发现的 URL

StopSpider

scanId

停止正在运行的爬虫扫描

主动扫描

工具

参数

描述

StartActiveScan

url、recurse、inScopeOnly、scanPolicyName、contextId

启动主动漏洞扫描

GetActiveScanStatus

scanId

检查主动扫描进度(0-100%)

StopActiveScan

scanId

停止正在运行的主动扫描

被动扫描

工具

参数

描述

GetPassiveScanStatus

—

检查被动扫描进度(剩余记录数)

告警

工具

参数

描述

GetAlertsSummary

baseUrl

按风险级别统计的告警数量

GetAlerts

baseUrl、start、count、riskId

带分页和风险过滤的详细告警列表

报告

工具

参数

描述

GetHtmlReport

—

生成 HTML 扫描报告

GetJsonReport

—

生成 JSON 扫描报告

GetXmlReport

—

生成 XML 扫描报告

上下文管理

工具

参数

描述

GetContextList

—

列出 ZAP 中定义的所有上下文

GetContext

contextName

获取上下文详细信息(作用域模式等)

CreateContext

contextName

创建新上下文

RemoveContext

contextName

删除上下文

IncludeInContext

contextName、regex

向上下文作用域添加 URL 包含模式

ExcludeFromContext

contextName、regex

向上下文作用域添加 URL 排除模式

ImportContext

contextFilePath

将上下文文件导入 ZAP

ExportContext

contextName、contextFilePath

将上下文导出到文件

认证

工具

参数

描述

GetAuthenticationMethod

contextId

获取为上下文配置的认证方法

SetAuthenticationMethod

contextId、authMethodName、authMethodConfigParams

设置认证方法(基于表单、基于 JSON、基于脚本、HTTP)

SetLoggedInIndicator

contextId、loggedInIndicatorRegex

设置表示已登录状态的正则表达式模式

SetLoggedOutIndicator

contextId、loggedOutIndicatorRegex

设置表示已登出状态的正则表达式模式

用户

工具

参数

描述

GetUsersList

contextId

列出上下文的所有用户

CreateUser

contextId、name

创建新用户

RemoveUser

contextId、userId

移除用户

SetAuthenticationCredentials

contextId、userId、authCredentialsConfigParams

设置用户凭据(用户名/密码)

SetUserEnabled

contextId、userId、enabled

启用或禁用用户

强制用户

工具

参数

描述

SetForcedUser

contextId、userId

为上下文设置强制用户

SetForcedUserModeEnabled

enabled

全局启用或禁用强制用户模式

GetForcedUserStatus

contextId

获取强制用户模式状态和当前强制用户

Ajax 爬虫

工具

参数

描述

StartAjaxSpider

url、inScope、contextName、subtreeOnly

为 JavaScript 密集型应用启动 Ajax 爬虫

StartAjaxSpiderAsUser

contextName、userId、url、subtreeOnly

以特定用户身份启动 Ajax 爬虫

GetAjaxSpiderStatus

—

获取 Ajax 爬虫状态(运行中/已停止)

GetAjaxSpiderResults

—

获取 Ajax 爬虫结果摘要

StopAjaxSpider

—

停止 Ajax 爬虫

典型工作流程

  1. 代理调用 DockerComposeUp 启动 ZAP

  2. 将浏览器/Playwright 配置为使用 ZAP 作为代理(http://127.0.0.1:8090)

  3. 通过代理浏览目标应用

  4. 代理调用 StartSpider 抓取应用,然后调用 GetSpiderStatus 监控进度

  5. 代理调用 GetPassiveScanStatus 等待被动扫描完成

  6. 代理对关键页面调用 StartActiveScan,然后调用 GetActiveScanStatus 监控进度

  7. 代理调用 GetAlertsSummary 和 GetAlerts 获取漏洞发现结果

  8. 代理调用 GetHtmlReport 或 GetJsonReport 生成扫描报告

  9. 完成后代理调用 DockerComposeDown

注意: ZAP 设置(上下文、认证、扫描策略)会持久化保存在 zap-home Docker 卷中。您可以停止并重新启动容器,而不会丢失配置。

试用(使用附带的易受攻击应用)

此仓库包含一个故意存在漏洞的 Web 应用,用于试用 ZAP 扫描。该应用包含常见漏洞(XSS、SQL 注入、CSRF、开放重定向),因此 ZAP 可以检测到真实的发现结果。

设置

# Start ZAP and the vulnerable target app
docker compose -f tests/docker/docker-compose.test.yml up -d --build

# Wait until both containers are healthy
docker compose -f tests/docker/docker-compose.test.yml ps

然后将您的 MCP 客户端配置为连接到这个 ZAP 实例:

{
  "mcpServers": {
    "zap": {
      "command": "zap-mcp",
      "env": {
        "ZAP_BASE_URL": "http://localhost:8090",
        "ZAP_API_KEY": "test-api-key-for-ci"
      }
    }
  }
}

易受攻击的应用在 Docker 网络内可通过 http://target 访问(供 ZAP 使用),在宿主机上可通过 http://localhost:8080 访问。

示例 1:快速扫描

给代理的提示:

扫描 http://target 以查找漏洞。运行爬虫抓取,等待被动扫描完成,然后向我显示警报摘要并生成 HTML 报告。

预期工具流程:

GetVersion          → Verify ZAP connectivity
StartSpider         → url: "http://target"
GetSpiderStatus     → Poll until 100%
GetPassiveScanStatus → Poll until 0 records remaining
GetAlertsSummary    → baseUrl: "http://target"
GetAlerts           → baseUrl: "http://target"
GetHtmlReport       → Generate report

ZAP 将发现诸如 /search、/login、/users、/about、/contact 之类的页面,被动扫描将报告诸如缺少安全标头和 CSRF 漏洞之类的问题。

示例 2:认证扫描

/admin 页面需要登录(用户名:admin,密码:password)。认证扫描让 ZAP 能够访问受保护的页面。

给代理的提示:

为 http://target 设置认证扫描。登录表单位于 /login,包含 "username" 和 "password" 字段(凭据:admin / password)。登录成功的指示是 "Welcome, admin"。配置认证后,以认证用户身份爬取站点并运行主动扫描。

预期工具流程:

CreateContext                   → contextName: "target-auth"
IncludeInContext                → regex: "http://target.*"
SetAuthenticationMethod         → contextId, authMethodName: "formBasedAuthentication",
                                  authMethodConfigParams: "loginUrl=http://target/login&loginRequestData=username%3D%7B%25username%25%7D%26password%3D%7B%25password%25%7D"
SetLoggedInIndicator            → loggedInIndicatorRegex: "Welcome, admin"
CreateUser                      → contextId, name: "admin"
SetAuthenticationCredentials    → contextId, userId, authCredentialsConfigParams: "username=admin&password=password"
SetUserEnabled                  → contextId, userId, enabled: true
SetForcedUser                   → contextId, userId
SetForcedUserModeEnabled        → enabled: true
StartSpider                     → url: "http://target", contextName: "target-auth"
GetSpiderStatus                 → Poll until 100%
GetPassiveScanStatus            → Poll until 0 records remaining
StartActiveScan                 → url: "http://target"
GetActiveScanStatus             → Poll until 100%
GetAlertsSummary                → baseUrl: "http://target"
GetAlerts                       → baseUrl: "http://target"
SetForcedUserModeEnabled        → enabled: false

配置认证后,ZAP 可以访问 /admin 并测试登录后的漏洞。

示例 3:完整漏洞评估

给代理的提示:

对 http://target 执行完整的漏洞评估。爬取站点,运行主动扫描,然后按风险级别对所有已发现的漏洞进行详细分类。

预期工具流程:

StartSpider          → url: "http://target", recurse: true
GetSpiderStatus      → Poll until 100%
GetSpiderResults     → Review discovered URLs
GetPassiveScanStatus → Poll until 0 records remaining
StartActiveScan      → url: "http://target", recurse: true
GetActiveScanStatus  → Poll until 100%
GetAlertsSummary     → baseUrl: "http://target"
GetAlerts            → baseUrl: "http://target", riskId: "3" (High)
GetAlerts            → baseUrl: "http://target", riskId: "2" (Medium)
GetAlerts            → baseUrl: "http://target", riskId: "1" (Low)
GetHtmlReport        → Generate final report

主动扫描将检测到以下漏洞:

  • 高危:SQL 注入(/users?id=)、跨站脚本(/search?q=)

  • 中危:CSRF(/login 上缺少令牌)、开放重定向(/redirect?url=)

  • 低危/信息:缺少安全标头、Cookie 问题等。

清理

docker compose -f tests/docker/docker-compose.test.yml down -v

许可证

MIT

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Integrates OWASP ZAP security testing with AI assistants through MCP, enabling automated vulnerability scanning and AI-powered security analysis during development. Supports multiple scan types including active, passive, and AJAX spider scans with real-time status updates.
    5
    MIT
  • A
    license
    A
    quality
    F
    maintenance
    Enables AI assistants to perform vulnerability scanning using Grype, supporting scans of directories, container images, and packages via the Model Context Protocol.
    9
    9
    Apache 2.0
  • F
    license
    Not graded
    quality
    D
    maintenance
    A lightweight MCP server that wraps OWASP ZAP's REST API as Model Context Protocol tools, enabling AI agents to perform automated security scanning.
    -