trailofbits/chrome-mcp-troubleshooting

Diagnostique e corrija problemas de conectividade da extensão MCP do Claude no Chrome. Use quando as ferramentas mcp__claude-in-chrome__* falharem, retornarem "A extensão do navegador não está conectada" ou apresentarem comportamento errático.

O que é chrome-mcp-troubleshooting?

Esta skill resolve um conflito bem conhecido entre dois serviços nativos de mensagens do Chrome: um usado pelo Claude.app (Cowork) e outro pelo Claude Code CLI. Ambos tentam se conectar à mesma extensão do Chrome, mas usam formatos de socket incompatíveis, causando a falha "Browser extension is not connected". A skill explica em detalhes como diagnosticar qual dos dois hosts nativos está ativo, quais configurações do Chrome estão registradas e como alternar entre eles usando um script de toggle. Ela também fornece procedimentos de reset completo, diagnóstico rápido via comandos de terminal e soluções para causas comuns como múltiplos perfis do Chrome, versões hardcoded no wrapper ou variável TMPDIR ausente. Suporta exclusivamente macOS devido ao uso de caminhos específicos (como `~/Library/Application Support/`) e do comando `osascript`. Usuários de Linux ou Windows devem procurar outras soluções.

Funciona com✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/trailofbits/skills/tree/main/plugins/claude-in-chrome-troubleshooting/skills/chrome-mcp-troubleshooting

Installed? Explore more Programação e Desenvolvimento skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

Solução de Problemas do MCP do Claude no Chrome

Use esta skill quando as ferramentas MCP do Claude no Chrome falharem ao conectar ou funcionarem de forma não confiável.

Quando Usar

  • Ferramentas mcp__claude-in-chrome__* falham com "A extensão do navegador não está conectada"
  • A automação do navegador funciona erraticamente ou atinge tempo limite
  • Após atualizar o Claude Code ou Claude.app
  • Ao alternar entre Claude Code CLI e Claude.app (Cowork)
  • O processo host nativo está rodando, mas as ferramentas MCP ainda falham

Quando NÃO Usar

  • Usuários de Linux ou Windows - Esta skill cobre caminhos e ferramentas específicos do macOS (~/Library/Application Support/, osascript)
  • Problemas gerais de automação do Chrome não relacionados à extensão Claude
  • Problemas do aplicativo Claude.app para desktop (não relacionados ao navegador)
  • Problemas de conectividade de rede
  • Problemas de instalação da extensão do Chrome (use o suporte da Chrome Web Store)

O Conflito Claude.app vs Claude Code (Problema Principal)

Contexto: Quando o Claude.app adicionou suporte a Cowork (automação do navegador a partir do aplicativo desktop), ele introduziu um host de mensagens nativas concorrente que entra em conflito com o Claude Code CLI.

Dois Hosts Nativos, Dois Formatos de Socket

ComponenteBinário do Host NativoLocalização do Socket
Claude.app (Cowork)/Applications/Claude.app/Contents/Helpers/chrome-native-host/tmp/claude-mcp-browser-bridge-$USER/<PID>.sock
Claude Code CLI~/.local/share/claude/versions/<versao> --chrome-native-host$TMPDIR/claude-mcp-browser-bridge-$USER (arquivo único)

Por Que Eles Conflitam

  1. Ambos registram configurações de mensagens nativas no Chrome:

    • com.anthropic.claude_browser_extension.json → ajudante do Claude.app
    • com.anthropic.claude_code_browser_extension.json → wrapper do Claude Code
  2. A extensão do Chrome solicita um host nativo pelo nome

  3. Se a configuração errada estiver ativa, o binário errado é executado

  4. O binário errado cria sockets em um formato/localização que o cliente MCP não espera

  5. Resultado: "A extensão do navegador não está conectada" mesmo que tudo pareça estar rodando

A Correção: Desabilitar o Host Nativo do Claude.app

