Skip to content

Routing through Burp (or any proxy)

Every HTTP/SSE request mcpwn makes can be funnelled through an intercepting proxy such as Burp Suite, so you can inspect, repeat, tamper with, or scan the underlying MCP traffic.

mcpwn -x http://127.0.0.1:8080 enum https://target/mcp/
mcpwn -x http://127.0.0.1:8080 call https://target/mcp/ lookup_user -a name=admin

Now every initialize, tools/list, tools/call … shows up in Burp's proxy history.

Global flag — put it before the command

-x/--proxy is a global option, so it goes before the subcommand: mcpwn -x http://127.0.0.1:8080 enum ….

TLS verification is relaxed automatically

A proxy like Burp presents its own CA, so certificate verification would otherwise fail. When --proxy is set, mcpwn disables TLS verification by default for that run. You can force it back on, or off, with -k/--insecure.

# Proxy set → TLS verification off automatically
mcpwn -x http://127.0.0.1:8080 enum https://target/mcp/

# Be explicit about skipping verification (no proxy)
mcpwn -k enum https://self-signed.local/mcp/

The connection banner reflects the state, e.g. proxy http://127.0.0.1:8080 (TLS verify off).

How it works

Under the hood, mcpwn hands fastmcp/mcp a custom httpx client factory (make_http_client_factory in src/mcpwn/connection.py). The factory:

  • routes requests through --proxy when set,
  • applies the verify (TLS) decision,
  • merges any -H/--header values onto every request,
  • and honours --timeout.

Because all MCP traffic flows through this one factory, there is no transport path that bypasses the proxy — what you see in Burp is the complete conversation.

Works with every transport-bound command

The proxy applies to anything that talks HTTP/SSE — enum, call, prompt, read, info, ping, shell — and you can even send sqlmap's own traffic through Burp by combining -x with mcpwn sqlmap.

stdio has no HTTP to proxy

A stdio target speaks over pipes, not HTTP, so -x has nothing to intercept there. Use an HTTP/SSE target to capture traffic.