Multi-provider web search with failover, supporting DuckDuckGo, Tavily, Brave, and Gemini. Includes content extraction and quota management.
Three tools with complete schemas and descriptions, but significant gaps in parameter documentation and error handling guidance. WebSearch has 13 parameters with minimal descriptions (many under 20 chars). WebFetch lacks type clarity on the 'url' parameter (string|array union). WebSearchConfig is minimal. No tool descriptions explain error recovery paths or when to use one tool vs another. Output schemas are not documented. Descriptions average ~80 chars, below the 194-char baseline for A+ tools.
Fetch and extract content from one URL or a batch of URLs.
Search the web with quota-aware provider failover and smart defaults.
Inspect or hot-reload Pivot Web Search plugin configuration.
WebSearch parameter descriptions are too brief and lack constraints. 'Time filter (d=day, w=week, m=month, y=year)' uses examples instead of enum; 'Provider search depth (basic or advanced)' lacks format specification. LLMs cannot reliably infer valid values from examples.
WebFetch 'url' parameter accepts 'string|array' but schema type is ambiguous. No description clarifies when to pass a single URL vs array, or how batch results are structured. Union types without clear guidance cause LLM confusion.
No tool descriptions explain error recovery or when to use one tool vs another. WebSearch description does not mention when to use super_mode, what happens on provider failure, or how to interpret partial results. Missing recovery guidance per pattern:recovery-guide.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 51 | <=2025-11-25 | v2 |
Output schemas are not documented. LLMs cannot plan downstream calls or extract fields without knowing the response structure. WebSearch returns 'sources' and 'answer' but this is inferred from code, not declared in tool definition.
WebSearchConfig 'action' parameter lacks enum constraint. Description says 'status or reload' but no formal enum prevents LLM from passing invalid values like 'check' or 'restart'.