Chrome integration: "Browser extension is not connected" on Linux despite healthy native host and socket
Environment
┌──────────────────┬────────────────────────────────────────────┐
│ Component │ Version │
├──────────────────┼────────────────────────────────────────────┤
│ OS │ Ubuntu Linux, kernel 6.17.0-14-generic │
├──────────────────┼────────────────────────────────────────────┤
│ Claude Code │ v2.1.76 (launched with claude --chrome) │
├──────────────────┼────────────────────────────────────────────┤
│ Chrome Extension │ v1.0.36 (fcoeoabgfenejglbffodgkkbkcdhcgfn) │
├──────────────────┼────────────────────────────────────────────┤
│ Node │ v24.5.0 (nvm) │
└──────────────────┴────────────────────────────────────────────┘
Description
On Linux, the Chrome MCP integration reports "Browser extension is not connected" for all mcp__claude-in-chrome__* tool calls, even though the native messaging host, socket, and extension are all functioning correctly at the OS level.
What works
- Native host process spawns correctly: Chrome → native messaging → node cli.js --chrome-native-host
- Unix domain socket created at /tmp/claude-mcp-browser-bridge-<user>/<PID>.sock
- Socket accepts connections (verified with python3 -c "import socket; s=socket.socket(socket.AF_UNIX); s.connect('<path>');")
- /chrome command reports Status: Enabled, Extension: Installed
- Extension has nativeMessaging permission granted
- Native host manifest at ~/.config/google-chrome/NativeMessagingHosts/com.anthropic.claude_code_browser_extension.json is valid
- All file paths in manifest and wrapper script resolve correctly
What doesn't work
- Every tool call (e.g. mcp__claude-in-chrome__tabs_context_mcp) returns: "Browser extension is not connected"
- The Claude Code MCP client never connects to the bridge socket — verified with ss -xp showing 0 connected peers on the socket
- Tools appear as deferred/available in the tool list but the underlying connection is never established
Steps to reproduce
- Install Claude Code v2.1.76 on Ubuntu Linux
- Install Chrome extension v1.0.36
- Run claude --chrome
- Verify /chrome shows Enabled + Installed
- Attempt any mcp__claude-in-chrome__* tool call
- Observe "Browser extension is not connected" error
What was tried
- Restarting Chrome completely
- Running /chrome → Reconnect extension
- Killing native host process and letting Chrome re-spawn it
- Cleaning stale socket files from /tmp/claude-mcp-browser-bridge-<user>/
- Starting Claude Code with --chrome flag
- Starting Claude Code with --dangerously-skip-permissions --chrome
- Updating Chrome browser to latest stable
None of these resolved the issue.
Hypothesis
The bridge socket is created and listening, but the Claude Code MCP client never connects to it. The architecture appears to be:
Chrome Extension ↔ Native Host ↔ Unix Socket ↔ Claude Code MCP Client
The left side of this chain (Extension → Native Host → Socket creation) works. The right side (Claude Code MCP Client → Socket) does not — ss -xp confirms zero connected clients on the socket.
The error message "Browser extension is not connected" is misleading. The extension IS connected (to the native host). The actual failure is that Claude Code's MCP client does not connect to the bridge socket, or the connection/handshake fails silently.
Expected behavior
Claude Code should discover and connect to the bridge socket, enabling mcp__claude-in-chrome__* tools to communicate with the browser.
Additional context
This may be Linux-specific. The socket discovery mechanism (scanning /tmp/claude-mcp-browser-bridge-<user>/) appears to find the socket file, but no connection is established. There are no relevant error logs surfaced to the user.
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