MCP server for searching information through SearXNG. Supports various search categories, engines, languages, and specialized search types (images, news).
The server has 4 well-defined tools with clear naming following the verb_noun pattern (searxng_search, searxng_engines_info, searxng_image_search, searxng_news_search). All tools have descriptions (128 - 185 chars, within the 10 - 1024 baseline). Input schemas are present and properly typed using mcp-go builder methods (mcp.WithString, mcp.WithNumber). However, schemas lack proper enum constraints for constrained parameters (categories, engines, time_range, safe_search should enumerate valid values). Parameter descriptions are present but somewhat generic, they list examples rather than declaring formal constraints. Output schemas are not explicitly documented in the code; responses are ad-hoc JSON objects with no declared structure. Error handling is basic (generic error wrapping) and does not guide recovery. No permission gates, audit trails, or validation details visible.
Get information about available SearXNG search engines and categories
Specialized image search through SearXNG
Specialized news search through SearXNG
Search information through SearXNG. Supports various categories and search engines.
Missing enum constraints for bounded parameters. 'categories', 'engines', 'time_range', and 'safe_search' accept free-form strings or numbers instead of enums. This invites hallucinated values (e.g. 'categorie=invalid_cat' or safe_search=99). Enums are self-documenting and machine-parseable.
Output schema not documented. Handlers return ad-hoc JSON objects (with fields like 'query', 'number_of_results', 'results', 'answers', 'suggestions', 'corrections') but the response structure is not declared in the tool definition. LLMs cannot plan downstream calls without knowing what fields are present.
Parameter descriptions use example values ('day, week, month, year' for time_range) instead of formal constraints. Replace examples with enum declarations or regex patterns. LLMs latch onto examples and may pass them literally or assume they are exhaustive.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 54 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 45 | - | v1 |
Error handling is generic. Handlers return fmt.Errorf wrapping with no guidance on recovery. E.g. 'search error: <details>' tells the LLM nothing actionable. Should categorize errors (retryable, user-fixable, fatal) and suggest next steps.
No pagination documentation. 'searxng_search' accepts 'page' parameter but does not document the result limit or total count. Large result sets risk context window exhaustion. Should cap results and include total_count and has_more in response.
Parameter 'safe_search' accepts 0, 1, 2 but description states '0 - disabled, 1 - moderate, 2 - strict' as informal text. Should use an enum constraint to make valid values machine-parseable.