Web scraping → LLM-ready Markdown with byte-level provenance (MCP server)
Single tool with minimal but present schema and description. Tool name 'fetch_and_convert' uses verb_noun pattern correctly. Description is 97 chars (within 10-1024 range) but lacks WHEN/WHY context for LLM selection. Input schema declares 'url' as string with description, but lacks format constraints (e.g., must be valid HTTP/HTTPS URL). No output schema documented, LLM cannot predict return fields. No error handling guidance. Tool is read-only (safe), but lacks idempotent/readonly annotations. Composition is single-purpose (good), but parameter validation and error recovery are absent.
Fetch a URL and convert it to Markdown with byte-level provenance.
No output schema documented. LLM cannot predict return fields (url, markdown, content_hash, bytes_sha256, status_code, fetched_at). Breaks tool-chaining and forces LLM to guess field names.
Input parameter 'url' lacks format constraint. Description does not specify valid schemes (HTTP/HTTPS only?), URL length limits, or handling of redirects. LLM may pass invalid URLs.
Tool description (97 chars) lacks WHEN/WHY context. Does not explain when to use this vs other fetch tools, prerequisites (e.g., public URLs only?), or failure modes. LLM cannot determine if this is the right tool.
No error handling guidance. Tool can fail (network timeout, invalid URL, 404, SSRF block). No recovery hints provided to LLM (e.g., 'If URL is blocked, try a different domain').
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 55 | 2026-07-28+ | v2 |
No tool annotations (readOnlyHint, idempotentHint). Tool is read-only and idempotent, but LLM cannot infer this. Should declare via annotations for safer agent planning.