Burp Recon - the LLM-friendly way to read proxy traffic + kill noise
Real engagements hold 3,000-4,000+ proxy entries, most of them analytics/static-asset noise.
This extension adds a purpose-built toolset so an LLM can triage that volume cheaply, drill into
exactly what matters, and cut the noise at the source - without ever blowing the response-size cap
or truncating a cookie.
⭐ The tools this extension adds (use these - they are the point)
| Tool |
What it's for |
Why it beats the raw tools |
get_proxy_http_history_summary |
The PRIMARY view: a flat, ungrouped table (id | method | host | path | status | len | mime), newest-first, send order preserved. |
One compact row per request instead of full bodies. Range-chunked, budget-capped - never truncates mid-data. |
get_proxy_http_entry |
Full request+response for ONE entry by its Burp id. |
Headers/cookies never truncated; big bodies capped + resumable; contextBefore/After shows the surrounding sequence. |
search_proxy_http_history |
Regex/term search → matching rows + a snippet around each hit. |
Finds where a token/header lives without dumping full bodies. |
get_proxy_http_history_stats |
Aggregate shape-check: counts per host / method / status-class / mime-class + id range. |
~1-3 KB for any history size. Instantly reveals the noisy hosts. |
get_proxy_websocket_history_summary |
Lightweight WebSocket message summaries (direction, size, preview). Requires count AND offset. |
Scan WS traffic without pulling 100 KB payloads. |
get_proxy_tls_passthrough |
Read Burp's TLS pass-through config (rules + flags). |
See exactly which hosts are excluded from interception. |
set_proxy_tls_passthrough |
Add/remove TLS pass-through host rules, toggle flags. |
Silence tracker noise at the source; reads back from Burp to confirm. |
Avoid get_proxy_http_history / _regex for browsing - they return full raw entries at high
token cost. They're only for when you truly need every raw byte of a small, filtered set.
Part 1 - Reading history (the recon loop)
Mental model: scan a flat table → pick an id → drill in → follow the send sequence.
1. get_proxy_http_history_summary - START HERE
Returns META {…} + one row per request. The id column is Burp's real # and the handle for
every drill-down.
- Browse big histories in chunks: META gives
total, idRange, returnedIds, hasMore.
Page down with toId (e.g. toId=<lowest id seen - 1>). The last chunk ends with
--- END OF HISTORY ---.
- Only-new-traffic poll: after seeing up to id N, call
fromId=N+1 to fetch just the new
requests - you already hold everything ≤ N.
- Filters (you decide relevance - no scope filter):
hosts, methods, statusCodes,
statusMin/statusMax, pathContains, hasNotes, hideNoise (drops js/css/images/fonts),
dedupe (collapse identical endpoints, adds xN). pathMaxChars caps long paths;
oldestFirst:true reads a flow forwards; format:"json" for structured rows.
- Bounds handled: over-shooting
toId clamps (clampedToId); a past-the-end fromId returns
a clear "Highest id is N" message.
2. get_proxy_http_entry - drill into one id
Full request+response. Headers are never truncated; bodies cap at maxBodyBytes (default 50000)
and resume via bodyOffset. include = all | request | response | request_headers | response_headers (use *_headers when you only need cookies/auth). contextBefore/contextAfter
return the neighbouring rows - the request sequence around this entry.
3. search_proxy_http_history - find by content
regex or term across raw requests+responses → rows + a short snippet. Never full bodies.
Filters: hosts, methods, hideNoise, caseSensitive.
4. get_proxy_http_history_stats - optional shape-check
Aggregates only. Great first call on a huge history to see the host/method/status/mime breakdown
and the id range before pulling rows.
Recon recipes
- Triage a capture:
…_stats → …_summary (newest 100) → page down with toId → note ids.
- Trace login/auth:
…_summary hosts=[target] methods=["POST"] → find login id →
…_entry id=<login> contextAfter=5 to see token usage right after.
- Follow after request N:
…_entry id=N contextAfter=10.
- Where is a token/cookie set:
search term="Set-Cookie" or regex="Authorization: Bearer".
Part 2 - Killing noise with TLS pass-through
Burp logs every third-party tracker (doubleclick, facebook, nr-data, demdex, analytics.google, …),
drowning the real target. TLS pass-through tells Burp to forward those hosts' encrypted traffic
without intercepting/decrypting it - so they never hit the history at all.
The find-noise → exclude loop
- Find the noise:
get_proxy_http_history_stats → look at byHost. The hosts with high
counts that aren't the target are your noise (e.g. bam.nr-data.net, ad.doubleclick.net).
- Read current rules:
get_proxy_tls_passthrough.
- Add exclusions:
set_proxy_tls_passthrough with addHosts = host regexes
(e.g. .*\.doubleclick\.net, .*\.nr-data\.net). It reads back from Burp and reports the actual
stored count.
- Verify config:
get_proxy_tls_passthrough shows the rules.
set_proxy_tls_passthrough params
addHosts / removeHosts - host regexes (matched against the CONNECT host)
replaceAllRules - set the whole list at once
applyToOutOfScopeItems / autoAddOnNegotiationFailure - the two flags
- No
port/protocol params - you supply only the host regex; the tool builds each rule with
port:"443"/protocol:"any" for you.
- Unspecified fields are left unchanged. Requires "Enable tools that can edit your config" in
the Burp MCP tab.
Schema fact (learned the hard way - don't deviate)
Each Burp ssl_pass_through rule needs four keys, all required, or Burp silently drops it:
{"enabled":true,"host":"<regex>","port":"443","protocol":"any"}. port is a string, not an
int. The tool builds this for you - but if you ever hand-write rules via set_project_options, use
exactly this shape.
⚠️ Critical runtime caveat - pass-through only affects NEW connections
A rule takes effect when a new TLS connection is negotiated. Any tracker connection the browser
already had open keeps being intercepted (and logged) until it closes. So:
- Adding a rule does not retroactively un-log an open connection. Seeing a host still appear
right after adding its rule is expected if the connection predates the rule.
- To verify: fully close the browser (kill existing tunnels) or use a fresh Incognito window,
reopen, browse, then check
get_proxy_http_history_summary fromId=<baseline+1> - the excluded
hosts should now be absent.
- Always record the current max
id as a baseline BEFORE the verification browse.
Guardrails
- Default to summaries; fetch full bodies only for specific ids.
- Headers/cookies come back whole - for a huge body, raise
maxBodyBytes or page with bodyOffset.
- History/search tools are read-only.
set_proxy_tls_passthrough modifies config and is gated by
the Burp "Enable config editing" toggle - confirm intent before changing pass-through rules, and
remember it changes what Burp will/won't decrypt.
- If a tool returns "access denied by Burp Suite", tell the user to approve history access (or
enable config editing) in the Burp MCP tab.
- Trust read-backs, not echoes:
set_proxy_tls_passthrough reports Burp's actual stored state
and warns on a count mismatch - if it warns, the rules didn't all apply.
Resources (load on demand)
This file is the overview. For depth, read the matching file under references/:
references/tool-reference.md - every parameter of all 7 tools, output anatomy, paging
patterns, and the per-tool gotchas. Read this when you need exact param behavior.
references/playbooks.md - step-by-step recipes (triage a capture, trace an auth flow, find
where a token lives, hunt reflected input, kill tracker noise, poll for new traffic, and more).
references/cheatsheet.md - one-page quick lookup: the loop, params at a glance, one-liners.
references/vuln-cheatsheets.md - external payload/technique links per bug class (XSS, SQLi,
SSRF, SSTI, RCE, IDOR, XXE, CSRF, JWT, CORS, and more) plus a recon angle for surfacing each one
from captured traffic with the 7 tools.
references/search-recipes.md - copy/paste regex/term patterns for
search_proxy_http_history: auth/session, secrets and keys, error leakage, injection candidate
params, PII, and tech fingerprinting.
references/noise-hosts.md - ready to paste tracker/analytics host regexes for
set_proxy_tls_passthrough, grouped by category, with a common starter bundle.
1---2name: burp-recon3description: Triage and investigate Burp Suite proxy traffic through the Burp MCP server, and manage TLS pass-through to silence tracker/analytics noise. Use this whenever the user asks you to look at captured traffic, proxy/HTTP history, find bugs in recorded requests, trace a login/auth flow, follow what happened after a request, locate where a token/cookie/parameter appears, OR quiet down a noisy Burp history by excluding third-party trackers from interception. Teaches the flat-table → pick-id → drill-in → follow-sequence workflow (never dump the whole history) plus the find-noise → TLS-pass-through loop.4---56# Burp Recon - the LLM-friendly way to read proxy traffic + kill noise78Real engagements hold 3,000-4,000+ proxy entries, most of them analytics/static-asset noise.9This extension adds a purpose-built toolset so an LLM can triage that volume cheaply, drill into10exactly what matters, and cut the noise at the source - without ever blowing the response-size cap11or truncating a cookie.1213## ⭐ The tools this extension adds (use these - they are the point)1415| Tool | What it's for | Why it beats the raw tools |16|---|---|---|17| **`get_proxy_http_history_summary`** | The PRIMARY view: a flat, ungrouped table (`id \| method \| host \| path \| status \| len \| mime`), newest-first, send order preserved. | One compact row per request instead of full bodies. Range-chunked, budget-capped - never truncates mid-data. |18| **`get_proxy_http_entry`** | Full request+response for ONE entry by its Burp `id`. | Headers/cookies **never** truncated; big bodies capped + resumable; `contextBefore/After` shows the surrounding sequence. |19| **`search_proxy_http_history`** | Regex/term search → matching rows **+ a snippet** around each hit. | Finds where a token/header lives without dumping full bodies. |20| **`get_proxy_http_history_stats`** | Aggregate shape-check: counts per host / method / status-class / mime-class + id range. | ~1-3 KB for any history size. Instantly reveals the noisy hosts. |21| **`get_proxy_websocket_history_summary`** | Lightweight WebSocket message summaries (direction, size, preview). Requires `count` AND `offset`. | Scan WS traffic without pulling 100 KB payloads. |22| **`get_proxy_tls_passthrough`** | Read Burp's TLS pass-through config (rules + flags). | See exactly which hosts are excluded from interception. |23| **`set_proxy_tls_passthrough`** | Add/remove TLS pass-through host rules, toggle flags. | Silence tracker noise at the source; reads back from Burp to confirm. |2425> Avoid `get_proxy_http_history` / `_regex` for browsing - they return full raw entries at high26> token cost. They're only for when you truly need every raw byte of a small, filtered set.2728---2930## Part 1 - Reading history (the recon loop)3132**Mental model:** scan a flat table → pick an `id` → drill in → follow the send sequence.3334### 1. `get_proxy_http_history_summary` - START HERE35Returns `META {…}` + one row per request. The `id` column is Burp's real `#` and the handle for36every drill-down.3738- **Browse big histories in chunks:** META gives `total`, `idRange`, `returnedIds`, `hasMore`.39 Page down with `toId` (e.g. `toId=<lowest id seen - 1>`). The last chunk ends with40 `--- END OF HISTORY ---`.41- **Only-new-traffic poll:** after seeing up to id N, call `fromId=N+1` to fetch just the new42 requests - you already hold everything ≤ N.43- **Filters (you decide relevance - no scope filter):** `hosts`, `methods`, `statusCodes`,44 `statusMin`/`statusMax`, `pathContains`, `hasNotes`, `hideNoise` (drops js/css/images/fonts),45 `dedupe` (collapse identical endpoints, adds `xN`). `pathMaxChars` caps long paths;46 `oldestFirst:true` reads a flow forwards; `format:"json"` for structured rows.47- **Bounds handled:** over-shooting `toId` clamps (`clampedToId`); a past-the-end `fromId` returns48 a clear "Highest id is N" message.4950### 2. `get_proxy_http_entry` - drill into one id51Full request+response. **Headers are never truncated**; bodies cap at `maxBodyBytes` (default 50000)52and resume via `bodyOffset`. `include` = `all | request | response | request_headers |53response_headers` (use `*_headers` when you only need cookies/auth). `contextBefore`/`contextAfter`54return the neighbouring rows - the request sequence around this entry.5556### 3. `search_proxy_http_history` - find by content57`regex` or `term` across raw requests+responses → rows + a short snippet. Never full bodies.58Filters: `hosts`, `methods`, `hideNoise`, `caseSensitive`.5960### 4. `get_proxy_http_history_stats` - optional shape-check61Aggregates only. Great first call on a huge history to see the host/method/status/mime breakdown62and the id range before pulling rows.6364### Recon recipes65- **Triage a capture:** `…_stats` → `…_summary` (newest 100) → page down with `toId` → note ids.66- **Trace login/auth:** `…_summary` `hosts=[target]` `methods=["POST"]` → find login id →67 `…_entry id=<login> contextAfter=5` to see token usage right after.68- **Follow after request N:** `…_entry id=N contextAfter=10`.69- **Where is a token/cookie set:** `search term="Set-Cookie"` or `regex="Authorization: Bearer"`.7071---7273## Part 2 - Killing noise with TLS pass-through7475Burp logs every third-party tracker (doubleclick, facebook, nr-data, demdex, analytics.google, …),76drowning the real target. **TLS pass-through** tells Burp to forward those hosts' encrypted traffic77**without intercepting/decrypting it** - so they never hit the history at all.7879### The find-noise → exclude loop801. **Find the noise:** `get_proxy_http_history_stats` → look at `byHost`. The hosts with high81 counts that aren't the target are your noise (e.g. `bam.nr-data.net`, `ad.doubleclick.net`).822. **Read current rules:** `get_proxy_tls_passthrough`.833. **Add exclusions:** `set_proxy_tls_passthrough` with `addHosts` = host **regexes**84 (e.g. `.*\.doubleclick\.net`, `.*\.nr-data\.net`). It reads back from Burp and reports the actual85 stored count.864. **Verify config:** `get_proxy_tls_passthrough` shows the rules.8788### `set_proxy_tls_passthrough` params89- `addHosts` / `removeHosts` - host regexes (matched against the CONNECT host)90- `replaceAllRules` - set the whole list at once91- `applyToOutOfScopeItems` / `autoAddOnNegotiationFailure` - the two flags92- **No `port`/`protocol` params** - you supply only the host regex; the tool builds each rule with93 `port:"443"`/`protocol:"any"` for you.94- Unspecified fields are left unchanged. Requires **"Enable tools that can edit your config"** in95 the Burp MCP tab.9697### Schema fact (learned the hard way - don't deviate)98Each Burp `ssl_pass_through` rule needs **four** keys, all required, or Burp silently drops it:99`{"enabled":true,"host":"<regex>","port":"443","protocol":"any"}`. `port` is a **string**, not an100int. The tool builds this for you - but if you ever hand-write rules via `set_project_options`, use101exactly this shape.102103### ⚠️ Critical runtime caveat - pass-through only affects NEW connections104A rule takes effect when a **new TLS connection is negotiated**. Any tracker connection the browser105already had open keeps being intercepted (and logged) until it closes. So:106- **Adding a rule does not retroactively un-log an open connection.** Seeing a host still appear107 right after adding its rule is expected if the connection predates the rule.108- **To verify:** fully close the browser (kill existing tunnels) or use a fresh Incognito window,109 reopen, browse, then check `get_proxy_http_history_summary fromId=<baseline+1>` - the excluded110 hosts should now be **absent**.111- Always record the current max `id` as a baseline BEFORE the verification browse.112113---114115## Guardrails116- Default to summaries; fetch full bodies only for specific ids.117- Headers/cookies come back whole - for a huge body, raise `maxBodyBytes` or page with `bodyOffset`.118- History/search tools are read-only. `set_proxy_tls_passthrough` modifies config and is gated by119 the Burp "Enable config editing" toggle - confirm intent before changing pass-through rules, and120 remember it changes what Burp will/won't decrypt.121- If a tool returns "access denied by Burp Suite", tell the user to approve history access (or122 enable config editing) in the Burp MCP tab.123- Trust read-backs, not echoes: `set_proxy_tls_passthrough` reports Burp's **actual** stored state124 and warns on a count mismatch - if it warns, the rules didn't all apply.125126---127128## Resources (load on demand)129This file is the overview. For depth, read the matching file under `references/`:130131- **`references/tool-reference.md`** - every parameter of all 7 tools, output anatomy, paging132 patterns, and the per-tool gotchas. Read this when you need exact param behavior.133- **`references/playbooks.md`** - step-by-step recipes (triage a capture, trace an auth flow, find134 where a token lives, hunt reflected input, kill tracker noise, poll for new traffic, and more).135- **`references/cheatsheet.md`** - one-page quick lookup: the loop, params at a glance, one-liners.136- **`references/vuln-cheatsheets.md`** - external payload/technique links per bug class (XSS, SQLi,137 SSRF, SSTI, RCE, IDOR, XXE, CSRF, JWT, CORS, and more) plus a recon angle for surfacing each one138 from captured traffic with the 7 tools.139- **`references/search-recipes.md`** - copy/paste `regex`/`term` patterns for140 `search_proxy_http_history`: auth/session, secrets and keys, error leakage, injection candidate141 params, PII, and tech fingerprinting.142- **`references/noise-hosts.md`** - ready to paste tracker/analytics host regexes for143 `set_proxy_tls_passthrough`, grouped by category, with a common starter bundle.