A Model Context Protocol server that crawls documentation websites and summarizes their content using Google's Gemini API
Single tool 'crawl_and_summarize' has a clear action verb and basic description, but critical gaps undermine quality. Input schema is visible with 'url' parameter (string type), but lacks description for the parameter itself, violating the rule that every parameter needs a description. The tool description (67 chars) is below the 194-char baseline and lacks WHEN to use it, prerequisites, or what it returns. No output schema is documented, LLMs cannot plan downstream calls or extract results. Error handling is minimal; the code catches errors but returns generic McpError without recovery guidance. The tool combines web crawling AND summarization (two concerns), violating single-responsibility. No pagination, no rate limiting, no idempotency guarantees.
Crawls a documentation website starting from a given URL, extracts text content from the initial page and linked pages, and summarizes the combined content using Google's Gemini API
Parameter 'url' lacks description. LLMs cannot infer whether to pass a full URL, a domain, or a path. Violates pattern:tool-description.
No output schema documented. LLMs cannot know what fields the summarized result contains, blocking downstream tool composition and result extraction.
Tool description (67 chars) is below baseline (194 chars) and omits WHEN to use it, prerequisites (Gemini API key), and what it returns. Insufficient for LLM selection.
Tool combines two responsibilities: web crawling AND summarization. Should split into separate tools (crawl_documentation, summarize_text) per pattern:tool single-responsibility.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 38 | 2026-07-28+ | v2 |
Error handling returns generic McpError without recovery guidance. Per pattern:recovery-guide, errors should tell LLMs what to do next (e.g., 'Crawl failed: URL unreachable. Verify the domain is accessible.').