Skip to content

Add BurpSuite MCP Bridge - #191

Merged
kantorcodes merged 1 commit into
hashgraph-online:mainfrom
6jeffr3y:add-burpsuite-mcp-bridge
Sep 7, 2026
Merged

kantorcodes merged 1 commit into
hashgraph-online:mainfrom
6jeffr3y:add-burpsuite-mcp-bridge

Conversation

@6jeffr3y

@6jeffr3y 6jeffr3y commented Jun 6, 2026

Copy link
Copy Markdown
Contributor

Summary

Add BurpSuite MCP Bridge to Tools & Integrations in alphabetical order.

This PR now changes only one line in README.md. The hand-copied plugins/ bundle, marketplace/catalog artifacts, and generator customization have been removed from the PR. The listing has been rebuilt on current upstream main (2aad142e); bundle mirroring and catalog generation are left to the upstream automation.

Source repository readiness

Implemented in 1156fca and ebfb2f3 in the source repository:

  • Added HOL Plugin Scanner CI, triggered by both push and pull_request on main, with plugin_dir: ".", mode: scan, min_score: 80, and fail_on_severity: high.
  • Pinned Actions to full commit SHAs and enabled weekly Dependabot checks.
  • Added a cross-platform, hash-locked Python dependency snapshot (mcp-server/requirements.lock, with a root requirements.lock entry point) and synchronized the Chinese/English installation and contribution docs.
  • Capped the MCP SDK at <2 because the adapter uses the SDK 1.x FastMCP API, and added a stdio initialization/tool-discovery smoke test. The test does not connect to Burp or target networks.
  • Declared the adapter and skill directories through the manifest's scripts and skills fields. Verified with the upstream generator that it selects mcp-server/server.py, its hash lock, .mcp.json, and the operating skill automatically.
  • Required .codex-plugin/plugin.json, README.md, SECURITY.md, and LICENSE remain present. Versioned Burp runtime artifacts are unchanged.

