MCP server for converting URLs and HTML to clean Markdown
Two well-named, appropriately scoped tools with complete input schemas and reasonable descriptions. Both tools follow verb_noun naming (convert_*) and have clear action semantics. Input parameters are properly typed using Zod with descriptions. However, output schemas are not formally documented in the code, responses return structured text wrapped in MCP ContentBlock format, but no explicit schema definition is visible. Error handling is basic (isError flag + error text) without recovery guidance or categorization. Parameter descriptions are adequate but lack detail about constraints (e.g., what makes a valid URL beyond format:url). No tool annotations present (readOnlyHint, destructiveHint, idempotentHint). Tool descriptions could be more explicit about when to use each vs. the other.
Convert raw HTML to clean Markdown
Fetch a URL and convert its web page content to clean Markdown
Output schemas not formally documented. While tools return structured responses with content arrays, no explicit schema definition or parameter description documents what fields are present in the returned object (e.g., content[].type, content[].text, isError).
Error handling lacks recovery guidance. Errors return raw text (err.body || String(err)) with no guidance on what the LLM should do next, retry, ask user, or fail permanently. No error classification (retryable, user-fixable, fatal).
Parameter descriptions lack constraint details. The 'url' parameter has format:url but descriptions do not specify valid URL schemes (http/https only?), timeout behavior, or size limits. The 'html' parameter has no constraint guidance.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 56 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 10 | - | v1 |
Tool descriptions do not clearly distinguish when to use convert_url_to_markdown vs. convert_html_to_markdown. An LLM could easily pick the wrong tool if it has both HTML and a URL. Guidance needed: 'Use this when you already have raw HTML; use convert_url_to_markdown when you need to fetch a live page.'
No tool annotations. Neither tool declares readOnlyHint=true even though both are read-only operations. This prevents the LLM from optimizing execution (e.g., batching, caching). Per current MCP spec (2026-07-28), tool annotations are expected for A-grade toolkits.