Command Palette

Search for a command to run...

Jev Ultrafast MCP : un navigateur autonome pour Claude Code

🇬🇧EN

Jev Ultrafast MCP remplace 20 appels navigateur par un seul browser_goal. 10x moins de tokens, 10x moins cher que Claude in Chrome. Setup complet avec benchmarks.

20 min de lecture
mcpclaude-codenavigateurautomatisationtokensproductivité
Architecture de Jev Ultrafast MCP montrant Claude Code, le serveur Jev et le navigateur avec les gains de tokens

J’utilise Claude Code avec deux serveurs MCP pour le navigateur : Claude in Chrome et Jev Ultrafast MCP. Les deux permettent à Claude de piloter un navigateur, mais l’approche est radicalement différente. Claude in Chrome envoie chaque clic et chaque frappe comme un appel d’outil séparé, chacun injecte des tokens dans le contexte. Jev fait l’inverse : Claude envoie un objectif en langage naturel, Jev pilote le navigateur côté serveur, et Claude ne reçoit que le résultat.

Le gain mesuré sur une tâche réelle : 10x moins de tokens Claude et un coût divisé par 10 à 40.

Le problème avec le pilotage clic par clic

Quand Claude Code utilise Claude in Chrome ou un outil de computer use classique, chaque interaction avec le navigateur suit le même schéma :

  1. Claude lit la page (screenshot ou DOM) - injection de tokens
  2. Claude décide quoi cliquer - génération de tokens
  3. L’outil exécute le clic
  4. Claude relit la page pour vérifier - injection de tokens
  5. Répéter pour chaque action

Une recherche de vol sur Google Flights nécessite environ 15 à 20 allers-retours. Chaque aller-retour injecte le contenu de la page dans le contexte de Claude. Sur Opus, ça représente facilement 100 000 à 150 000 tokens pour une tâche qui prend 45 secondes.

Claude Codecontexte LLMNavigateurChrome / Braveclic 1clic 2clic 3…clic N~100-150K tokens15-20 allers-retourspage relue à chaque clicChaque action consomme le contexte de Claude

Le contexte se remplit vite. Sur une session avec plusieurs tâches navigateur, on atteint la compaction bien avant d’avoir fini le travail.

Comment Jev change l’approche

Jev Ultrafast MCP inverse la boucle de décision. Au lieu que Claude décide chaque clic, Claude envoie un seul objectif via browser_goal :

browser_goal(
  goal="Rechercher un vol Paris CDG vers Barcelone, aller simple, le 15 octobre",
  url="https://www.google.com/travel/flights",
  verify=["résultats de vols affichés", "prix visibles"]
)

Le serveur MCP prend le relais. Jev utilise un modèle de décision spécialisé (TypeSafe System One) qui choisit chaque action — clic, saisie de texte, scroll — en environ 300 millisecondes. Un micro-LLM (inception/mercury-2.5) génère le texte quand il faut taper quelque chose. La page ne transite jamais par le contexte de Claude.

Claude Code1 appel MCPgoalJev MCPModèle de décision~300ms/actionboucle autonome+ vérificationactionsNavigateurBrave / Chrome~5K tokens au lieu de 150K

Claude reçoit un résultat structuré : la tâche est terminée, les critères de vérification sont passés, voici les données extraites. Un seul appel d’outil, quelques milliers de tokens.

Benchmarks

J’ai mesuré la différence sur une tâche concrète : recherche de vol sur Google Flights (Paris CDG vers Barcelone, aller simple).

MétriqueJev (turbo)Jev (fallback manuel)Claude in Chrome
Appels MCP1~20~15-20
Tokens Claude~5 000~45 000~100-150 000
Contexte consommé4%8%~15-25%
Temps42s1m40~45s

Quand browser_goal réussit en mode turbo (cas nominal), le gain est massif : 10x moins de tokens, coût divisé par 10 à 40. Quand il échoue (modale bloquante, captcha), Claude passe en pilotage manuel via browser_act et browser_observe. Le gain se réduit à 2-3x, mais ça reste largement en dessous de Claude in Chrome.

Les benchmarks du projet Jev sur 3 tâches de formulaire confirment l’écart de coût :

