内容
# Burp MCP 服务器(无限制)
> **非官方分支。** 原始项目:[PortSwigger/mcp-server](https://github.com/PortSwigger/mcp-server) by PortSwigger.
> **由 Raman_MG 修改。**
>
> 这不是官方 PortSwigger 发布版本,不与 PortSwigger 关联或获得其认可。
> 对于支持的官方扩展,请从 Burp BApp 商店安装 **MCP 服务器**。
将 Burp Suite 连接到 AI 客户端,支持 [模型上下文协议](https://modelcontextprotocol.io/)。
此分支保留了上游扩展的所有功能,并添加了在实际测试工作中所需的工具:读取最新的代理流量、拉取站点地图、驱动扫描和爬虫,以及自动化 Repeater。
---
## 为什么存在此分支
官方扩展程序设计用于短时间、受监督的会话:人类监督,批准每个操作,针对流量较小的目标。这是一个合理的默认设置,适用于大多数人。
它不适合代理执行实际工作。以下是每个版本中 AI 客户端可以和不可以执行的操作。每一行都经过了源代码验证,而不是假设。
| 功能 | 官方 MCP 服务器 | 此分支 |
| --- | --- | --- |
| **读取最新请求** | 仅通过 `get_proxy_http_history`,返回历史记录 **按时间顺序**。在具有 100k 捕获请求的项目中,当前请求位于偏移量 ~100000。 | `get_proxy_http_history_latest` 返回 **最新请求优先**。您刚刚发送的请求位于偏移量 0。 |
| **每项响应大小** | 硬编码 **5000 字符截断**,适用于每项,由私有函数应用,无参数覆盖。 40KB JSON 响应在 5000 处被截断,剩余部分无法访问。 | 每个读取工具都有 `maxLength`。传递 `0` 以禁用截断并获取整个正文。 |
| **查看端点清单** | **无工具可访问。** 上游调用 `siteMap().issues()` 以列出扫描器发现的问题,但从不调用 `siteMap().requestResponses()`,因此发现的 URL 清单(包括爬虫发现但无响应的 URL)无法访问。 | `get_site_map` 公开 `requestResponses()`,带有 `host` 和 `regex` 过滤器。 |
| **启动扫描** | **只读。** `get_scanner_issues` 读取发现的问题,但无法启动审计。 | `active_scan_url` 启动审计。 `crawl_url` 启动爬虫。(专业版) |
| **使用 Repeater** | **只写。** `create_repeater_tab` 将请求放入 Repeater,然后代理卡住:无法发送请求,无法读取响应。 | `repeater_send`、`repeater_read`、`repeater_rename`。完整的循环。 |
| **持续工作** | 每个 HTTP 请求和每个数据读取前 **确认对话框**。 | 默认关闭,但在 `MCP+` 标签中仍可切换。 |
| **编辑 Burp 配置** | 默认关闭。 | 默认开启。 |
准确地说,关于一件事,由于它被重复:**官方扩展不强加 1000 URL 的固定上限。** 分页 `count` 由调用者控制,无上限。实际限制是上述三个:按时间顺序、5000 字符截断和缺少站点地图。
### 长时间参与的影响
假设一个广泛的程序,跨几个月工作。代理历史记录不会保持小。浏览应用程序,运行爬虫,让扫描器工作,重放每天的几百个请求,历史记录在没有任何异常的情况下超过 100,000 条记录。
在这种规模下,官方扩展的排序停止成为不便,而是成为障碍。代理询问代理历史记录,收到来自参与第一天的请求。要到达您刚刚发送的请求,它必须通过六位数的陈旧流量分页,每个页面都会消耗一个往返和一个有限的上下文窗口。流量就在 Burp 中。代理根本无法到达列表的末尾。 `get_proxy_http_history_latest` 是一行重新排序的代码,它将不可能变成偏移量 0。
截断加剧了问题。有趣的响应通常是大的:冗长的堆栈跟踪、大型导出、GraphQL 内省结果、API 列表,泄露 UI 隐藏的字段。正是这些响应超过 5000 个字符,因此代理读取前 5000 个字符,剩余部分位于被剪切的部分。
站点地图的空白是第三个。代理历史记录告诉您 **请求了什么**。站点地图告诉您 **存在什么**,包括爬虫发现但从未获取的 URL。 该清单是攻击面。
上游到达站点地图对象以获取扫描器问题,但从不获取请求/响应清单,因此代理可以读取 Burp **发现的问题**,但不能读取 Burp **发现的内容**。
这并不是对上游设计的批评。 为监督的 10 分钟会话构建的工具会做出不同的权衡,而不是驱动数月长的参与。 这个分支是第二种形式。
---
## 此分支的不同之处
两种更改:**新工具** 和 **更改的默认值**。完整的技术细节,包括确切的上游行号,已在 [CHANGES.md](CHANGES.md) 中。
### 新的 MCP 工具(8)
| 工具 | 功能 |
| --- | --- |
| `get_proxy_http_history_latest` | 代理历史记录 **最新优先**(偏移量 0 = 最近的请求)。上游仅提供按时间顺序,读取最新流量意味着分页到末尾。支持 `regex` 过滤和 `maxLength`。 |
| `get_site_map` | 读取 Burp 的目标站点地图,即发现的 URL/端点清单,包括爬虫发现但无响应的 URL。按 `host` 子字符串或 `regex` 过滤。 |
| `active_scan_url` | 对单个 URL 启动 Burp 主动审计。轮询 `get_scanner_issues` 获取发现的问题。 **仅专业版。** |
| `crawl_url` | 从一个或多个种子 URL 启动 Burp 爬虫。 **仅专业版。** |
| `repeater_send` | 选择 Repeater 标签页(和命名子标签页)并点击发送。按 `buttonIndex` 或 `buttonLabel` 定位;如果没有目标,则清点每个可见按钮,以便您选择一个。 |
| `repeater_read` | 从活动 Repeater 子标签页的可见请求/响应编辑器中抓取内容,从左侧面板开始。 |
| `repeater_rename` | 重命名 Repeater 子标签页,按其当前标题的子字符串匹配。 |
| `swing_dump` | 诊断。转储 Burp 的 Swing 组件树(按钮、标签标题、编辑器长度),以便上述 Repeater 自动化可以在您自己的 Burp 构建中进行映射。 |
Repeater 工具直接驱动 Swing UI,因为 Montoya API 没有公开 Repeater 发送/读取/重命名接口。这使得它们成为此分支中最依赖于构建的部分:如果 Burp 更新了 UI,请运行 `swing_dump` 以查找新的按钮索引。
每个新读取工具也接受 `maxLength`,它覆盖了上游应用的硬编码 5000 字符截断。传递 `0` 或负值以完全禁用截断。
### 默认值更改
| 设置 | 上游 | 此分支 |
| --- | --- | --- |
| `requireHttpRequestApproval` | `true` | **`false`** |
| `requireDataAccessApproval` | `true` | **`false`** |
| `configEditingTooling` | `false` | **`true`** |
| 扩展名 | `Burp MCP 服务器` | `Burp MCP 服务器(无限制)` |
| 套件标签 | `MCP` | `MCP+` |
**安装前请阅读此内容。** 上游在 AI 客户端发送 HTTP 请求或读取捕获的数据之前显示确认对话框。此分支默认关闭这些对话框,这是“无限制”名称的全部含义:驱动长时间测试会话的代理不应每隔几秒钟就停止进行点击。权衡是真实的。默认情况下启用配置编辑工具。
如果您希望选择加入而不是选择退出,请在首次加载后在 `MCP+` 标签页中切换三个切换按钮,或在 [`McpConfig.kt`](src/main/kotlin/net/portswigger/mcp/config/McpConfig.kt) 中更改默认值并重新构建。
服务器仍然默认绑定到 `127.0.0.1:9876`,与上游相同。将其保留在那里。不要在禁用批准提示的情况下将其暴露在可路由的接口上。
---
## 安装
### 选项 A:预构建的 jar
从 **[最新发布](https://github.com/RamanMG/Burp-MCP-Unrestricted/releases/latest)** 下载 `burp-mcp-unrestricted-1.3.0.jar`。它是一个可以直接加载的构建,带有嵌入的 stdio MCP 代理,因此它就是您需要的唯一文件。
1. Burp Suite → **扩展** → **添加**
2. 扩展类型:**Java**
3. 选择 jar 文件,然后 **下一步**
一个 `MCP+` 标签页应该出现在 Burp 套件标签栏中。
### 选项 B:从源代码构建
需要 **Java 21** 和 `jar` 命令在您的 `PATH` 上。
```bash
git clone https://github.com/RamanMG/Burp-MCP-Unrestricted.git
cd Burp-MCP-Unrestricted
./gradlew embedProxyJar
```
输出位于 `build/libs/burp-mcp-all.jar`。像选项 A 一样加载它。
使用 `embedProxyJar` 而不是普通的 `build`:它将 `libs/` 中的 stdio 代理打包到扩展 jar 中,因此 stdio MCP 客户端无需第二个文件即可工作。
---
## 配置
通过 Burp UI 中的 `MCP+` 标签页进行配置。
- **启用** 切换 MCP 服务器。
- **启用可以编辑您的配置的工具** 启用配置编辑工具(此分支中默认为启用)。
- **高级选项** 设置主机和端口。默认 `http://127.0.0.1:9876`。
- 上述批准切换也位于此处。
### Claude 桌面版
扩展程序附带一个安装程序,可以为您编写 Claude 桌面版配置。在 `MCP+` 标签页中使用安装程序按钮,或手动编辑位于
`~/Library/Application Support/Claude/claude_desktop_config.json` 的配置文件:
```json
{
"mcpServers": {
"burp": {
"command": "<path to the Java executable packaged with Burp>",
"args": [
"-jar",
"/path/to/mcp-proxy-all.jar",
"--sse-url",
"http://127.0.0.1:9876"
]
}
}
}
```
在 Burp 运行时和扩展程序加载时重启 Claude 桌面版。
---
## 手动安装
适用于除 Claude 桌面版以外的任何客户端,或者如果您不想使用安装程序按钮。
**SSE:** 将客户端指向服务器 URL。根据客户端的不同,路径可以有或没有 `/sse`:
```
http://127.0.0.1:9876
http://127.0.0.1:9876/sse
```
**Stdio:** 对于仅支持 stdio 的客户端,请使用打包的代理。使用安装程序选项中的安装程序提取它,然后:
/path/to/packaged/burp/java -jar /path/to/mcp-proxy-all.jar --sse-url http://127.0.0.1:9876
代理服务器源:[PortSwigger/mcp-proxy](https://github.com/PortSwigger/mcp-proxy)。
---
## 添加您自己的工具
工具定义在 `src/main/kotlin/net/portswigger/mcp/tools/Tools.kt` 中。创建一个持有 LLM 提供参数的 `@Serializable` 数据类,然后使用 `mcpTool<YourClass>("description")` 注册它。
工具名称自动从数据类名称派生,转换为 snake_case:`GetSiteMap` 变成 `get_site_map`。返回一个字符串或更丰富的 `PromptMessageContent` 以将数据发送回 LLM。为自动分页扩展 `Paginated` 接口。
---
## 兼容性
- Burp Suite **专业版** 和 **社区版**。 `active_scan_url` 和 `crawl_url` 仅在专业版中注册,因为扫描是专业版功能。其他六种工具在两个版本中都有效。
- 针对上游 v1.3.0 的 Montoya 扩展程序构建,使用 Java 21。
---
## 致谢和许可
绝大部分代码属于 PortSwigger。原始作者:**Daniel S** 和 **Daniel Allen**,PortSwigger。原始仓库:
[github.com/PortSwigger/mcp-server](https://github.com/PortSwigger/mcp-server)。
此分支的修改由 **Raman_MG** 进行。
根据 **GNU General Public License v3.0** 许可,与上游相同的许可。完整文本位于 [LICENSE](LICENSE) 中,未修改。根据 GPLv3 第 5(a) 节,此分支所做的更改记录在 [CHANGES.md](CHANGES.md) 中,并在源代码中用 `UNRESTRICTED FORK` 注释标记。
此扩展仅用于授权的安全测试:您拥有的系统或您有书面许可测试的系统。