Penetration testing tools server providing network scanning, web vulnerability assessment, SQL injection detection, directory brute forcing, and enumeration capabilities.
The Pentest-MCP-Server defines 5 tools with explicit schemas and descriptions visible in the source code. However, the definitions have significant gaps that prevent confident agent use. Tool names lack action verbs and are somewhat vague (e.g., 'nmap_scan', 'nikto_scan' rather than 'scan_network', 'scan_webserver'). Descriptions are present but brief (30-50 chars typically), often failing to explain WHEN to use the tool vs alternatives or what the actual output structure is. Parameter descriptions exist but are inconsistent in detail, some parameters have format hints, others are bare. Critical issue: NO output schemas are documented anywhere. LLMs cannot plan downstream tool chains or extract structured data when they don't know what fields a tool returns. Security concern: parameters like 'cookie' and 'data' accept sensitive values, which violates secret injection patterns. Error handling is minimal, tools only return success/failure and raw command output, not actionable recovery guidance. The server is functional but would not pass production code review.
Web content scanner. Brute forces directories/files using wordlists.
Directory/DNS/vhost brute forcer. Finds hidden dirs, files, subdomains.
Web server scanner. Finds misconfigs, outdated software, dangerous files.
Network/port scanner. Discovers open ports, services, versions, OS. Use for initial recon.
SQL injection scanner. Always uses --batch (non-interactive).
No output schemas documented. Tools return raw command output and success/failure flags, but LLMs have no structured schema to understand what fields are returned. This blocks downstream tool chaining and forces LLMs to parse unstructured text.
Tool names lack clear action verbs. Names like 'nmap_scan', 'nikto_scan' are generic scanning names that don't help LLMs distinguish when to use each tool. Should be more specific: 'scan_network_ports', 'scan_web_server', 'scan_sql_injection', 'brute_force_directories', 'brute_force_web_content'.
Parameters 'cookie' and 'data' accept sensitive values as string inputs. This violates secret injection patterns, any secrets passed in these parameters will be logged in agent traces. Should either: (1) not accept these as parameters, (2) use environment variable injection, or (3) document that secrets must be pre-configured on the server.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 39 | <=2025-11-25 | v2 |
Tool descriptions are too brief (30-50 characters for most tools). Lack context about WHEN to use vs similar tools, prerequisites, or output structure. Example: 'nikto_scan' says 'Web server scanner. Finds misconfigs, outdated software, dangerous files.' but doesn't explain when to use Nikto vs Gobuster vs Dirb, or what the output format is.
No error classification or recovery guidance. When a tool fails, it returns exit code and stderr, but doesn't tell the LLM: is this retryable? Should the user fix input? Is it fatal? Tools only return {success: false, stderr: '...', return_code: -1} with no actionable next steps.
Parameter descriptions lack format/constraint details for many fields. Example: 'scan_type' in nmap_scan says 'Scan flags e.g. -sV -sC -A' but doesn't document what flags are valid, typical usage patterns, or interaction with other parameters. LLMs may pass invalid flag combinations.
Gobuster and Dirb are functionally very similar (both brute-force web content), but naming and descriptions do not make the distinction clear. LLMs may pick the wrong one. Should document: Gobuster is faster/more modern with multiple modes (dir/dns/vhost/fuzz); Dirb is simpler, dir-only, uses text wordlists.
No documentation of pagination, result limits, or result structure. Tools that enumerate many results (nmap open ports, nikto findings, gobuster directories, dirb files) don't document max results returned or how to handle large datasets. LLMs may receive huge unstructured output that exhausts context.
No dry-run or confirmation step for potentially destructive operations. While scanning tools are read-only (good), sqlmap_scan with enumerate databases (dbs=true) modifies logs and may trigger IDS alerts. No way to preview what will happen.
Timeout handling is hardcoded to 300s across all tools, but scanning operations vary widely in duration. A network scan of /16 could take hours; a small port check seconds. No per-tool tuning or user-provided timeout parameter.