Serveur MCP de Recherche Web : recherche Web local pour LLM sans clés API

Serveur MCP de Recherche Web\n\nUn Serveur MCP de Recherche Web est un serveur MCP (Model Context Protocol) léger basé sur TypeScript qui donne aux LLM hébergés localement des capacités de recherche Web en temps réel, sur site. Il élimine le besoin d'API payantes en se connectant directement aux moteurs de recherche populaires — Bing, Brave et DuckDuckGo — et en extrayant le contenu complet de la page ou des extraits légers.\n\n## Pourquoi l'utiliser ?\n\n| Besoin | Importance |\n|--------|-------------|\n| Pas de clés API | De nombreux déploiements LLM évitent les coûts externes et la latence potentielle. |\n| Stratégie multi-moteurs | Bascule vers des moteurs alternatifs lorsqu'un échoue. |\n| Extraction complète de la page | Récupère l'article entier pour un contexte de haute qualité. |\n| Traitement concurrent | Récupère plusieurs résultats en parallèle, réduisant le temps d'attente total. |\n| Support Playwright | Simule le navigation humaine pour contourner la détection de bot. |\n| Configuration via variables d'environnement | Ajustez délai d'attente, nombre de navigateurs et seuils de pertinence sans modifier le code. |\n\n## Installation rapide\n\nbash\n# 1. Cloner le dépôt\ngit clone https://github.com/mrkrsl/web-search-mcp.git\ncd web-search-mcp\n\n# 2. Installer Node.js v18+ et npm v8+\n# (Utilisez les installateurs officiels ou nvm pour gérer les versions.)\n\n# 3. Installer les dépendances et les navigateurs Playwright\nnpm install\nnpx playwright install\n\n# 4. Construire le code TypeScript\nnpm run build\n\n# 5. Lancer le serveur (mode développement)\nnpm start # ou \"npm run dev\" pour rechargement automatique\n\n\n> Astuce : Sous Windows, remplacez les slashs avant et utilisez les commandes PowerShell.\n\n## Configuration\n\nCréez ou éditez mcp.json à la racine de votre projet (ou dans tout autre emplacement que vous préférez) pour indiquer à votre client MCP où trouver le binaire du serveur.\n\njson\n{\n \"mcpServers\": {\n \"web-search\": {\n \"command\": \"node\",\n \"args\": [\"/path/to/web-search-mcp/dist/index.js\"],\n \"env\": {\n \"MAX_CONTENT_LENGTH\": \"10000\",\n \"BROWSER_HEADLESS\": \"true\",\n \"MAX_BROWSERS\": \"3\",\n \"BROWSER_FALLBACK_THRESHOLD\": \"3\"\n }\n }\n }\n}\n\n\n- command – généralement node. \n- args – chemin absolu vers dist/index.js. \n- env – variables d'environnement optionnelles pour le réglage fin.\n\n### Variables d'environnement courantes\n\n| Variable | Valeur par défaut | Objectif |\n|----------|---|----------|\n| MAX_CONTENT_LENGTH | 500000 | Nombre maximal de caractères retournés par l'extraction de page. |\n| DEFAULT_TIMEOUT | 6000 | Délai d'attente de la requête en millisecondes. |\n| MAX_BROWSERS | 3 | Nombre maximal d'instances navigateur concurrentes. |\n| BROWSER_TYPES | chromium,firefox | Les navigateurs à lancer. |\n| ENABLE_RELEVANCE_CHECKING | true | Active le score de qualité de recherche. |\n| RELEVANCE_THRESHOLD | 0.3 | Note minimale de qualité. |\n| FORCE_MULTI_ENGINE_SEARCH | false | Force la requête à tous les moteurs même si un réussit. |\n\n## Aperçu des outils MCP\n\nLe serveur expose trois outils distincts pouvant être appelés via tout client compatible MCP (LM Studio, LibreChat ou votre propre application).\n\n### 1. full-web-search\n\n| Fonctionnalité | Détail |\n|----------------|--------|\n| Logique de recherche | Priorise Bing → Brave → DuckDuckGo. |\n| Charge utile des résultats | Tableau d'objets contenant url, title, description et facultativement content. |\n| Personnalisation | limit (1‑10), includeContent (booléen). |\n\nDemande d'exemple\n\njson\n{\n \"name\": \"full-web-search\",\n \"arguments\": {\n \"query\": \"TypeScript MCP server\",\n \"limit\": 3,\n \"includeContent\": true\n }\n}\n\n\n### 2. get-web-search-summaries\n\nMême stratégie de recherche que full-web-search mais ne retourne que les extraits / descriptions — pas le contenu complet de la page. Parfait pour une recherche rapide ou quand la bande passante est limitée.\n\nDemande d'exemple\n\njson\n{\n \"name\": \"get-web-search-summaries\",\n \"arguments\": {\n \"query\": \"best TypeScript web search\",\n \"limit\": 5\n }\n}\n\n\n### 3. get-single-web-page-content\n\nUtile lorsqu'on connaît déjà l'URL souhaitée et qu'on a juste besoin du contenu principal.\n\nDemande d'exemple\n\njson\n{\n \"name\": \"get-single-web-page-content\",\n \"arguments\": {\n \"url\": \"https://example.com/article.html\",\n \"maxContentLength\": 5000\n }\n}\n\n\n## Utilisation avec un client LLM local\n\nVoici un exemple minimaliste d'intégration du serveur dans une configuration LibreChat.\n\nyaml\n# librechat.yaml\nmcpServers:\n web-search:\n type: stdio\n command: node\n args:\n - /app/mcp/web-search-mcp/dist/index.js\n env:\n MAX_CONTENT_LENGTH: \"10000\"\n serverInstructions: true\n\n\nDans un message de chat :\n\n`\n{{{ full-web-search(query=\"nodejs web search\", limit=5, includeContent=true) }}}\n```\n\nLe LLM recevra le JSON structuré avec URLs, titres, descriptions et contenu complet, pouvant servir de contexte pour la génération.\n\n## Astuces de performance\n\n| Paramètre | Pourquoi c'est utile |\n|-----------|----------------------|\n|DEFAULT_TIMEOUT= 4000 | Échec plus rapide sur réseaux lents ; réduit le temps total aller-retour. |\n|MAX_BROWSERS= 1 | Réduit l'utilisation mémoire ; pratique pour environnements à faibles ressources. |\n|BROWSER_HEADLESS= true | Élimine la surcharge de rendu en mode sans tête. |\n|RELEVANCE_THRESHOLD= 0.5 | Filtrage plus strict pour des résultats de meilleure qualité. |\n\n> **Rappel** : L'ajustement de ces valeurs dépend de votre réseau, CPU et de la taille des requêtes LLM.\n\n## Dépannage\n\n| Symptôme | Cause possible | Solution |\n|----------|----------------|----------|\n|npm installéchoue | Node/NPM obsolète | Mettre à jour vers Node 18+ et NPM 8+ |\n| Installation du navigateur bloque | Proxy / restriction réseau | Exécuternpx playwright install --with-depsderrière VPN ou configuration proxy |\n| Résultats de recherche vides | Moteur bloqué | AugmenterBROWSER_FALLBACK_THRESHOLDou activerFORCE_MULTI_ENGINE_SEARCH|\n| Bouche‑d‑mémoire | Trop de navigateurs | RéduireMAX_BROWSERS|\n| Erreurs inattenduesHTTP/2| Problème de support protocole | Le serveur revient automatiquement en arrière ; assurez‑vous queBROWSER_HEADLESS=true|\n\n## Extension du serveur\n\nLa base de code est modulaire. De nouveaux outils peuvent être ajoutés facilement :\n\n1. Créez un fichier soussrc/tools/implémentant une fonctionrun. \n2. Exportez‑le danssrc/index.ts. \n3. Mettez à jour lepackage.jsonet lemcp.jsonsi nécessaire. \n\n**Astuce**: Profitez de la validation de schémazod` déjà présente pour imposer les arguments.\n\n## Licence\n\nLe projet est sous licence MIT. N'hésitez pas à forker, modifier et intégrer dans vos propres pipelines.\n\n## Mots de clôture\n\nLe Serveur MCP de Recherche Web comble un écart important pour les développeurs LLM locaux : navigation Web instantanée, sans API. En combinant plusieurs moteurs de recherche, extraction de contenu sophistiquée et une interface MCP propre, il offre à la fois profondeur (contenu complet) et rapidité (mode résumé) dans un seul dépôt. Que vous exécutiez un petit assistant de recherche ou un chatbot de production, cet outil donne à votre LLM le savoir à jour dont il a besoin sans coûts externes.\n\nBonne recherche!

Original Article: Voir l’original

Partager cet article