MCP server that points an AI agent at a LIVE URL and confirms which secret files are publicly served — exposed .git, .env, JS source maps, backup/SQL dumps, directory listing and dotfiles — by fetching the bytes, not a checklist. Zero deps, read-only.
Two tools with clear, detailed descriptions and proper JSON schemas. scan_web_exposure has comprehensive parameter documentation (url, only, timeout_ms) with type constraints and enum validation for 'only'. list_exposure_checks is minimal but functional. Both tools are read-only with no destructive operations. Naming follows verb_noun pattern (scan_, list_). However, output schemas are not formally documented, responses are returned as text blobs containing JSON, not structured tool output. Parameter descriptions are strong but lack explicit format/range guidance for timeout_ms. No error recovery guidance in descriptions.
List every exposure check this server can run, with its id, severity, and the paths it probes. Use this to discover check ids for the `only` filter of scan_web_exposure.
Probe a LIVE deployed URL and confirm which sensitive files/directories are actually publicly reachable — by fetching the bytes, not guessing. Detects exposed .git, .env secrets, JavaScript source maps, backup/SQL dumps & archives (.bak/.sql/.zip), directory listing, and sensitive dotfiles (.htpasswd/.npmrc/.aws/credentials/.ssh/id_rsa). Read-only: nothing is written to the target. Returns only findings that are genuinely served, with evidence.
Output schemas not formally documented. Tools return text content with embedded JSON rather than structured response objects. LLMs cannot reliably parse or chain results.
No error recovery guidance in tool descriptions. Errors are returned as text blobs (e.g. 'Error: missing required argument: url') without actionable next steps for the LLM.
timeout_ms parameter lacks explicit range/format guidance. Description says 'default 10000' but does not specify min/max bounds, allowing LLMs to pass absurd values (e.g. 999999999).
list_exposure_checks description is generic and does not explain when/why to call it relative to scan_web_exposure. Missing dependency hint like 'Call this first to discover check ids for the only filter.'
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 55 | 2026-07-28+ | v2 |
No tool annotations (readOnlyHint, idempotentHint) declared in tool definitions, despite both tools being read-only and idempotent. Agents cannot infer safety properties.