An ethical hacking toolkit that connects AI agents to Kali Linux security tools via MCP (Model Context Protocol).
概览
An ethical hacking toolkit that connects AI agents to Kali Linux security tools via MCP (Model Context Protocol).
README
Kali MCP
An ethical hacking toolkit that connects AI agents to Kali Linux security tools via MCP (Model Context Protocol).
Compatible with any AI agent that supports MCP: Claude Code, Gemini CLI, OpenCode, Cursor, Copilot, Codex, Aider, Windsurf, goose, and others.
> /kali-start 192.168.1.50
SESSION INITIALIZED
Target: 192.168.1.50
Scope: Passive + Credential testing
Dir: sessions/192_168_1_50_20260331_1430/
> /kali-audit 192.168.1.50
Scanning with nmap...
PORT SERVICE VERSION
22/tcp ssh OpenSSH 8.9
80/tcp http Apache 2.4.54
443/tcp https nginx 1.18
445/tcp microsoft-ds Samba 4.15
Launching 10 parallel sub-agents...
[Service Enum :22] -> SSH scripts, searchsploit CVEs
[Service Enum :80] -> nikto, gobuster, ffuf, dirb
[Web Dirs :80] -> ffuf directories, sensitive files
[Web Fuzz :80] -> arjun params, nuclei templates
[OSINT :80] -> whatweb, wafw00f, searchsploit
[API Testing :80] -> IDOR, auth bypass
[Auth Testing :80] -> SQLi on login, JWT analysis
[SMB Enum :445] -> crackmapexec, enum4linux, smbclient
[AD Audit :445] -> impacket, kerberoast
[Vuln Scan] -> nmap vuln scripts, nuclei
All sub-agents completed. Results saved to session assets.
> /kali-finish
SESSION FINALIZED — 14 findings (2 Critical, 4 High, 5 Medium, 3 Low)
Report: sessions/192_168_1_50_20260331_1430/findings.md
Prerequisites
- Docker and Docker Compose (v2+)
- An AI agent with MCP support (see Compatibility)
- A terminal with
curl(used byinit.shto health-check the container)
Getting Started
1. Clone and start
git clone https://github.com/pabpereza/kali-mcp.git
cd kali-mcp
./init.sh
init.sh builds the Kali Docker image, starts the container, and waits until the MCP server is healthy at http://localhost:666/mcp. First build may take several minutes.
2. Launch your AI agent
Open your agent from the project directory so it auto-detects .mcp.json:
claude # Claude Code (recommended — supports parallel sub-agents)
gemini # Gemini CLI
opencode # OpenCode
3. Start hacking
You can use natural language or slash commands:
> Scan ports on 10.10.10.5 with version detection
> Find hidden directories on http://target.com
> Check if FTP allows anonymous login on 10.10.10.5
Typical Workflow (Claude Code)
The whole workflow is three commands: start, audit, finish. There are no standalone per-tool commands — for anything ad hoc outside this flow, just ask in natural language (e.g. “check if FTP allows anonymous login on 10.10.10.5”) and the agent runs the matching tool directly.
/kali-start 10.10.10.5 # 1. Select target and scope
/kali-audit 10.10.10.5 # 2. Run the audit/pentest (parallel sub-agents)
/kali-finish # 3. Double-check + consolidated report + knowledge consolidation
Step 1: Initialize (/kali-start)
The start command asks two questions:
- Target(s) — IP, hostname, URL, or CIDR range
- Scope — Passive only, Passive + Credentials, or Full pentest
It creates a session directory with the structure:
sessions/10_10_10_5_20260331_1430/
├── session.md # Metadata: target, date, scope, status
├── targets.md # Target list and progress
├── findings.md # Consolidated findings (generated by /kali-finish)
└── assets/ # Raw output from each sub-agent
Step 2: Run the audit (/kali-audit)
Discovers services with nmap, then launches up to 10+ parallel sub-agents (per-port enumeration plus specialized web/AD sub-agents) across two waves — recon/loot first, brute-force/exploitation second, seeded with anything harvested in the first wave. Saves everything to the session’s assets/.
You can re-run /kali-audit against the same target later in the same session (e.g. after fixing a gap) — it reuses the existing IN PROGRESS session directory.
Step 3: Finalize (/kali-finish)
The finish command:
- Inventories all sub-agent outputs in
assets/ - Double-checks completeness — flags missing or failed sub-agents
- Compiles deduplicated findings by severity (Critical/High/Medium/Low)
- Generates the consolidated report in
findings.md - Updates
session.mdwith executive summary and statistics - Consolidates any new, generalizable tool-efficiency lessons into
knowledge/
Session output example
After /kali-finish, your session directory looks like:
sessions/10_10_10_5_20260331_1430/
├── session.md # Status: COMPLETED, executive summary
├── targets.md # Targets with findings count
├── findings.md # 14 findings by severity
└── assets/
├── nmap_discovery.md # Initial port scan
├── service_enum_port22.md # SSH audit
├── service_enum_port80.md # HTTP service audit
├── web_directory_enum_port80.md # Hidden directories found
├── api_security_port80.md # API testing results
├── auth_session_testing_port80.md # Auth bypass attempts
├── service_enum_port445.md # SMB audit
└── vuln_scanning.md # CVE identification
Architecture
┌─────────────────────────────────────────────────────┐
│ AI Agent (Claude / Gemini / OpenCode / ...) │
│ │
│ Follows AGENTS.md (single source of truth); │
│ CLAUDE.md just points Claude Code there │
│ Uses MCP tools to execute security actions │
│ │
│ [Claude Code: parallel sub-agents per port] │
└──────────────────────┬──────────────────────────────┘
│ MCP (HTTP) localhost:666
┌──────────────────────┼──────────────────────────────┐
│ Docker: kali-mcp │ │
│ ▼ │
│ ┌─────────────────────────────────────┐ │
│ │ supergateway :8000 │ │
│ │ Streamable HTTP MCP stdio │ │
│ └──────────────┬──────────────────────┘ │
│ │ │
│ ┌──────────────▼──────────────────────┐ │
│ │ kali-server-mcp :5000 (Flask API) │ │
│ │ │ │
│ │ nmap · gobuster · dirb · nikto │ │
│ │ sqlmap · hydra · john · wpscan │ │
│ │ enum4linux · metasploit │ │
│ │ ffuf · nuclei · crackmapexec │ │
│ │ whatweb · amass · impacket · ... │ │
│ │ (50+ tools — see full list below) │ │
│ └─────────────────────────────────────┘ │
└─────────────────────────────────────────────────────┘
Available Tools
50+ tools across OSINT & recon, web application testing, network & AD pentesting, traffic analysis, password/hash cracking, and forensics — the nmap_scan/hydra_attack/etc. native MCP wrappers are deprecated (unreliable health check, return HTTP 500); every tool is invoked through the single execute_command MCP tool instead.
The full, up-to-date catalog — canonical command per tool, function, and which ones are intrusive — lives in knowledge/tools/index.md, not duplicated here. See Knowledge Base below.
Slash Commands Reference (Claude Code)
Only three commands, by design — see Repository Structure and Knowledge Base for why.
| Command | Description |
|---|---|
/kali-start |
Initialize session: select target and scope |
/kali-audit |
Full audit/pentest: 1 sub-agent per discovered port/service + specialized web/AD sub-agents, up to 10+ parallel, two-wave loot-before-exploit |
/kali-finish |
Finalize: double-check sub-agents, compile findings, generate report, consolidate tool-efficiency knowledge |
For anything outside this flow (a single ad hoc check, digging into one file, cracking one hash), just ask in natural language — every tool listed below is reachable via execute_command without a slash command.
Authorization Policy
Intrusive tools (sqlmap, hydra, john, metasploit) always require user confirmation before execution.
Three authorization levels:
| Level | Tools allowed | Risk |
|---|---|---|
| Passive only | nmap, gobuster, dirb, nikto, wpscan, enum4linux | None |
| Passive + Credentials | + hydra with small wordlists | May trigger lockouts |
| Full pentest | + sqlmap, metasploit, full brute force | May disrupt services |
Compatibility
| Agent | Instruction file read first | MCP | /kali-* commands |
Parallel sub-agents |
|---|---|---|---|---|
| Claude Code | AGENTS.md (via CLAUDE.md pointer) |
Native | Native (.claude/commands/) |
Yes |
| Gemini CLI | AGENTS.md |
Native | Native (.gemini/commands/ adapters) |
No — sequential |
| OpenCode | AGENTS.md |
Native | Native (.opencode/commands/ adapters) |
No — sequential* |
| Cursor | AGENTS.md |
Native | Ask in plain text, e.g. “follow .claude/commands/kali-audit.md” |
No — sequential |
| GitHub Copilot | AGENTS.md |
Native | Same as Cursor | No — sequential |
| Codex (OpenAI) | AGENTS.md |
Native | Same as Cursor — see note below | No — sequential |
| Aider | AGENTS.md |
Native | Same as Cursor | No — sequential |
| Windsurf | AGENTS.md |
Native | Same as Cursor | No — sequential |
| goose | AGENTS.md |
Native | Same as Cursor | No — sequential |
Note:
AGENTS.mdis the only file with real content — tools, authorization policy, audit methodology, session system, sub-agent architecture, knowledge base.CLAUDE.mdis a one-line pointer that sends Claude Code there, so every agent ends up following the exact same instructions instead of a second, divergent copy.
/kali-start,/kali-audit,/kali-finishare canonically defined once, as runbooks under.claude/commands/. Gemini CLI and OpenCode both support project-local custom slash commands that inject file content, so their adapters under.gemini/commands/and.opencode/commands/pull inAGENTS.md+ the matching runbook and translate the Claude-only mechanics (parallel sub-agents → sequential steps,AskUserQuestion→ plain-text question) — giving native/kali-*invocation there too, off the same source, no duplicated instructions. *OpenCode has its own subagent primitives; if the model judges they can genuinely run tasks in parallel it’s free to use them, but the adapter doesn’t assume it.Codex CLI’s custom-prompt mechanism (
~/.codex/prompts/) is user-home-only, not project-local, and is marked deprecated by OpenAI — it can’t be shipped inside this repo, so there’s no adapter for it. Cursor, GitHub Copilot, Aider, Windsurf, and goose don’t expose a project-shippable custom-command format either as of this writing; on those, just ask in plain text and the agent followsAGENTS.md’s translation notes.
Manual MCP configuration
Most agents auto-detect .mcp.json. If yours requires manual setup, point it to:
{
"mcpServers": {
"kali": {
"type": "http",
"url": "http://localhost:666/mcp"
}
}
}
Supported Services
20 built-in playbooks — HTTP/HTTPS (incl. WordPress), SSH, FTP, SMB/NetBIOS, MySQL, PostgreSQL, MSSQL, SMTP, DNS, RDP, SNMP, LDAP, Kerberos/Active Directory, VNC, Redis, MongoDB, Elasticsearch, Docker API, WinRM, NFS — plus a generic fallback for anything else. Each one is a short “which tool, in what order” checklist in knowledge/protocols/, which is what /kali-audit actually reads at dispatch time — see Knowledge Base.
Repository Structure
kali-mcp/
├── init.sh # Bootstrap: build, start, wait for readiness
├── .mcp.json # MCP endpoint config (auto-detected by agents)
├── AGENTS.md # Single source of truth: tools, methodology, session system, sub-agent architecture
├── CLAUDE.md # One-line pointer to AGENTS.md for Claude Code
├── docker/
│ ├── Dockerfile # Kali Linux image with security tools
│ ├── compose.yml # Docker Compose service definition
│ └── entrypoint.sh # Starts Flask API + supergateway
├── .claude/
│ └── commands/ # Canonical runbooks (Claude Code native; source for the adapters below)
│ ├── kali-start.md # /kali-start — Initialize session
│ ├── kali-audit.md # /kali-audit — Full audit/pentest (10+ sub-agents)
│ └── kali-finish.md # /kali-finish — Finalize + consolidated report + knowledge
├── .gemini/
│ └── commands/ # Gemini CLI adapters — inject AGENTS.md + the matching runbook
│ ├── kali-start.toml
│ ├── kali-audit.toml
│ └── kali-finish.toml
├── .opencode/
│ └── commands/ # OpenCode adapters — inject AGENTS.md + the matching runbook
│ ├── kali-start.md
│ ├── kali-audit.md
│ └── kali-finish.md
├── knowledge/ # Knowledge base (git-tracked, OKF format)
│ ├── index.md
│ ├── log.md
│ ├── tools/ # How to use each tool: full catalog + per-tool efficiency notes
│ └── protocols/ # Which tool(s) for each protocol/application (20 playbooks)
└── sessions/ # Session data (git-ignored)
└── _/
├── session.md
├── targets.md
├── findings.md
└── assets/
Knowledge Base
knowledge/ is a small, git-tracked bundle in Open Knowledge Format (markdown + YAML frontmatter), split in two:
knowledge/tools/— how to use each tool: the full command reference catalog, plus per-tool notes on running it efficiently (flags, timeouts, wordlists, concurrency, pitfalls) that accumulate as real engagements teach us something.knowledge/protocols/— which tool(s) to reach for on a given protocol or application (SSH, SMB, HTTP/WordPress, MySQL, …), one short checklist per service.
AGENTS.md deliberately holds neither — it’s process and methodology only (authorization policy, audit workflow, session system). This is not a vulnerability or target database either: nothing target-identifying (IP, hostname, credentials) is ever written there, only in the gitignored sessions/.
/kali-auditreads the matchingknowledge/protocols/.mdbefore dispatching each service’s sub-agent(s) and copies its steps into their prompts, and consultsknowledge/tools/.mdfor efficiency notes on top of that./kali-finishdistills genuinely new, generalizable efficiency lessons from the session back intoknowledge/tools/— most sessions won’t add anything, and that’s expected. A protocol/application worth a dedicated playbook gets added toknowledge/protocols/the same way.- Because it’s plain markdown in git, you can read, edit, or review it like any other part of the codebase.
Troubleshooting
| Problem | Solution |
|---|---|
init.sh hangs at “Waiting for MCP server” |
Check Docker is running: docker ps. Inspect logs: docker logs kali-mcp. |
| Agent can’t connect to MCP | Verify the container is up: curl http://localhost:666/mcp. Restart with ./init.sh. |
| Port 666 already in use | Change the host port in docker/compose.yml (":8000") and update .mcp.json. |
| Image build fails | Ensure internet access. Kali repos may be temporarily unavailable — retry. |
| Tools timeout on large scans | Some scans take minutes. Add resource limits in compose.yml if needed. |
Disclaimer
WARNING: This toolkit is intended exclusively for authorized security testing. Misuse may violate local, national, and international laws.
You must ensure that:
- You have explicit written authorization from the system owner before testing.
- You are operating within the agreed scope of the engagement.
- You understand that intrusive tools can disrupt services, corrupt data, or trigger security alerts.
Acceptable use cases:
- Penetration testing engagements with a signed agreement
- CTF (Capture The Flag) competitions
- Lab environments (HackTheBox, TryHackMe, VulnHub, personal labs)
- Defensive security research
The authors assume no liability for damages caused by misuse. You are solely responsible for your actions.
License
This project is provided as-is for educational and authorized security testing purposes. See individual tool licenses (nmap, sqlmap, metasploit, etc.) for their respective terms.
安装
This server does not publish a one-line install command.
Open the repository installation guide配置
{
"mcpServers": {
"kali": {
"type": "http",
"url": "http://localhost:666/mcp"
}
}
}