ModèleCoût totalTempsRatio
Jev$0.00617.8s1x
Claude Sonnet 5$0.2543.3s44x
Claude Opus 5$0.8045.4s140x

Le modèle de décision de Jev coûte environ $0.01 par jour en utilisation courante. Le mode macro permet de rejouer des tâches déjà effectuées sans aucun appel modèle.

Installation et configuration

Prérequis

  • Python 3.10 ou supérieur
  • Une clé API pour le modèle de décision Jev : OpenRouter, TypeSafe AI, ou tout autre provider compatible
  • Un navigateur Chromium : Chrome, Brave, Edge, Chromium, Arc, ou tout navigateur basé sur Chromium

Cloner et installer

git clone https://github.com/jiawei686/jev-ultrafast-mcp.git
cd jev-ultrafast-mcp
python3 -m venv .venv
.venv/bin/pip install -e .

Ajouter le MCP à Claude Code

claude mcp add --scope user jev-ultrafast-mcp \
  -- /chemin/absolu/.venv/bin/python -m jev_ultrafast_mcp

Le serveur MCP lit ses variables d’environnement depuis os.environ, pas depuis un fichier .env. Il faut les déclarer dans le bloc env du serveur MCP dans ~/.claude.json :

{
  "mcpServers": {
    "jev-ultrafast-mcp": {
      "type": "stdio",
      "command": "/chemin/.venv/bin/python",
      "args": ["-m", "jev_ultrafast_mcp"],
      "env": {
        "TYPESAFE_API_KEY": "<clé-api>",
        "TYPESAFE_BASE_URL": "https://openrouter.ai/api/alpha/decisions",
        "TYPESAFE_MODEL": "jev-latest",
        "TEXT_MODEL_API_KEY": "<clé-api>",
        "TEXT_MODEL_BASE_URL": "https://openrouter.ai/api/v1",
        "TEXT_MODEL": "inception/mercury-2.5",
        "JEVMCP_CHROME": "/Applications/Brave Browser.app/Contents/MacOS/Brave Browser",
        "JEVMCP_MODE": "attach",
        "JEVMCP_CDP_URL": "http://127.0.0.1:9224",
        "JEVMCP_HEADLESS": "0",
        "JEVMCP_ALLOW_JS": "1"
      }
    }
  }
}

Comprendre JEVMCP_CHROME et JEVMCP_CDP_URL

JEVMCP_CHROME pointe vers l’exécutable du navigateur Chromium que Jev va utiliser. Ce choix a deux conséquences directes :

  • Le navigateur piloté : Jev utilise le protocole CDP (Chrome DevTools Protocol) pour envoyer ses actions. N’importe quel navigateur basé sur Chromium supporte CDP : Chrome, Brave, Edge, Arc, Chromium.
  • Le profil utilisateur : en mode attach, Jev se connecte au navigateur déjà ouvert avec le profil de l’utilisateur. Les cookies, les sessions connectées, les extensions sont disponibles. Jev peut interagir avec des sites où l’utilisateur est déjà authentifié sans avoir à gérer de credentials.

Exemples de chemins selon le navigateur sur macOS :

# Brave
JEVMCP_CHROME="/Applications/Brave Browser.app/Contents/MacOS/Brave Browser"

# Chrome
JEVMCP_CHROME="/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"

# Edge
JEVMCP_CHROME="/Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge"

# Chromium
JEVMCP_CHROME="/Applications/Chromium.app/Contents/MacOS/Chromium"

JEVMCP_CDP_URL indique à Jev où se connecter au port de debugging distant du navigateur. Le port par défaut de Chrome est 9222, mais si Chrome et Brave tournent sur la même machine, ils ne peuvent pas partager le même port. J’utilise 9224 pour Brave afin d’éviter le conflit :

# Brave sur le port 9224 (évite le conflit avec Chrome 9222)
open -a "Brave Browser" --args --remote-debugging-port=9224

# JEVMCP_CDP_URL doit correspondre au port choisi
JEVMCP_CDP_URL="http://127.0.0.1:9224"

Si le port ne correspond pas, Jev ne trouve pas le navigateur et tombe en mode launch (qui échoue si le navigateur tourne déjà).

Lancer le navigateur avec le remote debugging

