npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

n8n-nodes-metasploit

v0.1.0

Published

n8n community node to drive the Metasploit Framework via its RPC API (authorized security testing).

Readme

n8n-nodes-metasploit

npm version License: MIT

Community node for n8n that drives the Metasploit Framework through its MessagePack RPC API (msfrpcd). Search and run modules, generate payloads, manage sessions and jobs, read/write the Metasploit database (hosts, services, vulns, loot…) and trigger workflows automatically when a new session opens — all from n8n.

⚠️ Authorized testing only. This node automates an offensive-security framework. Use it exclusively against systems you own or are explicitly authorized to test. You are responsible for complying with all applicable laws and rules of engagement.

Installation

Settings → Community Nodes → Installn8n-nodes-metasploit.

Then create a Metasploit RPC API credential (see Credentials) and make sure msfrpcd is running and reachable from n8n.

Requirements: start the RPC daemon

The node talks to msfrpcd (the Metasploit RPC daemon). It works the same whether Metasploit is installed natively on a host or run in Docker — the node just makes HTTP requests to whatever URL you configure. Start the daemon on a host n8n can reach:

# -U user  -P password  -S = plain HTTP (no SSL)  -a bind addr  -p port  -f foreground
msfrpcd -U msf -P 'change-me-strong-password' -S -a 0.0.0.0 -p 55553 -f
  • -a 0.0.0.0 binds all interfaces. If you omit it, msfrpcd listens only on 127.0.0.1 and nothing outside that host (including an n8n container) can reach it.
  • -S serves plain HTTP → use http://… in the Base URL. Only do this on a trusted / isolated network. Drop -S to require TLS → use https://… (the node already tolerates self-signed certs).
  • The Database operations need msfrpcd connected to PostgreSQL (via msfdb init, or a database.yml + MSF_DATABASE_CONFIG). Without a database they return an ActiveRecord connection error; every other operation works without one.

Credentials (required)

The node requires a Metasploit RPC API credential — there is no anonymous access. auth.login is called with your username/password on every run.

| Field | Required | Description | |---|---|---| | Base URL | ✅ | Where msfrpcd listens, no trailing slash (see scenarios below) | | Username | ✅ | the msfrpcd -U user (e.g. msf) | | Password | ✅ | the msfrpcd -P password — the field is empty by default, you must fill it | | msfvenom / Tools Wrapper URL | ❌ optional | For Payload → Generate File and the Tool resource; leave empty otherwise |

The token from auth.login is sent in the MessagePack request body, so there is no auth header to configure — just URL + username + password.

Connection scenarios (Base URL)

Pick the row matching where n8n runs relative to Metasploit. The daemon command is the same in all cases (msfrpcd -U msf -P … -S -a 0.0.0.0 -p 55553 -f); only the Base URL you put in the credential changes.

| n8n runs… | Metasploit is… | Base URL to use | |---|---|---| | natively on a host | on the same host | http://127.0.0.1:55553 | | in Docker | on the host (native install) | http://host.docker.internal:55553 — on Linux add extra_hosts: ["host.docker.internal:host-gateway"] to the n8n service, or use the bridge IP http://172.17.0.1:55553 | | in Docker | in Docker on the same network | http://<service-name>:55553 (e.g. http://metasploit:55553) | | anywhere | on another machine / LAN | http://<machine-ip>:55553 |

If msfrpcd runs without -S (TLS on), use https:// instead of http:// in any of the rows above.

Example: full Docker stack

A ready-to-run stack (n8n + Metasploit RPC + PostgreSQL + optional msfvenom wrapper) is in examples/docker-compose.yml, with examples/database.yml and examples/msfvenom-wrapper.rb. Copy the three files into a folder and:

docker compose up -d

Then create the credential with:

| Field | Value | |---|---| | Base URL | http://metasploit:55553 | | Username | msf | | Password | change-me-strong-password (must match msfrpcd -P in the compose file) | | msfvenom / Tools Wrapper URL | http://msfvenom:8095 (optional) |

Trim the stack to taste: drop the msf-db service (and the two MSF_DATABASE_CONFIG / volumes lines on metasploit) if you don't need the Database ops, and drop msfvenom if you don't need Generate File.

Resources & operations

| Resource | Operations | |---|---| | Console | Create · Get Many · Read · Write · Run Command · Destroy | | Core | Get Version · Get/Set Global Option · Reload Modules · Get Module Stats · Get Thread List | | Database | Get Hosts / Services / Vulns / Creds / Notes / Loots / Workspaces · Import Data (Nmap XML) · Report Host / Service / Vuln / Note | | Job | Get Info · Get Many · Stop · Stop All | | Module | Search · Get Info · Get Options · Get Compatible Payloads · Check · Execute · Get Many | | Payload | Generate File (formatted payload via msfvenom) | | Plugin | Get Many · Load · Unload | | Session | Get Many · Run Shell Command · Run Meterpreter Command · Run Meterpreter Script · Get Compatible Modules · Upgrade Shell to Meterpreter · Stop · Stop All | | Tool | Pattern Create · Pattern Offset · Assemble (NASM/Metasm) · Generate Egghunter · Find Bad Chars · EXE to VBA/VBS · PDF to XDP · Java Deserializer · VirusTotal · Run Tool | | Advanced | Call RPC Method — raw passthrough to any RPC method |

