Zebbern Kali MCP Server

zebbern-kali-mcp PyPI v1.0.17

Published by zebbern — no publish provenance, so origin is unverified, but the source is public: the repository link below is self-declared yet readable, so you can inspect the code before adopting it.

MCP server for Kali Linux security tools — connects AI agents to 145+ pentest tools via Docker

Trust grade
A
93/100
Last scanned get badge →
Trust
A · 93/100
Adoption risk for you: the threat score, then adjusted down for blast radius, publisher verification and how much the scan could see. Deterministic; every point is auditable.
Capability
High
Blast radius if it went rogue — what the server’s tools could reach. Independent of trust.
Coverage
Source
How much the scan could actually inspect. Shallow coverage is stated, never hidden.
Share this Trust Score
𝕏 Share LinkedIn Reddit
A Why this grade threat 100 − adoption risk = 93/100

The grade answers one question — how safe is this server for you to adopt — so it is computed in two auditable stages. Nothing below is an opinion or an LLM's guess; every line is a real term the deterministic engine applied, and the same input always yields the same number.

1. Threat score — 100 − 0 = 100. What the published surface and source actually contain:

The deterministic scan raised no scored threat in the surface it inspected — the threat score stayed at 100. Capability observations and advisory notes are recorded but never lower it.

2. Client adoption risk — 100 − 7 = 93. Three small, subtract-only factors that reflect your risk in adopting it — a clean scan proves less on a powerful, unverified or barely-inspectable package, so the grade says so plainly:

PointsAdoption-risk factor
−6 capability blast radius (high) — client exposure if the model is manipulated
−1 publisher verification (public source) — no provenance, but the source is public and inspectable

Capability observations and info notes are shown under Findings but never scored. Open any row's finding below for the file, line and evidence behind a deduction.

Findings 27

high Tool "zebbern_exec" exposes command/code executionMTC-CAP-001

Tool "zebbern_exec" appears to run shell commands or evaluate code (keyword "exec" in tool name). Arbitrary execution driven by model input is one of the most dangerous MCP capabilities; combined with any untrusted input it becomes RCE.

Fix: Sandbox execution, allowlist commands/arguments, and never pass model output to a shell unescaped.

Location: tool zebbern_exec

high Tool "exec_stream" exposes command/code executionMTC-CAP-001

Tool "exec_stream" appears to run shell commands or evaluate code (keyword "exec" in tool name). Arbitrary execution driven by model input is one of the most dangerous MCP capabilities; combined with any untrusted input it becomes RCE.

Fix: Sandbox execution, allowlist commands/arguments, and never pass model output to a shell unescaped.

Location: tool exec_stream

high Tool "reverse_shell_listener_start" exposes command/code executionMTC-CAP-001

Tool "reverse_shell_listener_start" appears to run shell commands or evaluate code (keyword "shell" in tool name). Arbitrary execution driven by model input is one of the most dangerous MCP capabilities; combined with any untrusted input it becomes RCE.

Fix: Sandbox execution, allowlist commands/arguments, and never pass model output to a shell unescaped.

Location: tool reverse_shell_listener_start

high Tool "reverse_shell_command" exposes command/code executionMTC-CAP-001

Tool "reverse_shell_command" appears to run shell commands or evaluate code (keyword "shell" in tool name). Arbitrary execution driven by model input is one of the most dangerous MCP capabilities; combined with any untrusted input it becomes RCE.

Fix: Sandbox execution, allowlist commands/arguments, and never pass model output to a shell unescaped.

Location: tool reverse_shell_command

high Tool "reverse_shell_send_payload" exposes command/code executionMTC-CAP-001

Tool "reverse_shell_send_payload" appears to run shell commands or evaluate code (keyword "shell" in tool name). Arbitrary execution driven by model input is one of the most dangerous MCP capabilities; combined with any untrusted input it becomes RCE.

Fix: Sandbox execution, allowlist commands/arguments, and never pass model output to a shell unescaped.

Location: tool reverse_shell_send_payload

high Tool "reverse_shell_status" exposes command/code executionMTC-CAP-001

Tool "reverse_shell_status" appears to run shell commands or evaluate code (keyword "shell" in tool name). Arbitrary execution driven by model input is one of the most dangerous MCP capabilities; combined with any untrusted input it becomes RCE.

Fix: Sandbox execution, allowlist commands/arguments, and never pass model output to a shell unescaped.

Location: tool reverse_shell_status

high Tool "reverse_shell_stop" exposes command/code executionMTC-CAP-001

Tool "reverse_shell_stop" appears to run shell commands or evaluate code (keyword "shell" in tool name). Arbitrary execution driven by model input is one of the most dangerous MCP capabilities; combined with any untrusted input it becomes RCE.

