claude-in-chrome MCP: "Browser extension is not connected" on macOS Intel — all install methods fail
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.comon claude.ai, same account as Claude Code OAuth
/mcpcommand: Returns "Reconnected to claude-in-chrome." every time, but subsequent tool calls still fail
What was tested (all failed)
Installation methods (3 different approaches)
- Homebrew Cask (
brew install --cask claude-code) — v2.1.73, native binary x86_64 - Homebrew npm (
npm install -g @anthropic-ai/claude-code) — v2.1.74, node at/usr/local/Cellar/node/25.8.1/bin/node - 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 withcom.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_KEYin environment (injected by Infisical vault via shell) - Created alias to strip it:
alias claude='ANTHROPIC_API_KEY= command claude ...' - Confirmed
claude auth statusshowsauthMethod: "oauth_token"with noapiKeySource - 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:
- The Chrome extension disconnects from the native messaging port before the MCP server connects (service worker idle timeout?)
- The bridge protocol between socket and native messaging has a handshake that silently fails
- There's a version mismatch between extension v1.0.59 and CLI v2.1.74 bridge protocol
Reproduction
- macOS Intel (x86_64), Chrome 145+, Claude Code 2.1.74
- Install Claude extension from Chrome Web Store
- Login to claude.ai with same account as Claude Code
- Run
claudein terminal - 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.
This issue has 6 comments on GitHub. Read the full discussion on GitHub ↗