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: truein extension feature flagsbridgeDeviceIdexists in extension storage
What doesn't work
chrome.storage.localshowsmcpConnected: 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
--chromeflag confirmed in process args,"chrome": truein settings.json
Steps already taken
- Disabled Claude Desktop's native messaging host (
com.anthropic.claude_browser_extension.json→.disabled) - Removed extension from other devices
- Killed all Claude Code sessions, quit Claude Desktop
- Deleted bridge socket directory, restarted Chrome
- Started single session with
claude --chrome - 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 —
--chromeflag + Desktop coexistence
🤖 Generated with Claude Code
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