This server exposes network, web, DNS, service and data tools over MCP. Every
tool runs in-process, in pure Rust — none of them shells out to an external
binary. The list is drawn from todo/tools.txt (the tool list this project was
asked to cover); todo/sites.txt is deliberately out of scope, because those
entries are third-party web services that need API keys, not local tools.
Every tool is configured under [tools.<suite>] in config.toml, and every
suite carries the same limits envelope:
[tools.<suite>.limits]
enabled = true # false = the tools are not registered at all
timeout_secs = 60 # wall-clock ceiling for one call
max_output_bytes = 1048576 # response cap; truncation is marked in the output
max_concurrency = 32 # in-flight operations
max_targets = 4096 # targets per call (0 = no cap, for local tools)
max_requests_per_sec = 0 # 0 = as fast as the code allowsLimits only tighten. A caller cannot raise them through arguments, and the
per-credential quota chain (rate, concurrency, cooldown, daily budgets) still
applies on top, so the effective ceiling for a call is the minimum of
node → credential → cluster profile → request → tool limit.
Each suite also has its own fields for tool-specific defaults (ports, wordlist
caps, redirect limits, user agents, and so on). See the annotated config.toml.
| Suite | Tools |
|---|---|
net_scan |
net_scan — port scanning (TCP SYN/connect/ACK/FIN/NULL/XMAS/Maimon/window, UDP modules, ICMP, -sO IP-protocol), plus service/version detection and nmap-style output. See PARITY.md. |
dns |
dns_query, dns_bruteforce, dns_zone_transfer, subdomain_permute |
service |
redis_check, smtp_enum, ftp_probe, ssh_audit, tls_scan, ike_scan |
web_recon |
http_probe, web_crawl, web_tech, waf_detect, security_headers, cors_check |
web_audit |
web_fuzz, param_discover, js_endpoints, xss_scan, sqli_scan, ssti_scan, jwt_inspect, open_redirect, cms_detect, graphql_probe |
discovery |
ping_sweep, nbtscan, snmp_check, snmp_walk, packet_send |
secrets |
secret_scan, cewl |
data |
hash_identify, dedup_lines, json_flatten |
| (standalone) | http_request, ssh (HTTP client and SSH client) |
Anything an operator defines themselves is added through the same interface:
[[tools.custom]]— declare an external command with an argument template and value allow-lists. It inherits the same quota, timeout and output caps.- an in-process plugin — implement
ToolHandlerand return it fromtools::plugins(). It gets the same treatment as a built-in.
dns_query— A/AAAA/MX/NS/TXT/CNAME/SOA/SRV/CAA/PTR against the system resolver or an explicit one. Per-type status, so "no records" and "resolver unreachable" are told apart.dns_bruteforce— a wordlist against a domain, concurrent and rate-gated. Wildcard DNS is detected first (N random probes, majority rule) and handled by policy: report, hide, or fail.dns_zone_transfer— AXFR against the authoritative nameservers. A refused transfer is reported as a normal outcome, with the rcode.subdomain_permute— deterministic, de-duplicated permutations (prefix/suffix words, environment words, numbered variants).
redis_check— proves the unauthenticated verdict from a real PING/INFO and reports blast-radius facts. Destructive commands are refused by name before a byte is sent.smtp_enum— VRFY/EXPN/RCPT enumeration, with the raw reply as evidence. A server that always answers 252 is reported inconclusive, not "found".ftp_probe— banner, anonymous login, FEAT list. Credential attempts are capped and delayed: this is a probe, not a cracker.ssh_audit— identification string and KEXINIT exchange, with every algorithm ranked ok/warn/fail. No authentication is attempted.tls_scan— a real rustls handshake (protocol, cipher, ALPN), a DER walk of the leaf certificate (subject, issuer, validity, SANs, key type/size, hostname match), plus legacy-version and cipher probes.ike_scan— a hand-rolled IKEv1 main-mode probe with transform decoding.
http_probe (status, title, server, TLS flag for a URL list), web_crawl
(bounded, same-host by default), web_tech (fingerprinting with the evidence
for each match), waf_detect (vendor from header/cookie/body signatures),
security_headers (present/missing/weak with the actual value), cors_check
(origin reflection, wildcard-with-credentials, null trust).
web_fuzz (content discovery that first learns the soft-404 baseline),
param_discover, js_endpoints (endpoints and secrets out of JavaScript),
xss_scan, sqli_scan, ssti_scan, jwt_inspect, open_redirect,
cms_detect, graphql_probe.
These actively probe a target, so they are marked destructive. Every one of them reports the evidence — the payload sent and the response that proves it — and says "inconclusive" when it cannot distinguish a hit from noise. A scanner that claims a vulnerability it cannot show is worse than no scanner.
ping_sweep (finds alive hosts with RTT), nbtscan (NetBIOS names), snmp_check
(which community strings answer), snmp_walk (table walk over GETNEXT/GETBULK),
packet_send (custom TCP/UDP/ICMP packets with chosen flags, TTL, payload and
rate — the most powerful tool here, so its count, targets and rate are capped
hard).
secret_scan walks files looking for credentials, and redacts what it
finds (showing at most the first and last few characters of a match) so a scan
cannot leak the secret it found. cewl builds a wordlist from a site.
hash_identify names plausible hash formats with a confidence, dedup_lines
and json_flatten are the pipeline helpers (anew and gron equivalents).
The remaining entries in todo/tools.txt are absent on purpose:
| Entry | Reason |
|---|---|
| Shodan / Censys / FOFA / ZoomEye / Netlas / GreyNoise / VirusTotal / … | todo/sites.txt entries: third-party services requiring API keys. [[tools.custom]] covers reaching them deliberately. |
nuclei, OpenVAS/Greenbone, Nikto, WPScan, wapiti |
Whole platforms with their own template/plugin rule formats and vulnerability databases. The plugin registry is the extension path; a template engine is not faked. |
Metasploit, searchsploit |
Exploitation frameworks and the Exploit-DB dataset. |
hashcat, John the Ripper |
GPU hash cracking. |
hydra, medusa, ncrack, patator, crowbar |
Bulk credential attacks. ftp_probe and smtp_enum do bounded, rate-limited checks; a full cracker is a different tool with a different blast radius. |
tmux, parallel, jq, gron |
json_flatten covers gron; general-purpose shell multiplexing and JSON querying belong to the operator's shell, not to a scanner ([[tools.custom]] can wrap them). |
Responder, Coercer, BloodHound, Certipy, Impacket |
Windows/AD attack tooling (name-resolution poisoning, coercion, exploitation). |
Interactsh |
Needs a public callback server and a domain to be useful; out of scope for a node-local tool. |
Anything above can be reached through [[tools.custom]] (external command with
allow-lists) or an in-process plugin, and it will inherit the same limits.