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
--proxywhen set, - applies the
verify(TLS) decision, - merges any
-H/--headervalues 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.