Chrome DevTools MCP su WSL2: Claude Code senza uscire da Linux
Configurare chrome-devtools-mcp con Claude Code da WSL2 riusando il Chrome di Windows tramite cmd.exe, senza installazioni duplicate o setup manuali a ogni sessione.

Sviluppare in WSL2 con Claude Code è una scelta sempre più diffusa fra chi vuole un ambiente Linux pur restando su Windows come sistema host. La configurazione predefinita di chrome-devtools-mcp si scontra però con una difficoltà strutturale: il binario di Chrome vive su Windows, mentre il server MCP gira lato WSL, e il confine fra i due ambienti rende il collegamento tutt'altro che immediato. Questo articolo presenta la configurazione che si è dimostrata più stabile nella pratica quotidiana, ossia lanciare il server MCP attraverso cmd.exe e riusare direttamente il Chrome già installato su Windows, senza duplicare l'installazione del browser dentro WSL e senza richiedere passaggi manuali a ogni sessione di lavoro.
Cosa imparerai: come configurare chrome-devtools-mcp su WSL2 affinché Claude Code possa avviare e controllare il Chrome di Windows in autonomia, dove registrare il server MCP per renderlo persistente fra progetti e aggiornamenti, come disabilitare il plugin ufficiale senza perdere le skill associate e come verificare l'esito attraverso i log MCP.
Perché chrome-devtools-mcp di default non funziona in WSL2
Il plugin ufficiale chrome-devtools-mcp è progettato per essere eseguito tramite npx chrome-devtools-mcp@latest in un ambiente Linux nativo. In WSL2 questa assunzione si scontra con un dettaglio non trascurabile: Chrome non è installato all'interno dell'istanza Linux, ma vive su Windows in C:\Program Files\Google\Chrome\Application\chrome.exe. Il server MCP, lanciato da WSL, tenta di istanziare un binario che non trova, oppure si scontra con i limiti del networking quando si prova a parlare con il Chrome di Windows attraverso /mnt/c/ o localhost.
La issue è tracciata pubblicamente come ChromeDevTools/chrome-devtools-mcp#131 ed è stata chiusa come feature request, senza una soluzione integrata nel plugin. In assenza di un fix ufficiale, nei thread di Reddit e Hacker News sono emerse tre strategie di workaround, di qualità ed ergonomia molto diverse fra loro.
Le tre strategie possibili a confronto
Le strade percorribili per far funzionare chrome-devtools-mcp su WSL2 con Claude Code sono essenzialmente tre. La differenza non riguarda soltanto il fatto che funzionino, ma quanto inquinano il workflow quotidiano e quanta autonomia lasciano all'agente nella gestione del browser.
| Strategia | Funzionamento | Pro | Contro |
|---|---|---|---|
| A. Chrome con remote debugging | Avvio manuale di Chrome su Windows con --remote-debugging-port=9222, il server MCP da WSL si connette via --browserUrl localhost | Nessun runtime aggiuntivo, infrastruttura minima | Richiede un passo manuale a ogni sessione, impedisce all'agente di gestire apertura e chiusura del browser |
| B. cmd.exe con executable-path | Server MCP lanciato da WSL tramite cmd.exe /c npx, con --executable-path al chrome.exe di Windows | Nessun networking da gestire, l'agente avvia e chiude Chrome in autonomia, una sola installazione di Chrome | Richiede Node installato anche lato Windows |
| C. Chrome installato in WSL via puppeteer/browsers | Si scarica un binario di Chrome Linux dedicato dentro WSL e si punta a quel percorso con --executablePath | Tutto resta lato Linux, isolamento completo dal lato Windows | Duplica l'installazione del browser e richiede ulteriore manutenzione |
La strategia B è quella che offre il miglior compromesso fra ergonomia, autonomia dell'agente e leggerezza del setup, ed è quella documentata nel resto dell'articolo. La strategia C resta un'alternativa valida per chi preferisce un ambiente totalmente isolato dal lato Windows ed è descritta nel confronto generale fra Claude Code e Codex.
Prerequisito spesso trascurato: Node anche su Windows
Per far funzionare la strategia B, Node deve essere installato non solo dentro WSL ma anche su Windows. Il motivo è semplice: il comando cmd.exe /c npx cerca un eseguibile di Node lato Windows, ed è quello che effettivamente lancia il server MCP. Una verifica veloce dal terminale WSL conferma la presenza dei binari necessari.
Se i comandi non restituiscono un percorso valido oppure danno errore, installare Node su Windows tramite l'MSI ufficiale prima di proseguire. La versione presente dentro WSL non è sufficiente per questa configurazione, perché cmd.exe non vede gli eseguibili di WSL.
Configurare il server MCP a livello utente
Claude Code consente di registrare un server MCP in tre scope diversi. La scelta non è banale, perché ognuno ha implicazioni dirette sulla durabilità e sulla portabilità della configurazione.
Tre scope per registrare un server MCP
1. Patch diretta del file .mcp.json del plugin in ~/.claude/plugins/marketplaces/. Funziona subito, ma viene riscritta a ogni aggiornamento del plugin.
2. File .mcp.json di progetto. Vincola la configurazione al singolo repository ed è poco pratica quando si lavora su più progetti che richiedono lo stesso server MCP.
3. Sezione mcpServers in ~/.claude.json, a livello utente. Sopravvive sia agli aggiornamenti del plugin sia al cambio di progetto, ed è la scelta più solida nel lungo periodo. È quella adottata in questa guida.
Backup preventivo del file di configurazione
Prima di modificare ~/.claude.json, è buona pratica creare una copia di sicurezza. Il file contiene impostazioni globali della CLI e una corruzione accidentale comprometterebbe l'avvio.
Modifica chirurgica della configurazione
La modifica può essere eseguita manualmente con un editor di testo oppure tramite un breve script Python che aggiunge la voce chrome-devtools dentro mcpServers senza toccare il resto del file. La versione script ha il vantaggio di preservare l'indentazione e tutte le altre chiavi presenti.
Sostituire <user> con il nome utente WSL effettivo. Il blocco aggiunto registra il server chrome-devtools indicando cmd.exe come comando di avvio e passando, fra gli argomenti, il percorso del chrome.exe di Windows. Da questo momento Claude Code è in grado di richiamare il server senza alcuna intermediazione manuale.
Disabilitare il plugin ufficiale senza perdere le skill
Una volta che il server user-level è operativo, il plugin ufficiale chrome-devtools-mcp@claude-plugins-official diventa ridondante. Lasciandolo attivo, Claude Code lo carica all'avvio e tenta di lanciare un Chrome lato WSL che non esiste, fallendo in modo silenzioso ed esponendo strumenti MCP che puntano a un server non funzionante. La rimozione si effettua editando ~/.claude/settings.json e commentando la riga corrispondente.
Attenzione: disabilitare il plugin rimuove anche le sei skill che porta con sé, ovvero a11y-debugging, chrome-devtools, chrome-devtools-cli, debug-optimize-lcp, memory-leak-debugging e troubleshooting. Sono skill effettivamente utili, indipendenti dal server MCP per il loro funzionamento, e vale la pena conservarle a livello utente.
La soluzione consiste nel copiare le skill in ~/.claude/skills/, la directory dove Claude Code cerca le skill di livello utente, rinominando troubleshooting per evitare collisioni con altre skill omonime che potrebbero esistere nello stesso namespace.
Dopo la copia, il frontmatter della skill rinominata va aggiornato perché il campo name sia coerente con il nome della cartella. Senza questa modifica la skill resta caricabile ma il nome interno risulta dissociato dal percorso, con possibili ambiguità in fase di referenziazione.
Le skill a livello utente vengono caricate in hot reload, senza riavviare Claude Code. Per il server MCP, al contrario, il riavvio è necessario perché i server vengono inizializzati una volta sola all'apertura della sessione e le modifiche a ~/.claude.json non hanno effetto retroattivo sulle sessioni aperte.
Verifica funzionale tramite i log MCP
L'unico modo affidabile per sapere se chrome-devtools-mcp è realmente collegato è leggere i log che Claude Code genera per ogni server MCP. I file si trovano nella seguente directory:
Nel file .jsonl più recente vanno cercati tre eventi distinti che, in sequenza, confermano una connessione corretta del server: l'inizio del tentativo di connessione, la conferma del trasporto stdio e la negoziazione delle capabilities.
Se nei log compare la riga 'Successfully connected (transport: stdio)' la configurazione è corretta. Da quel momento Claude può chiamare gli strumenti mcp__chrome-devtools__list_pages, mcp__chrome-devtools__navigate_page e tutti gli altri, gestendo apertura e chiusura del browser in totale autonomia.
Eventuali messaggi su stderr del tipo 'I percorsi UNC non sono supportati' sono rumore innocuo prodotto da cmd.exe quando viene invocato da una working directory che inizia con \\wsl.localhost. Non compromettono il funzionamento del server e possono essere ignorati.
Profilo Chrome reale: usare cookie e login esistenti
In alcune situazioni avere un Chrome che parte sempre da un profilo pulito è limitante. È il caso del testing di flussi che richiedono autenticazione, oppure dell'ispezione di pagine dietro sessioni già attive su servizi terzi. Per fare in modo che Chrome avvii con un profilo utente esistente, basta aggiungere il parametro --userDataDir agli argomenti del server MCP.
Chrome non consente due istanze concorrenti sullo stesso profilo. Se la finestra di Chrome utilizzata abitualmente è già aperta sul profilo predefinito, il server MCP fallisce per conflitto. Conviene quindi creare un profilo Chrome dedicato all'agente e puntare a quello, mantenendo l'esperienza di navigazione personale separata dall'attività dell'agente.
Riepilogo operativo
- Verificare la presenza di Node e npx su Windows, non solo dentro WSL
- Eseguire il backup di ~/.claude.json prima di qualsiasi modifica
- Aggiungere il server chrome-devtools nel blocco mcpServers di livello utente
- Disabilitare il plugin chrome-devtools-mcp dal file ~/.claude/settings.json
- Copiare le sei skill del plugin in ~/.claude/skills, rinominando troubleshooting
- Aggiornare il frontmatter name della skill rinominata
- Riavviare Claude Code e verificare nei log MCP la stringa 'Successfully connected'
Tempo richiesto ed ergonomia post-setup
Il tempo complessivo per completare l'intera procedura è di circa dieci minuti. Una volta a regime non sono richiesti passaggi manuali a ogni sessione: l'agente apre e chiude Chrome quando necessario, riusa il profilo desiderato e i log MCP restano disponibili per il troubleshooting in caso di malfunzionamenti.
In conclusione
La strategia basata su cmd.exe risolve in modo pulito la frizione fra WSL2 e Chrome DevTools MCP, evitando sia il workaround manuale del remote debugging sia la duplicazione del browser dentro l'istanza Linux. La chiave concettuale è accettare che cmd.exe possa funzionare come ponte fra i due ambienti, riusando l'infrastruttura Windows esistente invece di replicarla. Con questa configurazione il workflow di Claude Code su WSL2 si avvicina a quello di un ambiente Linux nativo, mantenendo al contempo i vantaggi operativi di Windows come sistema host (Office, gestione dispositivi, software specifici).
Grazie per aver letto questo articolo