claude-in-chrome MCP: "Browser extension is not connected" on macOS Intel — all install methods fail

Resolved 💬 6 comments Opened Mar 13, 2026 by HALL4Y Closed May 5, 2026

claude-in-chrome MCP: "Browser extension is not connected" — comprehensive diagnosis

Environment

| Component | Version / Details |
|-----------|------------------|
| macOS | 15.7.3 (Build 24G419) — Intel x86_64 |
| Chrome | 145.0.7632.162 |
| Extension | Claude v1.0.59 (fcoeoabgfenejglbffodgkkbkcdhcgfn) |
| Claude Code | 2.1.58, 2.1.72, 2.1.73, 2.1.74 — all tested |
| Node | v25.8.1 (Homebrew) and v24.14.0 (NVM) — both tested |
| Auth | OAuth token (firstParty) |

Versions tested

All combinations produce the same failure:

| Install method | Claude Code | Node | Native host type | Result |
|---------------|-------------|------|-----------------|--------|
| Homebrew Cask | 2.1.58 | N/A (native Mach-O x86_64 binary) | exec claude --chrome-native-host | Not connected |
| Homebrew Cask | 2.1.72 | N/A (native Mach-O x86_64 binary) | exec claude --chrome-native-host | Not connected |
| Homebrew Cask | 2.1.73 | N/A (native Mach-O x86_64 binary) | exec claude --chrome-native-host | Not connected |
| Homebrew npm | 2.1.74 | v25.8.1 (Homebrew, /usr/local/Cellar/) | exec node cli.js --chrome-native-host | Not connected |
| NVM npm | 2.1.74 | v24.14.0 (NVM, ~/.config/nvm/) | exec node cli.js --chrome-native-host | Not connected |

3 install methods × 4 Claude Code versions (2.1.58, 2.1.72, 2.1.73, 2.1.74) × 2 Node runtimes = same result every time.

Problem

Every call to mcp__claude-in-chrome__tabs_context_mcp (or any other chrome tool) returns:

Browser extension is not connected. Please ensure the Claude browser extension
is installed and running, and that you are logged into claude.ai with the same
account as Claude Code.

The native messaging host launches correctly, creates a Unix socket, and responds to ping/pong — but the MCP server never establishes a working connection through the bridge.

Architecture (verified working individually)

Chrome Extension (v1.0.59)
    │ ← native messaging (stdin/stdout)
    ▼
Native Host (~/.claude/chrome/chrome-native-host)
    → exec node cli.js --chrome-native-host
    │ ← Unix domain socket
    ▼
/tmp/claude-mcp-browser-bridge-<user>/<PID>.sock
    │ ← MCP server connects here
    ▼
Claude Code CLI (2.1.74)

What works

  • Native host ping/pong: Simulating Chrome's native messaging protocol confirms the host responds correctly:

``python
# Sent: {"type":"ping"} (with 4-byte length prefix)
# Received: {"type":"pong","timestamp":1773378566233}
# Stderr: [Claude Chrome Native Host] Initializing...
# Creating socket listener: /tmp/claude-mcp-browser-bridge-hal9000/<PID>.sock
# Socket server listening for connections
# Handling Chrome message type: ping
# Responding to ping
``

  • Socket creation: The Unix socket is created successfully with correct permissions (0600)
  • Socket reachable: Connecting to the socket from Python succeeds (connection accepted), but the response is always 0 bytes — the bridge never replies to any message format tested (get_status, JSON-RPC, etc.)
  • Extension permissions: All correct — nativeMessaging, activeTab, scripting, debugger, tabGroups, tabs, etc.
  • Extension auth: Logged in as [redacted]@gmail.com on claude.ai, same account as Claude Code OAuth
  • /mcp command: Returns "Reconnected to claude-in-chrome." every time, but subsequent tool calls still fail

What was tested (all failed)

Installation methods (3 different approaches)
  1. Homebrew Cask (brew install --cask claude-code) — v2.1.73, native binary x86_64
  2. Homebrew npm (npm install -g @anthropic-ai/claude-code) — v2.1.74, node at /usr/local/Cellar/node/25.8.1/bin/node
  3. NVM npm (nvm use v24.14.0 && npm install -g @anthropic-ai/claude-code) — v2.1.74, node at ~/.config/nvm/versions/node/v24.14.0/bin/node

All three produce the same result: native host runs, socket created, MCP says "not connected."

Native host conflict resolution
  • Disabled Claude Desktop native host manifest (com.anthropic.claude_browser_extension.json.disabled) to eliminate conflict with com.anthropic.claude_code_browser_extension.json
  • Verified only CLI native host process running (no Desktop native host)
  • Re-enabled Desktop manifest after test — no change either way
Auth isolation
  • Detected ANTHROPIC_API_KEY in environment (injected by Infisical vault via shell)
  • Created alias to strip it: alias claude='ANTHROPIC_API_KEY= command claude ...'
  • Confirmed claude auth status shows authMethod: "oauth_token" with no apiKeySource
  • Same account on claude.ai extension and Claude Code OAuth
  • No change
macOS security (quarantine)
  • Discovered Chrome sets com.apple.quarantine: 0081;00000000;Chrome; on the socket directory (/tmp/claude-mcp-browser-bridge-<user>/)
  • Tested removing quarantine with xattr -d com.apple.quarantine
  • Tested pre-creating the directory before Chrome launches (no quarantine set by Chrome when dir already exists — confirmed clean)
  • Verified socket created inside clean dir
  • No change
macOS security (other)
  • Firewall: enabled but not blocking (no stealth mode, no block-all)
  • TCC: Chrome has camera/microphone/WebAuthn — no relevant blocks
  • Code signing: Node binary unsigned (code object is not signed at all) — but native host launches successfully regardless
  • No App Sandbox entitlements on Chrome affecting Unix socket access
Chrome/Extension restarts
  • Full Chrome quit + relaunch: 5+ times
  • Extension toggle (disable/enable in chrome://extensions): 4+ times
  • Kill native host process + clean socket + restart: 3+ times
  • Claude Code /exit + relaunch: 5+ times
  • Startup order tested: Chrome first then Claude Code, and vice versa
Extension inspection
  • Service worker console: no errors (clean)
  • Extension settings page: no Claude Code connection section visible
  • Extension code analysis: connects to native hosts in order (Desktop first, CLI second), ping/pong handshake with 10s timeout

Suspected root cause

The Unix socket bridge between the native host and the Claude Code MCP server appears broken. Specifically:

  • The native host creates the socket and listens
  • Claude Code's MCP server connects to the socket
  • But the bridge never relays messages (0 bytes response)

This suggests the native host's socket server accepts connections but either:

  1. The Chrome extension disconnects from the native messaging port before the MCP server connects (service worker idle timeout?)
  2. The bridge protocol between socket and native messaging has a handshake that silently fails
  3. There's a version mismatch between extension v1.0.59 and CLI v2.1.74 bridge protocol

Reproduction

  1. macOS Intel (x86_64), Chrome 145+, Claude Code 2.1.74
  2. Install Claude extension from Chrome Web Store
  3. Login to claude.ai with same account as Claude Code
  4. Run claude in terminal
  5. Call any mcp__claude-in-chrome__* tool → "Browser extension is not connected"

Workaround

None found. claudezilla (Firefox MCP via custom server) works as an alternative for browser automation.

View original on GitHub ↗

This issue has 6 comments on GitHub. Read the full discussion on GitHub ↗