Cybersec Toolkit
Enables GitHub Copilot in CLI and VS Code to discover, recommend, and execute installed cybersecurity tools through the MCP server.
Allows Ollama-backed MCP-capable clients to interact with the cybersecurity toolkit through an MCP host, including tool discovery and execution.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Cybersec Toolkitrecommend tools for a CTF web challenge"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
/\ /\ ______ __ _____
(o ) ( o) / ____/_ __/ /_ ___ _____/ ___/___ _____
\ \_/ / / / / / / / __ \/ _ \/ ___/\__ \/ _ \/ ___/
<==\ /==> / /___/ /_/ / /_/ / __/ / ___/ / __/ /__
\ V / \____/\__, /_.___/\___/_/ /____/\___/\___/
/_ _\ /____/ by 26zl
|_| ToolkitCybersecurity toolkit with built-in AI integration. An embedded MCP (Model Context Protocol) server lets MCP-capable clients query the tool registry, check install status, recommend tools for a CTF category or bug-bounty target, and run installed tools through a governed execution path. Jump to MCP Server (AI Integration).
Bundled with a modular installer for Linux and Termux (Android) covering 670+ tools, 18 modules, 14 profiles, and 12 install methods.
What makes it different: most toolkits stop at installing tools. Here an AI can also drive them — infer the problem type, pick the right tools from all modules/profiles, and work with you as an interactive companion. When you explicitly authorize it, the same MCP toolchain can enter an autonomous solver loop. Companion by default; autonomous only when you ask.
Works with
Client | Integration | Label |
Claude Code |
| Native configuration included |
Claude Desktop |
| Configuration example documented |
OpenCode |
| Live tested |
Codex |
| Native configuration included |
Gemini CLI |
| Native configuration included |
GitHub Copilot |
| CLI live tested; VS Code documented |
Hermes Agent | User | Live tested |
OpenClaw | User | Live tested |
Cursor / Cline / Goose | Client MCP settings + Agent Skills | Compatible through MCP; skills supported |
Continue | Client MCP settings; rules/prompts for context | Compatible through MCP |
LM Studio (>=0.3.17) |
| Compatible through MCP |
Ollama | MCP host in front of it | Compatible through an MCP host |
Aider | — | Not applicable |
Open WebUI | MCP-to-OpenAPI bridge | Compatible through MCP host or bridge |
See docs/AI_CLIENTS.md for detailed configuration per client, and docs/ORCHESTRATION.md for coordinating multiple agents across any MCP client.
How it works
Two entry points share one tool registry. An operator runs the bash installer to put tools on disk; an AI agent talks to the MCP server to discover, recommend, and execute those same tools through its governed tool path. tools_config.json is the single source of truth the modules define and the MCP advisors read, and CI validators keep the Python and bash sides in sync.

