重要 该项目仍在开发中,尚未准备好用于生产环境。它旨在教育目的,并展示模型上下文协议(MCP)与OWASP ZAP的能力。
注意 本项目未得到OWASP或OWASP ZAP项目的认可。它是独立实现的模型上下文协议(MCP),用于与OWASP ZAP一起使用。
这是一个Spring Boot应用程序,公开了OWASP ZAP作为MCP(模型上下文协议)服务器。它允许任何兼容MCP的AI代理(例如Claude Desktop、Cursor)编排ZAP操作——爬虫、主动扫描、导入OpenAPI规范以及生成报告。
📖 查看完整文档 - 完整指南、API参考和示例
flowchart LR
subgraph "DOCKER COMPOSE"
direction LR
ZAP["OWASP ZAP (容器)"]
MCPZAP["MCP ZAP Server"]
MCPFile["MCP 文件系统服务器"]
Client["MCP 客户端 (开放Web-UI)"]
Juice["OWASP Juice-Shop"]
Petstore["Swagger Petstore Server"]
end
MCPZAP <-->|HTTP/可流式传输 + MCPO| Client
MCPFile <-->|STDIO + MCPO| Client
MCPZAP -->|ZAP REST API| ZAP
ZAP -->|扫描、警报、报告| MCPZAP
ZAP -->|爬虫/主动扫描| Juice
ZAP -->|导入API/主动扫描| Petstore
在启动服务之前,生成安全的API密钥:
# 生成ZAP API密钥
openssl rand -hex 32
# 生成MCP API密钥
openssl rand -hex 32
cp .env.example .env
.env并更新以下必需值:# 必需:设置您的安全API密钥
ZAP_API_KEY=在这里填写您生成的ZAP API密钥
MCP_API_KEY=在这里填写您生成的MCP API密钥
# 必需:设置您的工作目录
LOCAL_ZAP_WORKPLACE_FOLDER=/到您的zap工作区的路径
.env提交到版本控制中。它已经在.gitignore中。MCP ZAP服务器包括全面的安全功能,具有三种身份验证模式:
none、api-key或jwt模式MCP服务器支持三种身份验证模式,以平衡安全性和易用性:
none)⚠️ 警告:仅限开发/测试
# .env
MCP_SECURITY_MODE=none
仅用于受信任网络上的本地开发。所有请求均无需身份验证即可访问。
CSRF保护:禁用以保持MCP协议兼容性(MCP端点不支持CSRF令牌)。
api-key)✅ 推荐用于:简单部署、内部网络
# .env
MCP_SECURITY_MODE=api-key
MCP_API_KEY=您的安全API密钥
简单的静态API密钥身份验证:
# 使用X-API-Key头
curl -H "X-API-Key: 您的mcp-api-key" http://localhost:7456/mcp
CSRF保护:禁用(设计如此)- 这是一个仅API服务器,使用基于令牌的身份验证,而不是会话cookie。CSRF攻击仅影响浏览器中的基于cookie的身份验证。详情见SECURITY.md。
优点:简单配置,无令牌过期,最小开销
使用场景:Docker Compose,内部网络,单租户部署
jwt)✅ 推荐用于:生产,云部署,多租户
# .env
MCP_SECURITY_MODE=jwt
JWT_ENABLED=true
JWT_SECRET=您的256位秘密至少32个字符
MCP_API_KEY=您的初始API密钥
带有自动过期的基于令牌的身份验证:
# 1. 交换API密钥以获取JWT令牌
curl -X POST http://localhost:7456/auth/token \
-H "Content-Type: application/json" \
-d '{"apiKey": "您的mcp-api-key", "clientId": "您的客户端ID"}'
# 2. 使用访问令牌(有效期1小时)
curl -H "Authorization: Bearer 您的访问令牌" http://localhost:7456/mcp
# 3. 当过期时刷新(刷新令牌有效期7天)
curl -X POST http://localhost:7456/auth/refresh \
-H "Content-Type: application/json" \
-d '{"refreshToken": "您的刷新令牌"}'
CSRF保护:禁用(设计如此)- 仅API服务器,使用无状态JWT身份验证。详情见SECURITY.md以了解OWASP合规性解释。
优点:令牌过期(1小时访问,7天刷新),令牌撤销,审计轨迹
使用场景:生产部署,公共访问,合规性要求
注意:JWT模式向后兼容—迁移期间客户端仍可使用API密钥。
🔐 MCP安全合规性:此服务器遵循模型上下文协议安全最佳实践。详情及路线图见SECURITY.md。
📚 详细文档:
默认情况下,服务器阻止扫描:
要启用特定域名的扫描,请在.env中配置白名单:
# 仅允许特定域名(支持通配符)
ZAP_URL_WHITELIST=example.com,*.test.com,demo.org
警告:仅在隔离且安全的环境中启用ZAP_ALLOW_LOCALHOST=true或ZAP_ALLOW_PRIVATE_NETWORKS=true。
对于本地开发,使用JVM镜像进行快速迭代:
git clone https://github.com/dtkmn/mcp-zap-server.git
cd mcp-zap-server
# 设置环境变量
cp .env.example .env
# 编辑.env以包含您的API密钥和配置
# 创建工作区目录
mkdir -p $(grep LOCAL_ZAP_WORKPLACE_FOLDER .env | cut -d '=' -f2)/zap-wrk
# 启动服务(JVM - 快速构建)
./dev.sh
# 或手动:
docker compose -f docker-compose.yml -f docker-compose.dev.yml up -d --build
构建时间:约2-3分钟
启动时间:约3-5秒
用途:开发、测试、快速迭代
对于闪电般快速启动的生产部署:
# 构建原生镜像(去喝杯咖啡☕)
./prod.sh
# 或手动:
docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d --build
构建时间:约20-25分钟
启动时间:约0.6秒
用途:生产、云部署、无服务器
| 指标 | JVM(开发) | 原生(生产) |
|---|---|---|
| 构建时间 | 2-3分钟 | 20-25分钟 |
| 启动时间 | 3-5秒 | 0.6秒 |
| 内存 | 约300MB | 约200MB |
| 镜像大小 | 383MB | 391MB |
| 最佳用途 | 开发 | 生产 |
![]() |
在浏览器中打开http://localhost:3000,您应该能看到Open Web-UI界面。


