mcp-browser
serveur MCP Web pour accéder à des fonctionnalités Web avancées depuis votre LLM
Install / Use
claude mcp add Ktulu-Analog -- npx -y github:Ktulu-Analog/mcp-browserIf the server publishes to npm under a different name, use that package instead — check the repo README.
MCP Server
Model Context Protocol server
Quality Score
Category
AI & Machine LearningSupported Platforms
Skill content
View source on GitHubMCP Browser — Serveur MCP de navigation web avancée
mcp-browser donne à n'importe quel LLM compatible MCP le contrôle d'un vrai navigateur Chromium headless — pas un simple scraper HTTP, mais un navigateur complet capable de rendre du JavaScript, d'interagir avec des formulaires, de gérer des sessions authentifiées et de prendre des screenshots.
Là où la plupart des outils web s'arrêtent face à Cloudflare, aux consent walls RGPD ou aux SPA React/Vue, mcp-browser gère tout cela en natif : anti-détection multi-couches, acceptation automatique des bandeaux cookies (OneTrust, Didomi, SourcePoint, CookieBot…), attente d'hydratation DOM pour les pages JavaScript-only, et fallback FlareSolverr pour les challenges Cloudflare persistants. Les 11 outils couvrent la recherche web multi-moteur avec fallback automatique, l'extraction markdown, les screenshots ciblés par sélecteur CSS, le remplissage de formulaires et la recherche d'images multi-sources (Wikimedia, OpenVerse, Bing).
Compatible Claude Desktop, Claude Code, Demeter ou tout client MCP HTTP Streamable.
Aperçu

