c0tton-fluff/caido-mcp-server

GitHub: c0tton-fluff/caido-mcp-server

这是一个连接 Caido Web 代理与 AI 助手的 MCP 服务器,支持浏览、重放及分析 HTTP 流量并提供独立 CLI 客户端。

Stars: 35 | Forks: 6

Caido

caido-mcp-server

用于 Caido Web 代理的 MCP 服务器和 CLI - 从 AI 助手或终端浏览、重放和分析 HTTP 流量。

Go License Release MCP

## 功能介绍 两种与 Caido 代理交互的方式: - **MCP 服务器** - 通过模型上下文协议 (Model Context Protocol) 向 AI 助手(Claude Code、Cursor 等)暴露 Caido 工具 - **CLI** - 为偏好命令行的渗透测试人员提供的独立终端客户端 两者共享相同的身份验证令牌、相同的 Go SDK 和相同的代码库。 ## 功能特性 | 类别 | 能力 | |----------|-------------| | **代理历史** | 使用 HTTPQL 搜索请求,获取完整的请求/响应详情 | | **重放** | 发送 HTTP 请求,内联获取响应(状态、标头、正文) | | **自动化** | 访问模糊测试会话、结果和载荷。启动/暂停/恢复/取消任务 | | **发现** | 创建、列出、删除和导出安全发现 | | **站点地图** | 浏览已发现的端点 | | **范围** | 创建和管理目标范围定义 | | **项目** | 列出项目并在项目之间切换 | | **工作流** | 列出、运行和切换自动化工作流 | | **篡改** | 列出、创建、切换和删除匹配与替换规则 | | **拦截** | 检查状态、暂停/恢复、列出/转发/丢弃已拦截的请求 | | **环境** | 列出和切换变量环境(令牌、密钥) | | **过滤器** | 列出已保存的 HTTPQL 过滤器预设 | | **实例** | 获取 Caido 版本和平台信息 | **内置的安全性和性能:** - 凭据编辑 - 在工具输出中会对 Authorization、Cookie 和 API key 标头进行编辑 - 输入验证 - 对所有字符串输入进行长度限制以防止上下文泛滥 - 令牌自动刷新 - 过期的 OAuth 令牌会在会话期间自动刷新 - 会话复用 - 每个服务器生命周期内仅使用一个重放会话,避免扩散 - 正文限制 - 响应正文默认限制为 2KB 以节省 LLM 上下文 - 最小化工具描述 - 针对每次 API 调用的低令牌开销进行了优化 ## MCP 服务器 ### 安装 ``` curl -fsSL https://raw.githubusercontent.com/c0tton-fluff/caido-mcp-server/main/install.sh | bash ``` 或者从 [Releases](https://github.com/c0tton-fluff/caido-mcp-server/releases) 下载预构建的二进制文件(macOS、Linux、Windows - amd64/arm64)。
从源码构建 ``` git clone https://github.com/c0tton-fluff/caido-mcp-server.git cd caido-mcp-server go build -ldflags "-X main.version=$(git describe --tags)" -o caido-mcp-server ./cmd/mcp ```
### 快速开始 **选项 A:个人访问令牌(推荐)** 在 Caido 中生成 PAT(Settings > Developer > Personal Access Tokens)并通过环境变量传递。无需运行登录命令。 ``` { "mcpServers": { "caido": { "command": "caido-mcp-server", "args": ["serve"], "env": { "CAIDO_URL": "http://127.0.0.1:8080", "CAIDO_PAT": "your-personal-access-token" } } } } ``` **选项 B:OAuth 设备流** ``` CAIDO_URL=http://localhost:8080 caido-mcp-server login ``` 这将打开浏览器进行 OAuth 身份验证,并将令牌保存到 `~/.caido-mcp/token.json`。然后配置您的 MCP 客户端: ``` { "mcpServers": { "caido": { "command": "caido-mcp-server", "args": ["serve"], "env": { "CAIDO_URL": "http://127.0.0.1:8080" } } } } ``` **3. 使用它** ``` "List all POST requests to /api" "Send this request with a modified user ID" "Create a finding for this IDOR" "Show fuzzing results from Automate session 1" "What's in scope?" ``` ### MCP 工具 (34) | 工具 | 描述 | |------|-------------| | `caido_list_requests` | 使用 HTTPQL 过滤器和分页列出请求 | | `caido_get_request` | 获取请求详情(元数据、标头、正文)。默认 2KB 正文限制 | | `caido_send_request` | 通过 Replay 发送 HTTP 请求,内联返回响应。最多轮询 10 秒 | | `caido_list_replay_sessions` | 列出重放会话 | | `caido_get_replay_entry` | 获取包含响应的重放条目。默认 2KB 正文限制 | | `caido_list_automate_sessions` | 列出模糊测试会话 | | `caido_get_automate_session` | 获取包含条目列表的会话详情 | | `caido_get_automate_entry` | 获取模糊测试结果和载荷 | | `caido_automate_task_control` | 启动/暂停/恢复/取消模糊测试任务 | | `caido_list_findings` | 列出安全发现 | | `caido_create_finding` | 创建关联到请求的发现 | | `caido_delete_findings` | 按 ID 或报告者名称删除发现 | | `caido_export_findings` | 导出发现以用于报告 | | `caido_get_sitemap` | 浏览站点地图层次结构 | | `caido_list_scopes` | 列出目标范围 | | `caido_create_scope` | 使用允许/拒绝列表创建新范围 | | `caido_list_projects` | 列出项目,标记当前项目 | | `caido_select_project` | 切换活动项目 | | `caido_list_workflows` | 列出自动化工作流 | | `caido_run_workflow` | 执行活动工作流或转换工作流 | | `caido_toggle_workflow` | 启用或禁用工作流 | | `caido_list_tamper_rules` | 列出匹配与替换规则集合 | | `caido_create_tamper_rule` | 在集合中创建篡改规则 | | `caido_toggle_tamper_rule` | 启用或禁用篡改规则 | | `caido_delete_tamper_rule` | 删除篡改规则 | | `caido_get_instance` | 获取 Caido 版本和平台信息 | | `caido_intercept_status` | 获取拦截状态 (PAUSED/RUNNING) | | `caido_intercept_control` | 暂停或恢复拦截 | | `caido_list_intercept_entries` | 使用 HTTPQL 过滤列出排队的拦截条目 | | `caido_forward_intercept` | 转发已拦截的请求,可选择进行修改 | | `caido_drop_intercept` | 丢弃已拦截的请求 | | `caido_list_environments` | 列出环境及其变量 | | `caido_select_environment` | 切换活动环境 | | `caido_list_filters` | 列出已保存的 HTTPQL 过滤器预设 |
参数参考 #### caido 列出请求 | 参数 | 类型 | 描述 | |-----------|------|-------------| | `httpql` | string | HTTPQL 过滤查询 | | `limit` | int | 最大请求数(默认 20,最大 100) | | `after` | string | 分页游标 | #### caido 获取请求 | 参数 | 类型 | 描述 | |-----------|------|-------------| | `ids` | string[] | 请求 ID(必填) | | `include` | string[] | `requestHeaders`、`requestBody`、`responseHeaders`、`responseBody` | | `bodyOffset` | int | 字节偏移量 | | `bodyLimit` | int | 字节限制(默认 2000) | #### caido 发送请求 | 参数 | 类型 | 描述 | |-----------|------|-------------| | `raw` | string | 完整的 HTTP 请求(必填) | | `host` | string | 目标主机(覆盖 Host 标头) | | `port` | int | 目标端口 | | `tls` | bool | 使用 HTTPS(默认 true) | | `sessionId` | string | 重放会话(如果省略则自动管理) | #### caido 获取 Replay 条目 | 参数 | 类型 | 描述 | |-----------|------|-------------| | `id` | string | 重放条目 ID(必填) | | `bodyOffset` | int | 字节偏移量 | | `bodyLimit` | int | 字节限制(默认 2000) | #### caido 获取 Automate 条目 | 参数 | 类型 | 描述 | |-----------|------|-------------| | `id` | string | 条目 ID(必填) | | `limit` | int | 最大结果数 | | `after` | string | 分页游标 | #### caido 创建 Finding | 参数 | 类型 | 描述 | |-----------|------|-------------| | `requestId` | string | 关联的请求(必填) | | `title` | string | 发现标题(必填) | | `description` | string | 发现描述 | #### caido 创建 Scope | 参数 | 类型 | 描述 | |-----------|------|-------------| | `name` | string | 范围名称(必填) | | `allowlist` | string[] | 要包含的主机名,例如 `example.com`、`*.example.com`(必填) | | `denylist` | string[] | 要排除的主机名 | #### caido 选择项目 | 参数 | 类型 | 描述 | |-----------|------|-------------| | `id` | string | 要切换到的项目 ID(必填) | #### caido 拦截控制 | 参数 | 类型 | 描述 | |-----------|------|-------------| | `action` | string | `pause` 或 `resume`(必填) | #### caido 列出拦截条目 | 参数 | 类型 | 描述 | |-----------|------|-------------| | `filter` | string | HTTPQL 过滤查询 | | `limit` | int | 最大条目数(默认 20,最大 100) | | `after` | string | 分页游标 | #### caido 转发拦截 | 参数 | 类型 | 描述 | |-----------|------|-------------| | `id` | string | 拦截条目 ID(必填) | | `raw` | string | 修改后的原始 HTTP 请求(base64 编码,可选) | #### caido 丢弃拦截 | 参数 | 类型 | 描述 | |-----------|------|-------------| | `id` | string | 拦截条目 ID(必填) | #### caido Automate 任务控制 | 参数 | 类型 | 描述 | |-----------|------|-------------| | `action` | string | `start`、`pause`、`resume` 或 `cancel`(必填) | | `session_id` | string | Automate 会话 ID(启动时必填) | | `task_id` | string | Automate 任务 ID(暂停/恢复/取消时必填) | #### caido 删除 Findings | 参数 | 类型 | 描述 | |-----------|------|-------------| | `ids` | string[] | 要删除的发现 ID | | `reporter` | string | 删除该报告者的所有发现 | #### caido 导出 Findings | 参数 | 类型 | 描述 | |-----------|------|-------------| | `ids` | string[] | 要导出的发现 ID | | `reporter` | string | 导出该报告者的所有发现 | #### caido 列出环境 无需参数。返回所有环境及其变量以及选中/全局上下文。 #### caido 选择环境 | 参数 | 类型 | 描述 | |-----------|------|-------------| | `id` | string | 环境 ID(必填,空字符串表示取消选择) | #### caido 运行 Workflow | 参数 | 类型 | 描述 | |-----------|------|-------------| | `id` | string | 工作流 ID(必填) | | `type` | string | `active` 或 `convert`(必填) | | `request_id` | string | 请求 ID(活动工作流必填) | | `input` | string | 输入数据(转换工作流必填) | #### caido 切换 Workflow | 参数 | 类型 | 描述 | |-----------|------|-------------| | `id` | string | 工作流 ID(必填) | | `enabled` | bool | 启用或禁用(必填) | #### caido 列出 Tamper 规则 无需参数。返回所有包含嵌套规则的篡改规则集合。 #### caido 创建 Tamper 规则 | 参数 | 类型 | 描述 | |-----------|------|-------------| | `collection_id` | string | 集合 ID(必填) | | `name` | string | 规则名称(必填) | | `condition` | string | HTTPQL 过滤条件 | | `sources` | string[] | 流量来源:INTERCEPT、REPLAY、AUTOMATE、IMPORT、PLUGIN、WORKFLOW、SAMPLE | #### caido 切换 Tamper 规则 | 参数 | 类型 | 描述 | |-----------|------|-------------| | `id` | string | 篡改规则 ID(必填) | | `enabled` | bool | 启用或禁用(必填) | #### caido 删除 Tamper 规则 | 参数 | 类型 | 描述 | |-----------|------|-------------| | `id` | string | 篡改规则 ID(必填) |
## CLI Caido 的独立终端客户端。无需 MCP - 直接从 Shell 使用。 ### 安装 ``` curl -fsSL https://raw.githubusercontent.com/c0tton-fluff/caido-mcp-server/main/install.sh | TOOL=cli bash ``` 或者从 [Releases](https://github.com/c0tton-fluff/caido-mcp-server/releases) 下载。 > 从源码构建 ``` git clone https://github.com/c0tton-fluff/caido-mcp-server.git cd caido-mcp-server go build -o caido-cli ./cmd/cli ``` ### 用法 需要身份验证 - 设置 `CAIDO_PAT` 环境变量或先运行 `caido-mcp-server login`。 ``` # 检查连接和身份验证 caido status -u http://localhost:8080 # 发送结构化请求 caido send GET https://target.com/api/users caido send POST https://target.com/api/login -j '{"user":"admin","pass":"test"}' caido send PUT https://target.com/api/profile -H "Authorization: Bearer tok" -j '{"role":"admin"}' # 发送原始 HTTP 请求 caido raw 'GET /api/users HTTP/1.1\r\nHost: target.com\r\n\r\n' caido raw -f request.txt --host target.com --port 8443 echo -n 'GET / HTTP/1.1\r\nHost: example.com\r\n\r\n' | caido raw - # 浏览代理历史记录 caido history caido history -f 'req.host.eq:"target.com"' -n 20 # 获取完整的请求/响应详情 caido request 12345 # 编码/解码 caido encode base64 "hello world" caido decode url "%3Cscript%3E" caido encode hex "test" ``` ### 命令 | 命令 | 描述 | |---------|-------------| | `status` | 检查 Caido 实例健康状态和身份验证令牌 | | `send METHOD URL` | 通过 Replay API 发送结构化 HTTP 请求 | | `raw` | 发送原始 HTTP 请求(参数、使用 `-f` 指定文件,或使用 `-` 从 stdin 读取) | | `history` | 使用 HTTPQL 过滤列出代理历史 | | `request ID` | 按 ID 获取完整的请求/响应 | | `encode TYPE VALUE` | 编码值(`url`、`base64`、`hex`) | | `decode TYPE VALUE` | 解码值(`url`、`base64`、`hex`) | ### 全局标志 | 标志 | 描述 | |------|-------------| | `-u, --url` | Caido 实例 URL(或设置 `CAIDO_URL`) | | `-b, --body-limit` | 响应正文字节限制(默认 2000) | ## 架构 ``` caido-mcp-server/ cmd/ mcp/ MCP server (stdio transport) cli/ Standalone CLI internal/ auth/ OAuth device flow, PAT support, token store, auto-refresh httputil/ HTTP parsing, CRLF normalization, URL handling replay/ Replay session management, response polling tools/ MCP tool definitions (one file per tool) ``` `cmd/mcp` 和 `cmd/cli` 都共享 `internal/` 包。该项目使用 [caido-community/sdk-go](https://github.com/caido-community/sdk-go) 与 Caido 进行所有 GraphQL 通信。 ## 故障排除 | 错误 | 修复方法 | |-------|-----| | `Invalid token` | 检查 `CAIDO_PAT` 值或再次运行 `caido-mcp-server login` | | `token expired, no refresh token` | 改用 PAT 身份验证,或重新登录 | | `poll failed: timed out` | 目标服务器响应慢;使用返回的 `entryId` 调用 `get_replay_entry` | | `no authentication token found` | 在 `serve` 之前设置 `CAIDO_PAT` 环境变量或运行 `caido-mcp-server login` | MCP 服务器日志:`~/.cache/claude-cli-nodejs/*/mcp-logs-caido/` ## 安全性 敏感 HTTP 标头(Authorization、Cookie、Set-Cookie、API 密钥)在所有工具输出中会自动被编辑,以防止凭据泄露到 LLM 上下文中。所有字符串输入都在服务端进行长度验证。请求批次大小受到限制。 PAT 令牌和 OAuth 令牌以 0600 权限存储,绝不会出现在进程参数或日志输出中。 要报告安全问题,请打开 GitHub issue 或直接联系维护者。 ## 贡献 1. Fork 仓库 2. 创建功能分支 3. 运行 `go build ./...` 和 `go test ./...` 4. 提交 PR 使用 [caido-community/sdk-go](https://github.com/caido-community/sdk-go) 和 [modelcontextprotocol/go-sdk](https://github.com/modelcontextprotocol/go-sdk) 构建。 ## 许可证 [MIT](LICENSE)
标签:AI辅助安全, Burp Suite替代, Caido, Claude Code, Elastic Stack, EVTX分析, Go语言, HTTPQL, HTTP流量分析, MCP服务器, Web代理, 安全测试, 抓包工具, 拦截代理, 攻击性安全, 日志审计, 服务管理, 流量重放, 程序破解, 网络安全, 自动化渗透, 隐私保护