Summary
Web search currently supports two providers, Google Custom Search and Brave -- both external paid APIs. A large share of this plugin's audience is self-hosters running it against local OpenAI-compatible backends, and that audience typically already runs SearXNG. A SearXNG provider gives agents web search with no API key, no external dependency, and no per-query cost, entirely inside the operator's own network.
SearXNG exposes a stable JSON API (GET /search?q=...&format=json) returning results[] with title/url/content -- a direct fit for the existing websearch.Provider interface.
Implementation
PR incoming from mattezell/mattermost-plugin-agents:feat/websearch-searxng-provider following the Brave/Google pattern: websearch/searxng.go + tests, config struct + wiring in mmtools/web_search.go, system-console provider option with Base URL and result limit. Two operator-experience details baked in from real deployment: a 403 response carries a hint about SearXNG's search.formats json allowlist (the most common misconfiguration), and the Base URL help text points at AllowedUntrustedInternalConnections for instances on private/reserved addresses.
🤖 Generated with Claude Code
https://claude.ai/code/session_016e12GP7EHU2KeCGGYcfvBo
Summary
Web search currently supports two providers, Google Custom Search and Brave -- both external paid APIs. A large share of this plugin's audience is self-hosters running it against local OpenAI-compatible backends, and that audience typically already runs SearXNG. A SearXNG provider gives agents web search with no API key, no external dependency, and no per-query cost, entirely inside the operator's own network.
SearXNG exposes a stable JSON API (
GET /search?q=...&format=json) returningresults[]withtitle/url/content-- a direct fit for the existingwebsearch.Providerinterface.Implementation
PR incoming from
mattezell/mattermost-plugin-agents:feat/websearch-searxng-providerfollowing the Brave/Google pattern:websearch/searxng.go+ tests, config struct + wiring inmmtools/web_search.go, system-console provider option with Base URL and result limit. Two operator-experience details baked in from real deployment: a 403 response carries a hint about SearXNG'ssearch.formatsjson allowlist (the most common misconfiguration), and the Base URL help text points atAllowedUntrustedInternalConnectionsfor instances on private/reserved addresses.🤖 Generated with Claude Code
https://claude.ai/code/session_016e12GP7EHU2KeCGGYcfvBo