The server provides three web search tools (searxng_search, searxng_images, searxng_news) with explicit tool registration and JSON Schema input definitions. All three tools have descriptions and documented parameters. However, there are significant gaps in output documentation, parameter descriptions, and error handling guidance. The tools follow a clear naming convention (verb_noun) but lack depth in descriptions that would guide LLM selection. Parameter descriptions are generic and lack examples of valid values, ranges, or constraints. Output schemas are not documented anywhere in the source code, only input schemas are visible. Error messages are basic and do not guide recovery. The server implements basic input validation via Zod schemas in handlers.ts but does not return structured error responses that tell the LLM what to do next.
Search for images using SearXNG. Returns image results with URLs and thumbnails.
Search for news articles using SearXNG. Returns recent news with titles, URLs, and summaries.
Search the web using SearXNG. Returns web search results with titles, URLs, and snippets.
Output schemas are not documented. The tools return formatted text strings, but the LLM has no schema showing what structure to expect or how to extract IDs, URLs, or metadata from results. This forces the LLM to parse unstructured text, which is error-prone and wastes tokens.
Parameter descriptions are minimal and lack actionable guidance. E.g., 'Comma-separated categories: general, images, news, videos, music, files, it, science, social media' lists values in the description instead of declaring an enum constraint. The description for 'pageno' does not state the valid range (e.g., starting from 1) or mention pagination behavior.
Error responses do not guide recovery. In server.ts, when a tool call fails, the error is returned as plain text ('Error: {errorMessage}'), with no suggestion of what the LLM should do next. For example, if SearXNG is unreachable, the error should suggest 'Check SEARXNG_BASE_URL configuration' or 'Retry in 30 seconds'.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 48 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 42 | - | v1 |
searxng_images and searxng_news lack detailed tool descriptions. They are only 39 and 44 characters respectively, below the recommended 50 - 200 character range for LLM optimization. The descriptions do not explain WHEN to call these tools vs the general search tool, or what data they return.
No pagination or result limiting documented. The tools accept a 'pageno' parameter but the tool descriptions do not explain pagination behavior (e.g., 'Results are paginated. Default limit is 10 per page'). The formatSearchResults utility (not shown in full) may truncate results, but the LLM is not told what to expect or how many results it will receive.
No idempotency or dry-run support. The tools modify state indirectly by sending requests to an external SearXNG instance. If a network failure occurs mid-request, the agent does not know whether to retry or assume the search already executed. The tool descriptions do not guarantee idempotency.