chrome-mcp-troubleshooting について
macOS で Claude in Chrome の MCP 接続失敗やブラウザー自動化の不安定さを調べるスキルです。Claude.app と Claude Code のネイティブホスト競合に焦点を当て、診断とリセット手順を示します。
主な機能
- 01ネイティブホストとソケットの競合診断
- 02Claude.app と Claude Code の切り替え
- 03Chrome メッセージ設定の確認
- 04プロファイル、セッション、TMPDIR の調査
- 05Claude Code ホストラッパーのリセット
活用シーン
- 01ブラウザー拡張機能の未接続エラーの解消
- 02アプリ更新後のタイムアウト調査
- 03Cowork と CLI 間での自動化切り替え
MCP 対応
Claude クライアントと Claude in Chrome 拡張機能の MCP 接続を調査します。起動タイミングやネイティブメッセージングホストの設定も対象です。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ trailofbits/ skills --skill chrome-mcp-troubleshootingインストール後、Claude Code で/chrome-mcp-troubleshootingを入力して読み込まれたか確認します。
同梱ファイルagents/openai.yamlassets/trail-of-bits-mark.svg
詳細
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 ウェブストアのサポートを利用してください)
Claude.app と Claude Code の競合(主な問題)
背景: Claude.app に Cowork のサポート(デスクトップアプリからのブラウザー自動化)が追加された際、Claude Code CLI と競合するネイティブメッセージングホストが導入されました。
2 つのネイティブホスト、2 つのソケット形式
| コンポーネント | ネイティブホストのバイナリ | ソケットの場所 |
|---|---|---|
| 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(単一ファイル) |
競合する理由
-
どちらも Chrome にネイティブメッセージング設定を登録します。
com.anthropic.claude_browser_extension.json→ Claude.app ヘルパーcom.anthropic.claude_code_browser_extension.json→ Claude Code ラッパー
-
Chrome 拡張機能が、名前を指定してネイティブホストを要求します
-
間違った設定が有効な場合、間違ったバイナリが実行されます
-
間違ったバイナリは、MCP クライアントが想定していない形式や場所にソケットを作成します
-
結果として、すべてが動作しているように見えても「Browser extension is not connected」と表示されます
解決方法:Claude.app のネイティブホストを無効にする
ブラウザー自動化に Claude Code CLI を使用する場合(Cowork は使用しない):
# Disable the Claude.app native messaging config
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
# Ensure the Claude Code config exists and points to the wrapper
cat ~/Library/Application\ Support/Google/Chrome/NativeMessagingHosts/com.anthropic.claude_code_browser_extension.json
ブラウザー自動化に Cowork(Claude.app)を使用する場合:
# Disable the Claude Code native messaging config
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
# Currently using Claude.app, switch to 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
# Currently using Claude Code, switch to 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. Which native host binary is running?
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. Where is the socket?
# For Claude Code (single file in TMPDIR):
ls -la "$(getconf DARWIN_USER_TEMP_DIR)/claude-mcp-browser-bridge-$USER" 2>&1
# For Claude.app (directory with PID files):
ls -la /tmp/claude-mcp-browser-bridge-$USER/ 2>&1
# 3. What's the native host connected to?
lsof -U 2>&1 | grep claude-mcp-browser-bridge
# 4. Which configs are active?
ls ~/Library/Application\ Support/Google/Chrome/NativeMessagingHosts/com.anthropic*.json
重要なポイント
MCP は起動時に接続します。 Claude Code の起動時にブラウザーブリッジの準備ができていなかった場合、そのセッション中は接続に失敗します。通常は、まず Chrome と拡張機能が正しい設定で実行されていることを確認してから、Claude Code を再起動すれば解決します。
完全リセットの手順(Claude Code CLI)
# 1. Ensure correct config is active
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. Update the wrapper to use latest Claude Code version
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. Kill existing native host and clean 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. Restart Chrome
osascript -e 'quit app "Google Chrome"' && sleep 2 && open -a "Google Chrome"
# 5. Wait for Chrome, click Claude extension icon
# 6. Verify correct native host is running
ps aux | grep chrome-native-host | grep -v grep
# Should show: ~/.local/share/claude/versions/X.X.X --chrome-native-host
# 7. Verify socket exists
ls -la "$(getconf DARWIN_USER_TEMP_DIR)/claude-mcp-browser-bridge-$USER"
# 8. Restart Claude Code
その他のよくある原因
複数の Chrome プロファイル
複数の Chrome プロファイルに Claude 拡張機能をインストールしている場合、それぞれが独自のネイティブホストとソケットを起動します。これにより混乱が生じることがあります。
解決方法: Claude 拡張機能を有効にする Chrome プロファイルは 1 つだけにしてください。
複数の Claude Code セッション
複数の Claude Code インスタンスを実行すると、ソケットの競合が発生することがあります。
解決方法: Claude Code のセッションは一度に 1 つだけ実行するか、ほかのセッションを終了した後に /mcp を使用して再接続してください。
ラッパー内のバージョンのハードコード
~/.claude/chrome/chrome-native-host のラッパーにバージョンがハードコードされていると、更新後に古いバージョンのままになることがあります。
診断:
cat ~/.claude/chrome/chrome-native-host
# Bad: exec "/Users/.../.local/share/claude/versions/2.0.76" --chrome-native-host
# Good: Uses $(ls -t ...) to find latest
解決方法: 上記の完全リセットの手順にある、バージョンを動的に取得するラッパーを使用してください。
TMPDIR が設定されていない
Claude Code はソケットを見つけるために TMPDIR が設定されていることを想定しています。
# Check
echo $TMPDIR
# Should show: /var/folders/XX/.../T/
# Fix: Add to ~/.zshrc
export TMPDIR="${TMPDIR:-$(getconf DARWIN_USER_TEMP_DIR)}"
詳細な診断
echo "=== Native Host Binary ==="
ps aux | grep chrome-native-host | grep -v grep
echo -e "\n=== Socket (Claude Code location) ==="
ls -la "$(getconf DARWIN_USER_TEMP_DIR)/claude-mcp-browser-bridge-$USER" 2>&1
echo -e "\n=== Socket (Claude.app location) ==="
ls -la /tmp/claude-mcp-browser-bridge-$USER/ 2>&1
echo -e "\n=== Native Host Open Files ==="
pgrep -f chrome-native-host | xargs -I {} lsof -p {} 2>/dev/null | grep -E "(sock|claude-mcp)"
echo -e "\n=== Active Native Messaging Configs ==="
ls ~/Library/Application\ Support/Google/Chrome/NativeMessagingHosts/com.anthropic*.json 2>/dev/null
echo -e "\n=== Custom Wrapper Contents ==="
cat ~/.claude/chrome/chrome-native-host 2>/dev/null || echo "No custom wrapper"
echo -e "\n=== TMPDIR ==="
echo "TMPDIR=$TMPDIR"
echo "Expected: $(getconf DARWIN_USER_TEMP_DIR)"
ファイル参照
| ファイル | 用途 |
|---|---|
~/.claude/chrome/chrome-native-host | Claude Code 用のカスタムラッパースクリプト |
/Applications/Claude.app/Contents/Helpers/chrome-native-host | Claude.app(Cowork)のネイティブホスト |
~/.local/share/claude/versions/<version> | Claude Code バイナリ(--chrome-native-host を指定して実行) |
~/Library/Application Support/Google/Chrome/NativeMessagingHosts/com.anthropic.claude_browser_extension.json | Claude.app ネイティブホストの設定 |
~/Library/Application Support/Google/Chrome/NativeMessagingHosts/com.anthropic.claude_code_browser_extension.json | Claude Code ネイティブホストの設定 |
$TMPDIR/claude-mcp-browser-bridge-$USER | ソケットファイル(Claude Code) |
/tmp/claude-mcp-browser-bridge-$USER/<PID>.sock | ソケットファイル(Claude.app) |
まとめ
- 主な問題: Claude.app(Cowork)と Claude Code は、互換性のないソケット形式を使用する異なるネイティブホストを使用しています
- 解決方法: 使用しないほうのネイティブメッセージング設定を無効にします
- 修正後: Chrome と Claude Code を再起動する必要があります(MCP は起動時に接続します)
- プロファイルは1つ: Chrome プロファイル1つだけに Claude 拡張機能を追加してください
- セッションは1つ: Claude Code のインスタンスを1つだけ実行してください
[Claude Desktop と Claude Code の現行バージョン向けに強化・更新された、@ExaAILabs の @jeffzwang によるオリジナルスキルです。]