Modèle / jeu de données
ihor-sokoliuk/mcp-searxng avatar
ihor-sokoliuk/mcp-searxng

mcp-searxng : brancher la recherche web d'un assistant sur votre propre instance SearXNG

Private web search for AI assistants via SearXNG — supports Claude, Cursor, and any MCP client

1 239 étoiles160 forksTypeScriptMIT

En bref

De quoi s’agit-il ?
Un serveur MCP en TypeScript qui expose l'API SearXNG aux clients compatibles (Claude, Cursor, VS Code, Cline). L'intérêt réel tient à un point : la requête part vers une instance que vous choisissez, pas vers un moteur tiers facturé à la clé d'API.
À qui s’adresse-t-il ?
Adoptez mcp-searxng si vous exploitez déjà une instance SearXNG, ou si vous acceptez d'en administrer une, et que vos requêtes ne doivent pas transiter par un opérateur de recherche commercial. Passez votre chemin si vous cherchez une recherche web sans aucune infrastructure à maintenir : il n'y a pas d'instance publique par défaut, et le README précise qu'une instance publique reçoit la requête et peut la journaliser.
Puis-je l’utiliser commercialement ?
Oui. MIT est une licence permissive : vous pouvez utiliser, modifier et vendre un logiciel qui en dépend, à condition de conserver les mentions de droit d’auteur et de licence.
Est-il encore maintenu ?
Oui. Le dépôt a reçu de nouveaux commits au cours des dernières 24 heures.
En quel langage est-il écrit ?
Principalement TypeScript, d’après les statistiques de langage de GitHub.

Ces réponses reposent sur les données GitHub du projet (dernière synchronisation le 15 septembre 2026) et sur notre analyse. Elles ne constituent pas un avis juridique.

ANALYSE OPEN SOURCE APPROFONDIE

Le problème concret : une recherche qui ne quitte pas votre périmètre

Un assistant qui répond à des questions d'actualité a besoin de sortir du modèle. La solution courante consiste à souscrire à une API de recherche commerciale, ce qui suppose une clé, un quota et l'acceptation que chaque requête soit transmise à cet opérateur. mcp-searxng prend le chemin inverse. Le serveur ne fait pas de recherche lui-même : il relaie les appels de l'assistant vers une instance SearXNG que vous désignez. Le README est explicite sur ce que cela garantit et sur ce que cela ne garantit pas. Une instance que vous contrôlez évite de faire confiance à un opérateur tiers. Une instance publique, en revanche, reçoit la requête et peut la journaliser. SearXNG et cette intégration ne fournissent pas d'anonymat par eux-mêmes. Le public visé est donc précis : équipes qui auto-hébergent déjà SearXNG, ou qui acceptent de le faire, et qui veulent donner à Claude, Cursor ou VS Code une capacité de recherche sans contrat d'API. Le tableau comparatif du dépôt, arrêté au 2026-07-29, oppose mcp-searxng à Brave MCP, Exa MCP et Firecrawl MCP sur cinq critères : recherche web, lecture d'URL, pagination, auto-hébergement, absence de clé d'API payante. mcp-searxng est le seul des quatre à cocher les cinq cases selon ce tableau, mais la dernière colonne mérite d'être lue attentivement : l'absence de clé payante ne dispense pas d'exploiter ou de sélectionner l'instance SearXNG sous-jacente. La charge se déplace de la facturation vers l'administration système.

Un processus Node séparé, et un seul paramètre pour tout relier

Le README décrit mcp-searxng comme un serveur MCP autonome : un processus Node.js distinct auquel l'assistant se connecte pour la recherche web. Le client ne parle pas à SearXNG directement. Il parle au serveur MCP, qui traduit les appels d'outils en requêtes HTTP vers l'instance configurée. Toute la liaison tient dans la variable SEARXNG_URL, passée dans l'environnement du processus. Le README autorise une liste de répliques interchangeables séparées par des points-virgules, par exemple https://one.example.com;https://two.example.com. Par défaut, la recherche bascule d'une réplique à l'autre dans l'ordre. Avec SEARXNG_FANOUT, le serveur interroge en parallèle toutes les répliques saines et fusionne les résultats, ce qui change le profil de latence et la charge envoyée à chaque instance. Le serveur expose aussi plusieurs points d'entrée de l'API SearXNG au-delà de la recherche : l'autocomplétion via /autocompleter, et la découverte de capacités via /config, qui permet d'inspecter les catégories, moteurs, valeurs par défaut, locales et plugins configurés. Cette dernière fonction est la plus intéressante pour un opérateur : elle donne à l'assistant une vue de ce que l'instance sait réellement faire, au lieu de supposer qu'un moteur particulier est activé. La lecture d'URL passe par une conversion en Markdown selon le type de contenu, avec extraction de texte PDF bornée, pagination, filtrage par section, plages de paragraphes et extraction des titres. Deux couches de cache mémoire couvrent les résultats de recherche et le contenu d'URL, avec un TTL configurable et une éviction LFU (least-frequently-used).