Fix: Sandbox execution, allowlist commands/arguments, and never pass model output to a shell unescaped.

Location: tool reverse_shell_stop

high Tool "reverse_shell_upload_content" exposes command/code executionMTC-CAP-001

Tool "reverse_shell_upload_content" appears to run shell commands or evaluate code (keyword "shell" in tool name). Arbitrary execution driven by model input is one of the most dangerous MCP capabilities; combined with any untrusted input it becomes RCE.

Fix: Sandbox execution, allowlist commands/arguments, and never pass model output to a shell unescaped.

Location: tool reverse_shell_upload_content

high Tool "reverse_shell_download_content" exposes command/code executionMTC-CAP-001

Tool "reverse_shell_download_content" appears to run shell commands or evaluate code (keyword "shell" in tool name). Arbitrary execution driven by model input is one of the most dangerous MCP capabilities; combined with any untrusted input it becomes RCE.

Fix: Sandbox execution, allowlist commands/arguments, and never pass model output to a shell unescaped.

Location: tool reverse_shell_download_content

high Tool "reverse_shell_generate_payload" exposes command/code executionMTC-CAP-001

Tool "reverse_shell_generate_payload" appears to run shell commands or evaluate code (keyword "shell" in tool name). Arbitrary execution driven by model input is one of the most dangerous MCP capabilities; combined with any untrusted input it becomes RCE.

Fix: Sandbox execution, allowlist commands/arguments, and never pass model output to a shell unescaped.

Location: tool reverse_shell_generate_payload

medium Untrusted input can drive an external actionMTC-FLOW-005

Untrusted-input tools ([ctf_download_file, ctf_scoreboard, kali_download, target_download_file, payload_host_start, reverse_shell_download_content, ssh_session_download_content]) co-exist with external-action tools ([zebbern_exec, exec_stream, target_upload_file, reverse_shell_listener_start, reverse_shell_command, reverse_shell_send_payload, reverse_shell_status, reverse_shell_stop, reverse_shell_upload_content, reverse_shell_download_content, reverse_shell_generate_payload]). A prompt injection could cause unwanted external actions, though no direct sensitive-data leak path was found.

Evidence: untrusted [ctf_download_file, ctf_scoreboard, kali_download, target_download_file, payload_host_start, reverse_shell_download_content, ssh_session_download_cont

Fix: Require confirmation for state-changing/egress actions triggered after processing untrusted content.

Location: flow ctf_download_file → zebbern_exec

low Reads a sensitive credential path or dumps the environment in packaging/dev tooling (tests/test_pivot_tunnel_wiring.py)MTC-SRC-006

In a packaging/dev/install script (shipped, but not the server runtime) (`tests/test_pivot_tunnel_wiring.py:114`): Reading private keys / cloud credentials, or serializing the whole environment, is a sensitive-data source that becomes exfiltration when combined with any egress. This is read from the code itself — not from the tool description — so a poisoned server cannot hide it behind honest-looking metadata.

Evidence: ort=80, key_file="/root/id_rsa", ) cmd = seen["cmd"] assert cmd[0] == "ssh" assert "-i"

Fix: Review this call path: confirm it never receives unsanitized tool input, constrain it, or remove it. Treat a server whose code reaches these sinks as high-capability regardless of what its tools claim.

Location: server tests/test_pivot_tunnel_wiring.py

low Mutating tool "zebbern_exec" declares no destructiveHintMTC-CAP-005

Tool "zebbern_exec" can mutate/egress but declares no destructiveHint. Clients that don't default to spec-safe behavior may not prompt before running it.

Fix: Declare accurate annotations, and gate destructive tools on user confirmation regardless.

Location: tool zebbern_exec

low Mutating tool "exec_stream" declares no destructiveHintMTC-CAP-005

Tool "exec_stream" can mutate/egress but declares no destructiveHint. Clients that don't default to spec-safe behavior may not prompt before running it.

Fix: Declare accurate annotations, and gate destructive tools on user confirmation regardless.

Location: tool exec_stream

low Mutating tool "reverse_shell_listener_start" declares no destructiveHintMTC-CAP-005

Tool "reverse_shell_listener_start" can mutate/egress but declares no destructiveHint. Clients that don't default to spec-safe behavior may not prompt before running it.

Fix: Declare accurate annotations, and gate destructive tools on user confirmation regardless.

Location: tool reverse_shell_listener_start

low Mutating tool "reverse_shell_command" declares no destructiveHintMTC-CAP-005

