用 CC-switch 把 BurpMCP-Ultra 接入 Codex
前言
很多人想把 Burp 的流量能力”接”到 AI 里用,但被各种 SSE/stdio 术语绕晕。本文基于我在 Win11 上的真实踩坑,讲清楚只用 CC-switch 一个工具完成 BurpMCP-Ultra → Codex 的全流程,不借助 supergateway、不手改 config.toml(当然原理上 CC-switch 最终也是写 ~/.codex/config.toml 的 [mcp_servers] 节 其实手改更快一些)。
环境:Win11 + Burp Suite Pro 2026.4.3 + BurpMCP-Ultra 2.1.1 + CC-switch + Codex CLI 0.130+
为什么是这套组合
- BurpMCP-Ultra 在 Burp 里以 Java 扩展形式加载,暴露 SSE 协议的 MCP 服务(默认
127.0.0.1:9876) - Codex CLI 主要良好支持
stdio和streamable_http传输类型 - mcp-remote 是一个 stdio 桥接器:以子进程形式被 Codex 拉起,背后用 SSE 连 Burp
- CC-switch 统一管 MCP,点一下开关就把配置同步进 Codex 的
~/.codex/config.toml
所以真正的链路是:
1 | Codex CLI ──stdio──► npx mcp-remote ──SSE──► BurpMCP-Ultra (:9876) |
CC-switch 在这里的角色是可视化生成这条命令,避免手改 TOML 把反斜杠、引号写崩。(其实可以让ai给你写,然后你直接复制)
Burp 里加载 BurpMCP-Ultra
不用去网上找BurpMCP-Ultra插件了,直接点下面的链接下载吧
1 | https://pan.quark.cn/s/1be0d8405215 |
Burp → Extensions → Add

Extension Type 选 Java,选择文件
burpmcp-ultra-2.1.1.jar
加载完成后出现 BurpMCP-Ultra 标签页,确认 Status 为 Running

复制 Bearer Token(这是 BurpMCP-Ultra 的动态令牌,每次重启 Burp 都会变)

记下 SSE 端点,默认是
http://127.0.0.1:9876/(根路径,不是/sse)
CC-switch 里添加 MCP
有关于ccs的相关基础配置看这篇文章
https://sonh66.github.io/2026/07/25/codex%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/
打开 CC-switch → 顶部 MCP 按钮 → 右上角 + → 选 Custom(自定义),按下表填:


| 字段 | 值 |
|---|---|
| Server ID | burp(自定义,好认就行) |
| 传输类型 | stdio(必须) |
| 命令 | npx |
参数(Args)逐行填,这是最关键的一步:
1 | -y |
环境变量:
1 | AUTH_HEADER=Bearer 你的令牌 |
⚠️ 为什么要把令牌塞进环境变量? 因为 Windows 下
mcp-remote的--header参数值在命令行里遇到空格会被截断,Authorization: Bearer xxx里的空格会让Bearer后面的令牌丢失 。用${AUTH_HEADER}引用环境变量,冒号后故意不加空格,令牌原样放在环境变量值里(含空格),这是社区公认最稳的写法 。
填完大致是这个效果(CC-switch 内部最终写的 TOML 等价于):
1 | [mcp_servers.burp] |
别忘了:在 CC-switch 的开关列表里,把 Codex 那一列的开关打开,这样配置才会写进 ~/.codex/config.toml 。

点击 应用配置 保存。
彻底重启 Codex 并验证
CC-switch 改完配置后,Codex 必须彻底退出重开才能加载新配置(不只是关窗口,托盘图标也要右键退出)。

启动 Codex CLI(PowerShell 里输入 codex 回车。没有Codex CLI的话让ai教你装一个,一行命令的事),进入交互界面后输入:
1 | /mcp |
如果看到 burp 下面列出了几十个工具(如 proxy_history、scanner_start_audit、http_send_request 等),恭喜,连接成功 🎉。