Mise en route : le bloc JSON et les clés qui comptent

L'installation se fait sans étape de build côté utilisateur. Le README donne un bloc à coller dans la configuration du client MCP, par exemple claude_desktop_config.json : un objet mcpServers contenant une entrée searxng, avec command npx, args ["-y", "mcp-searxng"], et un bloc env portant SEARXNG_URL. Il faut remplacer la valeur par l'URL de votre instance, par exemple https://searxng.example.com. Le dépôt renvoie vers docs/client-configurations.md pour les recettes vérifiées sur Claude Desktop, Claude Code, Codex CLI, Cursor, VS Code, Windsurf, Cline et OpenCode. Côté réglages, le README cite SEARXNG_DEFAULT_RESPONSE_FORMAT pour choisir le format par défaut, texte formaté ou JSON brut, sachant que response_format peut aussi être fixé appel par appel. Le filtrage par pertinence se règle avec min_score. La recherche accepte la pagination, les filtres de plage temporelle, de langue et de safe-search. Deux modes de déploiement supplémentaires sont documentés : un transport HTTP optionnel basé sur MCP SDK v2 Streamable HTTP, avec durcissement à activer, limitation de débit et compatibilité sans état bornée pour les déploiements serverless ou mis à l'échelle horizontalement, et un mode Lite Tools aux schémas minimaux destiné aux modèles locaux à petite fenêtre de contexte. Enfin, un repli HTML permet de parser les résultats depuis la page HTML pour les instances publiques qui refusent format=json. C'est le point à vérifier en premier si vous visez une instance publique : sans le format JSON, vous dépendez de ce repli.

Le solveur de navigateur : utile, mais avec une traîne

Certaines pages bloquent les requêtes simples. mcp-searxng gère ce cas par une chaîne précise, décrite dans le README. Pour chaque URL non mise en cache qui franchit la validation statique d'URL et la pré-vérification de taille en HEAD, le serveur peut acquérir une session de navigateur auprès de FlareSolverr, de Byparr, ou des deux, puis rejouer le user-agent retourné et les cookies limités à ce domaine à travers le lecteur d'URL borné. En mode double fournisseur, FlareSolverr est toujours primaire et Byparr n'est tenté qu'après un primaire occupé ou temporairement indisponible. Le README indique que FlareSolverr 3.5.0 et Byparr 2.1.0 ont été vérifiés le 2026-07-30, avec les digests d'images linux/amd64 correspondants. La limite est énoncée sans détour : l'annulation côté client arrête le travail local rapidement, mais un navigateur distant peut continuer jusqu'à l'expiration du délai configuré chez le fournisseur après la déconnexion du client HTTP. Autrement dit, fermer l'assistant ne coupe pas forcément la session distante. Pour un déploiement partagé, cela signifie qu'il faut dimensionner le fournisseur de navigateur en fonction du pire cas, pas du débit moyen. Le renvoi vers docs/browser-solver-verification.md suggère que le détail des vérifications est ailleurs, mais la seule chose que le matériel fourni permette d'affirmer est ce délai résiduel.

La protection SSRF et ce qu'elle ne couvre pas

