Chrome extension service worker fails to initialize native host connection (mcpConnected stays false)

Resolved 💬 3 comments Opened Apr 4, 2026 by PresenceWith Closed Apr 8, 2026

Environment

  • Claude Code: 2.1.92
  • Chrome extension: v1.0.66
  • macOS Darwin 25.4.0 (Apple Silicon)
  • Claude Max subscription, OAuth token valid

Problem

The Chrome extension's service worker never initiates the native host connection or bridge WebSocket. mcpConnected stays false permanently. All mcp__claude-in-chrome__* tools return "Browser extension is not connected."

Diagnostic findings

What works

  • Side panel chat functions normally
  • Native host process runs (--chrome-native-host, creates UNIX socket)
  • Manual connectNative('com.anthropic.claude_code_browser_extension') from service worker console returns {type: 'status_response', native_host_version: '1.0.0'} — native host is reachable
  • chrome_ext_bridge_enabled: true in extension feature flags
  • bridgeDeviceId exists in extension storage

What doesn't work

  • chrome.storage.local shows mcpConnected: false, nativeHostInstalled: undefined
  • Service worker DevTools shows zero network activity (no WebSocket to bridge.claudeusercontent.com)
  • Service worker console shows zero messages (no errors, no warnings, no info)
  • Disabling and re-enabling the extension does not trigger any service worker initialization
  • No pairing prompt appears in the side panel
  • --chrome flag confirmed in process args, "chrome": true in settings.json

Steps already taken

  1. Disabled Claude Desktop's native messaging host (com.anthropic.claude_browser_extension.json.disabled)
  2. Removed extension from other devices
  3. Killed all Claude Code sessions, quit Claude Desktop
  4. Deleted bridge socket directory, restarted Chrome
  5. Started single session with claude --chrome
  6. Verified native host manifest points to correct extension ID (fcoeoabgfenejglbffodgkkbkcdhcgfn)

Root cause hypothesis

The extension's service worker startup/initialization code is not executing — it never calls connectNative() or opens a WebSocket to the bridge. The worker is registered and alive (responds to chrome.storage.local.get()) but its runtime.onStartup / runtime.onInstalled handlers appear to not fire or silently fail.

Related issues

  • #20341, #20943, #23434 — Desktop/Code native host conflict
  • #25551, #33813 — Multi-device routing
  • #38533 — --chrome flag + Desktop coexistence

🤖 Generated with Claude Code

View original on GitHub ↗

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