Community编程与开发github.com

Chrome MCP 连接故障排查

诊断并修复 Claude 在 Chrome MCP 扩展中的连接问题。当 `mcp__claude-in-chrome__*` 工具失败、返回“浏览器扩展未连接”或行为异常时使用。

Chrome MCP 连接故障排查 是什么?

该技能专门用于解决 Claude Code CLI 与 Chrome 浏览器扩展之间的 MCP(模型上下文协议)连接故障。核心诊断场景包括 `mcp__claude-in-chrome__*` 工具返回“浏览器扩展未连接”错误、浏览器自动化工作不稳定或超时,以及切换 Claude Code 和 Claude.app(Cowork)后出现的冲突。技能深入分析了问题的根本原因:Claude.app(Cowork)与 Claude Code 使用了两套原生消息主机,它们采用不兼容的 socket 格式(分别是 `/tmp/claude-mcp-browser-bridge-$USER/<PID>.sock` 和 `$TMPDIR/claude-mcp-browser-bridge-$USER` 单文件),导致 Chrome 扩展请求了错误的主机。该技能提供了一套完整的 macOS 专用解决方案,包括禁用冲突的原生消息配置、使用动态版本包装器、快速诊断命令以及针对多个 Chrome 配置文件、多个 Claude Code 会话和包装器中硬编码版本等常见问题的修复。此外,还提供了一个便捷的 `chrome-mcp-toggle` Shell 函数,用于在 Claude.app 和 Claude Code 之间快速切换原生消息配置。注意该技能仅适用于 macOS 系统。

兼容平台✓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 编程与开发 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

Claude in Chrome MCP 故障排查

当 Claude in Chrome MCP 工具无法连接或工作不稳定时,使用此技能。

何时使用

  • mcp__claude-in-chrome__* 工具失败并显示“Browser extension is not connected”
  • 浏览器自动化工作不稳定或超时
  • 更新 Claude Code 或 Claude.app 之后
  • 在 Claude Code CLI 和 Claude.app(Cowork)之间切换时
  • 原生主机进程正在运行,但 MCP 工具仍然失败

何时不使用

  • Linux 或 Windows 用户 - 此技能涵盖 macOS 特定的路径和工具(~/Library/Application Support/、osascript)
  • 与 Claude 扩展无关的通用 Chrome 自动化问题
  • Claude.app 桌面问题(非浏览器相关)
  • 网络连接问题
  • Chrome 扩展安装问题(请使用 Chrome Web Store 支持)

Claude.app 与 Claude Code 冲突(主要问题)

背景: 当 Claude.app 添加 Cowork 支持(通过桌面应用进行浏览器自动化)时,它引入了一个与 Claude Code CLI 冲突的原生消息主机。

两个原生主机,两种 Socket 格式

组件原生主机二进制文件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/<version> --chrome-native-host$TMPDIR/claude-mcp-browser-bridge-$USER(单个文件)

冲突原因

  1. 两者都在 Chrome 中注册了原生消息配置:

    • com.anthropic.claude_browser_extension.json → Claude.app 助手
    • com.anthropic.claude_code_browser_extension.json → Claude Code 包装器
  2. Chrome 扩展按名称请求原生主机

  3. 如果激活了错误的配置,则会运行错误的二进制文件

  4. 错误的二进制文件会以 MCP 客户端不期望的格式/位置创建 socket

  5. 结果:即使一切看起来都在运行,也会显示“Browser extension is not connected”

修复:禁用 Claude.app 的原生主机

如果你使用 Claude Code CLI 进行浏览器自动化(不使用 Cowork):

# 禁用 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

# 确保 Claude Code 配置存在并指向包装器
cat ~/Library/Application\ Support/Google/Chrome/NativeMessagingHosts/com.anthropic.claude_code_browser_extension.json

如果你使用 Cowork(Claude.app)进行浏览器自动化:

# 禁用 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

你不能同时使用两者。 选择一个并禁用另一个。

切换脚本

将此添加到 ~/.zshrc 或直接运行:

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
        # 当前使用 Claude.app,切换到 Claude Code
        mv "$CLAUDE_APP" "$CLAUDE_APP.disabled"
        [[ -f "$CLAUDE_CODE.disabled" ]] && mv "$CLAUDE_CODE.disabled" "$CLAUDE_CODE"
        echo "Switched to Claude Code CLI"
        echo "Restart Chrome and Claude Code to apply"
    elif [[ -f "$CLAUDE_CODE" && ! -f "$CLAUDE_CODE.disabled" ]]; then
        # 当前使用 Claude Code,切换到 Claude.app
        mv "$CLAUDE_CODE" "$CLAUDE_CODE.disabled"
        [[ -f "$CLAUDE_APP.disabled" ]] && mv "$CLAUDE_APP.disabled" "$CLAUDE_APP"
        echo "Switched to Claude.app (Cowork)"
        echo "Restart Chrome to apply"
    else
        echo "Current state unclear. Check configs:"
        ls -la "$CONFIG_DIR"/com.anthropic*.json* 2>/dev/null
    fi
}

用法:chrome-mcp-toggle 然后重启 Chrome(如果切换到 CLI,还要重启 Claude Code)。

快速诊断

# 1. 哪个原生主机二进制文件正在运行?
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. socket 在哪里?
# 对于 Claude Code(TMPDIR 中的单个文件):
ls -la "$(getconf DARWIN_USER_TEMP_DIR)/claude-mcp-browser-bridge-$USER" 2>&1

