内容
# Acunetix MCP 服务器
[](https://lobehub.com/mcp/gashadarli-acunetix-mcp-server)
面向生产的、与模型无关的 Acunetix REST API 的 MCP 服务器。它为 AI 客户端提供了类型化的 MCP 工具,而不是危险的原始 HTTP 代理。
```
AI 客户端
-> MCP 传输层
-> 类型化的 MCP 工具
-> 策略和审计层
-> Acunetix API 客户端
-> Acunetix REST API
```
支持的客户端包括 Claude Desktop、Gemini CLI、ChatGPT 远程 MCP、Codex、OpenClaw、本地 MCP 运行器和其他与 MCP 兼容的客户端。
## MCP 功能
- **工具/技能:** 168 个 MCP 工具,包括 161 个文档化的 Acunetix API 操作的全面覆盖以及安全的符合人体工程学的包装。
- **提示/提示信息:** 用于库存摘要、扫描状态报告、漏洞分类和安全扫描启动检查的工作流提示。
- **资源:** 用于工具覆盖、策略、OpenAPI 摘要和配置模板的安全元数据资源。
- **许可证:** MIT。
## 工具覆盖
服务器为 `Acunetix-API-Documentation.yaml` 中记录的每个操作注册固定的 MCP 工具。当前的覆盖报告是:
```text
文档化操作:161
已实现操作:161
缺失操作:0
已注册工具:168
```
常见的只读工具:
- `acunetix_health`
- `list_targets`
- `get_target`
- `list_target_groups`
- `get_target_group`
- `list_scans`
- `get_scan_status`
- `list_scanning_profiles`
- `list_vulnerabilities`
- `get_vulnerability`
- `list_report_templates`
- `list_reports`
- `get_report`
- `list_users`
- `get_user`
- `list_roles`
- `list_wafs`
- `list_workers`
- `download_report`
常见的操作工具:
- `create_target`
- `start_scan`
- `stop_scan`
- `generate_report`
- `create_user`
- `update_user`
- `delete_user`
- `update_vulnerability_status`
默认情况下,操作工具被阻止,因为 `ACUNETIX_READ_ONLY=true`。要允许它们,请设置 `ACUNETIX_READ_ONLY=false`;调用者仍必须传递 `confirmation=true`,除非设置了 `ACUNETIX_REQUIRE_CONFIRMATION=false`。
没有通用的 `acunetix_request(method, path, body)` 代理工具。
广泛的 OpenAPI 覆盖工具使用一致的参数形状:
```json
{
"path_params": {"user_id": "11111111-1111-1111-1111-111111111111"},
"query": {"q": "text:admin"},
"body": {"enabled": true},
"limit": 50,
"offset": "cursor-value",
"confirmation": true
}
```
例如:
- “获取用户列表”映射到 `list_users` 并调用 `GET /users`。
- “显示 WAF”映射到 `list_wafs` 并调用 `GET /wafs`。
- “下载报告描述符 X”映射到 `download_report` 并调用 `GET /reports/download/{descriptor}`。
- “更新漏洞状态”映射到 `update_vulnerability_status`,需要确认,并调用 `PUT /vulnerabilities/{vuln_id}/status`。
## 提示
服务器提供了帮助 AI 客户端遵循安全 Acunetix 工作流的 MCP 提示:
- `acunetix_inventory_summary`
- `acunetix_scan_status_report`
- `acunetix_vulnerability_triage`
- `acunetix_safe_scan_start_checklist`
## 资源
服务器提供了只读的 MCP 资源:
- `acunetix://tool-coverage`
- `acunetix://policy`
- `acunetix://openapi-summary`
- `acunetix://configuration-template`
## 配置
在本地复制示例并填写您自己的密钥:
```bash
cp .env.example .env
cp config.example.yaml config.yaml
```
环境变量覆盖 `config.yaml`。
关键设置:
```env
ACUNETIX_BASE_URL=https://10.0.244.136/
ACUNETIX_API_KEY=replace-with-your-api-key
ACUNETIX_VERIFY_SSL=false
ACUNETIX_READ_ONLY=true
ACUNETIX_REQUIRE_CONFIRMATION=true
ACUNETIX_TARGET_ALLOWLIST=
MCP_TRANSPORT=stdio
MCP_SERVER_PORT=8080
```
`ACUNETIX_BASE_URL` 可以是 Acunetix 根 URL 或完整的 API 基 URL。服务器将 `https://host/` 标准化为 `https://host/api/v1`。
永远不要将真实的 API 密钥放在源代码、测试、README 代码段或已提交的配置中。`.env` 和 `config.yaml` 被 Git 忽略。
## Docker
构建:
```bash
docker compose build
```
使用 Docker Compose 运行:
```bash
ACUNETIX_API_KEY="$ACUNETIX_API_KEY" docker compose up
```
在 Docker 中为本地 MCP 客户端运行_stdio 模式:
```bash
docker run --rm -i \
-e ACUNETIX_BASE_URL="https://10.0.244.136/" \
-e ACUNETIX_API_KEY="$ACUNETIX_API_KEY" \
-e ACUNETIX_VERIFY_SSL="false" \
acunetix-mcp:latest \
--transport stdio
```
运行 HTTP 模式:
```bash
docker run --rm \
-p 8080:8080 \
-e ACUNETIX_BASE_URL="https://10.0.244.136/" \
-e ACUNETIX_API_KEY="$ACUNETIX_API_KEY" \
-e ACUNETIX_VERIFY_SSL="false" \
-e MCP_TRANSPORT="http" \
acunetix-mcp:latest
```
HTTP 端点:
- MCP 流式 HTTP:`http://localhost:8080/mcp`
- 容器健康检查:`http://localhost:8080/health`
## Claude Desktop
_stdio 配置:
```json
{
"mcpServers": {
"acunetix": {
"command": "docker",
"args": [
"run", "--rm", "-i",
"-e", "ACUNETIX_BASE_URL=https://10.0.244.136/",
"-e", "ACUNETIX_API_KEY",
"-e", "ACUNETIX_VERIFY_SSL=false",
"acunetix-mcp:latest",
"--transport", "stdio"
],
"env": {
"ACUNETIX_API_KEY": "your-api-key-here"
}
}
}
}
```
## Gemini CLI
MCP 服务器条目示例:
```json
{
"mcpServers": {
"acunetix": {
"command": "acunetix-mcp-server",
"args": ["--transport", "stdio"],
"env": {
"ACUNETIX_BASE_URL": "https://10.0.244.136/",
"ACUNETIX_API_KEY": "your-api-key-here",
"ACUNETIX_VERIFY_SSL": "false"
}
}
}
}
```
## ChatGPT 远程 MCP / HTTP
在 ChatGPT 可以通过 HTTPS 访问的服务器上运行。对于本地测试:
```bash
docker run --rm -p 8080:8080 \
-e MCP_TRANSPORT=http \
-e ACUNETIX_BASE_URL="https://10.0.244.136/" \
-e ACUNETIX_API_KEY="$ACUNETIX_API_KEY" \
-e ACUNETIX_VERIFY_SSL=false \
acunetix-mcp:latest
```
配置远程 MCP URL 为:
```text
https://your-public-host.example.com/mcp
```
对于生产环境远程访问,请将容器置于 TLS 和正常的身份验证或网络访问控制后面。不要公开暴露此服务。
## 通用 MCP 客户端
本地_stdio:
```json
{
"mcpServers": {
"acunetix": {
"command": "python",
"args": ["-m", "acunetix_mcp.server", "--transport", "stdio"],
"cwd": "/absolute/path/to/Acunetix-MCP-Server",
"env": {
"ACUNETIX_BASE_URL": "https://10.0.244.136/",
"ACUNETIX_API_KEY": "your-api-key-here",
"ACUNETIX_VERIFY_SSL": "false"
}
}
}
}
```
HTTP:
```json
{
"mcpServers": {
"acunetix": {
"type": "http",
"url": "http://localhost:8080/mcp"
}
}
}
```
## LobeHub 市场评估
此存储库包括 LobeHub 评估所需的元数据和 MCP 功能:
- `LICENSE` 存在于存储库根目录中。
- README 包括 LobeHub 声明徽章。
- 工具发现至少公开一个工具和完整的 Acunetix API 覆盖。
- 提示发现公开工作流提示。
- 资源发现公开安全上下文资源。
- 提供了 Docker 和_stdio 安装方法。
将更改推送到 GitHub 后,打开 LobeHub MCP 页面并单击 `Check claim status`,以便徽章可以验证存储库所有权。
## 测试
安装测试依赖项:
```bash
pip install -e ".[dev]"
```
运行单元测试:
```bash
pytest -v
```
从已注册的 MCP 工具打印覆盖率报告:
```bash
python -c "import asyncio, json; from acunetix_mcp.server import create_server; from acunetix_mcp.tools.openapi_coverage import coverage_report; tools=asyncio.run(create_server().list_tools()); print(json.dumps(coverage_report({t.name for t in tools}), indent=2))"
```
仅当您拥有真正的 Acunetix 实例时,才运行只读集成测试:
```bash
ACUNETIX_BASE_URL="https://10.0.244.136/" \
ACUNETIX_API_KEY="$ACUNETIX_API_KEY" \
ACUNETIX_VERIFY_SSL=false \
pytest tests/test_integration.py -v
```
Docker 烟雾检查:
```bash
docker compose build
ACUNETIX_API_KEY="$ACUNETIX_API_KEY" docker compose up
curl http://localhost:8080/health
python scripts/verify_mcp_http.py --url http://localhost:8080/mcp
```
## 安全注意事项
- API 密钥仅作为 Acunetix `X-Auth` 头部发送。
- API 密钥在规范化的 API 错误和审计日志中被掩盖。
- 默认情况下,操作工具在只读模式下被阻止。
- `start_scan` 受确认、目标允许列表检查和扫描启动并发限制的保护。
- 删除操作未公开。
- 集成测试是只读的,如果未设置凭证,则跳过。