Pour que Jev se connecte à un navigateur existant (mode attach), le navigateur doit démarrer avec le port de debugging :

open -a "Brave Browser" --args --remote-debugging-port=9224

Le profil existant est conservé : cookies, sessions, extensions restent disponibles.

Pour rendre ça permanent, ajouter dans ~/.zshrc :

alias brave='open -a "Brave Browser" --args --remote-debugging-port=9224'

Les variables clés

VariableValeurRôle
JEVMCP_CHROMEChemin binaireExécutable du navigateur Chromium à utiliser (Brave, Chrome, Edge…)
JEVMCP_CDP_URLhttp://127.0.0.1:9224Port de debugging distant, doit correspondre au --remote-debugging-port
JEVMCP_MODEattachSe connecte au navigateur existant avec le profil utilisateur
JEVMCP_HEADLESS0Navigateur visible (voir les actions en direct)
JEVMCP_ALLOW_JS1Autorise Jev à exécuter du JS (fermer les modales cookies)
TYPESAFE_BASE_URL.../api/alpha/decisionsEndpoint décisions (pas /api/v1)

Les pièges à éviter

Profil verrouillé. Si le navigateur tourne déjà, le mode launch échoue à cause du SingletonLock. Utiliser le mode attach avec --remote-debugging-port.

ALLOW_JS à 0. Sans JavaScript, Jev ne peut pas fermer les bannières de cookies. Le browser_goal échoue et Claude bascule en pilotage manuel, ce qui consomme beaucoup plus de tokens.

Les variables dans un .env. Le serveur MCP ne lit pas de fichier .env. Les variables doivent être dans le bloc env de ~/.claude.json, sinon le serveur démarre sans configuration.

Le mauvais endpoint pour le modèle de décision. Pour le modèle Jev, utiliser https://openrouter.ai/api/alpha/decisions (le endpoint décisions), pas /api/v1 (le endpoint chat standard). Avec TypeSafe AI directement, l’URL est différente — consulter leur documentation.

Port CDP qui ne correspond pas. Si JEVMCP_CDP_URL pointe vers un port différent de celui du --remote-debugging-port du navigateur, Jev ne le trouve pas et tente un launch qui échoue.

Les outils exposés

Jev expose 10 outils à Claude, mais en pratique deux suffisent pour la plupart des tâches :

OutilUsage
browser_goalDéléguer une tâche complète en un appel (mode turbo)
browser_openOuvrir une URL et récupérer la table d’éléments
browser_actExécuter un batch d’actions (fallback quand turbo échoue)
browser_observeRelire la page (delta seulement, pas le DOM complet)
browser_assertVérifier un état par code, pas par opinion du LLM
browser_macroRejouer un flow enregistré sans aucun coût modèle

Le mode browser_macro est sous-estimé. Une fois qu’une tâche a réussi, Jev enregistre le flow. La prochaine exécution du même flow coûte zéro token, zéro appel API. Pour les tâches répétitives (vérifier un déploiement, checker un dashboard), c’est du gratuit.

Quand utiliser Jev, quand garder Claude in Chrome

Jev excelle pour les tâches web bien définies : remplir un formulaire, chercher un vol, scraper des données structurées, soumettre un rapport. Tout ce qui se résume à “va sur cette page et fais ça”.

Claude in Chrome reste nécessaire pour l’exploration ouverte (“regarde cette page et dis-moi ce que tu en penses”), le debug frontend (console, network requests), et l’analyse visuelle du contenu d’une page. Jev ne fait pas d’analyse visuelle — il refuse les captchas et ne sait pas interpréter un screenshot.

En pratique, j’utilise les deux. Jev pour les tâches automatisables, Claude in Chrome pour le debug et l’exploration. Le choix se fait naturellement : si je peux écrire un objectif en une phrase, c’est pour Jev. Si je dois regarder et comprendre, c’est pour Claude in Chrome.

Le serveur MCP est disponible sur GitHub. Il s’intègre avec Claude Code, Claude Desktop, Cursor, VS Code, Codex CLI et d’autres agents compatibles MCP. Pour optimiser aussi les tokens des autres serveurs MCP, voir MCP RTK. Et pour le setup complet de Claude Code incluant Jev : mon setup Claude Code en 2026.