Claude in Chrome: native host socket bridge not functional on Linux
Resolved 💬 3 comments Opened Apr 1, 2026 by alixdeschamps Closed Apr 5, 2026
Environment
- OS: Ubuntu Linux (kernel 6.18.0), x86_64
- Chrome: 146.0.7680.164
- Extension: Claude in Chrome (Beta) v1.0.66 (ID: fcoeoabgfenejglbffodgkkbkcdhcgfn)
- Claude Code: v2.1.89 (native binary)
- Auth: claude.ai account, Max subscription
Symptom
All mcp__claude-in-chrome__* tool calls return:
"Browser extension is not connected. Please ensure the Claude browser extension is installed and running..."
This happens regardless of --chrome flag, fresh session vs --resume, and with the side panel open/active.
Detailed diagnosis
What works
- Extension is installed, enabled, site access on all sites ✓
- Native messaging host manifest correctly configured at
~/.config/google-chrome/NativeMessagingHosts/com.anthropic.claude_code_browser_extension.json✓ - Native host process (
--chrome-native-host) is spawned by Chrome ✓ - Chrome process (PID verified) is connected to native host via stdio pipes ✓
- Native host creates Unix socket at
/tmp/claude-mcp-browser-bridge-{user}/{pid}.sock✓ - Socket accepts incoming connections ✓
- The
--claude-in-chrome-mcpMCP subprocess initializes correctly, lists 18 tools, and responds to MCP protocol ✓
What fails
- The native host does not bridge messages between Chrome (native messaging/stdio) and the Unix socket.
- When connecting to the socket and sending data, the native host either returns empty bytes and closes the connection, or keeps the connection open but never responds.
- The
--claude-in-chrome-mcpsubprocess connects to the socket, gets no response, and returns the "not connected" error viaonToolCallDisconnected.
Root cause analysis
The native host sits between two communication channels:
- Chrome extension ↔ native host (via native messaging stdio pipes)
- Claude Code MCP server ↔ native host (via Unix socket)
The native host creates the socket listener and accepts connections, but never forwards messages in either direction. This suggests the Chrome extension is not sending the expected initialization/handshake message through native messaging to activate the bridge.
Verified by:
- Tracing pipe connections between Chrome and native host (pipes intact, both ends open)
- Connecting to the socket from Python (connection accepted, no data returned)
- Running
--claude-in-chrome-mcpstandalone with full MCP protocol (initializes fine, tool calls return "not connected") - Checking the service worker console for errors (none found)
- Extension options page shows correct account, no relevant settings for CLI connection
Steps to reproduce
- Install Claude in Chrome extension on Linux (Chrome 146)
- Log in to claude.ai with the same account as Claude Code CLI
- Run
claude --chrome - Open Chrome, open the Claude side panel
- Call any
mcp__claude-in-chrome__*tool → always returns "not connected"
Expected behavior
The native host should bridge MCP messages between the Unix socket and Chrome native messaging, allowing Claude Code to control the browser.
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