Mermaid source: assets/how-it-works.mmd.
Reading the diagram: solid arrows are runtime or installation actions; dashed arrows are validation and context relationships. Client configurations enter through the root-aware launcher before reaching FastMCP. security.py governs run_tool and run_pipeline through the allowlist, argument checks, and network policy without invoking a shell. run_script remains a separate, disabled-by-default full-code-execution capability. Agent Skills stay outside the execution path: .claude/skills/ is canonical and scripts/sync-skills.sh produces .agents/skills/ for clients that use the portable mirror.
Related MCP server: proxy-mcp
Why not just Kali (or another installer)?
Kali/Parrot/BlackArch ship the tools; this is complementary, not a replacement. It runs on the box you already have (incl. Termux) and adds an AI control plane that can discover, recommend, chain, and execute installed tools through one governed interface. Want all the tools? A distro is fine. Want an MCP client that can select and run them under explicit policy? That's the gap.
Trust & safety
Security users should be paranoid — here's exactly what runs and what's gated:
Default-safe MCP. Out of the box
CYBERSEC_MCP_ALLOW_EXTERNAL=0rejects network targets that do not resolve to private/loopback ranges, andCYBERSEC_MCP_ALLOW_SCRIPTS=0disablesrun_script. You opt into external scopes / scripting explicitly.Governed tool execution passes one gate (
mcp_server/security.py): registry allowlist, no shell (create_subprocess_exec, nevershell=True), argument sanitization, a per-tool blocked-flag denylist (e.g.sqlmap --os-shell,nmap -iL, file-list/target-injection flags), target/network policy, rate limiting, output caps, and timeouts.The execution policy is not an OS sandbox. Allowed tools run with the MCP process user's permissions, and some security tools can launch child processes or load plugins. Disabling
run_scriptonly disables that endpoint; run the MCP server as a least-privileged user or inside an isolation boundary appropriate for untrusted targets.Tool-aware policy is not solver hardcoding. The solver chooses tools from the registry/advisors; the policy layer only understands enough CLI grammar to tell a real target from a header, wordlist, output path, config file, or target-list flag. That keeps normal commands usable without letting file-list/config flags bypass scope checks.
Audit trail, not leaks. Actions are logged as JSON to an owner-only (
0600) rotating log under the user's state directory (~/.local/state/cybersec-tools-mcp/audit.logby default). Script bodies are never persisted — only an irreversible SHA256 + length is logged for correlation — and credential-shaped strings are redacted from tool arguments.Least privilege in the installer. It runs as root but drops to the invoking user (
$SUDO_USER) for cloned-repo builds andpip/cargo/geminstalls; binary releases are SHA256-verified when checksums are published.Dual-use tooling is gated. C2 and phishing frameworks (Sliver, Caldera, gophish, evilginx, …) are off by default and install only with
--include-c2(theredteam/fullprofiles); the MCP layer reflects this and never auto-runs them.Authorized use only. See
SECURITY.md, the Supply Chain Model, and the Disclaimer.
Install
All required runtimes (Python, Go, Ruby, Java, Rust, Node.js), dev libraries, pipx, and build tools are installed automatically. The only prerequisite is a supported Linux distro. Windows and macOS are not supported (use WSL or Docker).
Docker is the one exception — install it manually if you want C2 frameworks, MobSF, BeEF, BloodHound, TheHive, or Cortex (
--enable-docker). See Docker install docs. GitHub authentication is recommended. The installer downloads ~30 binary releases and makes ~30+ API calls to GitHub. Without auth, you're limited to 60 requests/hour and some downloads may fail. With auth, the limit is 5,000/hour. The easiest way:# Install gh CLI and log in (one-time) — the installer auto-detects it sudo apt install gh && gh auth loginAlternatively, export a personal access token (no scopes needed):
export GITHUB_TOKEN=ghp_xxxxxxxxxxxxxxxxxxxx
From the latest release (pinned and stable — recommended):
# Newest tag is on the Releases page: https://github.com/26zl/cybersec-toolkit/releases
git clone --depth 1 --branch v1.1.0 https://github.com/26zl/cybersec-toolkit.git && cd cybersec-toolkit && sudo ./install.shFrom main (newest tools, fixes, and changes; may include unreleased work):
git clone https://github.com/26zl/cybersec-toolkit.git && cd cybersec-toolkit && sudo ./install.shThat installs the standard tools from all 18 modules. C2/phishing tools and Docker images
remain opt-in; use --profile full --enable-docker when you explicitly want the complete
registry supported by the current platform. To install a subset:
sudo ./install.sh --profile ctf # CTF tools only
sudo ./install.sh --profile redteam --enable-docker # Red team + Docker C2
sudo ./install.sh --module web --module recon # Specific modules
sudo ./install.sh --tool sqlmap --tool nmap # Individual tools
sudo ./install.sh --dry-run --profile ctf # Preview without installingNot sure the machine is ready? Run a read-only preflight first — it needs no root and installs nothing:
./install.sh --doctor # Distro, prerequisites, MCP server, tool registryTry in Docker
Pull the prebuilt image (no local build):
docker run --rm ghcr.io/26zl/cybersec-toolkit --profile ctfOr build it yourself:
docker build -t cybersec-toolkit .
docker run --rm cybersec-toolkit --profile ctfPodman works as a drop-in replacement — swap
dockerforpodman(oralias docker=podman); rootless builds and runs are supported. For the Compose example below, usepodman compose(needs a compose provider installed).
Or use the bundled Compose file (builds and runs the installer service):
docker compose run --rm installer --profile ctfThe image grants the
toolkituser passwordless sudo so the installer can manage system packages. Treat code inside the container as root-capable; the image is not a security sandbox, especially whenrun_scriptis enabled or sensitive host paths are mounted.
macOS (Apple Silicon): Add --platform linux/amd64 to both commands to run via x86 emulation:
docker build --platform linux/amd64 -t cybersec-toolkit .
docker run --rm --platform linux/amd64 cybersec-toolkit --profile ctfTermux (Android):
pkg install git
git clone https://github.com/26zl/cybersec-toolkit.git
cd cybersec-toolkit
./install.sh --profile lightweightsudo ./install.sh --help # Full help
sudo ./install.sh --list-profiles # Show profiles
sudo ./install.sh --list-modules # Show modules
sudo ./install.sh --skip-heavy # Skip large/slow packages
sudo ./install.sh --skip-pipx # Skip all pipx (Python) installs
sudo ./install.sh --skip-go # Skip all Go tool installs
sudo ./install.sh --skip-cargo # Skip all Cargo (Rust) installs
sudo ./install.sh --skip-gems # Skip all Ruby gem installs
sudo ./install.sh --skip-git # Skip all git clone installs
sudo ./install.sh --skip-binary # Skip all binary release downloads
sudo ./install.sh --skip-source # Skip build-from-source, snap, npm, and curl-pipe installs
sudo ./install.sh --fast # Skip checksum verification (see Security note below)
sudo ./install.sh --require-checksums # Fail if binary release has no checksum file
sudo ./install.sh --production # Strict checksum preset for release downloads
sudo ./install.sh --upgrade-system # Upgrade system packages before installing
sudo ./install.sh --list-sessions # List install sessions and exit
sudo ./install.sh --rollback <id|last> # Rollback tools installed in a session
sudo ./install.sh --version # Show installer version and exit
sudo ./install.sh --enable-docker # Pull Docker images
sudo ./install.sh --include-c2 # Include C2 frameworks (needs --enable-docker)
sudo ./install.sh -j 8 # 8 parallel install jobs (default: 4)
sudo ./install.sh -v # Verbose / debug output--tool installs only the specified tool without running the full dependency setup.
Dry-run time estimates count install entries across methods, so the estimate can be higher than the de-duplicated 670+ tool registry.
The installer orchestrates 670+ tools across 12 different install methods. The time is spent on I/O-bound operations that no scripting language can speed up:
What takes time | Why |
System packages (apt/dnf) | Downloading and unpacking the |
Go tools | Downloading modules and compiling each binary |
pipx (Python) | Creating one isolated venv per tool and downloading wheels |
Cargo (Rust) crates | Compiling from source — Rust has no pre-built registry binaries |
Git clones | Cloning each repository |
Binary releases | Downloading pre-built binaries from GitHub |
Bash overhead | Array iteration, logging, progress bars (negligible) |
For the current per-method tool counts, run ./install.sh --dry-run — it prints the live breakdown so the numbers can't go stale here. The slowest stages are the ones that compile or unpack the most (apt/dnf and Go), not raw tool count: Cargo compiles from source but only covers a handful of tools.
The installer already parallelizes where possible (-j 4 by default). Methods with shared locks (apt, pipx, cargo) must run sequentially. To reduce install time:
Use
--profile lightweightor--module <name>to install only what you needUse
--skip-cargoto skip Rust compilation (the slowest per-tool method)Increase parallelism with
-j 8for faster Go/git/binary downloadsSet up an apt-cacher-ng proxy for repeated installs
Profiles
Profile | Modules | Description |
| All 18 | Complete security toolkit |
| misc, crypto, pwn, reversing, stego, forensics, cracking, web, mobile, blockchain | CTF competitions |
| misc, networking, recon, web, enterprise, pwn, mobile, cracking, cloud, wireless, reversing, crypto | Offensive security |
| misc, networking, recon, web, llm | Web application testing |
| misc, recon | OSINT gathering |
| misc, forensics, blueteam, reversing, stego, cracking | Digital forensics and incident response |
| misc, pwn, reversing, crypto | Binary exploitation and reverse engineering |
| misc, mobile, web, reversing | Mobile application security testing |
| misc, cloud, containers, networking, recon | Cloud and container security auditing |
| misc, blockchain, web, crypto | Smart contract auditing and blockchain security |
| misc, wireless, networking | WiFi, Bluetooth, and SDR security |
| misc, networking, recon, web, cracking | Hobby ethical hacking essentials (HTB, THM, bug bounty) |
| misc, cracking, crypto | Hash cracking |
| misc, blueteam, forensics, reversing, mobile, containers, networking, cloud, recon | Defensive security, IR, malware analysis |
Modules
Module | Tools | Description |
| 41 | Post-exploitation, social engineering, wordlists, resources, C2 (Docker + Loki) |
| 57 | Port scanning, packet capture, tunneling, MITM, protocol tools |
| 84 | Subdomain enumeration, OSINT, DNS, automated recon frameworks |
| 60 | Vulnerability scanning, fuzzing, SQLi, XSS, CMS scanners, API testing |
| 14 | RSA attacks, cipher analysis, hash attacks, constraint solving |
| 36 | Exploit frameworks, binary exploitation, fuzzing, payload generation |
| 33 | Disassemblers, debuggers, emulation, Java/Python reversing |
| 57 | Disk/memory forensics, file carving, timeline analysis, log analysis, hardware/serial |
| 80 | Active Directory, Kerberos, Azure AD, credential harvesting, lateral movement |
| 41 | WiFi cracking, Bluetooth, SDR, rogue AP |
| 34 | Hash cracking (john, hashcat), brute force, wordlist generation |
| 15 | Image/audio steganography, detection, StegCracker |
| 22 | AWS/Azure/GCP security auditing, Checkov |
| 15 | Docker/Kubernetes security (Grype, Syft, Kubescape, kubeaudit) |
| 36 | IDS/IPS, SIEM, incident response, threat intelligence, hardening, malware analysis (YARA, ClamAV, FLOSS, Capa, Loki) |
| 18 | Android/iOS app testing, APK analysis, MobSF (Docker) |
| 15 | Smart contract auditing (Slither, Mythril, Foundry, Aderyn), blockchain forensics, Echidna (Docker) |
| 14 | LLM red teaming, prompt injection, jailbreak testing, AI vulnerability scanning |
Install Methods
Method | Count | Examples |
Git clone | ~197 | GitHub repos with auto-setup, resources, wordlists |
System packages (apt/dnf/pacman/zypper) | ~166 | nmap, wireshark, john, hashcat |
pipx | ~137 | sqlmap, impacket, bloodhound, volatility3 |
Go install | ~62 | nuclei, subfinder, ffuf, httpx |
Binary release | ~51 | gitleaks, chainsaw, findomain, FLOSS, Capa, Loki, Syft, Kubescape |
Build from source | ~23 | massdns, duplicut, AFLplusplus, honggfuzz |
Docker | ~12 | Empire, MobSF, BeEF, BloodHound, TheHive, Cortex, PentAGI |
Ruby gem | 6 | wpscan, evil-winrm, brakeman |
Cargo (Rust) | 8 | feroxbuster, RustScan, pwninit, yara-x-cli |
Special (curl-pipe) | 4 | Metasploit, Foundry, Steampipe, patator |
Snap | 1 | zaproxy |
npm | 5 | promptfoo, apk-mitm, surya, solgraph |
Post-Install Scripts
All scripts require root on Linux (sudo) and support --help. On Termux, no root is needed.
Script | Purpose | Example |
| Check which tools are installed |
|
| Update all installed tools |
|
| Remove tools by module |
|
| Purge all caches and build artifacts |
|
| Backup/restore tool configs |
|
--deep-clean removes Go module/build cache, Cargo registry, pip/pipx/npm/gem caches, orphaned pipx venvs, stale symlinks, and log files. Add --remove-deps to also purge Rustup toolchains.
MCP Server (AI Integration)
MCP (Model Context Protocol) is an open standard that lets AI assistants use external tools. This project includes an MCP server that gives any MCP-capable AI (Claude Code, Claude Desktop, Cursor, etc.) full read access to the 670+ tool registry — plus the ability to check installs, recommend profiles, and execute tools. The AI becomes an interactive partner for ethical hacking: it knows every tool, which ones you have installed, and can run them for you.
What the AI can do
Tool | What it does |
| List/filter all 670+ tools by module, method, or install status (includes URLs) |
| Check if a tool is installed (5 detection strategies) |
| Full details: method, module, URL, install/update/remove commands |
| Deep-dive a module: all tools, install status, which profiles use it |
| See every tool a profile installs, grouped by module |
| Curated tool recommendations for 14 CTF challenge categories |
| Bug bounty tool recommendations for 7 target types with methodology and common vulns |
| Companion-first solve assistant for an authorized target — classifies the target/finding, returns triage gates, recommends skills, picks tools from all modules/profiles, and guides step-by-step; opt-in |
| Map a CVE id or nickname (e.g. |
| Natural-language → profile/module/tool recommendation |
| All 14 profiles with tool counts and install commands |
| Execute installed tools safely (sanitized args, network policy, rate limiting, audit logging). Supports remote execution via SSH |
| Pipe tools together safely without shell ( |
| Explicit, unsandboxed Python/Bash execution opt-in. Supports per-script venv selection |
| Add, remove, list, and test SSH remote hosts for remote tool execution |
The MCP client can query every tool and its install state, chain governed tool calls, parse the output, and pivot on what it finds. Script execution requires a separate opt-in.
External recon → attack surface (needs CYBERSEC_MCP_ALLOW_EXTERNAL=1, authorized scope only)
"Enumerate the attack surface for target.com and flag anything exploitable" — fans out
amass/subfinder→ resolves and probes withhttpx→ fingerprints withwhatweb→ runsnucleitemplates → content-discovery withffuf, then ranks hosts by exposure and proposes next steps"Found an open redirect on
/go?url=— weaponize it" — verifies withcurl, then builds an SSRF / OAuth-token-theft PoC and probes for an exploitable callback
Web exploitation
"Confirm and exploit the SQLi on the login endpoint" —
sqlmapto confirm and dump (destructive--os-shell/--os-cmdare policy-blocked), thenrun_scriptto automate the auth bypass and pull just enough for a PoC"GraphQL introspection is on — map it and hunt IDOR" — pulls the schema, generates queries, fuzzes object IDs, and diffs authenticated vs unauthenticated responses
Active Directory / internal
"Low-priv creds on 10.10.0.0/24 — find a path to Domain Admin" — collects with
bloodhound, kerberoasts withimpacket(GetUserSPNs.py), cracks the TGS inhashcat, then validates lateral movement withnetexec— all over the Kali VM via SSH"Check for DCSync rights and dump if the path exists" — enumerates replication ACLs, then runs
secretsdump.pyagainst the DC
Binary exploitation & reversing
"Build a ret2libc exploit for this 64-bit binary" — triages with
checksec/readelf, finds gadgets withROPgadget, leaks libc via aputs@pltcall, then writes the fullpwntoolschain invenv="pwntools"and pops a shell locally"Recover the algorithm from this stripped binary" —
objdump/radare2disassembly piped into targeted analysis, then arun_scriptreimplementation to verify behavior
Crypto
"Break this RSA — small
e, several ciphertexts" — detects the attack (Håstad / common-modulus / Wiener) and solves it withpycryptodome+sympyin a venv, returning plaintext"This JWT is HS256 with a weak key" — cracks the signing secret and forges an admin token
Blue team · detection engineering
"Write a Sigma rule for this technique and convert it to my SIEM" — authors the rule and renders it for the target backend (Splunk / Elastic) via
sigma-cli"Hunt these Windows event logs for lateral movement" — runs
chainsawover the EVTX with Sigma rules, then summarizes hits by host and timeline"Build YARA rules from these samples and scan the tree" — generates
yarasignatures and runs them recursively
DFIR · malware triage
"Timeline this memory dump" — sweeps
volatility3plugins (pslist,netscan,malfind) and chains them into one narrative"Hunt for C2 beaconing in this pcap" —
tshark/tcpdumpextraction →suricatarules → flags periodic callbacks"Statically triage this suspicious file" —
file→strings→capa/yara, then extracts IOCs for enrichment
Cloud · containers · ops
"Audit this AWS account for public S3 and risky IAM" — runs
prowler/scoutsuiteand surfaces only the high-severity findings"Scan this image and k8s manifests before deploy" —
grypeimage scan pluskubescapeconfig checks"What's my redteam coverage — and fix the gaps" — diffs
get_profile_tools("redteam")against install status and emits the exact install commands
Mobile · wireless · blockchain
"Static-analyze this APK for secrets and insecure storage" —
apktool/jadxdecompile → MobSF-style checks, then greps for keys and endpoints"Audit this Wi-Fi capture" — parses the handshake and runs
aircrack-ng/hashcatagainst it"Review this Solidity contract for reentrancy" — runs
slither/mythriland explains the findings
run_tool and run_pipeline are argument-sanitized, network-policed, rate-limited, and
audit-logged. run_script is off by default because enabling it is a full-code-execution
opt-in with the MCP server user's filesystem and network permissions; the external-target
policy does not sandbox scripts. Destructive flags (--os-shell, -rf, --exploit, …)
are blocked in the governed tool path. Use only against systems you are authorized to test.
Quick Start
Requires uv. Claude Code can use the tracked project .mcp.json directly. It runs the MCP server over stdio with scripts and external network targets disabled by default:
{
"mcpServers": {
"cybersec-tools": {
"command": "uv",
"args": ["run", "--directory", "mcp_server", "fastmcp", "run", "server.py", "--transport", "stdio", "--no-banner"],
"env": {
"CYBERSEC_MCP_ALLOW_EXTERNAL": "0",
"CYBERSEC_MCP_ALLOW_SCRIPTS": "0"
}
}
}
}Restart Claude Code. The 15 tools appear in /mcp.
Other MCP clients (Codex, Cursor, local LLMs)
MCP is an open standard, so the same stdio server works with any MCP-capable client. From the repo root the launch command is:
uv run --directory mcp_server fastmcp run server.py --transport stdio --no-banner--directory mcp_server is relative to the working directory. If a client may start
the server from a subdirectory, use the root-aware launcher from the repo root:
bash scripts/mcp-launch.shFrom outside the repository, use the launcher's absolute path:
bash /path/to/cybersec-toolkit/scripts/mcp-launch.shCodex — a project
.codex/config.tomlis included (resolves the Git root first so it works from any subdirectory). Codex's primary config is~/.codex/config.toml; if the project file isn't picked up, copy the[mcp_servers.cybersec-tools]block into your home config.Cursor / Continue / Cline / Goose — add the same launch command in the client's MCP settings UI or config file (use an absolute path if the client's working directory isn't the repo root).
LM Studio (≥0.3.17) — LM Studio is itself an MCP host, no bridge needed. Add the server to its
mcp.json(Cursor notation, samemcpServersshape as.mcp.json) using an absolute path or the git-root wrapper, since LM Studio's working directory isn't the repo root. Using MCP via LM Studio's API requires ≥0.4.0 and an MCP-capable endpoint such as/api/v1/chator/v1/responses.Ollama — Ollama is a model runtime, not an MCP host. Put an MCP-capable agent in front of it (e.g. Kit) and point it at the launch command above.
Other local LLMs — a bare model does not speak MCP on its own. Run it behind any MCP-capable host (LM Studio, Cline, Continue, Goose, Kit, or Open WebUI via an MCP→OpenAPI bridge like
mcpo) and point that host at the launch command above.
Security note: start with just this one server. It already enforces argument sanitization, network allowlists, rate limiting, and audit logging, and ships with script execution and external targets disabled by default — keep those off unless you have an authorized scope, and prefer hosts that support human-in-the-loop tool approval.
Vendor-neutral repo instructions live in AGENTS.md (read natively by Codex
and many agentic tools); Claude Code reads CLAUDE.md.
Connect from WSL (e.g. Kali Linux)
The MCP server runs over stdio, so it works from any environment that Claude Code can spawn. To use tools installed inside WSL:
{
"mcpServers": {
"cybersec-tools": {
"command": "wsl",
"args": [
"-d", "kali-linux",
"bash", "-lc",
"cd /path/to/cybersec-toolkit/mcp_server && uv run fastmcp run server.py --transport stdio --no-banner"
]
}
}
}Connect from Docker
{
"mcpServers": {
"cybersec-tools": {
"command": "docker",
"args": [
"run", "-i", "--rm",
"-e", "CYBERSEC_MCP_ALLOW_EXTERNAL=0", "-e", "CYBERSEC_MCP_ALLOW_SCRIPTS=0",
"--entrypoint", "bash", "cybersec-toolkit",
"-c",
"cd /opt/cybersec-toolkit/mcp_server && uv run fastmcp run server.py --transport stdio --no-banner"
]
}
}
}Script Execution
run_script lets the AI write and execute Python or Bash scripts. It requires
CYBERSEC_MCP_ALLOW_SCRIPTS=1, is not OS-sandboxed, and is not constrained by
CYBERSEC_MCP_ALLOW_EXTERNAL. Enabling it grants scripts the same filesystem and network
permissions as the MCP server process. Review generated code and scope before opting in:
{
"mcpServers": {
"cybersec-tools": {
"command": "uv",
"args": ["run", "--directory", "mcp_server", "fastmcp", "run", "server.py", "--transport", "stdio", "--no-banner"],
"env": {
"CYBERSEC_MCP_ALLOW_SCRIPTS": "1",
"CYBERSEC_MCP_ALLOW_EXTERNAL": "0"
}
}
}
}Venv Support
Python libraries have no console scripts, so pipx cannot install them. They go
into named venvs under ~/.ctf-venvs/ instead, and the venv parameter picks
the interpreter per script.
./install.sh --module crypto creates ~/.ctf-venvs/crypto with
pycryptodome, sympy, gmpy2, numpy, z3, fpylll (+cysignals, which
fpylll needs at import time but does not declare) and cypari2 — the set CTF
crypto actually reaches for: lattice reduction, PARI point counting, custom
constructions. The AI then runs run_script(code, venv="crypto").
Some packages (e.g. pwntools) additionally require an older Python:
# One-time setup: create a venv with pwntools
python3.12 -m venv ~/.ctf-venvs/pwntools
~/.ctf-venvs/pwntools/bin/pip install pwntools z3-solverThe AI then uses run_script("from pwn import *; ...", venv="pwntools") automatically.
The default MCP environment contains FastMCP and the Python standard library. Install the
optional helper set with cd mcp_server && uv sync --extra ctf-core before using
requests, pycryptodome, beautifulsoup4, Pillow, or NumPy without a named venv.
Set CYBERSEC_MCP_VENVS_DIR to override the default ~/.ctf-venvs/ location.
Manual Scripts
The manual_scripts/ directory stores persistent scripts that the AI creates for the user — complex exploits, multi-step solvers, parsers, protocol helpers, and reusable tools that should not disappear after one execution. In companion mode the AI proposes the script, then writes and runs it only after approval or a clear "continue". In opt-in autonomous mode, if normal tools and pipelines stop making progress and programming logic is the smallest reliable path, the AI can write, save, and run scoped helpers via run_script. Simple recon/HTTP commands such as curl stay as run_tool calls; scripts are for logic that tools cannot express cleanly.
Test the Server
cd mcp_server && uv run fastmcp dev server.pyThis opens a web-based MCP Inspector for interactively testing each tool.
See mcp_server/README.md for Claude Desktop setup and full documentation.
Help wanted
This project is large by design, and community help is very welcome.
Useful contributions include testing installs on different distros, adding missing tools, fixing package mappings, improving MCP workflows, writing example use cases, tightening documentation, and reporting rough edges from real CTF, lab, bug bounty, pentest, DFIR, or defensive workflows.
Open an issue for bigger changes, or send a focused PR for small fixes. See
CONTRIBUTING.md for the validation checklist.
Development
Public contributor docs live in CONTRIBUTING.md. The quick-start is:
git clone https://github.com/26zl/cybersec-toolkit.git && cd cybersec-toolkit
make setup # submodules + MCP deps + skill mirror (Codex-ready)
make check # core local checks — shellcheck, validators, bats, ruff, pytestmake help lists every shortcut (lint, test, validate, curate, sync-skills,
check-skills, mcp, docker, …); the raw command each target runs is in
CLAUDE.md / AGENTS.md.
The MCP Python project uses uv with [tool.uv] exclude-newer = "3 days".
New dependency resolutions intentionally ignore packages uploaded in the last
72 hours to reduce dependency-confusion and compromised-release blast radius.
Dependabot uses the matching 3-day cooldown, and the weekly uv update workflow
inherits the same policy.
This release-age policy is scoped to project bootstrap/runtime dependencies only: MCP Python packages, CI actions, and the Docker build inputs needed to get the project running. It does not delay or pin the cybersecurity tools installed from the registry; those tools intentionally follow their module installer and update flow so operators can get current scanners, exploits, signatures, and research utilities.
Run shell tests on Linux or WSL. Native Windows checkouts can rewrite the vendored Bats submodules with CRLF and cause $'\r' failures.
Agent Skills
This repo ships 872 Agent Skills under the canonical .claude/skills/ source tree. Claude Code discovers that tree directly; scripts/sync-skills.sh generates the portable .agents/skills/ mirror for compatible clients. Skills activate on demand based on the task — they don't permanently consume context. Of these, 31 are project-authored and 841 are curated from open-source projects — each attributed below and in THIRD_PARTY_NOTICES.md.
10 project-specific developer skills (
add-tool,validate-all,module-scaffold,writeup-template,mcp-sync-check,security-wordlists,security-payloads,guided-assessment,skill-dependency-audit,skill-curation-router)4 cross-skill coordinators (
finding-triage,security-comms,authorization-gate,evidence-hygiene) that other skills route findings, communication, authorization checks, and evidence sanitization through7 coverage gap anchor skills (GRC/privacy, AI/LLM security, IoT/embedded/hardware, mainframe, telecom/5G, SAP/ERP, supply-chain/product security)
1 coding-agent workflow skill from multica-ai/andrej-karpathy-skills (MIT)
6 CTF methodology skills (
ctf-crypto,ctf-pwn,ctf-web,ctf-rev,ctf-forensics,ctf-stego)4 bug bounty methodology skills (
bounty-recon,bounty-web,bounty-api,bounty-mobile)10 bug bounty workflow skills from BugHunter (claude-bug-bounty) (MIT)
58 offensive methodology skills from SnailSploit Claude-Red (MIT)
14 code audit skills from Trail of Bits (CC-BY-SA 4.0)
754 operational how-tos from the community project mukul975/Anthropic-Cybersecurity-Skills (Apache 2.0)
4 high-level workflows from Transilience (MIT)
Source and category index in .claude/skills/SKILLS.md.
Install as a Claude Code plugin
The repo doubles as a plugin marketplace (.claude-plugin/), so you can pull the whole skill library into any project without cloning manually:
/plugin marketplace add 26zl/cybersec-toolkit
/plugin install cybersec-toolkit@cybersec-toolkitThe plugin exposes the skills under .claude/skills/ (declared via the skills field in .claude-plugin/plugin.json). The MCP server is configured separately via .mcp.json — see MCP Server.
Use these skills across supported clients
Agent Skills are Markdown plus optional helper files, but discovery and activation are
client features rather than MCP features. Claude Code, OpenCode, Codex, Gemini CLI,
GitHub Copilot, Cursor, Cline, Goose, Hermes, and OpenClaw support Agent Skills through
different paths or settings. scripts/sync-skills.sh mirrors the repository's
.claude/skills/ source into .agents/skills/ for clients that use that location:
scripts/sync-skills.sh # mirror .claude/skills/ -> .agents/skills/
scripts/sync-skills.sh --check # report drift without writing (exit 1 if out of date)make setup (see Development) runs this mirror step for you.
.claude/skills/ stays the single source of truth; .agents/skills/ is generated and
git-ignored, so re-run the sync after editing a skill. Continue and LM Studio can use the
MCP server, but neither client currently documents automatic discovery of this
repository's SKILL.md files. A standalone SKILLS.md index would only be manual
context; it would not add on-demand activation. Use Continue rules/prompts or provide
selected skill content as context in those clients. See
docs/AI_CLIENTS.md for the client-specific paths and limits.
scripts/validate_claude_skills.py checks skill metadata, index counts, curation freshness, and helper-script syntax for Python and PowerShell. Vendored skill helper scripts can also have optional task-specific Python imports. Those imports are declared in .claude/skills/requirements.txt, generated from the helper-script import inventory:
python3 scripts/audit_skill_dependencies.py --check-declared
python3 scripts/audit_skill_dependencies.py --write-requirements
python3 -m pip install -r .claude/skills/requirements.txtSkill ranking/curation lives in .claude/skills/CURATION.md and .claude/skills/curation.json.
Regenerate it with:
python3 scripts/curate_claude_skills.py --writeTool Locations
Non-system tools (pipx, Go, Cargo, git, binary releases) are installed to /usr/local/bin/ on Linux and $PREFIX/bin on Termux. System packages go to their default location (/usr/bin/).
Method | Binary location (Linux) | Binary location (Termux) | Data location |
pipx |
|
|
|
Go |
|
|
|
Cargo |
|
|
|
Git repos |
|
|
|
Binary releases |
| Skipped (glibc incompatible with Bionic) | -- |
Docker Images (optional)
Only used with --enable-docker. If Docker is not installed and --enable-docker is set, the installer exits with an error asking you to install Docker first.
Image | Module | Flag | Description |
| misc |
| Empire C2 |
| misc |
| SpiderFoot OSINT |
| web |
| BeEF browser exploitation |
| mobile |
| MobSF |
| enterprise |
| BloodHound CE |
| blockchain |
| Echidna smart contract fuzzer |
| blueteam |
| TheHive IR platform |
| blueteam |
| Cortex analysis |
| blueteam |
| Zeek network analysis |
| blueteam |
| Zircolite EVTX detection |
| llm |
| PentAGI autonomous pentesting |
Distro Support
Debian/Ubuntu/Kali is the primary target -- the full 670+ registry is available there, and it has the strongest test coverage. Fedora/Arch/openSUSE have ~10-20 packages auto-skipped (distro-specific) and are covered by the integration workflow. WSL and ARM are supported in practice, but they do not yet have dedicated CI jobs. Windows and macOS are detected and blocked with a clear error message.
Platform | Status |
WSL | Supported for installs and MCP usage. Wireless module auto-skipped (no hardware access) and kernel-level packages filtered. Validate release-critical changes in a local WSL distro because there is no dedicated CI job yet. See the Windows Defender note below if you keep the repo on a Windows-mounted path. |
ARM (aarch64/armv7) | Supported with automatic skips for x86-only binary releases and build-from-source tools. No dedicated CI job yet. |
Termux (Android) | Supported. No dedicated CI job yet. No sudo needed. Docker/snap/binary releases/build-from-source skipped (Bionic incompatible). |
Windows (native) | Not supported. Use WSL. |
macOS | Not supported. Use Docker container. |
Other Linux distros | Anything without a supported package manager ( |
Supply Chain Model
This installer downloads and runs code from the internet. On Linux it runs as root (sudo); on Termux it runs in the app's user sandbox (no root).
System packages: GPG-signed by your distro's repos (apt, dnf, pacman, zypper, pkg)
pipx/Go/Cargo/Gem/npm: Downloads from registries (no signature verification, pipx isolated in venvs)
Binary releases: SHA256 verified when checksum file available, hard-fails on mismatch. Use
--require-checksumsor the--productionpreset to also fail when no checksum file is published. Warning:--fastdisables all checksum verification, including for releases that do publish checksums — do not use in production or CI environmentsMCP Python dependencies: Resolved by
uvwith a 3-dayexclude-newerwindow; Dependabot also waits 3 days before proposing dependency PRs. This does not apply to installed security toolsGo SDK: SHA256 verified against go.dev published hashes when available; warns on API failure, hard-fails with
--require-checksumsGit repos: Cloned at HEAD, deps installed in isolated venvs (setup.py is NOT executed)
Build from source: Runs
make(as root on Linux) -- review what you're buildingToolkit Docker build: Ubuntu and uv sources are digest-pinned, while apt packages resolve from the current signed Ubuntu repositories; rebuilds are not bit-for-bit reproducible
Optional tool images: Pulled by mutable tags rather than digests, including several explicit
latesttags.--productiondoes not pin or verify these images
The .versions file logs what was installed and when.
Known Limitations
Checksum verification is best-effort by default. Some upstream releases do not publish checksums or signatures, so downloads may proceed without cryptographic verification in those cases. Use --production (or --require-checksums) to fail closed when no checksum file is available. This preset does not pin Git clones, language-package registries, or build-from-source tools; those still track their upstream release channels. Go SDK downloads are SHA256-verified against go.dev when the API is reachable; strict checksum mode hard-fails if it is not.
--fast skips all checksum verification for binary releases (both SHA256 checks and the missing-checksum warning), including releases that do publish checksums. This trades integrity verification for speed. It is mutually exclusive with --require-checksums and --production. Do not use --fast in CI pipelines or environments where supply-chain integrity matters.
Windows Defender false positives
If you clone this repo onto a Windows-mounted path (e.g. C:\Users\<you>\... or any folder visible from Windows while you work in WSL), Microsoft Defender and other AV products may quarantine individual files. Defensive content -- IOC reference tables, sample obfuscated PowerShell, malware analysis snippets, exploit PoC strings inside .claude/skills/, writeups/, and parts of mcp_server/ -- contains the same byte-strings real attackers use, so signature- and ML-based engines can flag them. Common detections include Trojan:Script/Wacatac.B!ml, HackTool:*, and generic Heur.* verdicts.
These are false positives in the context of a security toolkit. To work with the repo on Windows you have three options:
Add a Defender exclusion for the repo folder (recommended for a personal dev box). Run from an elevated PowerShell:
Add-MpPreference -ExclusionPath "C:\path\to\cybersec-toolkit"Restore individual files from quarantine via Windows Security -> Virus & threat protection -> Protection history -> "Allow on device". Per-file, but does not prevent re-detection on update.
Keep the repo inside the WSL filesystem (e.g.
~/cybersec-toolkitin your distro). Defender does not scan WSL2's vhdx by default, so detections do not occur.scripts/sync-wsl.shalready does this for the MCP server subdirectory.
Files removed by Defender will appear as D in git status. The content is preserved in git history; restore with git checkout -- <path> once an exclusion is in place.
License
MIT License -- see LICENSE for details.
This repository also redistributes third-party components under their own terms,
including some under CC-BY-SA-4.0 (ShareAlike, not relicensable to MIT). If you
redistribute or adapt bundled content, follow those terms — see
THIRD_PARTY_NOTICES.md.
For contribution workflow and review expectations, see CONTRIBUTING.md.
For community behavior expectations, see CODE_OF_CONDUCT.md.
For vulnerability reporting, see SECURITY.md.
Disclaimer
This project is provided for educational, defensive, and explicitly authorized security testing only. Use it only on systems you own or have written permission to assess, and follow all applicable laws, rules of engagement, third-party tool licenses, and service terms.
The toolkit includes dual-use offensive and defensive tools. Some commands can scan networks, execute exploits, modify systems, or trigger security alerts. MCP/AI integrations are guarded by safety policies, but users remain responsible for reviewing scope, prompts, commands, and outputs before running actions.
This repository does not redistribute the security tools themselves; it installs publicly available, open-source projects from their official upstream sources at install time. It is intended for lawful, authorized use only.
The project is provided "as is", without warranty. Maintainers are not responsible for misuse, damage, data loss, service disruption, or legal consequences from using this toolkit.
Third-party content is bundled under its original license — see
THIRD_PARTY_NOTICES.md.
Available Tools
15 toolscheck_installedA
Check if a specific cybersecurity tool is installed on the system.
Uses multiple detection strategies: .versions tracking, PATH lookup, pipx binary name fallback, /opt directory check, and docker image check.
When host is provided, checks installation on the remote host via SSH using 'which '.
| Name | Required | Description | Default |
|---|---|---|---|
| host | No | Optional remote host name (as configured via manage_remote_hosts). | |
| tool_name | Yes | Name of the tool to check (as listed in tools_config.json). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full disclosure burden and largely meets it: it enumerates five detection strategies (.versions, PATH, pipx fallback, /opt, docker image) and discloses the SSH 'which <binary>' behavior for remote hosts. This gives the agent accurate expectations about scope and fallback resolution, though it doesn't mention potential slowness of the docker check or the absence of side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, tightly organized: purpose first, then detection strategies in a compact enumeration, then the remote-host behavior. Every sentence carries information and none repeats the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 2-parameter tool with a documented output schema, the description covers what the tool does, how it detects, and how it behaves remotely. The only real gap is the lack of when-to-use guidance relative to siblings, which is already penalized under usage_guidelines; overall the definition is complete enough for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and both parameters already carry descriptions, so the baseline is 3. The description adds value beyond the schema by explaining how tool_name is resolved (multi-strategy lookups that may succeed outside PATH) and by enriching host with concrete behavior (SSH + 'which <binary>'), justifying a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence states a specific verb ('Check') with a specific resource ('if a specific cybersecurity tool is installed on the system'), and the ensuing detection-strategies sentence sharpens what 'check' means. The purpose is inherently distinct from sibling tools like list_tools, get_tool_info, and run_tool, so an agent can select it without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes the primary use case obvious ('check if installed') and explains the remote-host variant, but it never names alternatives or states when not to use this tool—for example, it doesn't advise verifying installation before run_tool or point to recommend_install for missing tools. Usage is implied by the purpose statement rather than explicitly guided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_cve_infoA
Map a CVE to the toolkit's tools, skills, and modules, plus live-lookup commands.
Local-first and deterministic: accepts a CVE id (e.g. "CVE-2021-44228") or a common nickname (e.g. "log4shell", "eternalblue", "zerologon", "printnightmare") and returns the curated exploitation skills, mapped registry tools with install status, and relevant modules.
For live CVSS / CISA KEV / EPSS data it returns ready-to-run run_tool("curl", ...) commands rather than fetching itself — those hit external hosts and are subject to the CYBERSEC_MCP_ALLOW_EXTERNAL policy. Always clear the authorization-gate skill before testing.
| Name | Required | Description | Default |
|---|---|---|---|
| cve | Yes | A CVE id (CVE-YYYY-NNNN) or a known vulnerability nickname. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It comprehensively explains that the tool is local-first and deterministic, does not fetch external data itself, returns ready-to-run curl commands instead, is subject to the CYBERSEC_MCP_ALLOW_EXTERNAL policy, and requires clearing the authorization-gate skill before testing. This is far beyond minimal transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is tightly structured: a one-line purpose, then input/output behavior, then critical caveats about external data and authorization. Every sentence adds meaningful information without redundancy or filler, and the most important constraints are front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has one parameter, an output schema, and moderate complexity, the description covers all essential operational context: what results are returned, local-first deterministic behavior, external-data handling via curl commands, policy dependency, and the authorization gate. An agent has enough guidance to invoke the tool correctly and interpret its outputs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already fully describes the single 'cve' parameter with 100% coverage. The description adds valuable concrete examples (CVE-2021-44228, log4shell, eternalblue, zerologon, printnightmare) and reinforces accepted formats, making parameter usage clearer than the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Map a CVE to the toolkit's tools, skills, and modules, plus live-lookup commands.' It clearly distinguishes this from sibling tools by centering on a CVE identifier/nickname and the mapping output, rather than generic tool/module info or CTF/bounty suggestions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when to use this tool: when you have a CVE id or known nickname and want curated exploitation skills, mapped tools, and relevant modules. It does not explicitly state when not to use it or name alternative tools, but the local-first deterministic behavior and live-lookup command pattern make the intended use apparent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_module_infoA
Get full details about a module: description, all tools, and management commands.
| Name | Required | Description | Default |
|---|---|---|---|
| module | Yes | Module name (e.g. "web", "pwn", "forensics"). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It does disclose that the tool returns module details and what categories those details fall into, implying a read-only informational operation. However, it does not address error behavior, module existence requirements, or side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that states the main action and enumerates the key result categories without filler. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-parameter getter with a full input schema and an output schema, the description is largely sufficient. The only minor gap is that 'management commands' is slightly vague and there is no note about invalid or missing modules, but the overall context is complete enough for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema already fully documents the 'module' parameter. The description adds no additional param-level semantics beyond restating that the tool concerns modules, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get') with a clear resource ('full details about a module') and enumerates the returned content: description, all tools, and management commands. This clearly distinguishes it from sibling tools like get_tool_info, get_cve_info, and list_tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool should be used when someone needs comprehensive module-level details, but it does not explicitly state when to prefer this over alternatives such as get_tool_info or list_tools. No exclusions or conditional guidance are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_profile_toolsA
List every tool that a specific profile would install.
Given a profile name, returns the complete list of tools grouped by module, with install status for each. This lets you see exactly what you get before running the install command.
| Name | Required | Description | Default |
|---|---|---|---|
| profile | Yes | Profile name (e.g. "ctf", "redteam", "web", "full"). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of disclosing behavior, and it does so well: it conveys that this is a read-only preview ('before running the install command'), that it returns a 'complete list,' and that results are 'grouped by module' with 'install status for each.' The key safety-relevant trait — non-mutating — is clearly communicated even without annotations. It does not cover edge-case behavior like invalid profile names, but that is minor for a list operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each earning its place: a front-loaded verb+resource statement, a behavioral detail sentence (grouping by module and install status), and a use-case sentence that frames when to call it. There is no repetition of schema content and no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple — one fully-documented required parameter and an output schema present, so return-value details are already specified elsewhere. The description adds the grouping behavior, install-status semantics, and preview framing. The only gap is undefined behavior for unknown profile names, which is minor for a non-mutating list operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%; the profile parameter already carries a description with concrete examples ('ctf', 'redteam', 'web', 'full'). The description's 'Given a profile name' merely reinforces the schema text and adds no new semantic detail, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence, 'List every tool that a specific profile would install,' states a specific verb (list) and a clear resource (tools for a given profile). The phrase 'before running the install command' frames it as a preview, which distinguishes it from execution-oriented siblings like run_tool and run_pipeline, and from check_installed which would report actual installation state rather than planned contents.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear when-to-use instruction: 'This lets you see exactly what you get before running the install command.' This situates the tool in the workflow precisely. However, it does not explicitly name alternatives or state when not to use it, such as contrasting with check_installed to clarify that this shows planned rather than current installation state.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_tool_infoA
Get detailed information about a cybersecurity tool.
Returns the tool's install method, module, URL, installation status, module description, and management commands (install, update, remove).
| Name | Required | Description | Default |
|---|---|---|---|
| tool_name | Yes | Name of the tool to look up. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden, and 'Get/Returns' clearly signals a read-only lookup with no side effects. It also discloses the exact return content, including installation status and management commands, which goes beyond a generic 'get info' claim.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences: the first states the action and object, the second enumerates the returned fields. There is no fluff or repetition, and the key purpose is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter lookup with an output schema, this is complete enough to invoke correctly. It omits only explicit alternative routing and edge-case behavior (e.g., unknown tool names), which keeps it from being fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: the single param tool_name is already documented as 'Name of the tool to look up.' The description adds no new parameter meaning, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clear verb 'Get' + specific resource 'detailed information about a cybersecurity tool', with enumerated fields (install method, module, URL, installation status, management commands) that distinguish it from sibling lookup tools like list_tools or check_installed.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The purpose is inferable: use when you need detailed tool metadata and management commands. However, there is no explicit when-to-use guidance or comparison against siblings (e.g., check_installed, list_tools), so the agent must infer the right choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
guided_assessmentA
Plan, guide, or autonomously solve a security task over the MCP toolchain.
An orchestrator on top of the registry, advisors, install checks, audit logging, and execution policy. Bootstrap commands use the governed execute_tool() path, so target scope, external-network, shell-injection, and blocked-flag checks apply.
By DEFAULT it auto-detects the right workflow + tools for the problem (workflow/ target_type="auto") and acts as a companion: it returns classification, triage gates, recommended skills, reporting next steps, a plan, tool install status, next actions, and the full MCP toolchain surface WITHOUT auto-running commands in this initial call. The agent can then run tools step by step as the user approves. The heaviest mode (autonomous) starts the auto-solver contract: it bootstraps triage, then the client agent continues with the full MCP toolchain (registry/advisors/install checks/run_tool/run_pipeline and separately gated run_script). When registry tools and pipelines are not enough, autonomous mode may create, save, and run scoped helper scripts for the user, persisting reusable ones under manual_scripts/. Simple recon/HTTP commands such as curl remain run_tool calls.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | "companion" (default) or "autonomous" (opt-in). | companion |
| target | Yes | URL, hostname/IP, or local file path to assess. | |
| finding | No | Optional short finding summary to classify for triage/report routing. Raw finding text is used locally but not echoed in the result. | |
| workflow | No | "auto" (default — inferred), "bounty", "ctf", or "generic". | auto |
| intensity | No | "low" (default) or "medium". Medium may include low-volume nmap. | low |
| max_steps | No | Maximum number of bootstrap steps autonomous mode auto-executes. | |
| target_type | No | "auto" (default — inferred from the target) or an explicit type: bounty type (web_app/api/cloud/network/iot/mobile_app) or CTF category. | auto |
| authorization_confirmed | No | Required before any network step executes. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden and does so well. It discloses the governed execute_tool() path, safety checks, default no-autorun behavior, autonomous auto-execution, and the possibility of creating, saving, and running helper scripts persisted under manual_scripts/. This is outstanding transparency for a mutable, potentially side-effect-heavy tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than average but dense and informative; it earns its length given the tool's complexity. It front-loads the core purpose and then layers mode behavior, safety, and side effects. Minor redundancy around 'MCP toolchain' and 'agent' prevents a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex orchestrator with 8 parameters and no annotations, the description is remarkably complete. It covers default and heavy modes, the step-by-step companion workflow, execution policy safeguards, script persistence, and the boundary between run_tool and helper scripts. Since an output schema exists, return-value detail is not required here.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds meaningful context beyond the schema by explaining that workflow/target_type default to 'auto' and are auto-detected, that mode controls whether the initial call runs commands, and that max_steps bounds autonomous execution. This enriches several parameters without needing to restate all of them.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies an orchestrator that plans, guides, or autonomously solves security tasks over the MCP toolchain. It distinguishes itself from executable siblings by positioning itself as the planning/triage layer on top of run_tool, run_pipeline, run_script, and the registry/advisors.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives strong usage context: default companion mode returns a plan without executing, while autonomous mode bootstraps and continues into the toolchain. It also notes that simple recon/HTTP commands like curl remain run_tool calls. It stops short of explicitly naming conditions for every sibling alternative, but the guidance is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_profilesA
List all 14 available installation profiles with details.
Each profile is a curated set of modules targeting a specific use case. Shows module count, tool count, and install command for each profile. Profiles range from 'osint' (2 modules) to 'full' (18 modules, 670+ tools).
Returns: All profiles with descriptions, module lists, tool counts, and install commands.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It makes the read-only nature clear with 'List' and explicitly discloses what is returned: profiles with descriptions, module lists, tool counts, and install commands. It does not mention error cases, but for a zero-parameter listing tool, no significant hidden behavior is omitted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the main purpose and stays reasonably compact. There is minor redundancy between 'Shows module count, tool count, and install command' and the later 'Returns' block, but the additional context about profile range and use cases earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a low-complexity tool with no parameters and an existing output schema. The description sufficiently covers what the tool does and what it returns, including a helpful example of the range from 'osint' to 'full'. Nothing essential is missing for an agent to select and call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters and schema description coverage is 100%, so the baseline is 4. There are no parameter choices to explain, and the description appropriately focuses on output content rather than parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'List all 14 available installation profiles with details.' It clearly distinguishes this from sibling tools like list_tools by naming profiles as the resource, not tools, and emphasizes 'each profile is a curated set of modules.'
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool—when you need an overview of installation profiles, their module counts, tool counts, and install commands. However, it does not explicitly mention alternatives such as get_profile_tools or list_tools, nor does it state when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_toolsA
List and filter the 670+ cybersecurity tools in the registry.
Returns the tools drawn from tools_config.json — the same registry the installer and the advisors share — with the total count, the filters still available to narrow the results, and one entry per tool. Combine the filters to scope the list: module="web" for web tools, method="pipx" for Python-packaged tools, installed_only=True for only what is on this host. Start here to discover what exists before check_installed or get_tool_info.
| Name | Required | Description | Default |
|---|---|---|---|
| method | No | Filter by install method. One of apt, pipx, go, cargo, gem, git, binary, docker, snap, special, source, npm. | |
| module | No | Filter by module (e.g. "web", "pwn", "forensics"). 18 modules available. | |
| installed_only | No | If true, only return tools that are currently installed. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations supplied, the description carries the full transparency burden and meets it: it discloses the data source (tools_config.json), the shape of the result (total count, remaining filters, one entry per tool), and the fact that filters can be combined. This goes well beyond what the name or schema alone conveys.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with no filler: purpose, return composition, and usage examples are front-loaded. The closing pointer to sibling tools earns its place, and the filter examples are positioned where they are most useful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with three optional parameters and a full output schema, this description is complete. It covers what is returned, the source of the data, how filters work, and where it fits in the discovery workflow, leaving no missing information an agent would need to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value by providing semantic mappings such as 'pipx' meaning Python-packaged, clarifying installed_only as 'only what is on this host,' and explicitly noting that filters can be combined, which is not stated in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'List and filter the 670+ cybersecurity tools in the registry,' giving a specific verb and resource. It further distinguishes itself by noting the data comes from tools_config.json and by positioning itself as the place to start 'before check_installed or get_tool_info.'
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit when-to-use guidance ('Start here to discover what exists before check_installed or get_tool_info') and concrete filter examples such as module='web', method='pipx', and installed_only=True. It does not provide an explicit when-not-to-use rule or name a direct alternative for filtered detail, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_remote_hostsA
Add, list, test, or remove the SSH hosts that run_tool can target remotely.
Manages the remote-host registry that lets run_tool (and check_installed) run a tool on a remote Kali/Linux box over SSH instead of locally, so the tool only has to be installed on the remote. The action selects the operation: "list" shows every configured host; "add" registers or updates a host (needs name and hostname, plus optional user, port, ssh_key, and a tool_allowlist that restricts which tools may run there); "remove" deletes a host by name; "test" opens an SSH connection to confirm the host is reachable.
Connections use StrictHostKeyChecking=accept-new, so the key presented on the first connection is pinned in ~/.ssh/known_hosts and any later change is rejected. Verify that first fingerprint out-of-band for a host you do not control, or add the key to known_hosts before "test".
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Host name (required for add/remove/test). | |
| port | No | SSH port (default 22). | |
| user | No | SSH username (default "kali"). | kali |
| action | Yes | Operation to perform: "list", "add", "remove", or "test". | |
| ssh_key | No | Path to SSH private key (e.g. "~/.ssh/id_kali"). | |
| hostname | No | IP address or hostname of the remote machine (required for add). | |
| description | No | Human-readable description of the host. | |
| tool_allowlist | No | Comma-separated list of allowed tool names (e.g. "nmap,gobuster,sqlmap"). None means all tools allowed. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It thoroughly describes the SSH connection behavior: using StrictHostKeyChecking=accept-new, pinning the first key, and rejecting subsequent changes. It also warns about verifying fingerprints out-of-band, which is critical safety information for an agent to understand the tool's security implications.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and appropriately sized. It opens with a clear summary of the tool's function, then breaks down each action in a logical flow, and ends with important security details. No sentence is wasted; each contributes to either clarifying functionality or providing necessary warnings.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (8 parameters, 4 actions, security implications) and rich input schema, the description covers all essential aspects for correct usage. It explains the relationship with sibling tools, parameter requirements per action, and safety concerns. The output schema is provided, so return value details are not needed. The description is comprehensive enough for an agent to use the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
While schema description coverage is 100%, the description adds significant semantic value beyond the schema. It explains the role of name and hostname as required for specific actions, clarifies that tool_allowlist restricts which tools can run, and implies how parameters like port and user have defaults. Although the schema already documents each parameter, the description provides usage context that helps an agent choose and set parameters appropriately.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: managing the remote-host registry that enables run_tool and check_installed to operate over SSH. It uses a specific verb ('Add, list, test, or remove') and resource ('SSH hosts'), and differentiates itself from sibling tools by explaining its role in supporting remote execution.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use guidance by detailing each action ('list', 'add', 'remove', 'test') and their required parameters ('add' needs name and hostname; 'test' confirms connectivity). It also covers edge cases like tool_allowlist restrictions and provides clear context for when to use this tool vs. alternatives, such as run_tool for executing tools remotely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recommend_installA
Recommend which profile, modules, or individual tools to install.
Analyzes a natural-language description of what the user wants to do and recommends the best installation approach — from a full profile down to just a few individual tools. Avoids installing everything when only a subset is needed.
| Name | Required | Description | Default |
|---|---|---|---|
| task | Yes | Natural-language description of what the user wants to do. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It transparently states that the tool only recommends rather than installs, and it reveals a decision principle: it avoids over-recommending when a subset suffices. This goes beyond the tool name and provides useful behavioral context, though it does not mention any limitations such as reliance on an available installation catalog.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences with no filler. The first sentence states the core purpose, the second explains the mechanism, and the third adds a valuable behavioral nuance. Information is front-loaded and every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with a single parameter and an output schema, the description covers the input format, the recommendation scope, and the conservative behavior. It does not discuss prerequisites like needing an inventory of available tools or relationship to sibling tools, but these are not essential given the schema and output schema presence. Slightly more detail about what information the recommendation is based on would make it fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: the only parameter, task, is described as 'Natural-language description of what the user wants to do.' The tool description effectively repeats this same meaning. Since the schema already fully documents the parameter, a baseline of 3 applies; no additional semantic depth is added beyond restating the input.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Recommend which profile, modules, or individual tools to install.' It clearly states the tools scope from full profiles down to individual tools, and this differentiates it from specialized siblings like suggest_for_ctf or suggest_for_bounty. The purpose is unambiguous and not a tautology.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when to use it: when a natural-language description of the user's goal needs an installation recommendation. It also implies a useful condition ('Avoids installing everything when only a subset is needed') without explicitly naming alternatives or exclusions. It could be stronger by contrasting with suggest_for_ctf or suggest_for_bounty, but the usage context is evident.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_pipelineA
Execute a pipeline of tools, piping stdout from each step into stdin of the next.
Replaces shell piping (e.g. strings binary | grep flag) with a safe,
no-shell alternative. Each step is validated individually (allowlist,
argument sanitization, policy checks) before any process starts.
Each step's stdout and stderr are bounded to 200KB as they are read, and an
intermediate step's bounded stdout is what gets piped into the next step. If
any step hits that cap, the returned truncated flag is set and the final
stdout carries a truncation marker.
| Name | Required | Description | Default |
|---|---|---|---|
| host | No | Reserved for future use. Currently only local execution is supported. | |
| steps | Yes | List of dicts, each with 'tool' (required) and 'args' (optional) keys. Max 10 steps per pipeline. | |
| timeout | No | Global timeout for entire pipeline in seconds (default 120, max 300). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full transparency burden. It discloses per-step validation, allowlist/policy checks, 200KB stdout/stderr limits, the truncation flag, and the no-shell guarantee—substantial behavioral detail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose, then uses compact paragraphs for validation and truncation details. Every sentence contributes useful behavioral or usage information, with no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity and the absence of annotations, the description is strongly complete: it covers execution model, safety, and truncation behavior. The main remaining gap is failure semantics (e.g., what happens if a step exits non-zero), though the output schema may cover that.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already describes all three parameters with 100% coverage, so the baseline is 3. The description adds extra meaning by explaining how steps connect via stdin/stdout and how truncation is signaled, going beyond the raw schema without re-listing parameter syntax.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence states a specific action and resource: 'Execute a pipeline of tools, piping stdout from each step into stdin of the next.' This clearly distinguishes it from sibling tools like run_tool and run_script by emphasizing multi-step composition and pipe semantics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly identifies the intended use case: replacing shell piping like `strings binary | grep flag` with a safe, no-shell alternative. It does not explicitly name sibling alternatives or state when not to use it, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_scriptA
Write and execute a Python or Bash script, returning its output.
Writes the code to a temporary file, executes it via python3/bash, and returns stdout/stderr. The temp file is deleted after execution. Requires CYBERSEC_MCP_ALLOW_SCRIPTS=1. This is an explicit full-code execution opt-in: scripts are not OS-sandboxed and are not constrained by CYBERSEC_MCP_ALLOW_EXTERNAL.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | The script source code to execute. | |
| venv | No | Optional Python venv name from ~/.ctf-venvs/ (e.g. "pwntools"). Allows using a different Python with specific packages installed. Ignored for language="bash". If not set, uses the MCP server's Python. | |
| timeout | No | Maximum execution time in seconds (default 120, max 300). | |
| language | No | "python" (default) or "bash". | python |
| working_dir | No | Working directory for the script (default: system temp dir). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so thoroughly: it discloses temp-file creation, interpreter choice, stdout/stderr return, automatic cleanup, required environment variable, and lack of OS sandboxing. It also clarifies that the allow-external gate does not constrain this tool, which is exactly the behavioral context an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences with a front-loaded summary followed by essential behavioral and security details. No filler or redundant restatement of the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description, combined with a fully documented 5-parameter schema and an output schema, covers execution mechanics, cleanup, return content, security constraints, and opt-in requirements. Nothing critical is missing for an agent to call this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all five parameters in detail. The description adds global execution context but no per-parameter meaning beyond the schema, matching the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear verb-object statement ('Write and execute a Python or Bash script, returning its output') that identifies the exact operation and resource. It also distinguishes run_script from sibling tools by emphasizing full-code script execution via python3/bash rather than prebuilt tool or pipeline execution.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use the tool: when arbitrary Python or Bash code must be written and executed, with an explicit security opt-in. It does not explicitly name alternatives like run_tool or state when not to use run_script, so it misses the top tier, but the intended usage is unmistakable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_toolA
Execute an installed cybersecurity tool or system utility and return its output.
Runs tools from the 670+ registry as well as ~120 standard system utilities (strings, file, curl, grep, base64, xxd, jq, etc.) that are allowed without being in the registry. Arguments are sanitized to prevent shell injection. Timeout is clamped to 1-300s. Output is truncated at 200KB.
Network tools (including curl, wget, ping, etc.) are restricted to local/private targets by default. Set CYBERSEC_MCP_ALLOW_EXTERNAL=1 to allow external targets.
When host is provided, the tool is executed on the remote host via SSH. The tool does not need to be installed locally — only on the remote host.
| Name | Required | Description | Default |
|---|---|---|---|
| args | No | Command-line arguments as a string (e.g. "--version" or "-sV 10.0.0.1"). | |
| host | No | Optional remote host name (as configured via manage_remote_hosts). | |
| timeout | No | Maximum execution time in seconds (default 120, max 300). | |
| tool_name | Yes | Name of the tool to run (registry tool or system utility). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden, and it does exceptionally well: it discloses argument sanitization against shell injection, timeout clamping to 1-300s, output truncation at 200KB, network restrictions, and remote-host execution semantics. This is far beyond typical tool descriptions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the main purpose and then adds dense, relevant operational details. Every sentence contributes necessary information about allowed inputs, safety, limits, or remote behavior, with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a general execution tool with four parameters and an output schema, the description is complete: it covers what can be run, how arguments are handled, timeout and output limits, network restrictions, and remote host behavior. Missing return-format details are acceptable because an output schema is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds meaningful value above the schema by explaining that tool_name may be a registry tool or allowed system utility, that timeout is clamped, and that providing host switches execution to remote SSH mode rather than local execution.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Execute an installed cybersecurity tool or system utility and return its output.' It further narrows the scope by distinguishing registry tools and ~120 allowed system utilities, which separates it from siblings like run_script and run_pipeline without needing to name them explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear operational context: local execution by default, remote execution via SSH when host is provided, and network-target restrictions with an explicit environment variable to allow external targets. It does not explicitly state when to prefer run_tool over a named alternative, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
suggest_for_bountyA
Suggest cybersecurity tools for a bug bounty target type.
Provides curated tool recommendations with installation status, methodology steps (starting with scope verification), common vulnerabilities, and quick wins for 7 target types: web_app, api, mobile_app, cloud, network, iot, llm.
Also accepts aliases: web/webapp (web_app), rest/graphql (api), android/ios/mobile (mobile_app), aws/azure/gcp/k8s (cloud), infra/infrastructure (network), firmware/embedded (iot).
| Name | Required | Description | Default |
|---|---|---|---|
| target_type | Yes | Type of bug bounty target (e.g. "web_app", "api", "cloud"). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses what the tool returns: curated recommendations, installation status, methodology steps, common vulnerabilities, and quick wins. It does not explicitly state that it performs no modifications, but 'suggest' and the recommendation framing imply a read-only behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured: a clear opening sentence, a detailed breakdown of output content, and a concise list of aliases. Every sentence adds value and the most important information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a single required parameter, a complete output schema, and no complications like nesting or enums, the description covers everything needed: valid target types, aliases, what the tool returns, and its general methodology. No critical information is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema only provides two example values for target_type, while the description enumerates all seven accepted values and their aliases. This is essential for correct invocation, especially since the schema defines no enum. The description adds substantial meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: suggesting cybersecurity tools for a bug bounty target type. It enumerates the seven accepted target types and lists aliases, making the tool's scope unmistakable and differentiating it from siblings like suggest_for_ctf.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context on when to use the tool: when the user needs tool recommendations for a specific bug bounty target type. It does not explicitly discuss alternatives or exclusions, but the target-type list and bug bounty framing make selection straightforward.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
suggest_for_ctfA
Suggest cybersecurity tools for a CTF challenge category.
Provides curated tool recommendations with installation status for 14 challenge types: web, crypto, pwn, reversing, forensics, stego, misc, networking, wireless, osint, cloud, mobile, blockchain, llm.
Also accepts aliases: re/rev (reversing), binary/exploitation (pwn), steganography (stego), network (networking), recon (osint), etc.
| Name | Required | Description | Default |
|---|---|---|---|
| challenge_type | Yes | Type of CTF challenge (e.g. "web", "crypto", "pwn"). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It states that the tool provides curated recommendations and installation status, and that it normalizes aliases. This conveys a read-only recommendation behavior, though it does not explicitly note the absence of side effects or any system modifications.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with purpose, then systematically covers supported categories and alias handling. The only minor issue is slight redundancy between the first and second sentences, but overall every part earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter tool with an output schema, the description is quite complete: it specifies valid inputs, aliases, and the nature of the output (recommendations with installation status). It could optionally mention behavior for unknown or unsupported categories, but this is not a significant gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although schema coverage is 100%, the description adds substantial value by listing all 14 accepted challenge types and common aliases. This goes far beyond the schema's generic 'Type of CTF challenge' example and directly informs correct parameter values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Suggest') and clearly identifies the resource ('cybersecurity tools for a CTF challenge category'). It also enumerates the full set of supported challenge types, making the tool's scope unmistakable and distinguishing it from the sibling suggest_for_bounty through the CTF-specific framing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use the tool: whenever tool suggestions for a CTF challenge category are needed. It also clarifies accepted input domains and aliases. However, it does not explicitly mention alternatives or state when not to use it, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
2 tool updates
v1.2.1- Changed
list_tools2 fields changed- changed
Input schema / properties / method / anyOfPrevious value: -[ - { - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "enum": [ + "apt", + "pipx", + "go", + "cargo", + "gem", + "git", + "binary", + "docker", + "snap", + "special", + "source", + "npm" + ], + "type": "string" + }, + { + "type": "null" + } +] - changed
Input schema / properties / method / descriptionPrevious value: -"Filter by install method (apt, pipx, go, cargo, gem, git, binary, docker, snap, special, source, npm)."New value: +"Filter by install method. One of apt, pipx, go, cargo, gem, git,\nbinary, docker, snap, special, source, npm."
- Changed
manage_remote_hosts2 fields changed- changed
Input schema / properties / action / descriptionPrevious value: -"One of \"list\", \"add\", \"remove\", \"test\"."New value: +"Operation to perform: \"list\", \"add\", \"remove\", or \"test\"." - added
Input schema / properties / action / enumAdded value: +[ + "list", + "add", + "remove", + "test" +]
15 tool updates
v1.2.0- First observed
check_installed - First observed
get_cve_info - First observed
get_module_info - First observed
get_profile_tools - First observed
get_tool_info - First observed
guided_assessment - First observed
list_profiles - First observed
list_tools - First observed
manage_remote_hosts - First observed
recommend_install - First observed
run_pipeline - First observed
run_script - First observed
run_tool - First observed
suggest_for_bounty - First observed
suggest_for_ctf
TDQS
Scored across 15 tools
Each tool targets a distinct operation—registry lookup, install-status, execution, remote-host management, CVE mapping—and descriptions explicitly separate list_tools from get_tool_info and check_installed. The only mild risk is the cluster of list/get/profile/module tools, but their scopes are clearly differentiated.
Most tools follow a consistent get/list/suggest/run verb pattern (list_tools, get_cve_info, run_pipeline), and paired tools like suggest_for_ctf and suggest_for_bounty are parallel. Minor deviations such as check_installed, recommend_install, and guided_assessment keep it from a perfect 5.
15 tools sits at the upper end of the ideal range, but every tool has a distinct role, from registry discovery to execution and orchestration. No tool feels redundant or like padding.
The surface covers discovery, profiling, recommendation, CVE mapping, execution, pipelines, and remote hosts. Direct install/update/remove operations are only surfaced as commands inside get_tool_info rather than first-class tools, but run_script and run_tool provide workarounds, so the gap is minor.
Maintenance
Related MCP Connectors
Search, inspect and invoke every public tool on Invokera through one MCP connection.
Scans remote MCP servers for protocol, security, and TLS issues; exposes scan tools via MCP.
Agent-native catalogue of Baseframe Labs dev tools and MCP servers.
Remote MCP for tool license checks, vendor policy review, alternatives, and license receipts.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to discover and execute tools via a secure MCP server with JWT authentication, RBAC, rate limiting, and audit logging.1MIT
- FlicenseAqualityDmaintenanceUniversal MCP proxy server that discovers, searches, and executes tools across all configured MCP servers from a single entry point.7-
- AlicenseNot gradedqualityBmaintenanceEnables aggregation, filtering, transformation, and composition of tools from multiple MCP servers through a single proxy with tool views.5AGPL 3.0
- AlicenseNot gradedqualityBmaintenanceMCP server wrapping the toolgovern CLI as a single generic run tool for agent-tool policy validation.Apache 2.0