claude-in-chrome tools report 'extension not connected' despite extension installed, correct profile, correct account, and working chat panel
Summary
The claude-in-chrome browser automation tools (e.g. tabs_context_mcp) consistently return "Browser extension is not connected" across many retries in a single session, even after ruling out every cause suggested by the error message itself.
Environment
- macOS: 12.3 (Build 21E230)
- Google Chrome: 150.0.7871.125
- Claude Code CLI: 2.1.228
- Claude.app (desktop): 1.30096.5
What I ruled out
- Extension not installed — confirmed installed (extension ID
fcoeoabgfenejglbffodgkkbkcdhcgfn) via filesystem check of~/Library/Application Support/Google/Chrome/<Profile>/Extensions/. - Wrong Chrome profile — the user has 6 Chrome profiles (Default, Guest, Profile 3–6). The extension is only present in "Profile 3", but that is the exact profile/window the user was actively using (confirmed via
osascriptquerying the frontmost Chrome window's active tab URL, which matched the local file being tested). - Wrong account — user confirmed the extension's side panel shows them signed in with the same account used for this Claude Code session.
- Stale Chrome process — user fully quit (Cmd+Q) and relaunched Chrome; issue persisted.
- Native messaging host misconfiguration — both native messaging host manifests exist and look correct:
~/Library/Application Support/Google/Chrome/NativeMessagingHosts/com.anthropic.claude_browser_extension.json→ points to/Applications/Claude.app/Contents/Helpers/chrome-native-host(binary exists, executable).~/Library/Application Support/Google/Chrome/NativeMessagingHosts/com.anthropic.claude_code_browser_extension.json→ points to/Users/ahmedalkhaja/.claude/chrome/chrome-native-host,allowed_originscorrectly lists the installed extension ID.
- Extension not actually running — the extension's side panel is confirmed actively working in the same Chrome window (general chat functionality responds normally), so the extension itself is not crashed or unloaded.
Actual behavior
Despite all of the above, mcp__claude-in-chrome__tabs_context_mcp (and other claude-in-chrome tools) called from this Claude Code CLI session return:
Browser extension is not connected. Please ensure the Claude browser extension is installed and running (https://claude.ai/chrome), and that you are logged into claude.ai with the same account as Claude Code. If this is your first time connecting to Chrome, you may need to restart Chrome for the installation to take effect. If you continue to experience issues, please report a bug: https://github.com/anthropics/claude-code/issues/new?labels=bug,claude-in-chrome
This was retried 7+ times across a single conversation, including after a full Chrome restart, with no change.
Expected behavior
Since the extension's own chat/sidebar functionality works normally in the exact same browser window/profile that this CLI session is running from, I'd expect the native-messaging bridge between this Claude Code session and the extension to also connect successfully — or, failing that, a more specific error indicating what part of the pairing/handshake is actually failing (e.g. session ID mismatch, native host handshake timeout, etc.) rather than the generic "not connected" message, which points users toward remediation steps (reinstall, re-login, restart Chrome) that don't address the actual root cause when those preconditions are already met.
Possible hypothesis
Two separate native messaging host manifests are registered for what appears to be the same extension ID (fcoeoabgfenejglbffodgkkbkcdhcgfn):
com.anthropic.claude_browser_extension(general "Claude in Chrome" chat feature)com.anthropic.claude_code_browser_extension(Claude Code CLI browser automation)
It's possible the CLI-specific native host process/handshake isn't being triggered or is failing silently while the general chat native host connection succeeds, since those are the two features observed to have divergent behavior (chat works, CLI automation doesn't) despite sharing the same underlying extension.
This issue has 1 comment on GitHub. Read the full discussion on GitHub ↗