Se você usa Claude Code CLI para automação do navegador (não Cowork):

# Desabilita a configuração de mensagens nativas do Claude.app
mv ~/Library/Application\ Support/Google/Chrome/NativeMessagingHosts/com.anthropic.claude_browser_extension.json \
   ~/Library/Application\ Support/Google/Chrome/NativeMessagingHosts/com.anthropic.claude_browser_extension.json.disabled

# Garante que a configuração do Claude Code existe e aponta para o wrapper
cat ~/Library/Application\ Support/Google/Chrome/NativeMessagingHosts/com.anthropic.claude_code_browser_extension.json

Se você usa Cowork (Claude.app) para automação do navegador:

# Desabilita a configuração de mensagens nativas do Claude Code
mv ~/Library/Application\ Support/Google/Chrome/NativeMessagingHosts/com.anthropic.claude_code_browser_extension.json \
   ~/Library/Application\ Support/Google/Chrome/NativeMessagingHosts/com.anthropic.claude_code_browser_extension.json.disabled

Você não pode usar ambos simultaneamente. Escolha um e desabilite o outro.

Script de Alternância (Toggle)

Adicione ao ~/.zshrc ou execute diretamente:

chrome-mcp-toggle() {
    local CONFIG_DIR=~/Library/Application\ Support/Google/Chrome/NativeMessagingHosts
    local CLAUDE_APP="$CONFIG_DIR/com.anthropic.claude_browser_extension.json"
    local CLAUDE_CODE="$CONFIG_DIR/com.anthropic.claude_code_browser_extension.json"

    if [[ -f "$CLAUDE_APP" && ! -f "$CLAUDE_APP.disabled" ]]; then
        # Atualmente usando Claude.app, alternar para Claude Code
        mv "$CLAUDE_APP" "$CLAUDE_APP.disabled"
        [[ -f "$CLAUDE_CODE.disabled" ]] && mv "$CLAUDE_CODE.disabled" "$CLAUDE_CODE"
        echo "Alternado para Claude Code CLI"
        echo "Reinicie o Chrome e o Claude Code para aplicar"
    elif [[ -f "$CLAUDE_CODE" && ! -f "$CLAUDE_CODE.disabled" ]]; then
        # Atualmente usando Claude Code, alternar para Claude.app
        mv "$CLAUDE_CODE" "$CLAUDE_CODE.disabled"
        [[ -f "$CLAUDE_APP.disabled" ]] && mv "$CLAUDE_APP.disabled" "$CLAUDE_APP"
        echo "Alternado para Claude.app (Cowork)"
        echo "Reinicie o Chrome para aplicar"
    else
        echo "Estado atual incerto. Verifique as configurações:"
        ls -la "$CONFIG_DIR"/com.anthropic*.json* 2>/dev/null
    fi
}

Uso: chrome-mcp-toggle e depois reinicie o Chrome (e o Claude Code se estiver alternando para CLI).

Diagnóstico Rápido

# 1. Qual binário do host nativo está rodando?
ps aux | grep chrome-native-host | grep -v grep
# Claude.app: /Applications/Claude.app/Contents/Helpers/chrome-native-host
# Claude Code: ~/.local/share/claude/versions/X.X.X --chrome-native-host

# 2. Onde está o socket?
# Para Claude Code (arquivo único em TMPDIR):
ls -la "$(getconf DARWIN_USER_TEMP_DIR)/claude-mcp-browser-bridge-$USER" 2>&1

# Para Claude.app (diretório com arquivos PID):
ls -la /tmp/claude-mcp-browser-bridge-$USER/ 2>&1

# 3. A que o host nativo está conectado?
lsof -U 2>&1 | grep claude-mcp-browser-bridge

# 4. Quais configurações estão ativas?
ls ~/Library/Application\ Support/Google/Chrome/NativeMessagingHosts/com.anthropic*.json

Insight Crítico