L'outil web_url_read bloque par défaut les URL privées ou internes ainsi que les redirections, et ce dans tous les modes de transport, selon le README. C'est une protection SSRF classique et bienvenue : un assistant qui lit des URL peut être amené à en lire une qui pointe vers le réseau interne, par injection de prompt ou par simple erreur de l'utilisateur. Le blocage est donc activé sans configuration. Il faut toutefois noter ce que le matériel ne dit pas. Le README ne précise pas de mécanisme de liste d'autorisation ni de variable pour ouvrir sélectivement certains domaines internes, et il ne détaille pas la liste des plages considérées comme privées. Un déploiement qui aurait besoin de lire une ressource interne légitime n'a donc pas de chemin documenté ici. La lecture d'URL inclut par ailleurs une pré-vérification de taille en HEAD avant d'aller plus loin, ce qui limite les téléchargements inutiles, mais le README ne donne pas la valeur du plafond. Ce sont des zones où la documentation reste mince, et il vaut mieux le savoir avant de bâtir un flux qui en dépend.

Quand choisir autre chose

L'alternative la plus directe dans le tableau du dépôt est Firecrawl MCP, qui se positionne sur la lecture d'URL et la recherche avec pagination. La différence d'approche est structurelle. Firecrawl est un service : la colonne auto-hébergement y est marquée comme partielle, et l'absence de clé d'API payante n'y figure pas. mcp-searxng, lui, ne fournit aucune capacité de crawl ou d'extraction propriétaire : il délègue l'essentiel à SearXNG et à une conversion Markdown côté serveur, avec un repli navigateur optionnel. Si votre besoin principal est d'extraire proprement une documentation produit complexe ou de parcourir un site entier, un service d'extraction dédié sera probablement plus adapté, au prix d'une dépendance externe et d'une clé. Si votre besoin est de poser des requêtes de recherche et de lire des pages occasionnelles sans transmettre chaque requête à un opérateur commercial, l'architecture de mcp-searxng est la bonne, à condition d'assumer l'instance. Le cas où l'outil est clairement inadapté est celui d'un utilisateur individuel sans serveur : il n'existe pas d'instance publique fournie par défaut, et le README rappelle qu'une instance publique reçoit la requête et peut la journaliser. On retombe alors sur le problème de confiance que le projet prétendait éviter.

Coût de maintenance, licence et points à vérifier

Le coût de maintenance se répartit sur deux composants. Le serveur MCP lui-même se met à jour via npx, et le dépôt montre un rythme de publication soutenu : v2.0.0 le 2026-08-21, v2.1.0 le 2026-08-25, v2.2.0 le 2026-09-09, avec un dernier push le même jour. Cela implique de vérifier les notes de version avant de figer une version en production, d'autant que le passage en 2.x a modifié la surface. L'autre composant est l'instance SearXNG, dont la mise à jour, la configuration des moteurs et la disponibilité des points d'entrée ne dépendent pas de ce dépôt. Le README mentionne des profils de déploiement mesurés dans docs/deployment-profiles.md pour le CPU et la mémoire du processus MCP, ce qui donne un point de départ, mais le matériel fourni n'en reproduit pas les chiffres. Sur la licence : le projet est publié sous MIT, ce qui autorise la réutilisation et la modification avec conservation de l'avis de licence. Cela ne dit rien de la licence de SearXNG ni de celle des fournisseurs de navigateur optionnels, qui sont des composants distincts à vérifier séparément. Ce paragraphe décrit la licence du dépôt, pas un avis juridique. Le point à contrôler en premier reste le même : que votre instance SearXNG réponde en JSON, sinon le repli HTML devient le chemin normal et non l'exception.

Conclusion éditoriale

Adoptez mcp-searxng si vous exploitez déjà une instance SearXNG, ou si vous acceptez d'en administrer une, et que vos requêtes ne doivent pas transiter par un opérateur de recherche commercial. Passez votre chemin si vous cherchez une recherche web sans aucune infrastructure à maintenir : il n'y a pas d'instance publique par défaut, et le README précise qu'une instance publique reçoit la requête et peut la journaliser. Avant tout déploiement, vérifiez trois choses concrètement : que votre instance répond bien en JSON sur le point d'entrée interrogé, que SEARXNG_URL est renseigné dans le bloc env de votre client MCP, et que l'option formats: [json] est active côté serveur, sinon il faudra passer par le repli HTML.

Sources officielles

  1. ihor-sokoliuk/mcp-searxng on GitHub
  2. License: MIT
  3. Project website
  4. README
  5. Releases
Notes de la communauté

Notes de la communauté