Fetch URLs and return clean, LLM-ready markdown with metadata and prompt injection defense
Single tool 'fetch' has a well-structured schema with 8 parameters, all typed and described. Description is clear and actionable (156 chars). However, output schema is not documented, the docstring mentions 'A structured dict with url, body (markdown), metadata, links, risk_level, injection_matches, sanitization stats, and edge case info' but does not formally specify field types, required fields, or structure. Parameter descriptions are good but could be more prescriptive about constraints (e.g., timeout range, max_words bounds). No error handling guidance for LLMs (e.g., what to do if URL is unreachable or injection is detected). Deprecation warning for 'headers' param is good practice but adds complexity.
Fetch a URL and return clean, LLM-ready markdown with metadata and prompt injection scanning.
Output schema not formally documented. Docstring lists fields but does not specify types, required fields, or nested structure. LLMs cannot reliably extract or chain results without a formal schema.
Parameter constraints not fully specified. 'timeout' and 'max_words' lack min/max bounds; 'url' lacks format validation hint (e.g., 'must be a valid HTTP/HTTPS URL'). LLMs may pass invalid values.
No error recovery guidance. If fetch fails (timeout, 404, injection detected), the docstring does not tell LLMs what to do next or how to retry. Error messages are raised as ValueError but not documented.
Deprecated 'headers' parameter still present. While a deprecation warning is issued, the parameter should be removed or clearly marked as legacy in the schema. Mixing deprecated and current params confuses LLMs.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 60 | 2026-07-28+ | v2 |