Tool "reverse_shell_command" can mutate/egress but declares no destructiveHint. Clients that don't default to spec-safe behavior may not prompt before running it.

Fix: Declare accurate annotations, and gate destructive tools on user confirmation regardless.

Location: tool reverse_shell_command

low Mutating tool "reverse_shell_send_payload" declares no destructiveHintMTC-CAP-005

Tool "reverse_shell_send_payload" can mutate/egress but declares no destructiveHint. Clients that don't default to spec-safe behavior may not prompt before running it.

Fix: Declare accurate annotations, and gate destructive tools on user confirmation regardless.

Location: tool reverse_shell_send_payload

low Mutating tool "reverse_shell_status" declares no destructiveHintMTC-CAP-005

Tool "reverse_shell_status" can mutate/egress but declares no destructiveHint. Clients that don't default to spec-safe behavior may not prompt before running it.

Fix: Declare accurate annotations, and gate destructive tools on user confirmation regardless.

Location: tool reverse_shell_status

low Mutating tool "reverse_shell_stop" declares no destructiveHintMTC-CAP-005

Tool "reverse_shell_stop" can mutate/egress but declares no destructiveHint. Clients that don't default to spec-safe behavior may not prompt before running it.

Fix: Declare accurate annotations, and gate destructive tools on user confirmation regardless.

Location: tool reverse_shell_stop

low Mutating tool "reverse_shell_upload_content" declares no destructiveHintMTC-CAP-005

Tool "reverse_shell_upload_content" can mutate/egress but declares no destructiveHint. Clients that don't default to spec-safe behavior may not prompt before running it.

Fix: Declare accurate annotations, and gate destructive tools on user confirmation regardless.

Location: tool reverse_shell_upload_content

low Mutating tool "reverse_shell_download_content" declares no destructiveHintMTC-CAP-005

Tool "reverse_shell_download_content" can mutate/egress but declares no destructiveHint. Clients that don't default to spec-safe behavior may not prompt before running it.

Fix: Declare accurate annotations, and gate destructive tools on user confirmation regardless.

Location: tool reverse_shell_download_content

low Mutating tool "reverse_shell_generate_payload" declares no destructiveHintMTC-CAP-005

Tool "reverse_shell_generate_payload" can mutate/egress but declares no destructiveHint. Clients that don't default to spec-safe behavior may not prompt before running it.

Fix: Declare accurate annotations, and gate destructive tools on user confirmation regardless.

Location: tool reverse_shell_generate_payload

low Shell/command execution in packaging/dev tooling (tests/test_checkout_source.py)MTC-SRC-002

In a packaging/dev/install script (shipped, but not the server runtime) (`tests/test_checkout_source.py:16`): Spawning a shell/process is command-execution capability; with unsanitized tool input it is command injection / RCE. This is read from the code itself — not from the tool description — so a poisoned server cannot hide it behind honest-looking metadata.

