x=hub

your toolset

    build deployment
    sign in

    pwno-mcp

    projectother build verified scanned
    io.github.pwno-io/pwno-mcp · v
    deploy just this

    MCP for Pwn

    run it

    on your own machines, one way per deploy method
    verified 2026-10-17 · r-20261017T132235Z-d8c3992548fe
    # once, as root:
    docker build -t mcp-local/pwno:221da23ad62f08ed8e793c9f5cdca2a5a975f644 'https://github.com/pwno-io/pwno-mcp.git#221da23ad62f08ed8e793c9f5cdca2a5a975f644'
    
    #!/usr/bin/env bash
    # pwno (io.github.pwno-io/pwno-mcp), recipe docker (worker, verified 2026-10-17 on v, run r-20261017T132235Z-d8c3992548fe).
    # Generated by Hub for toolset "my-agent"; started by mcp-my-agent-pwno.service.
    set -euo pipefail
    export HOST=127.0.0.1 PORT=8101
    exec docker run --rm --name mcp-my-agent-pwno -p 127.0.0.1:${PORT}:5500 mcp-local/pwno:221da23ad62f08ed8e793c9f5cdca2a5a975f644
    
    [Unit]
    Description=MCP server pwno (toolset my-agent), generated by Hub
    After=network-online.target docker.service
    Wants=network-online.target
    
    [Service]
    Type=simple
    User=mcp
    Group=mcp
    SupplementaryGroups=docker
    EnvironmentFile=/etc/mcp/my-agent.env
    Environment=HOME=/var/lib/mcp/pwno
    WorkingDirectory=/var/lib/mcp/pwno
    ExecStart=/opt/mcp/my-agent/bin/pwno.sh
    Restart=on-failure
    RestartSec=5
    NoNewPrivileges=true
    ProtectSystem=strict
    ProtectHome=true
    PrivateTmp=true
    ReadWritePaths=/var/lib/mcp/pwno
    
    [Install]
    WantedBy=multi-user.target
    
    verified 2026-10-17 · r-20261017T132235Z-d8c3992548fe
    docker build -t pwno 'https://github.com/pwno-io/pwno-mcp.git#221da23ad62f08ed8e793c9f5cdca2a5a975f644'
    docker run --rm -p 127.0.0.1:8101:5500 pwno
    
    verified 2026-10-17 · r-20261017T132235Z-d8c3992548fe
    # Generated by Hub for toolset "my-agent" (2026-10-18T23:39:13+00:00).
    # Each package server runs behind a stdio->HTTP bridge and listens on localhost only.
    #   cp .env.example .env    # fill the ${VAR}s
    #   docker compose up -d && bash smoke.sh
    # Remote servers are not here: clients reach them directly (see clients/).
    name: mcp-my-agent
    services:
      pwno:
        build:
          context: https://github.com/pwno-io/pwno-mcp.git#221da23ad62f08ed8e793c9f5cdca2a5a975f644
        ports:
        - 127.0.0.1:8101:5500
        restart: unless-stopped
    volumes:
      npm-cache: {}
      uv-cache: {}
    
    verified 2026-10-17 · r-20261017T132235Z-d8c3992548fe
    # Generated by Hub for toolset "my-agent" (2026-10-18T23:39:13+00:00).
    #   kubectl create namespace mcp
    #   kubectl -n mcp create secret generic mcp-credentials --from-env-file=.env
    #   kubectl apply -f kubernetes.yaml
    # Services are cluster-internal: <name>.mcp.svc.cluster.local:8000/mcp. Put an ingress
    # with auth in front before exposing any of them.
    apiVersion: v1
    kind: Namespace
    metadata:
      name: mcp
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: pwno
      namespace: mcp
      labels: &id001
        app: pwno
    spec:
      replicas: 1
      selector:
        matchLabels: *id001
      template:
        metadata:
          labels: *id001
        spec:
          containers:
          - name: pwno
            image: CHANGE_ME
            ports:
            - containerPort: 5500
              name: http
            env: []
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: pwno
      namespace: mcp
    spec:
      selector:
        app: pwno
      ports:
      - port: 5500
        targetPort: http
        name: http
    
    verified 2026-10-17 · r-20261017T132235Z-d8c3992548fe
    # Generated by Hub for toolset "my-agent" (2026-10-18T23:39:13+00:00).
    # Credentials come from the Secret 'mcp-credentials' (kubectl create secret generic ... --from-env-file=.env).
    # Each server under `servers` is one Deployment + Service; the keys after it configure
    # upstream charts a worker verified.
    servers:
      pwno:
        enabled: true
        replicas: 1
        port: 5500
        path: /mcp
        container:
          name: pwno
          image: CHANGE_ME
          ports:
          - containerPort: 5500
            name: http
          env: []
    
    # helm install my-agent helm/my-agent -n mcp
    

    Scanned github.com/pwno-io/pwno-mcp at 221da23ad62f with [email protected][email protected] on 2026-10-17 before the build: 20 dependencies, 68 known vulnerabilities (5 critical, 26 high, 31 medium, 6 low), nothing in the code that looks malicious.

    in the cloud

    one click: the provider's deploy form opens filled in, in your own account
    koyeb

    Koyeb builds the repository's Dockerfile from branch main, not commit 221da23ad62f, the one the worker scanned and built (it takes branches only); change the branch in the form if the default one has another name.

    Clients connect to the service's https://…koyeb.app address plus /mcp.

    cloud run

    Cloud Shell clones the repository, builds its Dockerfile and deploys it to Cloud Run.

    pwno: Cloud Shell clones the default branch, not the commit the worker scanned and built (it takes branches only).

    Cloud Run sends requests to $PORT (8080); the recipe expects :5500, so the server has to read PORT, or set the container port on the service afterwards.

    connect to it

    copy what your client needs
    {
      "mcpServers": {
        "pwno": {
          "command": "CHANGE_ME",
          "args": []
        }
      }
    }
    #!/usr/bin/env bash
    # Registers every server with Claude Code (run once; `claude mcp list` to check).
    set -euo pipefail
    set -a; [ -f .env ] && source .env; set +a
    claude mcp add pwno -- CHANGE_ME
    
    {
      "mcpServers": {
        "pwno": {
          "command": "CHANGE_ME",
          "args": []
        }
      }
    }
    {
      "servers": {
        "pwno": {
          "type": "stdio",
          "command": "CHANGE_ME",
          "args": []
        }
      }
    }
    name: my-agent
    target: local
    servers:
    - hub: io.github.pwno-io/pwno-mcp
    
    • no tested recipe for target 'local' yet: build it from https://github.com/pwno-io/pwno-mcp by hand, or wait for the worker

    tools · 36

    • attachAttach to an existing process by PID using GDB/MI. Args: pid: Target process ID to attach to. Returns: (result, context) where result is the MI attach result and context is a list of quick context snapshots (e.g., backtrace/heap) captured immediately after attach.

      Attach to an existing process by PID using GDB/MI. Args: pid: Target process ID to attach to. Returns: (result, context) where result is the MI attach result and context is a list of quick context snapshots (e.g., backtrace/heap) captured immediately after attach.

      pin ab635a2f23fa11e38f74bdb412668d2d585a794ffcf844275fe0cb12db1f0158
    • checkeventsRelease and return structured events from a session PwnPipe. Returns: {"success": True, "events": [...], "alive": bool, "exit_code": int|None}

      Release and return structured events from a session PwnPipe. Returns: {"success": True, "events": [...], "alive": bool, "exit_code": int|None}

      pin adba0a0c96c7b3d838f0af01b934a8bb9f96d502492f59451c0d9d128cf83436
    • checkoutputRelease and return accumulated output from a session PwnPipe. Returns: { "success": True, "output": str } on success, or a failure object when no pipe exists. The internal buffer is cleared by this call (subsequent calls only return new output).

      Release and return accumulated output from a session PwnPipe. Returns: { "success": True, "output": str } on success, or a failure object when no pipe exists. The internal buffer is cleared by this call (subsequent calls only return new output).

      pin 35b023b6ffc9dfb144af10b1c92438a83c759235361edddc79d815fd8ff29611
    • close_debug_sessionClose an active debug session and stop any attached pwncli driver.

      Close an active debug session and stop any attached pwncli driver.

      pin 5f38fbd55ff8243f43821a58012a280ff145c948d0e451bdaa2054c68d774f5e
    • create_debug_sessionCreate or return a debug session by id.

      Create or return a debug session by id.

      pin fd3aafb8a493359cdb826a55e6af8e866df3983c5129726c59e562e0c6f925ee
    • executeExecute an arbitrary GDB/pwndbg command. Args: command: Raw GDB/pwndbg command to execute (e.g., "info registers", "vmmap"). Returns: Dict containing the raw MI/console responses, a success flag, and the current GDB state.

      Execute an arbitrary GDB/pwndbg command. Args: command: Raw GDB/pwndbg command to execute (e.g., "info registers", "vmmap"). Returns: Dict containing the raw MI/console responses, a success flag, and the current GDB state.

      pin 95dcead72eeb0d72a9eb2fcd08ba7f81ef50079be7b1d2015d5c7d22b16298a1
    • execute_python_codeExecute Python code dynamically in the shared environment. Args: code: Python source code to run. cwd: Working directory (default /workspace). If provided, use a container-visible path under /workspace; relative paths resolve under /workspace. timeout: Seconds to wait before termination. Prefer this for quick probes and analysis, and only persist files in /workspace when the user explicitly asks.

      Execute Python code dynamically in the shared environment. Args: code: Python source code to run. cwd: Working directory (default /workspace). If provided, use a container-visible path under /workspace; relative paths resolve under /workspace. timeout: Seconds to wait before termination. Prefer this for quick probes and analysis, and only persist files in /workspace when the user explicitly asks.

      pin aeec91a61aa5e01c1dc1c317a0fc6f86dbb2f91563d803eb19acd2ca35a52494
    • execute_python_scriptExecute an existing Python script within the shared environment. Args: script_path: Path to the script. Use a container-visible path under /workspace; relative paths resolve under /workspace. args: Space-separated args for the script. cwd: Working directory (default /workspace). Use a container-visible path under /workspace; relative paths resolve under /workspace. timeout: Seconds to wait before termination.

      Execute an existing Python script within the shared environment. Args: script_path: Path to the script. Use a container-visible path under /workspace; relative paths resolve under /workspace. args: Space-separated args for the script. cwd: Working directory (default /workspace). Use a container-visible path under /workspace; relative paths resolve under /workspace. timeout: Seconds to wait before termination.

      pin 321046f0ffeb4ea34b145b0fbe78085f18458a6287adf40dfc64f8ac32ebbfd9
    • fetch_repoFetch a git repository into /workspace. Args: repo_url: Repository URL (https or ssh). version: Branch/tag/commit to checkout (None = default branch). target_dir: Optional specific directory; defaults to a name derived from the URL. When provided, it must be inside the container under /workspace; relative paths resolve under /workspace. shallow: Whether to clone shallowly.

      Fetch a git repository into /workspace. Args: repo_url: Repository URL (https or ssh). version: Branch/tag/commit to checkout (None = default branch). target_dir: Optional specific directory; defaults to a name derived from the URL. When provided, it must be inside the container under /workspace; relative paths resolve under /workspace. shallow: Whether to clone shallowly.

      pin 56fe7b5943ecfaa5262ea156784339c2cb9b3999de75a8002bd26d9ed21a89af
    • finishRun until the current function returns (MI -exec-finish).

      Run until the current function returns (MI -exec-finish).

      pin ad20f7a44f5162671af16f8877106ea3589595db7d87cbe1b900eb5bd9789acd
    • gdb_interruptInterrupt the inferior and drain async notifications. Args: timeout: Maximum time to wait (seconds) for stop notifications.

      Interrupt the inferior and drain async notifications. Args: timeout: Maximum time to wait (seconds) for stop notifications.

      pin cb9c4f505be82f5b6b5dbc2a93cdecbfc0d293522e722685d834ca36dd43a70a
    • gdb_pollDrain pending async GDB notifications. Args: timeout: Maximum time to wait (seconds) for the first event.

      Drain pending async GDB notifications. Args: timeout: Maximum time to wait (seconds) for the first event.

      pin fecbff4cfef2ebc18abcb94ad0b726b3f76892c74ba4f7676b5e8ea6b37df3d0
    • get_contextGet the current debugging context. Args: context_type: "all" for a quick MI snapshot, or one of {regs, stack, disasm, code, backtrace} to request a specific pwndbg context.

      Get the current debugging context. Args: context_type: "all" for a quick MI snapshot, or one of {regs, stack, disasm, code, backtrace} to request a specific pwndbg context.

      pin 497fa08d8296cff1f4a6e73476e26e659a97925edda37714013d195f49c79fe8
    • get_decompiled_codeReturn RetDec decompiled C code if available, or a status describing why not.

      Return RetDec decompiled C code if available, or a status describing why not.

      pin 5b6c680ba91cc88ccabedba72fd919dc02e81d4580c6f6056a3c1d01f338c7a5
    • get_memoryRead memory at the specified address. Args: address: Start address expression (e.g., "$rsp", "0xdeadbeef"). size: Number of bytes to read. format: "hex" for raw bytes (fast path), "string" for x/s, otherwise MI grid format.

      Read memory at the specified address. Args: address: Start address expression (e.g., "$rsp", "0xdeadbeef"). size: Number of bytes to read. format: "hex" for raw bytes (fast path), "string" for x/s, otherwise MI grid format.

      pin b4ff29887a11698b1025d6bdb41784fc2a90ca9fb806a13956d950b294d11789
    • get_processGet information about a tracked background process by PID.

      Get information about a tracked background process by PID.

      pin 55e2ce0df0ca707fb7738b70d5348561d442d46a2ee49d71beb680a215e88a64
    • get_retdec_statusGet the current RetDec decompilation status, lazily initializing as needed.

      Get the current RetDec decompilation status, lazily initializing as needed.

      pin 92514560133a16a52efd9ba2e66a6aa71eb879bc2678313ad9de70a87859d0bf
    • get_session_infoReturn current session info (session state + GDB state) without issuing new GDB commands.

      Return current session info (session state + GDB state) without issuing new GDB commands.

      pin b2030bfab2b143f06f8c555cf7083a31190f2133071bce03e9477c066c7591a0
    • install_python_packagesInstall additional Python packages using the shared package manager (uv). Args: packages: Space-separated package list. upgrade: If True, perform upgrades when applicable.

      Install additional Python packages using the shared package manager (uv). Args: packages: Space-separated package list. upgrade: If True, perform upgrades when applicable.

      pin ac765d410862985c8c2f2673a9ba4ba157a092a355e9f31538250e2df55d9c83
    • jumpResume execution at a specified location (MI -exec-jump). Args: locspec: Location such as a symbol name, file:line, or address (*0x... ).

      Resume execution at a specified location (MI -exec-jump). Args: locspec: Location such as a symbol name, file:line, or address (*0x... ).

      pin b4e240ae26c58148f8ce007782177d39c523963378f620ebb07da27ec8c42f85
    • kill_processSend a signal to a tracked background process (default SIGTERM=15).

      Send a signal to a tracked background process (default SIGTERM=15).

      pin f180521790d708a90e8667aeda10d016c34f70ce98bae70a6884781bec8e5797
    • list_debug_sessionsList all active debug sessions and metadata.

      List all active debug sessions and metadata.

      pin 44b3bae2e55857ad6b1f79655e2893184644f33651157a1a7f8194f60dd04faf
    • list_processesList all tracked background processes and their metadata (PID, command, log paths).

      List all tracked background processes and their metadata (PID, command, log paths).

      pin c96655f080fa97e97c8ea2c9c8a2a3333744f0bfec53f5c001a5868d81445486
    • list_pwncli_sessionsList all active pwncli driver sessions.

      List all active pwncli driver sessions.

      pin 24f0b2ddb354524b0fba8810cbbe89ae273c44412fb70630b7fc7c762eac95b0
    • list_python_packagesList all packages installed in the shared Python environment.

      List all packages installed in the shared Python environment.

      pin a31b829c3739fef0732785556bf4f7a8f2bb5304187abdeb1c3ef2cdba9531cc
    • pwncliRun a pwncli exploit script for a specific debug session. Behavior: - Writes the provided script content to a per-session runtime directory - Launches: uv run <session-script> debug <resolved binary> <argument> - Maintains one PwnPipe per debug session - Detects a single-line marker printed by pwncli after attach: "PWNCLI_ATTACH_RESULT:{...json...}" and exposes it as attachment.result - Waits up to wait_timeout seconds for attach/output/exit before returning - Stores inline script content in session runtime state; only create persistent /workspace scripts when the user explicitly requests it Args: file: Full contents of a pwncli-style Python script. argument: Additional pwncli arguments after "debug <binary>". wait_timeout: Max time (seconds) to wait for initial attach/output/exit signal. binary_path: Optional target binary path (resolved under /workspace). Use a container-visible path under /workspace; relative paths resolve under /workspace. session_id: Debug session id. Returns: { "io": { "pipeinput": bool, # whether stdin is available "pipeoutput": bool, # whether output collection succeeded for this call "current_output": str # any currently buffered output consumed by this call }, "attachment": { "result": dict | None # parsed attach result from the marker if present } }

      Run a pwncli exploit script for a specific debug session. Behavior: - Writes the provided script content to a per-session runtime directory - Launches: uv run <session-script> debug <resolved binary> <argument> - Maintains one PwnPipe per debug session - Detects a single-line marker printed by pwncli after attach: "PWNCLI_ATTACH_RESULT:{...json...}" and exposes it as attachment.result - Waits up to wait_timeout seconds for attach/output/exit before returning - Stores inline script content in session runtime state; only create persistent /workspace scripts when the user explicitly requests it Args: file: Full contents of a pwncli-style Python script. argument: Additional pwncli arguments after "debug <binary>". wait_timeout: Max time (seconds) to wait for initial attach/output/exit signal. binary_path: Optional target binary path (resolved under /workspace). Use a container-visible path under /workspace; relative paths resolve under /workspace. session_id: Debug session id. Returns: { "io": { "pipeinput": bool, # whether stdin is available "pipeoutput": bool, # whether output collection succeeded for this call "current_output": str # any currently buffered output consumed by this call }, "attachment": { "result": dict | None # parsed attach result from the marker if present } }

      pin e639a5b6601a8a54a924f028ae5b94d19dd8bea93620e05cec7bbc300143b1eb
    • pwncli_stopStop a pwncli driver session and clear its session pipe.

      Stop a pwncli driver session and clear its session pipe.

      pin e09e3b80052b88edae8790383205ce6c17134486fe4199b4f29bfcbf89c0165a
    • return_from_functionForce the current function to return immediately (MI -exec-return).

      Force the current function to return immediately (MI -exec-return).

      pin 7bb59aa069a6e61538b3e51bdc0344b995221aac43fdd9abe4b672778220cb1b
    • runRun the loaded program under GDB control. Args: args: Argument string passed to the inferior. start: If True, stop at the program entry (equivalent to --start). Returns: MI run/continue results and state.

      Run the loaded program under GDB control. Args: args: Argument string passed to the inferior. start: If True, stop at the program entry (equivalent to --start). Returns: MI run/continue results and state.

      pin b32ecfcaaa2b4a7867393ab0acc7ae006c052ebb04fe118146ef3909e191928d
    • run_commandExecute a system command and wait for completion. Note: Use this for build and helper commands. Do not use this to run the target binary under analysis. Use set_file + run (or attach) for the target. Use execute_python_code instead of ``python -c``. Use pwncli for interactive exploit-driver workflows. Args: command: Shell command to run. cwd: Working directory (defaults to /workspace). Use a container-visible path under /workspace; relative paths resolve under /workspace. timeout: Timeout in seconds. Returns: JSON string with stdout/stderr/exit code.

      Execute a system command and wait for completion. Note: Use this for build and helper commands. Do not use this to run the target binary under analysis. Use set_file + run (or attach) for the target. Use execute_python_code instead of ``python -c``. Use pwncli for interactive exploit-driver workflows. Args: command: Shell command to run. cwd: Working directory (defaults to /workspace). Use a container-visible path under /workspace; relative paths resolve under /workspace. timeout: Timeout in seconds. Returns: JSON string with stdout/stderr/exit code.

      pin 849eb276fa0a624252d6e949d60fa8f58e9201a4cf2216e2101d0ea4caf08795
    • sendinputSend raw input to a session-scoped pwncli process stdin. Important: This call does not append a newline. If the target expects a line, include " " yourself. Args: data: Raw text to write to stdin. Returns: { "success": bool } indicating whether the input was written successfully.

      Send raw input to a session-scoped pwncli process stdin. Important: This call does not append a newline. If the target expects a line, include " " yourself. Args: data: Raw text to write to stdin. Returns: { "success": bool } indicating whether the input was written successfully.

      pin 07fa57c18e4cf8a36b8fd3e7a242308f5e82cf701cfaf2d20c1028a0d3accdb0
    • set_breakpointSet a breakpoint using MI (-break-insert). Args: location: Breakpoint location (symbol/address/file:line). condition: Optional breakpoint condition expression.

      Set a breakpoint using MI (-break-insert). Args: location: Breakpoint location (symbol/address/file:line). condition: Optional breakpoint condition expression.

      pin ed8c7911627d914765d93e57af61117cf6600e5fa1ba44e5c6381a03307083e1
    • set_fileLoad an executable file into GDB/pwndbg for debugging. Args: binary_path: Absolute path to the ELF to debug. Use the container-visible path under /workspace; relative paths resolve under /workspace. If your host file is ./workspace/chal, pass /workspace/chal here. Returns: Dict with MI command responses and state.

      Load an executable file into GDB/pwndbg for debugging. Args: binary_path: Absolute path to the ELF to debug. Use the container-visible path under /workspace; relative paths resolve under /workspace. If your host file is ./workspace/chal, pass /workspace/chal here. Returns: Dict with MI command responses and state.

      pin 3ce471746656d433c3a22ffce84f66d8064178a240a31a265110f04fb865faad
    • spawn_processSpawn a long-running background process and return its PID and log paths. Note: Use this for helper services. Do not use this to run the target binary under analysis. Use set_file + run (or attach) for debugger workflows. Use pwncli for exploit interaction. Args: command: Shell command to spawn. cwd: Working directory (defaults to /workspace). Use a container-visible path under /workspace; relative paths resolve under /workspace.

      Spawn a long-running background process and return its PID and log paths. Note: Use this for helper services. Do not use this to run the target binary under analysis. Use set_file + run (or attach) for debugger workflows. Use pwncli for exploit interaction. Args: command: Shell command to spawn. cwd: Working directory (defaults to /workspace). Use a container-visible path under /workspace; relative paths resolve under /workspace.

      pin ff6007132992f90d19ef19e0836defdb2d49da305ea73dac96465668f49d7d22
    • step_controlExecute a stepping command (c, n, s, ni, si). Args: command: One of {c, n, s, ni, si} or their long forms. Returns: Dict with MI responses and state.

      Execute a stepping command (c, n, s, ni, si). Args: command: One of {c, n, s, ni, si} or their long forms. Returns: Dict with MI responses and state.

      pin 1669e8f594ca83a2ff5c9f83c21d1b72ab420dfdc3da3dc1cd70af3067083e5b
    • untilRun until a specified location or next source line (MI -exec-until).

      Run until a specified location or next source line (MI -exec-until).

      pin 020fbfd29989ab5d73f3f0066b839bfa110a8170756c254a5d59252835a03292

    runs · 1

    the latest tests of this entry by the hub and its workers, newest first
    dateworkermethodstatussandboxreason
    2026-10-17 13:22 local-mac-vm dockermcp 2025-11-25 ok36 tools gvisor —