MCP server and CLI for fetching web content as HTML, Markdown, plain text, JSON, or YouTube transcripts
This server defines 6 fetch tools with consistent naming, present but generic descriptions, and complete input schemas. All tools follow verb_noun naming (fetch_*), which is a strength. However, descriptions are brief and lack actionable context about when to use each tool vs alternatives. Parameter descriptions are minimal, most just state what the parameter does without constraints, ranges, or format guidance. Output schemas are undocumented (no response structure specification). Error handling is basic: the code shows error reporting capability but no recovery guidance in descriptions. Security is solid (no credentials as parameters), but composition could be clearer, the semantic distinction between fetch_html, fetch_markdown, fetch_txt, and fetch_readable is not well explained.
Fetch a website and return its unmodified contents as HTML
Fetch a JSON file from a URL
Fetch a website and return its contents converted to Markdown
Fetch a website and return its main content parsed by Mozilla Readability, converted to Markdown. Strips away navigation, ads, and boilerplate. Ideal for articles and blog posts.
Fetch a website, convert the content to plain text (no HTML)
Fetch a YouTube video page and extract its captions/transcript
Output schemas are undocumented. The tools return structured data (HTML, Markdown, plain text, JSON, parsed articles, transcripts) but there is no specification of the response object structure, field names, or types. LLMs cannot plan downstream tool calls or extract fields reliably without knowing what fields to expect.
Descriptions lack actionable context for tool selection. Descriptions are under 100 characters and do not explain when to use each variant. For example, fetch_readable and fetch_markdown are both HTML-to-text conversion tools, but the distinction ('main content extraction' vs 'full page markdown') is only obvious from detailed inspection. LLMs will struggle to pick the right one.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 57 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 46 | - | v1 |
Parameters lack constraints and format guidance. The 'headers' parameter is described as 'Optional headers to include in the request' but does not specify the object structure (are they key-value pairs? a JSON object?). The 'max_length' and 'start_index' parameters have no documented min/max bounds, an LLM could pass negative numbers or absurdly large values. The 'lang' parameter in fetch_youtube_transcript has no enum of valid language codes.
Error handling lacks recovery guidance. The code includes error reporting capability but descriptions do not guide LLMs on what to do if a fetch fails. For example, if a URL is unreachable, should the agent retry? Try an alternative format? Ask the user for a different URL? No guidance is provided.
Tool composition is not explained. Five of six tools perform HTML-to-text conversion (fetch_html, fetch_markdown, fetch_txt, fetch_readable). The rubric demands that 'each tool should do exactly one thing' and when multiple tools operate on the same resource, 'their names must make the distinction obvious.' The overlap is confusing, it is not immediately clear that fetch_readable strips ads/nav while fetch_markdown does not, or why fetch_html is useful when fetch_markdown/fetch_txt also extract text.