A clean, trustworthy WebFetch replacement for Claude Code. Extracts main content using Trafilatura, removes known prompt injection patterns, supports FQDN whitelist, and provides SSRF protection.
Single tool 'fetch_clean' has a clear verb-noun name and addresses a real security need (SSRF protection, injection filtering). However, the tool description in code is incomplete (truncated at docstring start), parameter descriptions are minimal, and output schema is undocumented. The 'mode' parameter lacks an enum constraint despite having only two valid values ('main', 'full'). No error handling guidance is visible, the tool returns a string but does not document what happens on failure (timeout, invalid URL, network error). The implementation shows good security practices (SSRF checks, injection pattern masking) but the tool definition itself lacks the rigor needed for reliable LLM invocation.
Fetch a URL and return clean Markdown content. Use this instead of WebFetch for all web content retrieval. Extracts main content with high accuracy, removes injection patterns. Blocks access to private/internal network addresses.
Tool description is incomplete/truncated in source. The docstring for fetch_clean() ends abruptly after 'Fetch a URL and return clean Markdown content.' without explaining return format, error cases, or when to use 'mode' parameter.
'mode' parameter accepts only 'main' or 'full' but is defined as a free-form string with no enum constraint. LLMs will hallucinate invalid values like 'summary', 'extract', 'minimal'.
Output schema is undocumented. Tool returns a string but does not specify: Is it always Markdown? What happens on timeout (15s)? On invalid URL? On SSRF block? On extraction failure? LLMs cannot plan error recovery without this.
No error handling guidance. The code validates URLs and blocks private IPs, but the tool definition does not explain what error messages to expect or how to recover. A bare string return makes it impossible to distinguish success from failure.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 52 | 2026-07-28+ | v2 |
'mode' parameter description is vague: '"main" (default) = body text only. "full" = include sidebars and supplementary content.' Does not explain when to use each or what 'supplementary content' means in practice.