Fonctionnalités
11 outils MCP
| Outil | Description |
|---|---|
| browser_rechercher | Recherche web via DuckDuckGo / Bing / Google / SearXNG |
| browser_naviguer | Navigation et extraction (markdown, HTML, texte) |
| browser_screenshot | Capture d'écran pleine page ou élément ciblé (bloc image MCP natif) |
| browser_cliquer | Clic sur un élément CSS avec attente JS |
| browser_formulaire | Remplissage et soumission de formulaires |
| browser_research | Mode multi-sources avec extraits consolidés |
| browser_chercher_images | Recherche d'images multi-sources (Wikimedia, OpenVerse, Bing) |
| browser_session_demarrer | Session persistante (cookies, logins conservés) |
| browser_session_arreter | Fermeture propre de la session |
| browser_healthcheck | Vérification opérationnelle du navigateur |
Anti-détection multi-couches
Human mode (activé par défaut)
- Délais aléatoires entre les actions
- Déplacement naturel de la souris avant les clics
- Défilement par étapes avec accélération/décélération réaliste
- Frappe caractère par caractère dans les formulaires
- Rotation automatique du user-agent (Chrome 136/137, Firefox 137, Edge 136)
- Headers
Sec-CH-UAcohérents avec l'UA sélectionné
Stealth mode (intégré en permanence)
- Masquage du flag
navigator.webdriveret suppression des markers ChromeDriver ($cdc_,$wdc_) - Plugins navigateur réalistes (3 plugins Chrome natifs simulés)
- Langue et timezone cohérentes (
fr-FR/Europe/Paris) - Hardware concurrency et device memory réalistes (8 cœurs, 8 Go)
- Objet
window.chromecomplet (runtime, csi, loadTimes) - WebGL vendor/renderer réalistes (
Intel UHD Graphics 620) outerWidth/outerHeightetscreen.colorDepthnormalisésnavigator.connectionsimulé (4G, 50ms RTT)- Headers HTTP réalistes (Accept, Accept-Encoding, Sec-Fetch-*)
- Lancement Chromium avec
--disable-blink-features=AutomationControlled - playwright-stealth v2 supporté si installé (
pip install playwright-stealth)
Gestion Cloudflare et WAF
Détection automatique des challenges
- Cloudflare IUAM / Turnstile (titre, HTML, patterns JS)
- DataDome, Imperva/Incapsula, PerimeterX, Akamai
Résolution en 3 niveaux
- Attente auto : Cloudflare IUAM se résout en ~5s si JS est actif
- Simulation humaine pendant l'attente (mouse move, délais)
- FlareSolverr (optionnel) : fallback Chromium headful sous Xvfb pour les challenges persistants
Persistance des cookies CF
- Les cookies
cf_clearanceobtenus via FlareSolverr sont injectés dans le contexte Playwright - Sauvegardés dans
/data/cookies.json(volume Docker nommé) - Rechargés automatiquement au démarrage — évite de résoudre le challenge à chaque redémarrage
- L'UA de FlareSolverr est réutilisé pour garantir la cohérence UA ↔ cookies CF
Gestion des consent walls RGPD
Acceptation automatique des bandeaux cookies sur :
- OneTrust (
#onetrust-accept-btn-handler) - Didomi (
#didomi-notice-agree-button, iframe cross-origin) - SourcePoint (
#sp_message_container— Le Figaro, Le Parisien…) - CookieBot (
#CybotCookiebotDialog) - Quantcast (
.qc-cmp2-container) - Google Consent Mode v2 (flow 2 étapes : Accepter → Confirmer, iframe cross-origin)
- Yahoo/Oath, boutons textuels génériques (français et anglais)
Flux multi-étapes supportés (jusqu'à 3 étapes). Les iframes cross-origin sont inspectées. Sites sans consent wall connus ignorés (Wikipedia, GitHub, gouv.fr…) pour éviter les faux positifs.
Détection paywall
Avant d'attendre l'hydratation JS (15s), la page est analysée pour détecter :
- Sélecteurs CSS spécifiques :
.piano-offer-overlay,[class*="paywall"],[class*="subscription-wall"]… - Indices textuels (fr/en) : "réservé aux abonnés", "subscribe", "premium content"…
En cas de paywall confirmé, une erreur descriptive est retournée immédiatement sans attendre.
Gestion des pages SPA / JS-only
Quand le contenu extrait est inférieur à 500 caractères, le serveur déclenche une attente d'hydratation DOM :
- Tentative sur 14 sélecteurs sémantiques ordonnés (
main,article,[role="main"],#content…) incluant des sélecteurs spécialisés finance (Yahoo Finance), météo, news - Timeout global de 15 secondes maximum
- Fallback fixe de 3 secondes en dernier recours
Compression automatique des screenshots
Les screenshots sont automatiquement redimensionnés et compressés pour tenir dans le contexte LLM :
- Largeur maximale : 900 px (ratio conservé, hauteur max : 2700 px)
- Taille maximale : 60 Ko JPEG (~90k tokens contexte)
- Compression progressive par paliers de qualité : 70 → 55 → 40 → 25 → 15
- Retour en PNG original si Pillow n'est pas installé
Recherche web
4 moteurs avec fallback automatique
duckduckgo (défaut) → bing → google → searxng
Chaque moteur dispose de plusieurs stratégies de scraping. Si le moteur préféré est bloqué, le suivant est essayé automatiquement.
Support des requêtes site:
Les requêtes site:domaine.com mots-clés sont traitées spécialement :
- La requête est envoyée aux moteurs sans le préfixe
site:(meilleur taux de passage) - Les résultats sont filtrés sur le domaine cible
- Fallback navigation directe si résultats insuffisants :
- Moteurs internes connus : Yahoo Finance, Légifrance, Le Monde, Le Figaro, Wikipedia, GitHub, Stack Overflow, Météo France
- Patterns génériques (
/search?q=,/?s=,/recherche?q=) - Page d'accueil avec scoring par pertinence en dernier recours
Research mode (browser_research)
- Recherche initiale multi-moteur
- Visite séquentielle de N sources (jusqu'à 8)
- Extraction markdown de chaque source
- Retour consolidé avec sections par source, prêt à synthétiser
Recherche d'images (browser_chercher_images)
Stratégie multi-sources ordonnée par fiabilité :
- Wikimedia Commons (API REST publique, sans auth, thumbnails 800px, licences incluses)
- OpenVerse (catalogue Creative Commons, filtre commercial+modification)
- Bing Images (fallback headless)
Session persistante (browser_session_demarrer)
- Contexte Playwright maintenu entre les appels
- Cookies et localStorage préservés
- Permet de rester connecté à LinkedIn, Gmail, Notion, etc.
Pré-chauffe Chromium au démarrage
Via le lifespan FastMCP, Chromium est lancé et un contexte est initialisé dès le démarrage du serveur. Le premier appel MCP ne subit pas de cold-start, ce qui évite des timeouts ou des délais suspects détectables par les WAF.
Blocage des ressources inutiles
Lors de chaque navigation, les polices web et les domaines de tracking/publicité sont automatiquement bloqués (Google Analytics, DoubleClick, Facebook, Taboola, Outbrain…) pour accélérer le chargement.
Installation
Prérequis
- Python 3.12+
- Chromium (installé automatiquement par Playwright)
Depuis les sources
git clone https://github.com/votre-repo/mcp-browser.git
cd mcp-browser
pip install -r requirements.txt
playwright install chromium
python server.py
Le serveur démarre sur http://0.0.0.0:6503/mcp.
Via Docker (recommandé)
Configuration complète avec FlareSolverr :
docker compose up -d
Cette configuration démarre :
- mcp-browser sur le port
6503 - FlareSolverr sur le port
8191(résolution des challenges CF persistants) - Un volume Docker nommé
mcp-browser-datapour la persistance des cookies CF
Pour démarrer sans FlareSolverr :
docker build -t mcp-browser .
docker run -p 6503:6503 mcp-browser
Options de démarrage
python server.py --host 127.0.0.1 --port 6503 --path /mcp
| Argument | Défaut | Description |
|---|---|---|
| --host | 0.0.0.0 | Adresse d'écoute |
| --port | 6503 | Port TCP |
| --path | /mcp | Chemin de l'endpoint MCP |
Variables d'environnement
| Variable | Défaut | Description |
|---|---|---|
| FLARESOLVERR_URL | http://flaresolverr:8191/v1 | URL du service FlareSolverr |
| COOKIE_FILE | /data/cookies.json | Fichier de persistance des cookies CF |
Configuration Demeter
Ajoutez localhost:6503/mcp dans la fenêtre des paramètres dans la rubrique "recherche web"
Configuration Claude Desktop / Claude Code
Ajoutez dans votre claude_desktop_config.json (ou mcp_servers selon votre client) :
{
"mcpServers": {
"browser": {
"url": "http://localhost:6503/mcp"
}
}
}
Exemples d'utilisation
Recherche web
browser_rechercher(
query="framework Python async 2025",
moteur="duckduckgo",
nb_resultats=10
)
Recherche ciblée sur un site
browser_rechercher(
query="cours bourse site:finance.yahoo.com",
moteur="duckduckgo"
)
Navigation et extraction markdown
browser_naviguer(
url="https://docs.python.org/3/library/asyncio.html",
format_extraction="markdown",
screenshot=False
)
Screenshot d'un graphique
browser_screenshot(
url="https://fr.tradingview.com/chart/",
selecteur_css="#chart-area"
)
Clic sur un bouton dynamique
browser_cliquer(
url="https://example.com/articles",
selecteur_css="button.load-more"
)
Remplissage de formulaire
browser_formulaire(
url="https://example.com/login",
champs={
"#email": "user@example.com",
"#password": "monsecret"
},
selecteur_soumission="button[type=submit]"
)
Recherche approfondie multi-sources
browser_research(
query="impact de l'IA sur l'emploi en France 2025",
nb_sources=5,
moteur="duckduckgo"
)
Recherche d'images
browser_chercher_images(
requete="Amiga 500",
nb_resultats=5,
source="auto" # 'auto', 'wikimedia', 'openverse', 'bing'
)
Session persistante (ex : rester connecté)
# 1. Démarrage avec login manuel ou automatisé
browser_session_demarrer(url_initiale="https://www.linkedin.com/login")
# 2. Remplissage du formulaire dans la même session
browser_formulaire(
url="https://www.linkedin.com/login",
champs={"#username": "email@example.com", "#password": "secret
Truncated for display — read the full file on GitHub.
Related Skills
momen-cursurrules-prompt-file
40.6kCursor rules for building custom frontends with Momen.app as headless BaaS with GraphQL API, actionflows, AI agents, and Stripe integration.
semiotic-react-dataviz-cursorrules-prompt-file
40.6kCursor rules for Semiotic data visualization library with 30+ chart types, MCP server, and AI-assisted chart generation.
claude-mem
90.9kPersistent Context Across Sessions for Every Agent – Captures everything your agent does during sessions, compresses it with AI, and injects relevant context back into future sessions. Works with Claude Code, OpenClaw, Codex, Gemini, Hermes, Copilot, OpenCode + More
Understand-Anything
79.5kGraphs that teach > graphs that impress. Turn any code into an interactive knowledge graph you can explore, search, and ask questions about. Works with Claude Code, Codex, Cursor, Copilot, Gemini CLI, and more.
