内容
# BurpMCP
一款将Burp转化为MCP服务器的Burp Suite扩展程序,使得Claude Code、Cursor、Cline、Dive以及(通过捆绑的桥)Claude Desktop可以与其通信。
从swgee/burpmcp fork而来。原始版本附带了14种工具和一个保存的请求存储。当前版本拥有多达52种工具,感觉像一个真正的助手:模型可以运行扫描、实时跟踪代理流量、遍历站点地图、读取cookie、修改范围等。
我创建这个扩展是因为在长时间的测试过程中,我厌倦了在Burp和LLM选项卡之间切换。加载此扩展后,我右键单击Burp中的请求,点击“将整个分支发送到BurpMCP”,启用范围内主机的自动保存,Claude便可以从那里接管。

## 内容
工具大致按照我测试时的分类:
**发送HTTP**
`http1-send`、`http2-send`、`http1-resend`、`http2-resend`
重新发送对保存的请求ID和正则表达式替换列表进行操作,这是我执行大多数“现在尝试用X替换相同请求”循环而无需重新粘贴整个请求的方法。
**保存的请求**
`save-http1-request`、`save-http2-request`、`get-saved-request`、`update-note`
在项目重新加载时保存。注释列可搜索。自动保存(见下文)会自动将内容保存到此处。
**实时代理监听**
`list-proxy-traffic`、`get-proxy-entry`、`search-proxy-traffic`、`tail-proxy-traffic`
实时监听是我最自豪的部分。`tail-proxy-traffic`接受一个`since_id`并等待最多N毫秒的新条目,这样代理循环可以在近乎实时的情况下流式传输Burp中发生的事情,而无需在每次迭代时重新拉取历史记录。
**完整的代理历史记录 + WebSocket历史记录**
`proxy-history`(正则表达式/子字符串过滤器,状态范围,偏移量),`websocket-history`
从Burp的真实历史记录(持久化的,而不是内存中的实时监听)中读取。
**站点地图 + 范围**
`sitemap-list`、`sitemap-issues`、`sitemap-add`、`scope-check`、`scope-update`
`sitemap-add`允许模型将请求/响应对注入站点地图。在从截图或文件中提取内容并希望在Burp中表示时很有用。
**扫描器**
`scanner-start-audit`、`scanner-audit-status`、`scanner-start-crawl`、`scanner-crawl-status`、`scanner-cancel`、`scanner-generate-report`、`scanner-import-bcheck`
`start-audit`接受一个保存的请求ID列表和一个内置配置(`LEGACY_ACTIVE_AUDIT_CHECKS`或`LEGACY_PASSIVE_AUDIT_CHECKS`),并返回一个不透明的`audit_id`。您可以使用`audit-status`进行轮询。后台有一个内存寄存器;如果扩展程序重新加载,正在运行的审计将随之终止。这是与官方PortSwigger MCP相比最大的差距,后者只能*读取*扫描器问题——在这里,您可以驱动端到端的扫描。
**交给Burp工具**
`send-to-repeater`、`send-to-intruder`、`send-to-organizer`、`send-to-comparer`
与重新发送工具相同的有效载荷形状——保存的ID或原始字段。
**Cookie**
`cookie-list`、`cookie-set`
直接读取/写入Burp的cookie jar。设置具有ISO过期时间的cookie有效;省略`expires_iso`则为会话cookie。
**响应分析器**
`analyzer-create-keywords`、`analyzer-create-variations`、`analyzer-feed-response`
封装Burp的`ResponseKeywordsAnalyzer`和`ResponseVariationsAnalyzer`。适用于盲测试——输入N个响应,询问哪些关键词或属性变化,哪些保持不变。我尚未见过另一个MCP服务器公开这些功能。
**编码/加密/数据**
`decode-encode`(base64/URL/HTML)、`crypto-digest`(通过Burp的CryptoUtils支持60+算法)、`compress-data`(GZIP/DEFLATE/BROTLI)、`string-hex`、`number-convert`、`random-string`、`json-query`
**Burp本身**
`options-export`、`options-import`、`task-engine`(运行/暂停)、`editor-get`、`editor-set`、`project-info`、`burp-log`
`editor-get`/`editor-set`读取/写入Burp文本组件当前具有键盘焦点的任意内容——基本上允许模型查看您现在在Repeater中输入的内容,或粘贴内容回去。从官方扩展程序中借鉴了此技巧。
**Collaborator**
`generate-collaborator-payload`、`retrieve-collaborator-interactions`
标准Collaborator客户端。交互存储按项目持久化。
## UI方面
大多数BurpMCP扩展程序都是无头的。我需要它感觉像一个Burp面板,我实际使用的面板:
- **右键单击任意请求**(代理历史记录、站点地图、Repeater、消息编辑器)→ BurpMCP子菜单,包含“发送到BurpMCP”、“发送整个分支”(遍历URL前缀下的站点地图并获取所有内容)、复制URL / curl / MCP http1-send JSON、发送到Repeater / Intruder / Organizer / Comparer、添加/删除范围。
- **自动保存范围内流量** — 在控制栏中切换。范围内的任意Burp工具(代理、目标、扫描器、爬虫、Repeater、Intruder)的内容都会以每URL 60秒的重复数据删除方式保存到保存的请求列表中。注释列获取`auto-saved(Scanner,in-scope)`或类似内容,以便您知道它来自哪里。
- **多选 + 删除选定** 在所有三个表格(保存的请求、请求日志、服务器日志)中。Shift-click、Cmd-click、DEL 或 Backspace、右键单击 → 删除。花了我很长时间才添加这个功能。
- **服务器健康指示点** — 绿色/琥珀色/红色,位于主机/端口字段旁边。每2秒刷新一次。琥珀色表示它绑定了,但在启动时记录了一个错误;红色表示它停止了或绑定失败。
- **一键注册** — 按钮会将BurpMCP条目写入 `~/.claude.json` 和 `~/.cursor/mcp.json`。注册后,按钮被替换为绿色“与Claude Code连接”或“与Cursor连接”的药丸。如果主机/端口更改,URL不再匹配,按钮就会重新出现。
## 与官方PortSwigger MCP的比较
PortSwigger在 https://github.com/PortSwigger/mcp-server 上提供了他们自己的MCP服务器。它拥有27种工具。这个版本有52种工具。官方MCP服务器具备的所有功能都包含在此(有时名称不同——例如,他们的 `send_http1_request` 就是我的 `http1-send`)。最大的额外功能是:
| 功能 | 官方 | 本文 |
|---|---|---|
| 读取扫描器问题 | ✓ | ✓ |
| 启动/轮询/取消审计 + 爬虫 | ✗ | ✓ |
| 生成HTML/XML扫描报告 | ✗ | ✓ |
| 导入BCheck脚本 | ✗ | ✓ |
| 持久化保存的请求存储 + 注释 | ✗ | ✓ |
| 自动保存范围内流量 | ✗ | ✓ |
| 带有光标的实时代理监听(`tail-proxy-traffic`) | ✗ | ✓ |
| 响应分析器(变体/不变体) | ✗ | ✓ |
| Cookie jar 读取 + 写入 | ✗(只读) | ✓ |
| Burp中的右键单击上下文菜单 | ✗ | ✓ |
| 注册到Claude Code / 注册到Cursor按钮 | ✗ | ✓ |
| WebSocket历史记录 | ✓ | ✓ |
| 项目/用户选项导出+导入 | ✓ | ✓ |
| 活动编辑器获取/设置 | ✓ | ✓ |
| 任务执行引擎状态 | ✓ | ✓ |
我尽量不做到不公平——官方扩展程序较年轻,拥有PortSwigger团队的支持,这对于跟踪Montoya API随时间的变化很重要。
## 安装
1. 从发行版中获取`BurpMCP.jar`。
2. Burp → 扩展程序 → 添加 → Java → 选择jar包。Burp自带的JRE中的Java 21有效。
3. 首次加载时,会询问您是否要注册到Claude Code和/或Cursor。请说是。重启MCP客户端。
如果您使用Claude Desktop(仅STDIO),请使用捆绑的桥:
```sh
pip3 install typer mcp
python3 stdio-bridge.py http://localhost:8181/mcp/sse
```
然后将 `claude_desktop_config.json` 指向它:
```json
{
"mcpServers": {
"BurpMCP": {
"command": "python3",
"args": ["path/to/stdio-bridge.py", "http://localhost:8181/mcp/sse"],
"env": {}
}
}
}
```
对于直接支持SSE的Cline / Dive / 其他工具,请将它们指向 `http://localhost:8181/mcp/sse`。默认主机/端口在服务器停止时可在BurpMCP选项卡上编辑。
## 构建
```sh
git clone https://github.com/swgee/burpmcp.git
cd burpmcp
mvn -B -ntp -DskipTests package
# target/burpmcp-1.1.0-jar-with-dependencies.jar
```
构建后,捆绑的探针是最快的健全性检查:
```sh
python3 scripts/probe-tools.py
# TOTAL: 52
```
它执行SSE握手 + `tools/list`并打印实时工具列表。在添加新工具时非常有用——如果它在这里不显示,意味着您在`MCPServer.start()`中忘记了`.tool(...)`行。
## 典型会话的样子
这大致是我现在遵循的流程:
1. 加载Burp项目,目标在范围内。
2. BurpMCP选项卡 → 将**自动保存范围内**的内容打开。
3. 浏览/模糊/其他操作 — Burp代理捕获所有内容;范围内流量自动流入保存的请求。
4. 切换到Claude Code。要求它遍历保存的请求,总结攻击面,提出有效载荷。
5. Claude调用`http1-resend`,带有正则表达式替换。我在**请求日志**选项卡中查看结果。
6. 有趣?右键单击保存的请求 → 发送到Repeater进行手动跟进。或者要求Claude对相同的保存ID执行`scanner-start-audit`并轮询它。
关键是模型和我共享相同的保存请求集,这样我就不必将内容截图到聊天中或粘贴curl命令来回。
## 已知缺陷
- **CRLF替换会破坏HTTP/1.1请求走私。** 当启用LF→CRLF切换时,Content-Length会在扩展后重新计算。如果您正在测试走私,请关闭它——但某些MCP客户端无法在JSON中发送原始`\r\n`,请求将失败HTTP解析。各有各的毒药;文档内联在切换提示工具中。
- **HTTP/2重新发送重新序列化头部**(按换行符连接,分割,分割cookie)。包含换行符的头部值会被破坏。这里很难进行真正的HTTP/2协议走私测试。
- **扫描器状态在内存中。** 如果您重新加载扩展或重启Burp,正在运行的审计/爬虫会随之终止。已经写入站点地图的问题仍然存在;只有任务句柄被终止。
- **自动保存重复数据删除每(方法+ URL)60秒**,上限为4096个键。如果您在一分钟内用数千个变体轰炸一个URL,只有第一个进入保存的列表。如果您想跟踪每个变体,请使用`http1-resend`。
- **活动编辑器读取/写入使用Swing焦点。** 必须是具有键盘焦点的`JTextComponent`,才能在实际Burp UI上。如果Burp不是前景窗口,则会出现“没有聚焦的JTextComponent”。
- **单个维护者。** 官方PortSwigger扩展程序将比我更快地跟踪新的Montoya API发布。
## 我尚未构建的内容
我希望但尚未完成的一些事情:
- 每个工具的身份验证/API密钥。目前,可以访问`localhost:8181`的任何人都可以驱动Burp。如果您在共享的盒子上,可以绑定到127.0.0.1(默认)并不要公开它。
- `scanner-audit-status`的流式响应(长轮询新问题而不是完全重新拉取)。
- 一个`proxy-edit-history-entry`工具,允许模型注释现有的Burp代理条目。
- 更好的WebSocket支持——目前我只读取历史记录;通过MCP发送新帧尚未连接。
欢迎提交PR。
## 工具定义
每个工具的JSON模式位于`src/main/java/burpmcp/tools/*.java`中。每个工具都有一个带有内联模式字符串的`createToolSpecification()`方法。处理程序就在它下面。添加新工具最简单的地方:复制`ScopeCheckTool.java`,编辑模式+处理程序,然后在`MCPServer.start()`中添加一行。
## 许可证
与上游fork相同 — 请参阅`LICENSE.md`。
## 感谢
- PortSwigger提供Montoya API + 官方MCP扩展,我从中借鉴了编辑器焦点技巧
- 所有认真使用此工具并提交问题的用户