Two tools with basic schemas and descriptions, but significant gaps in parameter documentation, error handling, and composition. crawl_website has reasonable parameter coverage but lacks output schema documentation. process_text mixes concerns (crawling + AI processing) and lacks clear error recovery guidance. Neither tool includes actionable error messages or recovery hints. Descriptions are present but generic (10-50 chars baseline for params). No tool annotations (readOnlyHint, idempotentHint). Output structures inferred from code, not formally documented.
Crawls a website starting from the specified URL
Process crawled text content with AI
process_text violates single-responsibility principle: combines web crawling results with AI processing. Should split into separate tools or clarify that it only processes pre-crawled content.
No output schemas documented. crawl_website returns array of page objects with fields (url, title, description, content, html, crawledAt) but this is inferred from code, not declared in tool definition. process_text output structure completely undocumented.
Error handling lacks recovery guidance. Code throws generic errors ('Invalid URL', 'Error in /api/crawl') without actionable next steps. LLM cannot determine if error is retryable, user-fixable, or fatal.
Parameter descriptions are minimal (5-20 chars). 'How many levels deep to crawl' is adequate, but 'Array of crawl result objects' and 'The task to perform' lack specificity. No constraints on task enum values (summarize, extract, analyze, questions) documented.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 36 | <=2025-11-25 | v2 |
No tool annotations present. crawl_website and process_text should declare readOnlyHint=true (both are read-only per risk assessment), and process_text should note idempotentHint if repeated calls with same input produce same output.