Evidence: ELPER) converted = subprocess.run( [ "wsl.exe", "--", "wslpath",

Fix: Review this call path: confirm it never receives unsanitized tool input, constrain it, or remove it. Treat a server whose code reaches these sinks as high-capability regardless of what its tools claim.

Location: server tests/test_checkout_source.py

low Shell/command execution in packaging/dev tooling (tests/test_deployment_config.py)MTC-SRC-002

In a packaging/dev/install script (shipped, but not the server runtime) (`tests/test_deployment_config.py:46`): Spawning a shell/process is command-execution capability; with unsanitized tool input it is command injection / RCE. This is read from the code itself — not from the tool description — so a poisoned server cannot hide it behind honest-looking metadata.

Evidence: f", file)] result = subprocess.run( ["docker", "compose", *compose_files, "config", "--format", "json"],

Fix: Review this call path: confirm it never receives unsanitized tool input, constrain it, or remove it. Treat a server whose code reaches these sinks as high-capability regardless of what its tools claim.

Location: server tests/test_deployment_config.py

low Shell/command execution in packaging/dev tooling (tests/test_job_manager.py)MTC-SRC-002

In a packaging/dev/install script (shipped, but not the server runtime) (`tests/test_job_manager.py:376`): Spawning a shell/process is command-execution capability; with unsanitized tool input it is command injection / RCE. This is read from the code itself — not from the tool description — so a poisoned server cannot hide it behind honest-looking metadata.

Evidence: t("sh -c 'sleep 30 &'", shell=True, timeout=5) wait_for_terminal(manager, job["job_id"]) deadline = tim

Fix: Review this call path: confirm it never receives unsanitized tool input, constrain it, or remove it. Treat a server whose code reaches these sinks as high-capability regardless of what its tools claim.

Location: server tests/test_job_manager.py

low Shell/command execution in packaging/dev tooling (tests/test_job_routes.py)MTC-SRC-002

In a packaging/dev/install script (shipped, but not the server runtime) (`tests/test_job_routes.py:52`): Spawning a shell/process is command-execution capability; with unsanitized tool input it is command injection / RCE. This is read from the code itself — not from the tool description — so a poisoned server cannot hide it behind honest-looking metadata.

Evidence: """ ) result = subprocess.run( [sys.executable, "-c", code], cwd=PROJECT_ROOT, capture_

Fix: Review this call path: confirm it never receives unsanitized tool input, constrain it, or remove it. Treat a server whose code reaches these sinks as high-capability regardless of what its tools claim.

Location: server tests/test_job_routes.py

low Shell/command execution in packaging/dev tooling (tests/test_reverse_shell_teardown.py)MTC-SRC-002

In a packaging/dev/install script (shipped, but not the server runtime) (`tests/test_reverse_shell_teardown.py:3`): Spawning a shell/process is command-execution capability; with unsanitized tool input it is command injection / RCE. This is read from the code itself — not from the tool description — so a poisoned server cannot hide it behind honest-looking metadata.

Evidence: tener is spawned with ``shell=True`` under ``preexec_fn=os.setsid``, so the tracked process is the SHELL and the real ``

Fix: Review this call path: confirm it never receives unsanitized tool input, constrain it, or remove it. Treat a server whose code reaches these sinks as high-capability regardless of what its tools claim.

Location: server tests/test_reverse_shell_teardown.py

Tools 133

Each tool and what it can reach — statically extracted from the published source.

  • reverse_shell_download_contentingests untrusted inputruns code / shell
  • ctf_download_fileingests untrusted input
  • ctf_scoreboardingests untrusted input
  • exec_streamruns code / shell
  • kali_downloadingests untrusted input
  • payload_host_startingests untrusted input
  • reverse_shell_commandruns code / shell
  • reverse_shell_generate_payloadruns code / shell
  • reverse_shell_listener_startruns code / shell
  • reverse_shell_send_payloadruns code / shell
Show 123 more tools ↓
  • reverse_shell_statusruns code / shell
  • reverse_shell_stopruns code / shell
  • reverse_shell_upload_contentruns code / shell
  • ssh_session_download_contentingests untrusted input
  • target_download_fileingests untrusted input
  • target_upload_filenetwork egress
  • zebbern_execruns code / shell
  • ad_asreproastno sensitive capability
  • ad_bloodhound_collectno sensitive capability
  • ad_kerberoastno sensitive capability
  • ad_ldap_enumno sensitive capability
  • ad_password_sprayno sensitive capability
  • ad_psexecno sensitive capability
  • ad_secretsdumpno sensitive capability
  • ad_smb_enumno sensitive capability
  • ad_tools_statusno sensitive capability
  • ad_wmiexecno sensitive capability
  • api_auth_bypass_testno sensitive capability
  • api_ffuf_fuzzno sensitive capability
  • api_fuzz_endpointno sensitive capability
  • api_graphql_fuzzno sensitive capability
  • api_graphql_introspectno sensitive capability
  • api_jwt_analyzeno sensitive capability
  • api_jwt_crackno sensitive capability
  • api_kiterunner_scanno sensitive capability
  • api_newman_runno sensitive capability
  • api_nuclei_scanno sensitive capability
  • api_rate_limit_testno sensitive capability
  • callback_checkno sensitive capability
  • callback_clearno sensitive capability
  • callback_generateno sensitive capability
  • callback_latestno sensitive capability
  • callback_listno sensitive capability
  • callback_startno sensitive capability
  • callback_statusno sensitive capability
  • callback_stopno sensitive capability
  • callback_waitno sensitive capability
  • ctf_connectno sensitive capability
  • ctf_get_challengeno sensitive capability
  • ctf_list_challengesno sensitive capability
  • ctf_statusno sensitive capability
  • ctf_submit_flagno sensitive capability
  • cve_package_auditno sensitive capability
  • cve_searchno sensitive capability
  • exploit_copyno sensitive capability
  • exploit_detailsno sensitive capability
  • exploit_searchno sensitive capability
  • exploit_suggest_for_serviceno sensitive capability
  • exploit_suggest_from_nmapno sensitive capability
  • fingerprint_headersno sensitive capability
  • fingerprint_urlno sensitive capability
  • fingerprint_wafno sensitive capability
  • healthno sensitive capability
  • hosts_addno sensitive capability
  • hosts_clearno sensitive capability
  • hosts_listno sensitive capability
  • hosts_removeno sensitive capability
  • job_cancelno sensitive capability
  • job_listno sensitive capability
  • job_outputno sensitive capability
  • job_statusno sensitive capability
  • kali_uploadno sensitive capability
  • msf_session_createno sensitive capability
  • msf_session_destroyno sensitive capability
  • msf_session_destroy_allno sensitive capability
  • msf_session_executeno sensitive capability
  • msf_session_listno sensitive capability
  • parse_tool_outputno sensitive capability
  • payload_generateno sensitive capability
  • payload_host_stopno sensitive capability
  • payload_listno sensitive capability
  • payload_one_linerno sensitive capability
  • payload_templatesno sensitive capability
  • pivot_add_pivotno sensitive capability
  • pivot_chisel_clientno sensitive capability
  • pivot_chisel_serverno sensitive capability
  • pivot_generate_proxychainsno sensitive capability
  • pivot_ligolo_startno sensitive capability
  • pivot_list_pivotsno sensitive capability
  • pivot_list_tunnelsno sensitive capability
  • pivot_removeno sensitive capability
  • pivot_socat_forwardno sensitive capability
  • pivot_ssh_dynamicno sensitive capability
  • pivot_ssh_localno sensitive capability
  • pivot_ssh_remoteno sensitive capability
  • pivot_stop_all_tunnelsno sensitive capability
  • pivot_stop_tunnelno sensitive capability
  • read_outputno sensitive capability
  • send_inputno sensitive capability
  • ssh_estimate_transferno sensitive capability
  • ssh_session_commandno sensitive capability
  • ssh_session_startno sensitive capability
  • ssh_session_statusno sensitive capability
  • ssh_session_stopno sensitive capability
  • ssh_session_upload_contentno sensitive capability
  • ssh_sessionsno sensitive capability
  • system_network_infono sensitive capability
  • tools_amassno sensitive capability
  • tools_arjunno sensitive capability
  • tools_assetfinderno sensitive capability
  • tools_byp4xxno sensitive capability
  • tools_crtshno sensitive capability
  • tools_enum4linuxno sensitive capability
  • tools_fierceno sensitive capability
  • tools_gobusterno sensitive capability
  • tools_gowitnessno sensitive capability
  • tools_httpxno sensitive capability
  • tools_hydrano sensitive capability
  • tools_johnno sensitive capability
  • tools_katanano sensitive capability
  • tools_masscanno sensitive capability
  • tools_niktono sensitive capability
  • tools_nmapno sensitive capability
  • tools_sqlmapno sensitive capability
  • tools_ssh_auditno sensitive capability
  • tools_sslscanno sensitive capability
  • tools_subfinderno sensitive capability
  • tools_subzyno sensitive capability
  • tools_waybackurlsno sensitive capability
  • tools_wpscanno sensitive capability
  • vpn_connectno sensitive capability
  • vpn_disconnectno sensitive capability
  • vpn_statusno sensitive capability

Toxic flows 1

Cross-tool combinations that form a data-exfiltration primitive (untrusted input → sensitive source → external sink).

What this scan could not see

Versions 4

Scan history per published version. The engine is deterministic — the same version always yields the same score, so a changed score means the package itself changed.

VersionScoreFindingsEngineScanned
v1.0.17 latest A 93/100 27 1.13.0 2026-09-05
v1.0.15 A 93/100 27 1.13.0 2026-09-04
v1.0.1 A 93/100 25 1.13.0 2026-08-29
v1.0.0 A 93/100 23 1.13.0 2026-08-25

Embed this score

Show this server's live Trust Score in your README, docs or website. The badge is served straight from the registry and updates automatically after every rescan — no API key needed. It links back to this page, so anyone who sees the grade can also read the findings behind it instead of taking a number on faith.

MCP Trust Score: A · 93/100
Markdown (GitHub README)
[![MCP Trust Score](https://mcptrustchecker.com/registry/zebbern-kali-mcp/badge.svg)](https://mcptrustchecker.com/registry/zebbern-kali-mcp)
HTML
<a href="https://mcptrustchecker.com/registry/zebbern-kali-mcp"><img src="https://mcptrustchecker.com/registry/zebbern-kali-mcp/badge.svg" alt="MCP Trust Score" height="20"></a>
Prefer shields.io styling? Point it at https://mcptrustchecker.com/registry/zebbern-kali-mcp/badge.json via https://img.shields.io/endpoint?url=…

Verify this score yourself

The score above is reproducible: the same package version always yields the same result. Run it locally or over the free API — no account, no LLM, fully deterministic.

npx mcptrustchecker scan zebbern-kali-mcp --online --registry pypi

Use the free API → How scoring works

More in Developer Tools