Customized ZAP MCP Server for security scanning workflows with GitHub integration
This server has critical definition gaps. Tool names lack action verbs (health, scan, scan_status, scan_results instead of get_health, start_scan, get_scan_status, get_scan_results). Descriptions are present but generic (avg ~80 chars, below 194-char baseline). Input schemas exist but lack parameter descriptions, the 'options' parameter in scan is typed as object with no field documentation. Output schemas are completely undocumented; callers cannot know what fields to expect. Error handling is minimal (generic 500 errors, no recovery guidance). The scan tool combines multiple concerns (validate, generate ID, start async operation). No tool annotations (readOnlyHint, destructiveHint). Code shows async scan logic but tool definitions do not reflect idempotency or state management implications.
Health check endpoint that verifies ZAP connection and returns server status including uptime and active scan count
Start a new security scan with specified target URL and scan type (baseline, full, etc.)
Retrieve the complete results of a completed scan including alerts, summary, and generated reports
Get the current status of an active scan including progress percentage and current phase
Tool names lack action verbs. 'health', 'scan', 'scan_status', 'scan_results' do not start with verbs (get_, start_, list_). LLMs cannot infer intent from names alone.
Output schemas completely undocumented. Callers cannot know what fields health, scan_status, and scan_results return. This forces LLMs to guess field names for downstream operations.
Parameter 'options' in scan tool is typed as object with no field documentation. LLMs cannot determine what keys are valid or what values they accept.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). The scan tool is destructive (starts a security scan with side effects) but this is not declared.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 32 | <=2025-11-25 | v2 |
Error responses are generic (500 errors with error.message). No recovery guidance. E.g., 'Invalid scan type' error does not list valid types; 'Scan not found' does not suggest how to discover scan IDs.