Hybrid AI documentation scraping system combining Crawl4AI (bulk) + Firecrawl MCP (on-demand) with Qdrant vector database for documentation indexing, search, and retrieval with embeddings support
18 tools present with mostly complete parameter schemas but inconsistent quality across naming, descriptions, and output documentation. Tool names follow verb_noun convention well (search_documents, generate_embeddings, add_document, etc.), but descriptions are minimal, typically 10-30 words with no guidance on when to use tools or what they return. Parameter schemas are properly typed and include descriptions, but output schemas are not documented anywhere in the provided source. No parameter enums despite obvious candidates (strategy: hybrid|semantic|keyword, analysis_type: quality|structure|semantics, quality_tier: balanced|performance|quality). Critical tools like delete_collection and clear_cache lack sufficient guidance on consequences. Error handling patterns are not evident. The codebase shows professional structure (dependency injection, async patterns, Dockerfile best practices) but tool definitions prioritize API coverage over LLM usability.
Add and index a document from URL to vector database
Analyze content for quality, structure, and insights
Clear cache entries optionally matching a pattern
Create a new vector database collection
Create a new documentation project
Delete a vector database collection
Estimate operational costs for indexing and search operations
Generate embeddings for text using configured embedding model
Output schemas not documented. No tool declares what fields/structure it returns. LLMs cannot plan downstream calls or know what data to extract.
Destructive/high-risk tools lack safety guidance. delete_collection and clear_cache have minimal descriptions and no mention of consequences, recovery steps, or confirmation patterns. An LLM may accidentally drop production data.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 49 | 2025-06-18+ | v2 |
| 2026-03-09 | F | 42 | - | v1 |
Get analytics and statistics for collections or projects
Get cache statistics and status
List all available vector database collections
List all documentation projects
Reindex a collection to update embeddings and indexes
Lightweight URL scraping using browser automation
Search documents in vector database using hybrid search strategy with optional reranking
Check system health and service status
Validate the current system configuration
Search the web for documentation and resources
Tool descriptions are too brief (10-30 words). They lack WHAT the tool does, WHEN to use it vs similar tools, and WHY the LLM should choose it. Examples: 'Get analytics and statistics for collections or projects' (8 words) does not explain when to call get_analytics vs get_cache_stats.
Enum values not declared. Parameters like strategy (hybrid|semantic|keyword), analysis_type (quality|structure|semantics), and quality_tier (balanced|performance|quality) accept free-form strings instead of constrained enums. LLMs may hallucinate invalid values.
Parameter descriptions lack format/range guidance. Numeric limits (limit: max 10 results, timeout_seconds: range 1-60, documents_count: typical range) are not documented. LLMs may pass invalid values that break APIs or cause timeouts.
Error handling patterns missing. No evidence of recovery guidance, categorization (retryable vs fatal), or actionable error messages. If add_document fails, the LLM has no next step.
Tool chaining unclear. If search_documents returns results, does it include collection_id, document_id, and url fields needed by downstream tools like add_document? Response schema is not documented.
Pagination missing. search_documents accepts limit but no offset/page/cursor parameter. Large result sets will exhaust context. List operations (list_collections, list_projects) lack pagination entirely.
Tool consolidation opportunity. search_documents, web_search, scrape_url, and analyze_content overlap in retrieval/content processing intent. Naming differences (search vs scrape vs analyze) may confuse LLM tool selection.
Idempotency not documented. It is unclear if reindex_collection, add_document, and create_project are safe to retry. Agents retry on ambiguous failures, non-idempotent tools risk duplicate side effects.