Skip to content

Quickstart

The repository ships a deliberately vulnerable MCP server you can practise against — examples/vuln_server.py. Spin it up, then drive it with mcpwn.

Prefer no uv run?

These examples assume a source checkout (uv run mcpwn …). If you installed the command, drop the uv run prefix.

1. Start the example server

Runs at http://127.0.0.1:8765/mcp/ — leave it running in its own terminal:

uv run python examples/vuln_server.py http

With stdio you can skip this step entirely — mcpwn launches the server itself as a subprocess. Just pass the command as the target:

uv run mcpwn enum "python examples/vuln_server.py"

2. Enumerate everything it exposes

uv run mcpwn enum http://127.0.0.1:8765/mcp/

3. Drive it

Call a tool, read a resource, render a prompt, or open an interactive session:

uv run mcpwn call http://127.0.0.1:8765/mcp/ lookup_user -a name=alice
uv run mcpwn read http://127.0.0.1:8765/mcp/ "config://app"
uv run mcpwn prompt http://127.0.0.1:8765/mcp/ pentest_report -a target=acme.com -a severity=high
uv run mcpwn shell http://127.0.0.1:8765/mcp/        # interactive session

See the command reference for every flag.

4. Take it further

Route everything through Burp, or fuzz a tool argument with sqlmap:

# Funnel all MCP traffic through an intercepting proxy
uv run mcpwn -x http://127.0.0.1:8080 enum http://127.0.0.1:8765/mcp/

# Build a raw injectable request for the `name` argument and print the sqlmap command
uv run mcpwn sqlmap http://127.0.0.1:8765/mcp/ lookup_user --inject name -a name=admin