Major release: fix bug critici dove tool MCP fingevano di funzionare + nuovi tool BCheck/proxy/auth.
proxy_match_replace: era no-op stub, ora applica regex match/replace runtime al traffico proxied viaMatchReplaceInterceptor.proxy_websocket_history: era stub vuoto, ora ritorna messaggi WebSocket reali daapi.proxy().webSocketHistory().collaborator_poll.payload_id: ora ritorna il local UUID generato dacollaborator_generate(erainteraction.id()raw, non correlato).scanner.active_scan config_id: ora applicato al task tracking (era ignorato silenziosamente).cookie_jar action=remove/clear: ora rimuove davvero i cookie (workaround via expiration ZonedDateTime past). Era no-op che ritornava"remove_requested".
proxy_match_replace: nuova signature(action, pattern, replacement, location, scope_regex, rule_id).actionora REQUIRED (add,remove,toggle,list,clear).proxy_websocket_history: aggiunto parametro opzionaledirection(filtroCLIENT_TO_SERVER/SERVER_TO_CLIENT).cookie_jar: aggiunto parametronameper remove specifico.session_macro/session_rules: docstring aggiornata - ora dichiara esplicitamente "config-only, runtime execution deferred to v2.1".
bchecktool consolidato (azioni:load,load_file,list,validate) usaapi.scanner().bChecks().importBCheck().send_via_proxytool: invia HTTP request VIA Burp proxy 127.0.0.1:8080 cosi' la request appare inproxy_history(a differenza disend_requestche usa Montoya HTTP client e bypassa il proxy).helper_logintool: login programmatico composite. Invia request via proxy, estrae token da Set-Cookie / response body regex, setta cookies in cookie jar.audit_after_crawltool: triggera la fase audit dopo che unactive_scan crawl_first=trueha completato il crawl.- Endpoint
POST /scanner/audit-after-crawlper chain manuale crawl -> audit.
- Scanner
crawl_first=true: ora chiamaapi.scanner().startCrawl()poistartAuditseparato (era doppia chiamatastartAuditdimenticando il crawl). - Scanner issues: include
evidencearray con request/response in base64 + URL/method/status_code + flagin_scope. Era output minimale senza i payload effettivi. - Python client (
client.py): retry transport-level 3x viahttpx.AsyncHTTPTransport(retries=3), timeout per-call configurabile, propagazione body response negli errori HTTP (era solo status code). BURP_DEBUGenv var per logging request/response a stderr.extension_list: ora ritorna info reali di BurpMCP self viaapi.extension().filename()+ dichiara esplicitamente la limitazione Montoya (noinstalledExtensions()API).- Stringhe
"placeholder"/"API does not support"rimosse o sostituite con limitazioni documentate dove l'API Montoya e' davvero mancante.
- Session macros/rules runtime execution: implementazione
MacroExecutor+RuleInterceptorrimandata. Rischio recursion loop (rule che triggera macro che invoca request che ri-triggera rule) richiedeThreadLocalbypass + thread-safety analysis approfondita. Per ora i tool sono CRUD config-only, docstring esplicito. Workaround per auth: usahelper_login. project_configimport/export: payload JSON troppo grande per essere utile via MCP context. Da valutare con paging selettivo.load_extension: APIapi.extensions().loadExtension(Path, ExtensionType)non esiste in Montoya 2025.5.- Match/replace response-side: solo request-side in v2.0 (90% use case). Aggiungere
RESPONSE_HEADER/RESPONSE_BODYlocation se serve.
extension_listenumeration:api.extension().installedExtensions()non esiste. Solo BurpMCP self info disponibile.BCheckunload: nessunaunregisterBCheckAPI. BCheck caricati restano attivi fino a Burp reload.- Scanner speed presets: solo
LEGACY_ACTIVE_AUDIT_CHECKSesposto. Speed/concurrency sono metadata-only. - Scanner rate_limit runtime: non wired (
Audit.setMaxConcurrentRequestsnon esiste). send_via_proxylocalhost target: richiedeNO_PROXY=localhostenv var manuale (Burp processa tutto incluso self-loop).
- v1.0.0: 58 tool MCP
- v2.0.0: 61 tool MCP (+4 new:
bcheck,send_via_proxy,helper_login,audit_after_crawl; -1 removed:websocket_sendstub)
websocket_send: era stub completo (Java handler + Python tool ritornavanoplaceholdersenza fare nulla). Per WebSocket frames usaresend_raw_requestcon costruzione manuale del frame, oppure attendere v2.1 per implementazione client WebSocket reale.
Java extension:
- New:
proxy/MatchReplaceInterceptor.java,handlers/BCheckHandler.java - Modified:
BurpMcpExtension.java,handlers/ProxyHandler.java,handlers/SessionHandler.java,handlers/ScannerHandler.java,handlers/CollaboratorHandler.java,handlers/ExtensionHandler.java,build.gradle
Python server:
- New:
tools/bcheck.py,tools/helpers.py,tests/conftest.py,tests/test_v2_fixes.py,tests/test_smoke_all_tools.py,tests/test_tool_signatures.py - Modified:
client.py,config.py,server.py,tools/traffic.py,tools/session.py,tools/scanning.py,tools/testing.py,tools/collaborator.py,pyproject.toml
Docs: this CHANGELOG.md (new).
After build + reload:
- Burp Output tab:
[BurpMCP] API server started on 127.0.0.1:8089+Extension loaded successfully pytest server/tests/ -v(with Burp live): all signature + smoke tests pass.mcp__burp__proxy_match_replace action=add ...+ curl via proxy: traffic actually modified.- Manual hunting session 10min: no tool returns fake "success" without effect.
- Montoya API 2025.5
- Java 21, Gradle
- FastMCP stdio Python (mcp >= 1.0.0)
- httpx >= 0.27.0 (transport retries)
Initial release: 58 MCP tools, BurpMCP extension + Python server.