完成后,您可以查看Prompt Examples部分,了解如何使用MCP ZAP服务器与您的AI代理一起使用。
docker-compose logs -f
docker-compose logs -f <服务名称>
zapZAP_API_KEY环境变量配置。${LOCAL_ZAP_WORKPLACE_FOLDER}映射到容器路径/zap/wrk。open-webuimcpohttp://mcp-server:7456/mcp连接到MCP服务器。mcp-serverzap服务并通过配置的ZAP_API_KEY连接到它。MCP_API_KEY用于客户端身份验证(在.env文件中设置)。${LOCAL_ZAP_WORKPLACE_FOLDER}映射到/zap/wrk以允许文件访问。X-API-Key头或Authorization: Bearer <token>包含API密钥。mcpo-filesystemopen-webuijuice-shoppetstore要停止并删除所有容器,运行:
docker-compose down
./gradlew clean build
这是连接到MCP服务器的推荐模式。
重要:您必须包含API密钥用于身份验证。
{
"mcpServers": {
"zap-mcp-server": {
"protocol": "mcp",
"transport": "streamable-http",
"url": "http://localhost:7456/mcp",
"headers": {
"X-API-Key": "您的mcp-api-key"
}
}
}
}
或使用Bearer令牌:
{
"mcpServers": {
"zap-mcp-server": {
"protocol": "mcp",
"transport": "streamable-http",
"url": "http://localhost:74