Chrome MCP tools report 'not connected' despite working socket
Resolved 💬 3 comments Opened Mar 16, 2026 by yye00 Closed Mar 20, 2026
Summary
The mcp__claude-in-chrome__tabs_context_mcp tool (and all chrome MCP tools) consistently return "Browser extension is not connected" even though the native host process is running and the unix socket is fully functional.
Environment
- Claude Code version: 2.1.76
- Chrome version: 145.0.7632.116
- OS: Fedora Linux 42 (x86_64)
- Extension: Claude (fcoeoabgfenejglbffodgkkbkcdhcgfn) v1.0.62
Steps to Reproduce
- Launch Claude Code with
--chromeflag - Chrome is running with the Claude extension installed and enabled
- Native messaging host is running and creates socket at
/tmp/claude-mcp-browser-bridge-captain/<pid>.sock - Call
mcp__claude-in-chrome__tabs_context_mcp— returns "Browser extension is not connected" - Manually connecting to the socket via Python and sending tool requests works perfectly
Debugging Details
- The native host process (
claude --chrome-native-host) is spawned by Chrome and running - The unix socket exists and is connectable
- Sending JSON tool requests directly to the socket returns correct results (tab lists, tab creation works)
- The MCP client inside Claude Code never successfully connects to the socket
- Restarting Chrome, the extension, and Claude Code sessions did not resolve the issue
- Having multiple
claude --chromesessions running simultaneously may have triggered the initial issue, but killing the extra session and restarting did not fix it - Extension service worker was confirmed running (native host spawned), permissions all granted including
nativeMessaging
Workaround
Communicating directly with the socket via Python works:
import socket, json, struct
sock_path = '/tmp/claude-mcp-browser-bridge-captain/<pid>.sock'
s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
s.connect(sock_path)
msg = json.dumps({'type': 'tool_request', 'method': 'execute_tool', 'params': {'tool': 'tabs_context_mcp', 'args': {'createIfEmpty': True}}})
encoded = msg.encode()
s.sendall(struct.pack('<I', len(encoded)) + encoded)
data = s.recv(8192)
# Returns correct tab data
🤖 Generated with Claude Code
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