Claude in Chrome: MCP tool returns 'not connected' while socket is functional

Resolved 💬 3 comments Opened Apr 5, 2026 by mihirom Closed Apr 9, 2026

Bug Description

mcp__claude-in-chrome__tabs_context_mcp always returns "Browser extension is not connected" even though the native messaging socket is fully functional.

Evidence

Manual socket test succeeds with correct response:

import socket, json, struct
sock_path = '/tmp/claude-mcp-browser-bridge-user/PID.sock'
s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
s.connect(sock_path)
msg = json.dumps({'method': 'execute_tool', 'params': {'client_id': 'claude-code', 'tool': 'tabs_context_mcp', 'args': {'createIfEmpty': True}}})
data = msg.encode()
header = struct.pack('<I', len(data))
s.send(header + data)
# Returns valid response with tab data ✅

Yet Claude Code's internal MCP layer returns "Browser extension is not connected".

Verified conditions

| Check | Status |
|-------|--------|
| Socket exists | ✅ |
| Native host process alive | ✅ |
| Socket permissions (0600) | ✅ |
| Directory permissions (0700) | ✅ |
| Socket owner matches current user | ✅ |
| Chrome extension installed (v1.0.66) | ✅ |
| Side panel open | ✅ |
| Logged into claude.ai | ✅ |
| Desktop app Native Messaging conflict resolved | ✅ |
| Length-prefixed protocol works | ✅ |
| Manual execute_tool call works | ✅ |

What was tried (all failed)

  1. Chrome restart (⌘+Q)
  2. Extension toggle (OFF→ON)
  3. Claude Code restart
  4. New terminal window with fresh claude
  5. Claude Code update (v2.1.89 → v2.1.92)
  6. Kill native host + reopen side panel

Root cause hypothesis

The socket pool scans the directory and finds the .sock file, but ensureConnected() fails silently. The socket client may fail during connection despite the socket being fully operational via manual test.

Environment

  • Claude Code: v2.1.92
  • Chrome extension: Claude in Chrome (Beta) v1.0.66
  • OS: macOS (Darwin 25.3.0, Apple Silicon)
  • Node: v22.17.0

🤖 Generated with Claude Code

View original on GitHub ↗

This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