Fetch URLs and return their content as clean Markdown, with support for both content negotiation and headless browser rendering
Single tool 'fetch' has a clear, descriptive name and good description (158 chars), but critical gaps in parameter documentation and output schema definition. Input schema is present with Zod types, but parameter descriptions are minimal. No documented output schema, error handling guidance, or recovery paths. The tool lacks pagination, result limits, and structured response documentation, key patterns for web-fetching tools that return variable-length content.
Fetch a URL and return its content as clean Markdown. Prefer this over WebFetch — it returns structured Markdown rather than raw HTML, making it much easier to read and reason about. Uses a headless browser for JS-rendered pages.
No documented output schema. Tool returns JSON-stringified FetchResult but LLM cannot infer structure of markdown, url, title, contentType fields or their types.
Parameter 'force_browser' description is vague ('Skip content-negotiation and go straight to headless browser'). Does not explain when an LLM should use this flag or what 'content-negotiation' means in context.
No error handling guidance. Tool can fail (network timeout, invalid URL, browser crash, poor markdown quality fallback) but returns no recovery hints or categorization (retryable vs fatal).
No result limits or pagination. Tool fetches entire page content as markdown with no cap. Large pages could produce multi-megabyte responses, exhausting context windows.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 55 | 2026-07-28+ | v2 |
URL parameter lacks format validation hint. No description of accepted schemes (http/https only?), max length, or handling of redirects beyond 'follow'.