关于 OWASP ZAP MCP Server
OWASP ZAP MCP Server 让 AI Agent 和 MCP 客户端通过工具控制 OWASP ZAP,涵盖爬取、认证配置、漏洞结果与报告,并可管理 ZAP Docker 容器。
主要功能
- 01提供 45 个 OWASP ZAP 工具
- 02支持 Spider 和主动扫描
- 03查看告警并生成扫描报告
- 04配置上下文与身份验证
- 05管理 Docker 容器生命周期
适用场景
- 01扫描前爬取 Web 应用
- 02扫描需要登录的站点区域
- 03按风险级别查看漏洞结果
- 04生成 HTML、JSON 或 XML 报告
MCP 相关
将 OWASP ZAP 扫描、配置、报告和 Docker 管理功能作为工具提供给 MCP 客户端。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
dotnet-zap-mcp
适用于 OWASP ZAP 的 MCP(Model Context Protocol)服务。让 AI Agent(Claude、GitHub Copilot 等)通过 MCP 驱动 ZAP 漏洞扫描。
功能
- 提供 45 个用于控制 OWASP ZAP 的 MCP 工具(扫描、警报、爬虫、Ajax 爬虫、上下文、身份验证、报告等)
- 内置 Docker Compose 管理(通过一次工具调用启动或停止 ZAP)
- 零配置设置:自动生成 API 密钥并提取 Docker 资源
- 适用于任何兼容 MCP 的客户端(Claude Desktop、VS Code 等)
安装
dotnet tool install -g dotnet-zap-mcp
先决条件
- .NET 10 SDK
- 支持
docker compose的 Docker(Docker Engine 或 Docker Desktop,用于内置 ZAP 容器管理)
配置
零配置(推荐)
无需配置。Agent 会调用 DockerComposeUp,该工具会自动:
- 将 Docker 资源提取到
~/.zap-mcp/docker/ - 生成随机 API 密钥
- 在
localhost:8090上启动 ZAP 容器 - 等待 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 |
爬虫
| 工具 | 参数 | 描述 |
|---|---|---|
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 Spider
| 工具 | 参数 | 描述 |
|---|---|---|
StartAjaxSpider | url、inScope、contextName、subtreeOnly | 为 JavaScript 密集型应用启动 Ajax Spider |
StartAjaxSpiderAsUser | contextName、userId、url、subtreeOnly | 以指定用户身份启动 Ajax Spider |
GetAjaxSpiderStatus | — | 获取 Ajax Spider 状态(运行中/已停止) |
GetAjaxSpiderResults | — | 获取 Ajax Spider 结果摘要 |
StopAjaxSpider | — | 停止 Ajax Spider |
典型工作流
- Agent 调用
DockerComposeUp启动 ZAP - 配置浏览器/Playwright,将 ZAP 用作代理(
http://127.0.0.1:8090) - 通过代理浏览目标应用
- Agent 调用
StartSpider爬取应用,然后调用GetSpiderStatus监控进度 - Agent 调用
GetPassiveScanStatus,等待被动扫描完成 - Agent 在关键页面调用
StartActiveScan,然后调用GetActiveScanStatus监控进度 - Agent 调用
GetAlertsSummary和GetAlerts获取漏洞发现结果 - Agent 调用
GetHtmlReport或GetJsonReport生成扫描报告 - 完成后,Agent 调用
DockerComposeDown
注意: ZAP 设置(上下文、身份验证、扫描策略)会保存在
zap-homeDocker 卷中。你可以停止并重启容器,而不会丢失配置。
试用(使用随附的易受攻击应用)
此仓库包含一个有意设置为易受攻击的 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 网络内(ZAP 使用的网络)可通过
http://target访问易受攻击的应用;在宿主机上则可通过http://localhost:8080访问。
示例 1:快速扫描
给 Agent 的提示词:
扫描 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 访问受保护的页面。
给 Agent 的提示词:
为 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:全面漏洞评估
给 Agent 的提示词:
对 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
许可证
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。