Skip to content

Latest commit

 

History

History
136 lines (108 loc) · 7.57 KB

TOOLS.md

File metadata and controls

136 lines (108 loc) · 7.57 KB

Tools

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.

Limits and configuration

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 allows

Limits 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.

Tool inventory

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 ToolHandler and return it from tools::plugins(). It gets the same treatment as a built-in.

What each suite does

DNS ([tools.dns])

  • 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).

Services ([tools.service])

  • 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.

Web reconnaissance ([tools.web_recon])

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 audit ([tools.web_audit])

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.

Host discovery ([tools.discovery])

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).

Secrets and data ([tools.secrets], [tools.data])

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).

Not implemented, and why

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.