O MCP conecta na inicialização. Se a ponte do navegador não estava pronta quando o Claude Code iniciou, a conexão falhará para toda a sessão. A correção geralmente é: garantir que o Chrome + extensão estejam rodando com a configuração correta, e ENTÃO reiniciar o Claude Code.

Procedimento de Reset Completo (Claude Code CLI)

# 1. Garante que a configuração correta está ativa
mv ~/Library/Application\ Support/Google/Chrome/NativeMessagingHosts/com.anthropic.claude_browser_extension.json \
   ~/Library/Application\ Support/Google/Chrome/NativeMessagingHosts/com.anthropic.claude_browser_extension.json.disabled 2>/dev/null

# 2. Atualiza o wrapper para usar a versão mais recente do Claude Code
cat > ~/.claude/chrome/chrome-native-host << 'EOF'
#!/bin/bash
LATEST=$(ls -t ~/.local/share/claude/versions/ 2>/dev/null | head -1)
exec "$HOME/.local/share/claude/versions/$LATEST" --chrome-native-host
EOF
chmod +x ~/.claude/chrome/chrome-native-host

# 3. Mata o host nativo existente e limpa sockets
pkill -f chrome-native-host
rm -rf /tmp/claude-mcp-browser-bridge-$USER/
rm -f "$(getconf DARWIN_USER_TEMP_DIR)/claude-mcp-browser-bridge-$USER"

# 4. Reinicia o Chrome
osascript -e 'quit app "Google Chrome"' && sleep 2 && open -a "Google Chrome"

# 5. Aguarda o Chrome, clique no ícone da extensão Claude

# 6. Verifica se o host nativo correto está rodando
ps aux | grep chrome-native-host | grep -v grep
# Deve mostrar: ~/.local/share/claude/versions/X.X.X --chrome-native-host

# 7. Verifica se o socket existe
ls -la "$(getconf DARWIN_USER_TEMP_DIR)/claude-mcp-browser-bridge-$USER"

# 8. Reinicia o Claude Code

Outras Causas Comuns

Múltiplos Perfis do Chrome

Se você tiver a extensão Claude instalada em vários perfis do Chrome, cada um gera seu próprio host nativo e socket. Isso pode causar confusão.

Correção: Ative a extensão Claude em APENAS UM perfil do Chrome.

Múltiplas Sessões do Claude Code

Executar múltiplas instâncias do Claude Code pode causar conflitos de socket.

Correção: Execute apenas uma sessão do Claude Code por vez, ou use /mcp para reconectar após fechar outras sessões.

Versão Hardcoded no Wrapper

O wrapper em ~/.claude/chrome/chrome-native-host pode ter uma versão hardcoded que fica desatualizada após atualizações.

Diagnóstico:

cat ~/.claude/chrome/chrome-native-host
# Ruim: exec "/Users/.../.local/share/claude/versions/2.0.76" --chrome-native-host
# Bom: Usa $(ls -t ...) para encontrar a mais recente

Correção: Use o wrapper com versão dinâmica mostrado no Procedimento de Reset Completo acima.

TMPDIR Não Definido

O Claude Code espera que TMPDIR esteja definido para encontrar o socket.

# Verificar
echo $TMPDIR
# Deve mostrar: /var/folders/XX/.../T/

# Correção: Adicionar ao ~/.zshrc
export TMPDIR="${TMPDIR:-$(getconf DARWIN_USER_TEMP_DIR)}"

Diagnóstico Aprofundado

echo "=== Binário do Host Nativo ==="
ps aux | grep chrome-native-host | grep -v grep

echo -e "\n=== Socket (localização do Claude Code) ==="
ls -la "$(getconf DARWIN_USER_TEMP_DIR)/claude-mcp-browser-bridge-$USER" 2>&1

echo -e "\n=== Socket (localização do Claude.app) ==="
ls -la /tmp/claude-mcp-browser-bridge-$USER/ 2>&1