# 对于 Claude.app(包含 PID 文件的目录):
ls -la /tmp/claude-mcp-browser-bridge-$USER/ 2>&1

# 3. 原生主机连接了什么?
lsof -U 2>&1 | grep claude-mcp-browser-bridge

# 4. 哪些配置处于活动状态?
ls ~/Library/Application\ Support/Google/Chrome/NativeMessagingHosts/com.anthropic*.json

关键见解

MCP 在启动时连接。 如果启动 Claude Code 时浏览器桥尚未就绪,那么整个会话期间连接都将失败。解决方法通常是:确保 Chrome + 扩展在正确的配置下运行,然后重启 Claude Code。

完整重置过程(Claude Code CLI)

# 1. 确保正确的配置处于活动状态
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. 更新包装器以使用最新的 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. 终止现有原生主机并清理 socket
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. 重启 Chrome
osascript -e 'quit app "Google Chrome"' && sleep 2 && open -a "Google Chrome"

# 5. 等待 Chrome 启动,点击 Claude 扩展图标

# 6. 验证正确的原生主机正在运行
ps aux | grep chrome-native-host | grep -v grep
# 应该显示:~/.local/share/claude/versions/X.X.X --chrome-native-host

# 7. 验证 socket 存在
ls -la "$(getconf DARWIN_USER_TEMP_DIR)/claude-mcp-browser-bridge-$USER"

# 8. 重启 Claude Code

其他常见原因

多个 Chrome 配置文件

如果你在多个 Chrome 配置文件中安装了 Claude 扩展,每个配置文件都会生成自己的原生主机和 socket。这可能导致混淆。

修复: 仅在一个 Chrome 配置文件中启用 Claude 扩展。

多个 Claude Code 会话

运行多个 Claude Code 实例可能导致 socket 冲突。

修复: 一次只运行一个 Claude Code 会话,或者在关闭其他会话后使用 /mcp 重新连接。

包装器中硬编码的版本

~/.claude/chrome/chrome-native-host 处的包装器可能包含硬编码版本,在更新后会变得过时。

诊断:

cat ~/.claude/chrome/chrome-native-host
# 错误:exec "/Users/.../.local/share/claude/versions/2.0.76" --chrome-native-host
# 正确:使用 $(ls -t ...) 查找最新版本

修复: 使用上面完整重置过程中所示的动态版本包装器。

TMPDIR 未设置

Claude Code 期望设置 TMPDIR 来查找 socket。

# 检查
echo $TMPDIR
# 应该显示:/var/folders/XX/.../T/

# 修复:添加到 ~/.zshrc
export TMPDIR="${TMPDIR:-$(getconf DARWIN_USER_TEMP_DIR)}"

深度诊断

echo "=== 原生主机二进制文件 ==="
ps aux | grep chrome-native-host | grep -v grep

echo -e "\n=== Socket(Claude Code 位置) ==="
ls -la "$(getconf DARWIN_USER_TEMP_DIR)/claude-mcp-browser-bridge-$USER" 2>&1

echo -e "\n=== Socket(Claude.app 位置) ==="
ls -la /tmp/claude-mcp-browser-bridge-$USER/ 2>&1

echo -e "\n=== 原生主机打开的文件 ==="
pgrep -f chrome-native-host | xargs -I {} lsof -p {} 2>/dev/null | grep -E "(sock|claude-mcp)"

echo -e "\n=== 活动的原生消息配置 ==="
ls ~/Library/Application\ Support/Google/Chrome/NativeMessagingHosts/com.anthropic*.json 2>/dev/null

echo -e "\n=== 自定义包装器内容 ==="
cat ~/.claude/chrome/chrome-native-host 2>/dev/null || echo "没有自定义包装器"

echo -e "\n=== TMPDIR ==="
echo "TMPDIR=$TMPDIR"
echo "期望值:$(getconf DARWIN_USER_TEMP_DIR)"

文件参考

文件用途
~/.claude/chrome/chrome-native-hostClaude Code 的自定义包装器脚本
/Applications/Claude.app/Contents/Helpers/chrome-native-hostClaude.app(Cowork)的原生主机
~/.local/share/claude/versions/<version>Claude Code 二进制文件(使用 --chrome-native-host 运行)
~/Library/Application Support/Google/Chrome/NativeMessagingHosts/com.anthropic.claude_browser_extension.jsonClaude.app 原生主机的配置
~/Library/Application Support/Google/Chrome/NativeMessagingHosts/com.anthropic.claude_code_browser_extension.jsonClaude Code 原生主机的配置
$TMPDIR/claude-mcp-browser-bridge-$USERSocket 文件(Claude Code)
/tmp/claude-mcp-browser-bridge-$USER/<PID>.sockSocket 文件(Claude.app)

总结

  1. 主要问题: Claude.app(Cowork)和 Claude Code 使用不同的原生主机,且 socket 格式不兼容
  2. 修复: 禁用你未使用的那一方的原生消息配置
  3. 修复后: 必须重启 Chrome 和 Claude Code(MCP 在启动时连接)
  4. 一个配置文件: 仅在一个 Chrome 配置文件中启用 Claude 扩展
  5. 一个会话: 仅运行一个 Claude Code 实例

原始技能由 @ExaAILabs 的 @jeffzwang 创建。已针对当前版本的 Claude Desktop 和 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.

相关技能