前言

很多人想把 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 主要良好支持 stdiostreamable_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
  1. Burp → Extensions → Add

    image-20260725131322588

  2. Extension Type 选 Java,选择文件 burpmcp-ultra-2.1.1.jar

    image-20260725131839168

  3. 加载完成后出现 BurpMCP-Ultra 标签页,确认 Status 为 Running

    image-20260725132124655

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

    image-20260725132229376

  5. 记下 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(自定义),按下表填:

image-20260725132807633image-20260725133020351

字段
Server ID burp(自定义,好认就行)
传输类型 stdio(必须)
命令 npx

参数(Args)逐行填,这是最关键的一步:

1
2
3
4
5
6
-y
mcp-remote
http://127.0.0.1:9876/
--allow-http
--header
Authorization:${AUTH_HEADER}

环境变量

1
AUTH_HEADER=Bearer 你的令牌

⚠️ 为什么要把令牌塞进环境变量? 因为 Windows 下 mcp-remote--header 参数值在命令行里遇到空格会被截断,Authorization: Bearer xxx 里的空格会让 Bearer 后面的令牌丢失 。用 ${AUTH_HEADER} 引用环境变量,冒号后故意不加空格,令牌原样放在环境变量值里(含空格),这是社区公认最稳的写法 。

填完大致是这个效果(CC-switch 内部最终写的 TOML 等价于):

1
2
3
4
5
6
[mcp_servers.burp]
type = "stdio"
command = "npx"
args = ["-y", "mcp-remote", "http://127.0.0.1:9876/", "--allow-http", "--header", "Authorization:${AUTH_HEADER}"]
env = { AUTH_HEADER = "Bearer 你的令牌" }
startup_timeout_sec = 60

别忘了:在 CC-switch 的开关列表里,把 Codex 那一列的开关打开,这样配置才会写进 ~/.codex/config.toml

image-20260725133257634

点击 应用配置 保存。

彻底重启 Codex 并验证

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

image-20260725135046879

启动 Codex CLI(PowerShell 里输入 codex 回车。没有Codex CLI的话让ai教你装一个,一行命令的事),进入交互界面后输入:

1
/mcp

如果看到 burp 下面列出了几十个工具(如 proxy_historyscanner_start_audithttp_send_request 等),恭喜,连接成功 🎉。

image-20260725135116081

想看更详细的工具清单和资源配置,用:

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

按这个顺序排查:

  1. Burp 里的 BurpMCP-Ultra 是否在 Running? 每次重启 Burp 后需要手动 Start Server,且令牌会变
  2. 9876 端口在不在? netstat -ano | findstr :9876
  3. 令牌是否更新? 回到 CC-switch,把环境变量 AUTH_HEADER 的值换成 Burp 标签页里的最新令牌

Codex 是否彻底重启? 托盘图标右键退出,重开

还不行就 /mcp verbose 看详细错误,或 PowerShell 手动跑:

1
2
$env:AUTH_HEADER="Bearer 你的令牌"
npx -y mcp-remote http://127.0.0.1:9876/ --allow-http --header Authorization:${AUTH_HEADER}

如果这里也报错,错误会直接打印在终端里

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,不要选 ssehttp

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
2
3
4
5
6
7
/c
npx
mcp-remote
http://127.0.0.1:9876/
--allow-http
--header
Authorization:Bearer 你的令牌

这种写法直接把 Bearer 令牌 拼在命令行里,靠 cmd /c 处理转义,绕过 PowerShell/CC-switch 的参数拆分。但优先推荐环境变量方案,更干净。

总结

整套流程的核心认知:

  1. BurpMCP-Ultra 暴露的是 SSE 服务,Codex CLI 不直接吃 SSE,需要 mcp-remote 做 stdio 桥接
  2. CC-switch 是配置管理器,它把 npx mcp-remote ... 这条命令写进 Codex 的 config.toml
  3. Windows 下 --header 的空格是头号坑,用环境变量 ${AUTH_HEADER} 引用是最稳的解法
  4. Bearer Token 是动态的,Burp 重启就要回 CC-switch 更新
  5. 验证只看 /mcp,排错用 /mcp verbose

Happy Hacking 🚀