echo -e "\n=== Arquivos Abertos do Host Nativo ==="
pgrep -f chrome-native-host | xargs -I {} lsof -p {} 2>/dev/null | grep -E "(sock|claude-mcp)"

echo -e "\n=== Configurações de Mensagens Nativas Ativas ==="
ls ~/Library/Application\ Support/Google/Chrome/NativeMessagingHosts/com.anthropic*.json 2>/dev/null

echo -e "\n=== Conteúdo do Wrapper Personalizado ==="
cat ~/.claude/chrome/chrome-native-host 2>/dev/null || echo "Nenhum wrapper personalizado"

echo -e "\n=== TMPDIR ==="
echo "TMPDIR=$TMPDIR"
echo "Esperado: $(getconf DARWIN_USER_TEMP_DIR)"

Referência de Arquivos

ArquivoPropósito
~/.claude/chrome/chrome-native-hostScript wrapper personalizado para Claude Code
/Applications/Claude.app/Contents/Helpers/chrome-native-hostHost nativo do Claude.app (Cowork)
~/.local/share/claude/versions/<versao>Binário do Claude Code (execute com --chrome-native-host)
~/Library/Application Support/Google/Chrome/NativeMessagingHosts/com.anthropic.claude_browser_extension.jsonConfiguração para o host nativo do Claude.app
~/Library/Application Support/Google/Chrome/NativeMessagingHosts/com.anthropic.claude_code_browser_extension.jsonConfiguração para o host nativo do Claude Code
$TMPDIR/claude-mcp-browser-bridge-$USERArquivo de socket (Claude Code)
/tmp/claude-mcp-browser-bridge-$USER/<PID>.sockArquivos de socket (Claude.app)

Resumo

  1. Problema principal: Claude.app (Cowork) e Claude Code usam hosts nativos diferentes com formatos de socket incompatíveis
  2. Correção: Desabilite a configuração de mensagens nativas daquele que você NÃO está usando
  3. Após qualquer correção: É necessário reiniciar o Chrome E o Claude Code (o MCP conecta na inicialização)
  4. Um perfil: Tenha a extensão Claude em apenas um perfil do Chrome
  5. Uma sessão: Execute apenas uma instância do Claude Code por vez

Skill original por @jeffzwang da @ExaAILabs. Aprimorada e atualizada para as versões atuais do Claude Desktop e Claude Code.

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

trailofbits/address-sanitizer

AddressSanitizer detects memory errors during fuzzing. Use when fuzzing C/C++ code to find buffer overflows and use-after-free bugs.

trailofbits/aflpp

AFL++ is a fork of AFL with better fuzzing performance and advanced features. Use for multi-core fuzzing of C/C++ projects.

trailofbits/agentic-actions-auditor

Audits GitHub Actions workflows for security vulnerabilities in AI agent integrations including Claude Code Action, Gemini CLI, OpenAI Codex, and GitHub AI Inference. Detects attack vectors where attacker-controlled input reaches AI agents running in CI/CD pipelines, including env var intermediary patterns, direct expression injection, dangerous sandbox configurations, and wildcard user allowlists. Use when reviewing workflow files that invoke AI coding agents, auditing CI/CD pipeline security for prompt injection risks, or evaluating agentic action configurations.

trailofbits/algorand-vulnerability-scanner

Scans Algorand smart contracts for 11 common vulnerabilities including rekeying attacks, unchecked transaction fees, missing field validations, and access control issues. Use when auditing Algorand projects (TEAL/PyTeal).

trailofbits/ask-questions-if-underspecified

Clarify requirements before implementing. Use when serious doubts arise.

trailofbits/atheris

Atheris is a coverage-guided Python fuzzer based on libFuzzer. Use for fuzzing pure Python code and Python C extensions.

trailofbits/audit-augmentation

Augments Trailmark code graphs with external audit findings from SARIF static analysis results and weAudit annotation files. Maps findings to graph nodes by file and line overlap, creates severity-based subgraphs, and enables cross-referencing findings with pre-analysis data (blast radius, taint, etc.). Use when projecting SARIF results onto a code graph, overlaying weAudit annotations, cross-referencing Semgrep or CodeQL findings with call graph data, or visualizing audit findings in the context of code structure.

trailofbits/audit-context-building

Enables ultra-granular, line-by-line code analysis to build deep architectural context before vulnerability or bug finding.

trailofbits/audit-prep-assistant

Prepares codebases for security review using Trail of Bits' checklist. Helps set review goals, runs static analysis tools, increases test coverage, removes dead code, ensures accessibility, and generates documentation (flowcharts, user stories, inline comments).

trailofbits/burpsuite-project-parser

Searches and explores Burp Suite project files (.burp) from the command line. Use when searching response headers or bodies with regex patterns, extracting security audit findings, dumping proxy history or site map data, or analyzing HTTP traffic captured in a Burp project.

trailofbits/cairo-vulnerability-scanner

Scans Cairo/StarkNet smart contracts for 6 critical vulnerabilities including felt252 arithmetic overflow, L1-L2 messaging issues, address conversion problems, and signature replay. Use when auditing StarkNet projects.

trailofbits/cargo-fuzz

cargo-fuzz is the de facto fuzzing tool for Rust projects using Cargo. Use for fuzzing Rust code with libFuzzer backend.

trailofbits/claude-in-chrome-troubleshooting

Diagnose and fix Claude in Chrome MCP extension connectivity issues. Use when mcp__claude-in-chrome__* tools fail, return "Browser extension is not connected", or behave erratically.

trailofbits/code-improver

Runs an autonomous review-and-fix improvement loop over any code target — a skill, plugin, module, or directory — using a reviewer the user names: any installed skill or agent. Keeps a cross-round findings ledger, escalates when fixes stop converging, and guards scope mechanically. Use when asked to 'improve this code until review passes', 'run an improvement loop with <reviewer>', or to iterate review-and-fix with a specific reviewer. For skills prefer the skill-improver entry; for a branch prefer pr-improver.

trailofbits/code-maturity-assessor

Systematic code maturity assessment using Trail of Bits' 9-category framework. Analyzes codebase for arithmetic safety, auditing practices, access controls, complexity, decentralization, documentation, MEV risks, low-level code, and testing. Produces professional scorecard with evidence-based ratings and actionable recommendations.

trailofbits/codeql

Scans a codebase for security vulnerabilities using CodeQL's interprocedural data flow and taint tracking analysis. Triggers on "run codeql", "codeql scan", "codeql analysis", "build codeql database", or "find vulnerabilities with codeql". Supports "run all" (security-and-quality + security-experimental suites) and "important only" (high-precision security findings) scan modes. Also handles creating data extension models and processing CodeQL SARIF output.

trailofbits/constant-time-analysis

Detects timing side-channel vulnerabilities in cryptographic code. Use when implementing or reviewing crypto code, encountering division on secrets, secret-dependent branches, or constant-time programming questions in C, C++, Go, Rust, Swift, Java, Kotlin, C#, PHP, JavaScript, TypeScript, Python, or Ruby.

trailofbits/constant-time-testing

Constant-time testing detects timing side channels in cryptographic code. Use when auditing crypto implementations for timing vulnerabilities.

trailofbits/cosmos-vulnerability-scanner

Scans Cosmos SDK blockchain modules and CosmWasm contracts for consensus-critical vulnerabilities — chain halts, fund loss, state divergence. 25 core + 16 IBC + 10 EVM + 3 CosmWasm patterns. Use when auditing custom x/ modules, reviewing IBC integrations, or assessing pre-launch chain security. Updated for SDK v0.53.x.

trailofbits/coverage-analysis

Coverage analysis measures code exercised during fuzzing. Use when assessing harness effectiveness or identifying fuzzing blockers.

Habilidades Relacionadas