PwnBridge
OfficialProvides tools to run security assessments on a remote Kali Linux machine, including reconnaissance, web testing, exploitation, and static/dynamic analysis.
Enables execution of Metasploit modules for exploitation tasks via the 'metasploit_exec' tool.
Integrates OWASP ZAP for dynamic application security testing (DAST) with support for multiple authentication modes and parallel scanning.
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., "@PwnBridgeScan example.com for open ports"
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.
⚠️ AUTHORIZED USE ONLY — Only test systems you own or have explicit written permission to test. Unauthorized access to computer systems is illegal.
What is PwnBridge?
PwnBridge is a Model Context Protocol (MCP) server that bridges AI assistants to a Kali Linux machine over SSH. Ask Claude, ChatGPT, or Gemini to run a port scan, test for SQL injection, or perform a full SAST/DAST security assessment — the AI translates intent into commands, executes them on your Kali box, streams back results, and keeps a full audit trail.
┌─────────────────────────────────────────────────────────────────────────┐
│ │
│ Claude Desktop ──── stdio ────┐ │
│ │ │
│ ChatGPT ──────── HTTP/SSE ───►│ PwnBridge ──── SSH ────► Kali Linux │
│ │ (11 tools) │
│ Gemini CLI ───── HTTP/SSE ───►│ │
│ │ │
└─────────────────────────────────────────────────────────────────────────┘Dual Transport
Transport | Clients | Protocol |
stdio | Claude Desktop | MCP native (spawned process) |
HTTP / SSE | ChatGPT, Gemini CLI, any MCP client | Streamable HTTP + legacy SSE |
Related MCP server: K-MCP: Kali Model Context Protocol Server
Tools
Reconnaissance & Scanning
Tool | Description |
| Port scanning — quick, service, OS, full, stealth, UDP profiles |
| Web server vulnerability and misconfiguration detection |
| CMS, framework, and technology fingerprinting |
Web Application Testing
Tool | Description |
| SQL injection detection and exploitation |
| Directory, file, subdomain, and vhost enumeration |
| Web fuzzing with |
Exploitation & Auth Testing
Tool | Description |
| Password brute-force — SSH, FTP, HTTP, SMB, RDP, and more |
| Non-interactive Metasploit module execution |
Security Analysis
Tool | Description |
| Static analysis — Semgrep + Bandit + Gitleaks + Graudit in parallel, versioned reports |
| Dynamic analysis — OWASP ZAP + Nuclei, 5 auth modes, versioned reports |
Utility
Tool | Description |
| Raw shell command passthrough (escape hatch for advanced scenarios) |
Quick Start
Prerequisites
Kali Linux machine accessible over SSH (VM, VPS, or bare metal)
Node.js 22+ on your local machine
1. Clone & Install
git clone https://github.com/1mr0-tech/simple-kali-mcp.git pwnbridge
cd pwnbridge
npm install2. Configure
cp .env.example .envEdit .env — minimum required:
SSH_HOST=192.168.1.100 # Your Kali machine IP
SSH_USER=kali
SSH_PRIVATE_KEY_PATH=~/.ssh/id_rsa # Recommended over password3. Build
npm run build4. Connect Your AI Assistant
Claude Desktop
Add to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"pwnbridge": {
"command": "node",
"args": ["/absolute/path/to/pwnbridge/dist/index.js", "--stdio"]
}
}
}Restart Claude Desktop. All 11 tools appear automatically.
ChatGPT
Option A — MCP Connector (ChatGPT Plus / Team / Enterprise):
node dist/index.js --http # starts on port 3000In ChatGPT → Settings → Connected Apps → Add MCP Server → http://your-server:3000/mcp
Option B — Custom GPT Actions (legacy):
Import the auto-generated schema: http://your-server:3000/openapi.yaml
Gemini CLI
Add to ~/.gemini/settings.json:
{
"mcpServers": {
"pwnbridge": {
"httpUrl": "http://your-server:3000/mcp",
"headers": { "x-api-key": "your-key-here" }
}
}
}SAST Scanning
Run static analysis on a local codebase. Code is synced to Kali via SFTP, scanned in parallel, then deleted — only the report is kept.
AI: "Run a SAST scan on /Users/me/projects/backend, project name backend-api"What runs on Kali:
┌─────────────────────────────────────────────────────────────────┐
│ SFTP Upload (8 concurrent streams) │
│ /Users/me/projects/backend → /tmp/kali-sast-abc123/src/ │
└───────────────────────┬─────────────────────────────────────────┘
│ parallel
┌───────────────┼───────────────┬──────────────┐
▼ ▼ ▼ ▼
Semgrep Bandit Gitleaks Graudit
(multi-lang) (Python*) (secrets) (lang-aware)
│ │ │ │
└───────────────┴───────────────┴──────────────┘
│ consolidated report
▼
~/kali-mcp-reports/sast/backend-api/v002_20240120_091500_sast_all.mdBandit is automatically skipped if no .py files are found.
Graudit uses language auto-detection to target the right rule databases (e.g. python,js,code).
Report Naming
~/kali-mcp-reports/
sast/
{project}/
v001_20240115_103000_sast_all.md
v002_20240120_091500_sast_semgrep+bandit.md
v003_20240125_140000_sast_all.mdDAST Scanning
Run dynamic analysis against a live web application.
AI: "Run a full authenticated DAST scan on http://192.168.1.50, form login at /login"Authentication modes:
| How it works |
| Standard unauthenticated crawl |
| Injects |
| Injects |
| Injects |
| Generates ZAP Automation Framework YAML — full login flow |
What runs on Kali (parallel):
ZAP (spider → passive scan → active scan)
+
Nuclei (CVE + template detection)
│
▼
~/kali-mcp-reports/dast/192.168.1.50/v001_20240115_103000_dast_full_form-auth.mdReport Naming
~/kali-mcp-reports/
dast/
{host}/
v001_20240115_103000_dast_baseline_unauth.md
v002_20240116_090000_dast_full_form-auth.md
v003_20240118_143000_dast_full_bearer-auth.mdConfiguration Reference
Variable | Default | Description |
| — | Required. Kali machine IP or hostname |
|
| SSH port |
| — | Required. SSH username |
| — | SSH password (prefer key auth) |
| — | Path to private key — |
| — | Passphrase for encrypted private key |
|
| HTTP server port |
|
| HTTP bind address |
| — | API key to protect the HTTP endpoint |
|
| Default command timeout (5 min) |
|
| nmap timeout (10 min) |
|
| sqlmap timeout (15 min) |
|
| SAST scan timeout (15 min) |
|
| DAST scan timeout (30 min) |
|
| Local audit log file |
|
| Report directory on Kali |
Audit Logging
Every command is logged with a full timestamp:
{"timestamp":"2024-01-15 10:30:00","level":"info","message":"COMMAND_EXECUTED",
"tool":"nmap_scan","command":"nmap -T4 -F 192.168.1.1","target":"192.168.1.1"}Log: ./logs/audit.log — rotates at 50MB, keeps 5 files.
Server Commands
# HTTP mode — ChatGPT / Gemini
npm run start:http
# stdio mode — Claude Desktop (usually auto-launched)
npm run start:stdio
# Health check
curl http://localhost:3000/healthSecurity Considerations
Concern | Mitigation |
Unauthorized access | Set |
Credential theft | Use SSH key auth over password |
Command injection | Tool schemas use enums and typed params — only |
Audit trail | All commands logged with timestamp, tool, target, and full command string |
Source code exposure | SAST uploads code temporarily — deleted immediately after scan |
Network exposure | Restrict port 3000 at firewall level; bind to |
Tool Requirements on Kali
Tool | Install |
nmap | Pre-installed |
nikto |
|
sqlmap | Pre-installed |
gobuster |
|
ffuf |
|
whatweb | Pre-installed |
hydra | Pre-installed |
metasploit | Pre-installed |
semgrep |
|
bandit |
|
gitleaks |
|
graudit |
|
zaproxy |
|
nuclei |
|
Troubleshooting
SSH connection fails:
ssh -i ~/.ssh/id_rsa kali@<host>Tool not appearing in Claude Desktop:
Verify absolute path in
claude_desktop_config.jsonRestart Claude Desktop after config changes
Check logs:
~/Library/Logs/Claude/(macOS)
ZAP / Nuclei / Semgrep not found:
apt install zaproxy nuclei gitleaks graudit
pip install semgrep banditLicense
MIT — see LICENSE for details.
Built for authorized security professionals. Assess responsibly.
Available Tools
11 toolsdast_scanA
Perform Dynamic Application Security Testing (DAST) against a running web application. Runs OWASP ZAP (spider + passive/active scan) and Nuclei (CVE/template detection) in parallel on the Kali machine. Supports unauthenticated and authenticated scans (HTTP Basic, Bearer token, Cookie injection, Form-based login). Generates a versioned consolidated report saved on Kali.
| Name | Required | Description | Default |
|---|---|---|---|
| token | No | Bearer token (auth_type=bearer) | |
| password | No | Password for basic or form auth | |
| username | No | Username for basic or form auth | |
| auth_type | No | "none" = unauthenticated. "basic" = HTTP Basic/Digest (username + password). "bearer" = Authorization: Bearer <token>. "cookie" = Cookie header injection. "form" = form-based login via ZAP Automation Framework. | none |
| login_url | No | Login page URL (auth_type=form) | |
| scan_type | No | "baseline" = passive spider + passive scan (fast, non-intrusive). "full" = full active scan with attack payloads (thorough, slower). "api" = API-focused scan (uses zap-api-scan.py) | baseline |
| run_nuclei | No | Run Nuclei for CVE and template-based detection in parallel with ZAP. | |
| target_url | Yes | Target web application URL. Example: "http://192.168.1.10" or "https://app.example.com" | |
| ajax_spider | No | Enable AJAX spider for Single Page Applications (React, Angular, Vue). Slower but finds more endpoints. | |
| cookie_value | No | Full Cookie header value, e.g. "sessionid=abc123; csrftoken=xyz" (auth_type=cookie) | |
| password_field | No | Form field name for password (auth_type=form). Default: "password" | |
| username_field | No | Form field name for username (auth_type=form). Default: "username" | |
| login_success_regex | No | Regex to detect successful login in response body (auth_type=form). Default: "logout" |
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 well: it discloses the parallel execution model (ZAP + Nuclei), the underlying machine (Kali), the auth support matrix, and the output as a 'versioned consolidated report saved on Kali.' It doesn't mention scan duration, rate limits, or whether it requires the target to be reachable from the Kali machine, but the operational profile is substantially richer than average.
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, front-loaded with the core action, then engines, then auth, then output. No filler and each sentence adds incremental information. Slightly dense but well-organized.
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 13-param tool with no annotations and no output schema, the description covers what the tool does, its engines, auth options, and output location. It does not need to explain return values (report is saved, not returned) and the schema handles parameters. Minor gaps around sibling selection and failure modes remain.
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 13 parameters in detail, including enums and defaults. The description adds the auth-mode summary ('HTTP Basic, Bearer token, Cookie injection, Form-based login') and names the two engines, but this is largely redundant with the schema. Baseline 3 applies when the schema does the heavy lifting.
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?
States a specific verb and resource: 'Perform Dynamic Application Security Testing (DAST) against a running web application.' It further distinguishes itself by naming the exact toolchain (OWASP ZAP spider + passive/active scan, Nuclei) and scope (running web app). Against siblings like nmap_scan, nikto_scan, or sqlmap_scan, the function is clearly differentiated.
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 usage for a running web application and lists supported auth modes, but never explicitly states when to choose this over siblings like nikto_scan or sqlmap_scan, nor when-not to use it. For an agent selecting among ten security scan tools, this is a meaningful gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ffuf_fuzzB
Run ffuf web fuzzer against a target URL on the remote Kali machine. Place the keyword FUZZ anywhere in the URL, headers, or body to mark the injection point. Useful for directory discovery, parameter fuzzing, and virtual host enumeration.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Target URL with FUZZ keyword marking the injection point. Example: "http://target.example.com/FUZZ" or "http://target.example.com/page?id=FUZZ" | |
| data | No | POST body data (use with method="POST"). Can include FUZZ. Example: "username=FUZZ&password=test" | |
| method | No | HTTP method to use for requests | GET |
| threads | No | Number of concurrent threads. Default: 40 | |
| wordlist | No | Path to wordlist on Kali machine. Default: /usr/share/wordlists/dirb/common.txt | /usr/share/wordlists/dirb/common.txt |
| filter_size | No | Hide responses with this exact response size (bytes) | |
| filter_codes | No | Comma-separated HTTP status codes to hide from results. Example: "404,400" |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It usefully discloses that execution happens on a remote Kali machine, but says nothing about request volume/rate, detectability, runtime, permissions on the Kali host, or how results are surfaced for a high-volume active fuzzing 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?
Two tight sentences: the first front-loads what the tool is and where it runs, the second explains the FUZZ injection marker and the main use cases. 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?
There is no output schema and no annotations, and the description does not explain result format, where output lands, or runtime expectations for a 7-parameter active scanning tool. It is adequate for purpose and the FUZZ mechanic but leaves the agent guessing about results and operational side effects.
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; every parameter is already documented with examples in the schema. The description adds only a mild note that FUZZ can also be placed in 'headers', which has no corresponding schema parameter, so it adds little usable meaning.
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?
States a specific verb and resource ('Run ffuf web fuzzer against a target URL') plus the distinctive FUZZ-keyword mechanism, so the agent knows exactly what it does. It does not differentiate itself from the closely related sibling gobuster_scan, which also does directory discovery, so it stops short of a 5.
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?
'Useful for directory discovery, parameter fuzzing, and virtual host enumeration' gives implied usage contexts but never says when to choose this over gobuster_scan, nmap_scan, or sqlmap_scan, and offers no exclusions or prerequisites. Coverage is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gobuster_scanB
Run Gobuster directory/file/subdomain enumeration against a target on the remote Kali machine. Discovers hidden paths, files, and virtual hosts through brute-force enumeration.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Target URL for dir/file mode, or base domain for DNS mode. Example: "http://target.example.com" | |
| mode | No | "dir" = directory/file brute-force, "dns" = subdomain enumeration, "vhost" = virtual host discovery | dir |
| threads | No | Number of concurrent threads. Default: 10 | |
| wordlist | No | Path to wordlist on Kali machine. Default: /usr/share/wordlists/dirb/common.txt | /usr/share/wordlists/dirb/common.txt |
| extensions | No | File extensions to search for (dir mode only). Example: "php,html,txt" | |
| status_codes | No | Comma-separated HTTP status codes to show. Default shows all non-404. Example: "200,301,302" |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does add one valuable operational fact: the scan runs on a remote Kali machine. However, it omits run-time traits like expected duration, noisiness/intrusiveness, timeouts, or whether results are streamed or returned at completion.
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, front-loaded with the action and resource, with the discovery outcome second. No filler, though it is brief enough that it could have afforded one more sentence of routing guidance.
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 6-parameter brute-force tool with no annotations and no output schema, the description covers the basics but leaves gaps around authorization assumptions, runtime expectations, and result format. Adequate minimum viability, not 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%, so the schema already documents all six parameters including mode semantics and defaults. The description adds no parameter-level detail beyond the mode list, so baseline 3 is appropriate.
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?
States a specific verb (run Gobuster enumeration) and resource (directory/file/subdomain targets), and names the three discovery outcomes (hidden paths, files, virtual hosts). It implicitly separates itself from nmap_scan and ffuf_fuzz by naming Gobuster's modes, but never explicitly contrasts with the similarly-scoped ffuf_fuzz sibling.
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?
No guidance on when to choose this over the closely related ffuf_fuzz tool, nor any prerequisites (e.g., needing a valid target, being authorized). The description only describes what the tool does, leaving the agent to infer when it is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hydra_attackC
Run Hydra password brute-force/dictionary attack against a target service on the remote Kali machine. Supports SSH, FTP, HTTP, SMB, and many other protocols.
| Name | Required | Description | Default |
|---|---|---|---|
| port | No | Override the default port for the service | |
| target | Yes | Target IP address or hostname. Example: "192.168.1.10" | |
| service | Yes | Target service/protocol to attack | |
| threads | No | Number of parallel attack threads. Default: 16 | |
| password | No | Single password to try. Mutually exclusive with password_list. | |
| username | No | Single username to try. Mutually exclusive with username_list. | |
| password_list | No | Path to password wordlist on Kali machine. Default: /usr/share/wordlists/rockyou.txt | /usr/share/wordlists/rockyou.txt |
| username_list | No | Path to username wordlist on Kali machine. Example: "/usr/share/wordlists/usernames.txt" | |
| http_form_params | No | For http-post-form: form path and parameters. Example: "/login.php:user=^USER^&pass=^PASS^:Invalid" |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden, and it does add one useful fact: the attack executes on a remote Kali machine, not locally. However, it never warns that brute-forcing is noisy, may trigger account lockouts or IDS alarms, requires explicit authorization, or can take arbitrarily long. For a high-risk offensive tool these omissions are significant.
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 sentences, no filler, with the action front-loaded before the protocol coverage. Nothing needs to be cut and nothing is buried.
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 nine-parameter, unannotated, no-output-schema offensive tool, the description is thin. It says nothing about what a successful run returns (recovered credentials?), the time cost, lockout risk, or any safety/authorization expectation, all of which an agent needs before invoking a password brute-forcer.
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%, with each of the nine parameters documented in the schema itself, so this is a baseline 3. The description's protocol list loosely corresponds to the 'service' enum but adds no syntax or usage detail beyond what the schema already states.
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 names a specific tool, action, and resource: 'Run Hydra password brute-force/dictionary attack against a target service.' It also lists supported protocols, which is enough for an agent to distinguish it from siblings like nmap_scan or sqlmap_scan. It stops short of explicitly contrasting itself with any sibling by name.
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?
There is no guidance on when to use this tool versus alternatives (e.g., metasploit_exec, which also has credential attack modules) and no stated prerequisites such as authorization, scope, or network reachability of the target. The agent is left to infer context entirely from the tool's name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
metasploit_execB
Execute a Metasploit Framework module non-interactively on the remote Kali machine via msfconsole. Runs a single module with provided options and exits cleanly. Only for authorized penetration testing engagements.
| Name | Required | Description | Default |
|---|---|---|---|
| module | Yes | Full module path. Example: "exploit/multi/handler" or "auxiliary/scanner/portscan/tcp" | |
| options | Yes | Module options as key-value pairs. Example: {"RHOSTS": "192.168.1.10", "RPORT": "445"} | |
| payload | No | Payload to use with exploit modules. Example: "windows/x64/meterpreter/reverse_tcp" | |
| run_command | No | "run" or "exploit" executes the module, "check" only tests if the target is vulnerable | run |
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 that execution is non-interactive, runs a single module, and exits cleanly, which is useful behavioral context. However, it says nothing about required privileges, side effects on the target, timeout behavior, or whether the output is captured, leaving materially important traits undisclosed for a remote exploitation 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?
Three sentences, front-loaded with the core action and execution context, followed by a scoping constraint. Efficient and free of filler, though the final authorization sentence could arguably be considered boilerplate rather than tool-selection-relevant.
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 4-parameter remote exploitation tool with no annotations and no output schema, the description covers purpose, method, and authorization scope. It omits operational expectations an agent would need to call it safely and correctly, such as session handling, expected output, and error behavior. Adequate but with clear gaps.
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 four parameters including examples and the run_command enum. The description adds no parameter-level detail beyond what the schema provides. Per the rubric baseline, this is a 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?
States a specific verb ('Execute') and resource ('Metasploit Framework module') plus the execution context (non-interactively on remote Kali via msfconsole). It is distinguishable from siblings like nmap_scan or sqlmap_scan, but it does not explicitly contrast with shell_exec, which could also run arbitrary commands. Clear purpose, but sibling differentiation is implicit rather than stated.
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?
Provides the authorization constraint ('Only for authorized penetration testing engagements') and specifies single-module non-interactive execution, implying when to use it. However, it gives no explicit when-to-use vs alternatives guidance, such as when to pick this over shell_exec or sqlmap_scan. Usage context is implied but not fully delineated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nikto_scanA
Run a Nikto web server vulnerability scan against a target URL on the remote Kali machine. Detects dangerous files, outdated software, and common web server misconfigurations.
| Name | Required | Description | Default |
|---|---|---|---|
| ssl | No | Force SSL/TLS even on non-443 ports | |
| url | Yes | Target URL including scheme. Example: "http://192.168.1.10" or "https://target.example.com" | |
| port | No | Override the default port derived from the URL scheme (80/443) | |
| extra_args | No | Additional nikto flags. Example: "-Tuning 1" to limit tests. No shell metacharacters. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It usefully discloses that execution happens on a remote Kali host and that it probes for dangerous files and misconfigurations, but says nothing about intrusiveness, scan duration, authentication/network prerequisites, or that extra_args can meaningfully change behavior. Some context is added, but key operational traits are missing.
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, front-loaded with the action and target, followed by the finding categories. 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?
For a four-parameter scanning tool with no annotations and no output schema, the description covers purpose and detection scope but omits runtime expectations, safety profile, and how to interpret results. Adequate as a minimum-viable definition, with clear gaps for an agent that must decide between it and nine sibling tools.
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 url, port, ssl, and extra_args with examples. The description adds no parameter-level detail beyond the schema, which is the baseline-3 case when structured fields do the heavy lifting.
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?
States a specific tool (Nikto), a specific verb (run), a specific resource (web server vulnerability scan), and the execution location (remote Kali machine), plus the classes of findings it produces. This distinguishes it from nmap_scan (port scanning), whatweb_fingerprint (fingerprinting), and sqlmap_scan (SQL injection).
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 says what the tool does but never states when to reach for it versus siblings like nmap_scan, whatweb_fingerprint, or the generic dast_scan. There are no prerequisites, no exclusions, and no routing guidance for an agent choosing among ten scan/attack tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nmap_scanB
Run an nmap port scan against a target host or network on the remote Kali machine. Use for reconnaissance: discovering open ports, running services, and OS detection.
| Name | Required | Description | Default |
|---|---|---|---|
| ports | No | Port specification to override scan_type defaults. Example: "80,443" or "1-1024" | |
| target | Yes | Target IP address, hostname, or CIDR range. Example: "192.168.1.1" or "10.0.0.0/24" | |
| scan_type | No | Scan profile: "quick" (fast top-100 ports), "service" (service/version detection), "os" (OS fingerprinting), "full" (all 65535 ports), "stealth" (SYN scan, less noisy), "udp" (UDP scan) | quick |
| extra_args | No | Additional nmap flags. Example: "--script vuln" or "-sC". Must not include target or port flags. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden, but it discloses almost nothing beyond recon intent and remote execution. It doesn't state noise/detectability level, authorization requirements, runtime or timeout behavior, or whether a scan may be intrusive — all material for a port-scanning tool. The 'remote Kali machine' detail is the one useful behavioral note.
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 with the core action front-loaded and the reconnaissance use case following. No filler, though it could have used the space to note a behavioral constraint instead of restating the purpose.
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 four-parameter tool with full schema coverage and no output schema, the description covers what the tool does and roughly when to use it. It is adequate but leaves behavioral gaps (detectability, auth, timing) unaddressed for a network-scanning 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% and the enum for scan_type is fully documented in the schema, including profile meanings and the ports override. The description adds no parameter meaning beyond the schema, 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?
States a specific verb+resource: 'Run an nmap port scan against a target host or network on the remote Kali machine,' naming the exact tool and execution environment. An agent can distinguish it from siblings like nikto_scan, sqlmap_scan, or gobuster_scan by the resource and method, though it doesn't explicitly contrast them.
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?
'Use for reconnaissance: discovering open ports, running services, and OS detection' gives a clear use context. However, it names no alternatives (e.g., whatweb_fingerprint for web fingerprinting) and states no exclusions, so routing decisions between siblings are only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sast_scanA
Perform Static Application Security Testing (SAST) on a local code directory. Syncs code to Kali Linux via SFTP, runs Semgrep (multi-language), Bandit (Python), Gitleaks (secrets), and Graudit (language-targeted pattern matching) in parallel, then generates a versioned consolidated security report saved to the Kali machine. Uploaded source code is deleted after scanning.
| Name | Required | Description | Default |
|---|---|---|---|
| tools | No | Which SAST tools to run. Defaults to all four. Bandit is automatically skipped when no Python files are found regardless of this setting. | |
| local_path | Yes | Absolute path to the local code directory to scan. Example: "/Users/me/projects/myapp" | |
| project_name | Yes | Project name used to organise versioned reports. Example: "myapp" or "backend-api" | |
| exclude_patterns | No | File/directory names to exclude from upload and scanning. |
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 well: it discloses that source is synced off-machine to Kali over SFTP, that the consolidated report is written to the Kali host (not locally), and that uploaded source is deleted after scanning — materially important side effects. It omits prerequisites such as Kali connectivity/credentials and failure behavior, so it falls short of a 5.
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 tightly packed sentences with the core action front-loaded, followed by execution mechanics and cleanup semantics. No filler or restatement of the tool name, and every clause conveys operational information.
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 that depends on external infrastructure (Kali host, SFTP) there are no annotations or output schema to fill gaps, and the description never says what the caller receives back, where the versioned report lives, or what happens on connection failure. It covers the pipeline well but leaves the calling contract and prerequisites underspecified.
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 four parameters including the tool enum and Bandit's Python-skip behavior. The description only echoes the engine list and adds no parameter-level meaning, making the baseline 3 appropriate.
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?
Specific verb (Perform SAST) plus precise resource (a local code directory), and the description enumerates the exact engines run (Semgrep, Bandit, Gitleaks, Graudit). This cleanly separates it from the dynamic/network siblings like dast_scan, nikto_scan, and nmap_scan without opening any 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?
"Local code directory" implies the usage context (source you own, on disk) versus the remote-target siblings, but the description never explicitly states when to prefer this over dast_scan or names any alternative. No prerequisites or exclusions are given, leaving routing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
shell_execA
Execute an arbitrary shell command on the remote Kali Linux machine. WARNING: This is an escape hatch for advanced scenarios — prefer specific tools. Only use for commands not covered by dedicated tools.
| Name | Required | Description | Default |
|---|---|---|---|
| command | Yes | The exact shell command to execute on the Kali machine. Example: "cat /etc/os-release" or "which python3" | |
| timeout_ms | No | Override the default timeout in milliseconds (default: 300000) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full behavioral burden. It adds a warning that this is an escape hatch and should be avoided when dedicated tools suffice, which is useful context. However, it does not disclose critical behavioral traits for arbitrary shell execution, such as privilege level, potential destructiveness, reversibility, or output handling, leaving significant gaps.
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 two tight sentences with zero waste, front-loading the core action and following immediately with the critical usage warning and restriction. 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 high-complexity tool like arbitrary shell execution with no annotations and no output schema, the description covers purpose and usage guidance well. However, it does not explain return values, error behavior, or execution context (e.g., whether output is captured, how errors are surfaced), which an agent would need to call it correctly without an output schema.
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 both parameters ('command' and 'timeout_ms') are already well documented in the schema. The description adds no additional parameter semantics beyond what the schema provides, so the baseline of 3 is appropriate.
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 states a specific verb ('Execute') and resource ('arbitrary shell command on the remote Kali Linux machine'), and it distinguishes itself from the many specific scanning siblings by framing itself as an escape hatch to be used only when dedicated tools don't cover the need. An agent can immediately tell what this tool does and when it is appropriate.
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 tells the agent when to use this tool ('escape hatch for advanced scenarios', 'commands not covered by dedicated tools') and when not to ('prefer specific tools'). The alternative is named as a category ('specific tools') even if individual siblings aren't listed, which is sufficient to route correctly given the sibling set is visible elsewhere.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sqlmap_scanC
Run sqlmap SQL injection testing against a target URL on the remote Kali machine. Detects and exploits SQL injection vulnerabilities in web applications.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Target URL to test. Example: "http://target.example.com/page?id=1" | |
| data | No | POST data string for testing POST parameters. Example: "username=test&password=test" | |
| dbms | No | Force testing against a specific DBMS to speed up detection | |
| dump | No | Attempt to dump database tables after finding injectable parameters | |
| risk | No | Risk level (1-3). Higher risks include more dangerous tests (e.g., time-based). Default: 1 | |
| level | No | Test level (1-5). Higher levels test more payloads and parameters. Default: 1 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full disclosure burden and mostly fails it. It hints at active exploitation ('exploits SQL injection vulnerabilities') and notes execution on a remote Kali machine, but says nothing about authorization requirements, typical runtime, or that dump/risk=3 can extract data or stress the target.
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 short sentences, front-loaded with the action and target, and free of filler. There is mild redundancy in restating 'SQL injection' twice (testing vs. detection/exploitation), which keeps it from 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 potentially destructive offensive-security tool with no annotations and no output schema, the description is too thin: it does not describe what results are returned, how long a scan typically takes, or any safety/authorization caveat. The rich parameter schema compensates partially, but the behavioral picture remains incomplete.
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 all six parameters (url, data, dbms, dump, risk, level) are already documented with examples and defaults in the schema. The description adds no parameter meaning beyond that, making the baseline 3 appropriate.
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 names a specific tool (sqlmap), a specific vulnerability class (SQL injection), and the target (a URL), which cleanly separates it from nmap_scan, gobuster_scan, and whatweb_fingerprint. It does not, however, explicitly contrast itself with the closest sibling, dast_scan, leaving that distinction to the agent's own knowledge.
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?
There is no when-to-use or when-not-to-use guidance: nothing says this should follow reconnaissance, that the URL must contain testable parameters, or when dast_scan/nikto would be the better choice. The agent must infer routing entirely from the tool name and the single sentence of purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
whatweb_fingerprintB
Run WhatWeb web technology fingerprinting against a target URL on the remote Kali machine. Identifies web technologies, CMS, frameworks, server software, and plugin versions.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Target URL to fingerprint. Example: "http://target.example.com" | |
| aggression | No | Aggression level: 1=stealthy (single request), 2=unused, 3=aggressive (try many paths), 4=heavy. Default: 1 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It does add one genuinely useful fact – execution happens on a remote Kali machine – but it omits that this is a read-only reconnaissance probe, that it generates live requests to the target, and that the aggression parameter controls how noisy/detectable the scan is. Those are the traits an agent most needs before invoking it.
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 sentences, both earning their place: the first front-loads the verb, resource, and execution environment; the second lists the identification targets. No filler or repetition of the title.
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?
Parameters are fully documented in the schema, but there is no output schema, so the description should ideally say something about what is returned (report format, findings structure) and when this tool fits into a recon workflow. With no annotations and no output schema, the definition is adequate but leaves real gaps for an agent deciding among the scanning siblings.
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 both params (url and aggression) are already documented in the schema, including the aggression level semantics. The description adds no parameter-level meaning beyond that, so 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?
States a specific verb and resource ("Run WhatWeb web technology fingerprinting against a target URL") and enumerates what it identifies (technologies, CMS, frameworks, server software, plugin versions). This clearly separates it from vulnerability-adjacent siblings like nikto_scan or nmap_scan, though the description never names or contrasts those siblings 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 never states when to choose this tool over nmap_scan, nikto_scan, or gobuster_scan, nor any prerequisites or when-not-to-use conditions. An agent must infer that this is the passive fingerprinting option purely from the tool name.
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.
11 tool updates
v1.0.0- First observed
dast_scan - First observed
ffuf_fuzz - First observed
gobuster_scan - First observed
hydra_attack - First observed
metasploit_exec - First observed
nikto_scan - First observed
nmap_scan - First observed
sast_scan - First observed
shell_exec - First observed
sqlmap_scan - First observed
whatweb_fingerprint
TDQS
Scored across 11 tools
Most tools have clearly distinct purposes tied to specific security tools or scan types. However, gobuster_scan and ffuf_fuzz overlap in web content/vhost enumeration, and dast_scan partially overlaps with nikto_scan and sqlmap_scan for web vulnerability detection. shell_exec is generic but explicitly framed as an escape hatch.
All tool names use consistent snake_case and follow a predictable tool/object + action pattern (e.g., nmap_scan, sqlmap_scan, hydra_attack, metasploit_exec). The differing action suffixes reflect actual function without breaking the naming convention.
Eleven tools is well-scoped for a remote Kali penetration-testing bridge. Each tool covers a meaningful stage or capability, and the set avoids being either thin or bloated.
The set covers reconnaissance, scanning, enumeration, fingerprinting, brute force, exploitation, SAST, DAST, and a generic shell escape. Minor gaps remain for dedicated post-exploitation, pivoting, credential cracking, or report retrieval, though metasploit_exec and shell_exec allow workarounds.
Maintenance
Related MCP Connectors
AI pentesting: run scans, triage vulnerabilities, review PRs, manage schedules and assets.
Operate Linux, macOS and Windows from your LLM. Every action runs through an auditable allowlist.
- emisarOAuthdev.emisar
Let AI operate servers without SSH. Choose actions, approve risky changes, and audit every step.
Exposes FEDLIN's public security scanners as agent-callable tools over Streamable HTTP.
Related MCP Servers
- AlicenseNot gradedqualityNot gradedmaintenanceEnables AI assistants to execute penetration testing commands and security tools on Kali Linux remotely. Supports automated reconnaissance, vulnerability scanning, and CTF solving through integration with 25+ offensive security tools like nmap, gobuster, and nuclei.16-
- AlicenseNot gradedqualityDmaintenanceConnects AI assistants to a Kali Linux terminal for executing security tools, managing interactive shell sessions, and performing penetration testing, CTF challenges, and security research tasks.1MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to perform penetration testing and security assessments by exposing 60+ Kali Linux security tools including network scanning, web security testing, password cracking, exploitation frameworks, and OSINT capabilities through an AI-friendly interface.2MIT
- AlicenseAqualityCmaintenanceEnables AI assistants to run Kali Linux security tools in an isolated Docker container for tasks like network scanning, port checking, and service enumeration.75 npm1MIT