Two tools with complete schemas and reasonable descriptions. searxng_web_search has good parameter coverage with enums for constrained inputs (time_range, safesearch, language). web_url_read is minimal but functional. Both descriptions exceed 20 chars and explain purpose. However, parameter descriptions are sparse (e.g., 'URL' for web_url_read is only 3 chars), output schemas are undocumented, and error handling guidance is absent. No tool annotations (readOnlyHint, idempotentHint). Naming follows verb_noun pattern correctly. Missing: output structure documentation, error recovery guidance, and richer parameter context.
Performs a web search using the SearXNG API, ideal for general queries, news, articles, and online content. Use this for broad information gathering, recent events, or when you need diverse web sources.
Read the content from an URL. Use this for further information retrieving to understand the content of each URL.
Output schemas undocumented. searxng_web_search returns formatted text (title/description/url tuples), web_url_read returns markdown. LLMs cannot plan downstream tool calls or extract structured data without knowing response format.
web_url_read parameter description is only 3 characters ('URL'). LLM cannot infer whether to pass full URLs, relative paths, or URIs.
No error handling guidance. If SearXNG API fails (500, timeout, auth error), the tool throws raw errors. LLM receives no recovery hints (e.g., 'Check SEARXNG_URL env var' or 'Retry with different query').
No tool annotations. Both tools are read-only (idempotent, safe to retry), but lack idempotentHint or readOnlyHint annotations. LLM cannot distinguish these from destructive tools without reading descriptions.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 55 | 2026-07-28+ | v2 |
searxng_web_search accepts 'language' with default 'all', but description says 'Default is instance-dependent.' Contradictory defaults confuse LLMs about whether to pass the param.