Verification

  • Passing source CI: https://github.com/6jeffr3y/burpsuite-mcp-bridge/actions/runs/34132426277 — scanner and locked MCP stdio/manifest tests both passed on source commit ebfb2f3.
  • HOL scanner 3.0.113: 97/100 (also 97/100 with upstream CI's pinned scanner 2.0.1116), with 0 critical, 0 high, 0 medium, and 0 low findings (informational-only metadata/skill advisories).
  • Upstream alphabetical regression tests and changed-entry alphabetical check passed.
  • Upstream Validate Plugin PR CI passed. The preceding attempt hit a transient GitHub archive HTTP 504; the rerun passed in 9 seconds.
  • Upstream validate-plugin-pr.py passed: no plugin bundle directories changed; remote manifest and icon validated.
  • Upstream validate-contribution.py passed: source scanner CI is readable and push/PR-triggered.
  • Locked dependency installation, pip check, stdio handshake/tool discovery, Markdown lint, JSON validation, and existing release checksums passed.

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces the BurpSuite MCP Bridge plugin, adding its registration, configuration examples, documentation, and a Python MCP server implementation. The code review identified critical runtime compatibility issues with the official mcp Python SDK in the server implementation, specifically regarding unsupported FastMCP constructor arguments, invalid transport options, and a potential JSONDecodeError when handling empty HTTP response bodies.

Important

The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.

Comment on lines +27 to +38
mcp = FastMCP(
"BurpSuite MCP Bridge",
instructions=(
"Use these tools to read and operate Burp proxy traffic from Windows Burp in WSL mirrored mode. "
"Prefer burp_target_overview(host=...) when working one target, or burp_live_overview/burp_live_poll for incremental triage, then burp_flow_get for a decisive request/response pair. "
"Use burp_replay_flow or burp_send_raw_request when you need AI-driven request mutation and replay. "
"Use burp_rule_upsert to install automatic request/response rewrite rules for proxied traffic; rule action is modify, drop, or spoof."
),
host=MCP_SERVER_HOST,
port=MCP_SERVER_PORT,
streamable_http_path=MCP_SERVER_PATH,
)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

The FastMCP constructor in the official mcp Python SDK (version 1.0.0+) does not accept the streamable_http_path argument. Including it will cause a TypeError at runtime, preventing the server from starting. Please remove this argument to ensure compatibility with the standard mcp library.

mcp = FastMCP(
    "BurpSuite MCP Bridge",
    instructions=(
        "Use these tools to read and operate Burp proxy traffic from Windows Burp in WSL mirrored mode. "
        "Prefer burp_target_overview(host=...) when working one target, or burp_live_overview/burp_live_poll for incremental triage, then burp_flow_get for a decisive request/response pair. "
        "Use burp_replay_flow or burp_send_raw_request when you need AI-driven request mutation and replay. "
        "Use burp_rule_upsert to install automatic request/response rewrite rules for proxied traffic; rule action is modify, drop, or spoof."
    ),
    host=MCP_SERVER_HOST,
    port=MCP_SERVER_PORT,
)

Comment on lines +1234 to +1249
if __name__ == "__main__":
try:
parser = argparse.ArgumentParser(description="BurpSuite MCP Bridge server")
parser.add_argument("--transport", choices=["stdio", "streamable-http", "sse"], default=MCP_TRANSPORT)
parser.add_argument("--host", default=MCP_SERVER_HOST, help="Host for HTTP MCP transports")
parser.add_argument("--port", type=int, default=MCP_SERVER_PORT, help="Port for HTTP MCP transports")
parser.add_argument("--path", default=MCP_SERVER_PATH, help="Path for Streamable HTTP MCP transport")
args = parser.parse_args()

mcp.settings.host = args.host
mcp.settings.port = args.port
mcp.settings.streamable_http_path = args.path
mcp.run(transport=args.transport)
except Exception as exc: # pragma: no cover
print(f"[burpsuite-mcp-bridge] fatal: {exc}", file=os.sys.stderr)
raise

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

The official mcp Python SDK's FastMCP class does not expose a mutable settings attribute with streamable_http_path, nor does mcp.run() support "streamable-http" as a transport option. Attempting to run the server with these options will result in runtime errors. Let's update the argument parser and transport options to align with the official SDK's supported transports ("stdio" and "sse").

Suggested change
if __name__ == "__main__":
try:
parser = argparse.ArgumentParser(description="BurpSuite MCP Bridge server")
parser.add_argument("--transport", choices=["stdio", "streamable-http", "sse"], default=MCP_TRANSPORT)
parser.add_argument("--host", default=MCP_SERVER_HOST, help="Host for HTTP MCP transports")
parser.add_argument("--port", type=int, default=MCP_SERVER_PORT, help="Port for HTTP MCP transports")
parser.add_argument("--path", default=MCP_SERVER_PATH, help="Path for Streamable HTTP MCP transport")
args = parser.parse_args()
mcp.settings.host = args.host
mcp.settings.port = args.port
mcp.settings.streamable_http_path = args.path
mcp.run(transport=args.transport)
except Exception as exc: # pragma: no cover
print(f"[burpsuite-mcp-bridge] fatal: {exc}", file=os.sys.stderr)
raise
if __name__ == "__main__":
try:
parser = argparse.ArgumentParser(description="BurpSuite MCP Bridge server")
parser.add_argument("--transport", choices=["stdio", "sse"], default=MCP_TRANSPORT)
parser.add_argument("--host", default=MCP_SERVER_HOST, help="Host for HTTP MCP transports")
parser.add_argument("--port", type=int, default=MCP_SERVER_PORT, help="Port for HTTP MCP transports")
args = parser.parse_args()
mcp.host = args.host
mcp.port = args.port
mcp.run(transport=args.transport)
except Exception as exc: # pragma: no cover
print(f"[burpsuite-mcp-bridge] fatal: {exc}", file=os.sys.stderr)
raise

Comment on lines +63 to +64
with _NO_PROXY_OPENER.open(request, timeout=30) as response:
data = json.loads(response.read().decode("utf-8"))

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

If the Burp bridge returns an empty response body (e.g., for successful DELETE or buffer clearing operations), response.read() will return an empty byte string. Calling json.loads() on an empty string will raise a json.JSONDecodeError. We should check if the response body is empty before attempting to parse it as JSON.

Suggested change
with _NO_PROXY_OPENER.open(request, timeout=30) as response:
data = json.loads(response.read().decode("utf-8"))
with _NO_PROXY_OPENER.open(request, timeout=30) as response:
res_bytes = response.read()
data = json.loads(res_bytes.decode("utf-8")) if res_bytes else {"ok": True}

@mcp.tool()
def burp_flow_get(flow_id: int, source: str = "live", include_bodies: bool = True) -> dict[str, Any]:
"""读取单条流量的完整细节。source=live/history/selection。"""
if source not in {"live", "history", "selection"}:

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

CRITICAL: Missing 'logger' in source validation allows incorrect routing

The validation set {"live", "history", "selection"} does not include "logger", but other functions like burp_replay_flow (line 860), burp_send_to_repeater (line 441), and burp_export_flow_bundle (line 471) all accept "logger" as a valid source. If a caller passes source="logger", the function would incorrectly fall through to the else branch and route to /api/selection/flows/{flow_id} instead of the correct /api/logger/flows/{flow_id}.

This should be: if source not in {"live", "history", "logger", "selection"}

@kilo-code-bot

kilo-code-bot Bot commented Jun 6, 2026

Copy link
Copy Markdown

Code Review Summary

Status: No Issues Found | Recommendation: Merge

The previously reported CRITICAL issue (missing 'logger' in source validation allowing incorrect routing) has been fixed in this PR. All source validation checks now correctly include 'logger' in the allowed values set.

This PR adds the BurpSuite MCP Bridge plugin with proper source validation across all tool functions.

Files Reviewed (11 files)
  • plugins/6jeffr3y/burpsuite-mcp-bridge/wsl-mcp/server.py - New file, 1251 lines (exceeds 500 LOC guideline - carried forward observation)
  • plugins/6jeffr3y/burpsuite-mcp-bridge/.codex-plugin/plugin.json - New file, valid structure
  • plugins/6jeffr3y/burpsuite-mcp-bridge/.mcp.json - New file, valid MCP configuration
  • plugins/6jeffr3y/burpsuite-mcp-bridge/README.md - New file, Chinese/English docs
  • plugins/6jeffr3y/burpsuite-mcp-bridge/README_CN.md - New file
  • plugins/6jeffr3y/burpsuite-mcp-bridge/CHANGELOG.md - New file
  • plugins/6jeffr3y/burpsuite-mcp-bridge/CHANGELOG_CN.md - New file
  • plugins/6jeffr3y/burpsuite-mcp-bridge/RELEASE_NOTES_v1.1.0.md - New file
  • plugins/6jeffr3y/burpsuite-mcp-bridge/assets/icon.svg - New file (binary)
  • plugins/6jeffr3y/burpsuite-mcp-bridge/assets/logo.svg - New file (binary)
  • scripts/generate_plugins_json.py - Added burpsuite-mcp-bridge to EXTRA_MIRROR_PATHS

Reviewed by laguna-m.1-20260312:free · 4,212,427 tokens

@internet-dot

Copy link
Copy Markdown
Contributor

Two concerns:\n\n1. Binary JAR files in the bundle. The PR includes burpsuite-mcp-bridge-1.1.0-all.jar (~438KB) and burpsuite-mcp-bridge-latest.jar inside the plugin directory. These should not be committed to the git repo. If installation requires the JAR, provide download-on-install instructions instead.\n\n2. Proprietary license. The plugin.json declares "license": "Proprietary Runtime Distribution". Including a proprietary-licensed plugin needs explicit maintainer approval.\n\nPlease remove the JAR files and clarify the license terms before we can proceed.

@internet-dot

Copy link
Copy Markdown
Contributor

Before this PR can be merged, your plugin repo needs the HOL AI Plugin Scanner running in CI. This is a mandatory requirement for all submissions.

Add this workflow to your plugin repo at .github/workflows/hol-plugin-scanner.yml:

name: HOL Plugin Scanner

on:
  push:
    branches: [main, master]
  pull_request:
    branches: [main, master]

permissions:
  contents: read
  security-events: write

jobs:
  scan:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
      - name: HOL Plugin Scanner
        uses: hashgraph-online/ai-plugin-scanner-action@v1
        with:
          plugin_dir: "."
          mode: scan
          min_score: 80
          fail_on_severity: high
          format: sarif
          upload_sarif: true

Also run the scanner locally and include the score in your PR description:

pipx install plugin-scanner
plugin-scanner scan . --format text

Your plugin needs a score of 80/130 or higher with no critical or high severity findings. Link the CI run or paste the score in this PR description.

See the full guide: SCANNER_GUIDE.md

Additional issues:
Previous review noted JAR binaries and proprietary license in the bundle. Please address those concerns too.

@internet-dot internet-dot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Two issues:

  1. Stale plugins.json total — PR sets total to 99, but main currently has 105+. Rebase on main to get the correct count.

  2. No scanner evidence — PR description lacks scanner score or CI link (mandatory).

Bundle structure is complete: plugin.json, icon, skills, marketplace.json, plugins.json, and README entry all present. Alphabetical order is correct (Bu after Bitbucket CLI, before Call-E). install_url correctly points to the upstream repo.

@internet-dot internet-dot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review Summary

Approved

Checks Passed:

  • README.md: Entry added alphabetically between 'Bitbucket CLI' and 'Call-E' ✓
  • plugins.json: Updated with new entry, valid JSON, total incremented to 99 ✓
  • marketplace.json: Entry added with correct source path ✓
  • Bundle structure: Complete with , , , assets, README, and scripts ✓
  • No duplicate entries: BurpSuite MCP Bridge is a new entry ✓

Plugin Quality:

  • Valid JSON in all manifest files
  • Proper icon assets included
  • Comprehensive documentation and changelog
  • MCP server configuration present

This is a clean, well-structured plugin submission. Thank you for following the contribution guidelines!

@internet-dot

Copy link
Copy Markdown
Contributor

Thanks for the submission. The plugin itself looks solid. Two things to fix:

  1. Remove binary files. The .jar files in plugins/6jeffr3y/burpsuite-mcp-bridge/burp-plugin/ shouldn't be committed to the repo. Have users download them from your releases page instead.
  2. Add registry entries. Include entries in both plugins.json and .agents/plugins/marketplace.json following the existing format.

@internet-dot

Copy link
Copy Markdown
Contributor

A few things are missing before this can be merged:

  1. No scanner CI in source repo — Your plugin repo needs .github/workflows/hol-plugin-scanner.yml running the HOL Plugin Scanner.
  2. Missing SECURITY.md in the source plugin repo.
  3. Missing LICENSE in the source plugin repo. Also, "license": "Proprietary Runtime Distribution" is not a valid SPDX identifier — use MIT or Apache-2.0.
  4. No scanner score in PR description — Add your scanner score or a link to the passing CI run.

See CONTRIBUTING.md for the scanner setup instructions.

@github-actions

github-actions Bot commented Aug 15, 2026

Copy link
Copy Markdown
Contributor

Contribution gate passed. @6jeffr3y, no action is required.

The previous contribution-gate failure is resolved. View the latest sweep.

@kantorcodes kantorcodes left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please update before merge: the latest open-PR sweep cannot read a required scanner workflow from 6jeffr3y/burpsuite-mcp-bridge. This PR also commits a full bundle and marketplace artifacts, which CONTRIBUTING.md says are generated rather than hand-copied. Add the source scanner workflow, reduce the PR to the intended README listing, rebase onto current main, and rerun checks.

@kantorcodes kantorcodes left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Correction to my previous review note: the PR commits a full plugins/ bundle and marketplace artifacts, which CONTRIBUTING.md says are generated rather than hand-copied. The latest sweep also cannot read a required scanner workflow from 6jeffr3y/burpsuite-mcp-bridge. Add the source scanner workflow, reduce the PR to the intended README listing, rebase onto current main, and rerun checks.

@6jeffr3y
6jeffr3y force-pushed the add-burpsuite-mcp-bridge branch 2 times, most recently from 3406602 to cebc2fe Compare September 7, 2026 14:13
@6jeffr3y
6jeffr3y force-pushed the add-burpsuite-mcp-bridge branch from cebc2fe to 12ff728 Compare September 7, 2026 14:15

@kantorcodes kantorcodes left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed the updated one-line diff, source scanner results, current metadata, checks, and review threads. This is approved for squash merge.

@kantorcodes
kantorcodes merged commit 87eb089 into hashgraph-online:main Sep 7, 2026
14 checks passed
@github-actions

github-actions Bot commented Sep 7, 2026

Copy link
Copy Markdown
Contributor

🎉 Hey @6jeffr3y, your plugin has been merged and is now listed in the HOL Registry!

Claim your plugin

As the author, you can verify ownership of your plugin to unlock:

  • Owner-verified badge on your plugin's registry listing
  • Trust score visibility and analytics for your plugin
  • Direct claim link to share with your community
  • Dashboard access at hol.org/guard/plugins to track installs, trust, and engagement

How to claim

  1. Visit hol.org/guard/plugins
  2. Find your plugin and click "Verify ownership"
  3. Sign in with GitHub — we only request read:user, user:email, and read:org (no write access to your repos)
  4. We verify you own the repository, and your plugin gets the ✅ owner-verified badge

The whole process takes under 30 seconds. No need to add any secrets or tokens to your repo — verification is done entirely through GitHub OAuth.

If you have any questions, feel free to ask here or reach out at support@hol.org.

@6jeffr3y

6jeffr3y commented Sep 7, 2026

Copy link
Copy Markdown
Contributor Author

Thanks @kantorcodes for the review and merge! The contribution is now README-only, the source scanner and locked MCP tests pass, and the source manifest explicitly declares the adapter and skill paths for automatic bundle generation. Latest source CI: https://github.com/6jeffr3y/burpsuite-mcp-bridge/actions/runs/34132426277. The transient GitHub archive HTTP 504 was resolved on rerun; all executed PR checks are now green.

@kantorcodes

Copy link
Copy Markdown
Member

Hi @6jeffr3y — a quick follow-up about your plugin 6jeffr3y/burpsuite-mcp-bridge.

The listing is live in the HOL Registry, and ownership verification is still available at HOL Guard.

Verify ownership with the GitHub account that owns the repository to unlock the owner-verified badge, plugin analytics, and the author dashboard. No repository write access is needed.

We may follow up again later if ownership verification is still incomplete.

If you already completed verification, no action is needed — the next scheduler run will stop these reminders.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants