Chrome MCP "extension not connected" — installed extension never invokes Claude Code native host (com.anthropic.claude_code_browser_extension orphaned)
Summary
Chrome MCP tools (mcp__claude-in-chrome__*) consistently return
"Browser extension is not connected" despite the entire native-messaging
chain on the CLI side being correctly installed and version-matched.
Root-cause diagnosis: the installed "Claude in Chrome (Beta)" extension
(ID fcoeoabgfenejglbffodgkkbkcdhcgfn) only opens a native-messaging
port to the Claude desktop app's host (com.anthropic.claude_browser_extension).
It never calls chrome.runtime.connectNative('com.anthropic.claude_code_browser_extension'),
so the Claude Code CLI's native-host wrapper is never spawned and the
CLI sees zero connected browsers.
## Environment
- macOS Darwin 25.4.0 (Apple Silicon)
- Chrome (latest stable)
- Claude Code CLI 2.1.143 (
/Users/<me>/.local/bin/claude) - Extension: Claude in Chrome (Beta) v1.0.70, ID
fcoeoabgfenejglbffodgkkbkcdhcgfn, enabled, "On all sites", permission "Communicate with cooperating native applications"
granted
## Reproduction
- Install Claude Code CLI 2.1.143
- Install "Claude in Chrome (Beta)" v1.0.70 from claude.ai/chrome
- Sign in to claude.ai in the extension (works — sidepanel shows Sonnet 4.6 and responds)
- In Claude Code, attempt any Chrome MCP tool:
mcp__claude-in-chrome__tabs_context_mcp({ createIfEmpty: true })
mcp__claude-in-chrome__list_connected_browsers()
- Both return:
Browser extension is not connected. Please ensure the Claude browser extension is installed and running…
## Diagnostic evidence
Native-messaging-host manifest is present and correct:
$ cat "~/Library/Application Support/Google/Chrome/NativeMessagingHosts/com.anthropic.claude_code_browser_extension.json"
{
"name": "com.anthropic.claude_code_browser_extension",
"description": "Claude Code Browser Extension Native Host",
"path": "/Users//.claude/chrome/chrome-native-host",
"type": "stdio",
"allowed_origins": [
"chrome-extension://fcoeoabgfenejglbffodgkkbkcdhcgfn/"
]
}
allowed_originsmatches the installed extension's ID exactly ✓
Wrapper script exists and exec's the correct version:
$ cat ~/.claude/chrome/chrome-native-host
#!/bin/sh
exec "/Users//.local/share/claude/versions/2.1.143" --chrome-native-host
- Binary
2.1.143exists, is executable, matches runningclaude --version✓
The CLI's native-host wrapper is never invoked by Chrome:
$ ps aux | grep chrome-native-host
11414 ... /Applications/Claude.app/Contents/Helpers/chrome-native-host chrome-extension://fcoeoabgfenejglbffodgkkbkcdhcgfn/
11357 ... /Applications/Claude.app/Contents/Helpers/chrome-native-host chrome-extension://fcoeoabgfenejglbffodgkkbkcdhcgfn/
Only the Claude desktop app's native host is running (two instances).
Zero instances of ~/.claude/chrome/chrome-native-host (the CLI's wrapper).
## Expected behavior
The same Chrome extension should be able to connect to the Claude Code CLI's
native host, allowing mcp__claude-in-chrome__* tools to drive the browser
from within claude CLI sessions.
## Actual behavior
Extension only opens a native-messaging port to the Claude desktop app's
host. The CLI's properly-installed-and-allowed native host
(com.anthropic.claude_code_browser_extension) is never targeted —
appears orphaned on the released extension.
## Hypothesis (best guess)
Either:
- The released Chrome extension hasn't been updated to also call
connectNative('com.anthropic.claude_code_browser_extension'), or
- There's a flag/setting needed to switch the extension from
"desktop app mode" to "CLI mode" that I can't find in the extension UI
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