Chrome extension: MCP reports connected but never connects to native host socket
Bug Report
Claude Code version: 2.1.81
Chrome extension: Claude in Chrome (fcoeoabgfenejglbffodgkkbkcdhcgfn), installed and enabled
OS: macOS Darwin 25.3.0
Browser: Google Chrome
Claude Desktop App: Also installed (v1.1.8359)
Problem
mcp__claude-in-chrome__tabs_context_mcp always returns "Browser extension is not connected" even though the native messaging host is running and the socket is available. The Chrome extension works in the sidebar. /mcp reports claude-in-chrome as "connected"/"reconnected".
Debugging performed
What I tried (all failed)
- Restarted Chrome, Claude Code, and the computer
- Ran
/chromemultiple times, including "Reconnect extension" - Ran
/mcp— showsclaude-in-chromeas reconnected - Verified Chrome extension is installed and enabled in
chrome://extensions
Configuration verified correct
- Native messaging host config exists at
~/Library/Application Support/Google/Chrome/NativeMessagingHosts/com.anthropic.claude_code_browser_extension.jsonwith correct extension ID - Native host binary at
~/.claude/chrome/chrome-native-hostis executable and points to Claude Code v2.1.81 - Claude Code version 2.1.81 exceeds minimum required 2.0.73
Root cause identified
There are two native messaging host configs:
com.anthropic.claude_browser_extension.json— from Claude Desktop app, path:/Applications/Claude.app/Contents/Helpers/chrome-native-hostcom.anthropic.claude_code_browser_extension.json— from Claude Code CLI, path:~/.claude/chrome/chrome-native-host
The Chrome extension connects to com.anthropic.claude_browser_extension (the desktop app's host). Chrome spawns the desktop app's native host binary, which creates a unix socket at /tmp/claude-mcp-browser-bridge-ensor/<pid>.sock.
The socket is available and listening, but Claude Code's MCP server never connects to it. Verified via lsof — only the native host process has a file descriptor on the socket; no Claude Code process ever connects, even after calling browser tools or running /chrome reconnect.
When the desktop app's config is removed, Chrome spawns Claude Code's native host instead, and a socket is created — but Claude Code MCP still doesn't connect to it.
Additional observation
- The Claude Desktop app's native host process can persist as an orphan after quitting the desktop app, holding the extension connection. However, even after killing it and restarting Chrome, the core issue remains: Claude Code MCP doesn't connect to the socket regardless of which native host created it.
Expected behavior
Claude Code's MCP server should connect to the native host socket in /tmp/claude-mcp-browser-bridge-ensor/ and relay browser tool calls through it.
Actual behavior
The MCP reports as "connected" but never opens a connection to the native host socket, causing all browser tool calls to fail with "Browser extension is not connected."
🤖 Generated with Claude Code
This issue has 4 comments on GitHub. Read the full discussion on GitHub ↗