Plus a Metasploit Trigger node that polls and starts a workflow on events: new session / host / service / vulnerability / credential / loot / note / job / framework event, plus disappearance events Session Closed and Job Finished.

Advanced → Call RPC Method (100% coverage)

The curated operations above cover everything you normally need. For the long tail — any RPC method not surfaced as a dedicated operation, or a new one added by a future Metasploit release — use Advanced → Call RPC Method:

  • Method — the RPC method name, e.g. session.ring_read, db.report_loot, core.stop, module.encode.
  • Prepend Auth Token — on by default (the login token is sent as the first argument). Turn off only for methods that take no token.
  • Arguments (JSON Array) — the positional args after the token, e.g. ["exploit", "windows/smb/ms17_010_eternalblue"] or [{ "host": "10.0.0.5" }].

This makes the node a complete client for the whole Metasploit RPC surface. ⚠️ It is a raw passthrough — some methods are destructive (e.g. core.stop shuts the daemon down); you are responsible for what you call.

Structured output vs the console

Prefer the structured operations (Module → Search, Get Info, Get Compatible Payloads, Session/Job → Get Many, Database → …) for chaining: they return clean JSON you can filter and map directly. Console → Run Command returns the raw framework text plus a cleaned lines[] array and a consoleId you can reuse (the console is stateful — usesetrun persist), useful for commands with no structured RPC equivalent.

Typical flow: search → inspect → payloads

flowchart LR
    A["Module<br/>Search 'eternalblue'"] -->|filter by rank| B["Pick exploit<br/>(Code)"]
    B -->|moduleName| C["Module<br/>Get Info"]
    B -->|moduleName| D["Module<br/>Get Compatible Payloads"]

module.search returns each module as { type, name, fullname, rank, disclosuredate }. fullname includes the type prefix (e.g. exploit/windows/smb/ms17_010_eternalblue); strip it (split('/')) before passing to Get Info (moduleType + moduleName) or Get Compatible Payloads.

Recon → report (Database)

flowchart LR
    A["Import Nmap XML"] --> B["Get Hosts"] --> C["Get Services"] --> D["Report Vuln"] --> E["Get Vulns"] --> F["Build report (Code)"]

Import Data accepts the scan output either as text or from a binary property, so you can chain a "Read/Download File" node holding an Nmap XML straight into it.

Auto-respond to a new session (Trigger)

flowchart LR
    T["Metasploit Trigger<br/>On New Session"] -->|session_id| A["Session<br/>Run Meterpreter Command"] --> S["Summarize (Code)"]

In manual (test) mode the trigger returns all current sessions so you can build the flow; when active it only emits sessions/hosts/loot it has not seen before.

The helper wrapper (optional): msfvenom + Tools

Some capabilities live in Metasploit's CLI tools, not the RPC:

  • Formatted payloads (exe, elf, dll, …) — the RPC only returns raw bytes; formatting is a msfvenom capability (Payload → Generate File).
  • The Tool resourcepattern_create, pattern_offset, nasm_shell, egghunter, exe2vba/exe2vbs, pdf2xdp, java_deserializer, virustotal, etc. are standalone scripts under tools/, not RPC methods.

Both are served by a single small HTTP wrapper you run alongside Metasploit (it shells out to msfvenom and the tools/ scripts). Point the credential's msfvenom / Tools Wrapper URL at it. A ready-to-run wrapper is examples/msfvenom-wrapper.rb (endpoints POST /generate and POST /tool); it is already wired up in examples/docker-compose.yml. Leave the field empty if you use neither Generate File nor the Tool resource.

For file-based tools (EXE to VBA/VBS, PDF to XDP, Java Deserializer, VirusTotal) the input is read from a binary property on the incoming item, and file-output tools return their result as a binary property (data). Run Tool is a generic escape hatch to invoke any tools/<category>/<name> script with your own arguments, stdin and optional input/output files.

Build

npm install
npm run build   # tsc + copy icons into dist/

Deploy to a self-hosted (Docker) n8n

n8n auto-loads packages placed in ~/.n8n/custom/node_modules/. If your n8n data dir is bind-mounted from the host:

# after `npm run build`
mkdir -p /path/to/n8n-data/custom/node_modules
cp -r . /path/to/n8n-data/custom/node_modules/n8n-nodes-metasploit
docker restart n8n

Only package.json + dist/ are needed at runtime (n8n-workflow is a peer dependency provided by n8n itself).

Notes

  • The node ships no runtime dependencies — the MessagePack codec is bundled inline so it can qualify as a verified community node.
  • Long-running module executions return a job_id; poll Job → Get Info / Get Many to follow them.
  • Session → Run Shell Command works on shell sessions; use Run Meterpreter Command for meterpreter sessions.
  • Session and Job fields are pickers: choose a live session/job From List, or switch to By ID to type one directly.
  • Module → Get Many supports Return All / Limit (the exploit list is large).
  • msfrpcd returns HTTP 200 even on failure; the node inspects the response and raises a proper node error (message from error_message), so failures respect Continue On Fail and the error output branch.

Disclaimer

This project is not affiliated with or endorsed by Rapid7 or the Metasploit project. "Metasploit" is a trademark of Rapid7. Use only for lawful, authorized security testing.

License

MIT