想看更详细的工具清单和资源配置,用:
1 | /mcp verbose |
📌 Codex CLI 从 v0.123 起
/mcp verbose会输出完整的工具 schema、资源和服务器元数据,排错时必用 。
开测
浏览器挂上 Burp 代理(默认 127.0.0.1:8080),在目标站点走一遍业务流程产生流量。回到 Codex:
示例 1:被动审计 IDOR
1 | 使用 Burp MCP 的 proxy_history 工具读取代理历史,分析是否存在越权漏洞(IDOR),重点关注数字 ID 参数和缺少 Authorization 头的请求。 |
示例 2:主动扫描
1 | 使用 Burp MCP 的 scanner_start_audit 工具对 https://目标站点.com 进行主动扫描。 |
示例 3:回放并修改请求
1 | 使用 Burp MCP 的 http_send_request 工具,向 https://目标站点.com/api/users/123 发送 GET 请求,并分析响应中是否泄露其他用户数据。 |
常见问题排错
1. /mcp 显示 failed: burp 或 timed out
按这个顺序排查:
- Burp 里的 BurpMCP-Ultra 是否在 Running? 每次重启 Burp 后需要手动 Start Server,且令牌会变
- 9876 端口在不在?
netstat -ano | findstr :9876 - 令牌是否更新? 回到 CC-switch,把环境变量
AUTH_HEADER的值换成 Burp 标签页里的最新令牌
Codex 是否彻底重启? 托盘图标右键退出,重开
还不行就 /mcp verbose 看详细错误,或 PowerShell 手动跑:
1 | $env:AUTH_HEADER="Bearer 你的令牌" |
如果这里也报错,错误会直接打印在终端里
2. 报错 ignoring invalid header argument: Authorization
这是因为 --header 后面的值在 Windows 命令行里被空格截断了。确认两点:
- CC-switch 参数里写的是
Authorization:${AUTH_HEADER}(冒号后无空格) - 环境变量
AUTH_HEADER的值是Bearer 你的令牌(Bearer 后有空格)
这种”环境变量存完整值 + 参数里引用变量”的写法就是专门规避 Windows 空格截断 bug 的 。
3. 报错 HTTP 400: sessionId query parameter is not provided
说明 Codex 试图直接用 streamable_http 去连 SSE 端点,协议不匹配。必须走 mcp-remote 桥接,传输类型选 stdio,不要选 sse 或 http。
4. 报错 401 Unauthorized
令牌失效或复制时带入了换行/空格。回 BurpMCP-Ultra 标签页重新复制令牌,更新到 CC-switch 的环境变量里。
5. 浏览器走了代理但 proxy_history 为空
检查 Burp 的 Proxy 监听器是否启用(默认 127.0.0.1:8080),浏览器代理插件是否真的把流量导向了 Burp。
进阶:用 cmd /c 包装
如果上述配置在某些 Win11 环境下 mcp-remote 仍然因为命令行转义问题起不来,可以用 cmd /c 做命令包装 :
| 字段 | 值 |
|---|---|
| 命令 | cmd |
| 参数(逐行) | 见下 |
1 | /c |
这种写法直接把 Bearer 令牌 拼在命令行里,靠 cmd /c 处理转义,绕过 PowerShell/CC-switch 的参数拆分。但优先推荐环境变量方案,更干净。
总结
整套流程的核心认知:
- BurpMCP-Ultra 暴露的是 SSE 服务,Codex CLI 不直接吃 SSE,需要
mcp-remote做 stdio 桥接 - CC-switch 是配置管理器,它把
npx mcp-remote ...这条命令写进 Codex 的config.toml - Windows 下
--header的空格是头号坑,用环境变量${AUTH_HEADER}引用是最稳的解法 - Bearer Token 是动态的,Burp 重启就要回 CC-switch 更新
- 验证只看
/mcp,排错用/mcp verbose








