Skip to content

Example server

The repo ships examples/vuln_server.py — a deliberately simple, intentionally vulnerable MCP server (vuln-shop 🛒) for exercising every mcpwn command end-to-end.

Intentionally insecure — do not ship it

lookup_user concatenates input straight into a SQL string and config://app leaks a fake admin token. It exists purely as a safe practice target. Run it only on your own machine.

Running it

uv run python examples/vuln_server.py http     # http://127.0.0.1:8765/mcp/
uv run python examples/vuln_server.py          # default
# …or let mcpwn launch it for you:
uv run mcpwn enum "python examples/vuln_server.py"

What it exposes

Kind Name Notes
Tool lookup_user(name) SQL-injectable — the target for sqlmap.
Tool add(a, b) Adds two integers — a clean call example.
Prompt pentest_report(target, severity="medium") Drafts a short finding.
Resource config://app Returns config including a fake admin_token.
Resource template users://{user_id}/email Email for a given user id.

Try every command against it

uv run mcpwn enum   http://127.0.0.1:8765/mcp/
uv run mcpwn info   http://127.0.0.1:8765/mcp/ --tool lookup_user
uv run mcpwn call   http://127.0.0.1:8765/mcp/ add -a a=2 -a b=40
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 read   http://127.0.0.1:8765/mcp/ "users://7/email"
uv run mcpwn prompt http://127.0.0.1:8765/mcp/ pentest_report -a target=acme.com -a severity=high
uv run mcpwn sqlmap http://127.0.0.1:8765/mcp/ lookup_user --inject name -a name=admin

See the Quickstart for the guided version, or the SQL injection guide for the sqlmap walkthrough.