claude-in-chrome MCP: bridge fails silently — extension service worker never receives any message
Summary
The claude-in-chrome MCP tools always return Browser extension is not connected despite the extension being installed, signed in to the same account as Claude Code, and enabled — and despite the MCP server itself showing connected · 22 tools in /mcp.
The Chrome extension's service worker console stays completely empty when the bridge is attempted — no log lines, no errors, no network requests. The failure appears to be entirely on the Claude Code side: it never reaches the extension at all.
Environment
| Component | Version |
|---|---|
| macOS | 26.5.1 (build 25F80) |
| Architecture | arm64 (Apple Silicon) |
| Chrome | 148.0.7778.216 |
| Claude Code CLI | 2.1.162 (~/.local/bin/claude → ~/.local/share/claude/versions/2.1.162, Mach-O arm64) |
| Claude in Chrome extension | 1.0.75 (Beta), ID fcoeoabgfenejglbffodgkkbkcdhcgfn |
| Claude Desktop app | 1.10628.2 (also installed, currently running) |
Same Anthropic account on both Claude Code CLI and the extension.
Diagnostic findings
Two Native Messaging Host manifests are present, registered to different binaries:
1. ~/Library/Application Support/Google/Chrome/NativeMessagingHosts/com.anthropic.claude_browser_extension.json (created today with Desktop app install/update)
{
"name": "com.anthropic.claude_browser_extension",
"description": "Claude Browser Extension Native Host",
"path": "/Applications/Claude.app/Contents/Helpers/chrome-native-host",
"type": "stdio",
"allowed_origins": [
"chrome-extension://dihbgbndebgnbjfmelmegjepbnkhlgni/",
"chrome-extension://fcoeoabgfenejglbffodgkkbkcdhcgfn/",
"chrome-extension://dngcpimnedloihjnnfngkgjoidhnaolf/"
]
}
Target binary is a Mach-O universal (x86_64 + arm64), 2.1 MB, owned by root.
2. ~/Library/Application Support/Google/Chrome/NativeMessagingHosts/com.anthropic.claude_code_browser_extension.json (older, from CLI install)
{
"name": "com.anthropic.claude_code_browser_extension",
"description": "Claude Code Browser Extension Native Host",
"path": "/Users/tomgrant/.claude/chrome/chrome-native-host",
"type": "stdio",
"allowed_origins": [
"chrome-extension://fcoeoabgfenejglbffodgkkbkcdhcgfn/"
]
}
Target is a 177-byte shell wrapper:
#!/bin/sh
# Chrome native host wrapper script
# Generated by Claude Code - do not edit manually
exec "/Users/tomgrant/.local/share/claude/versions/2.1.162" --chrome-native-host
The CLI binary it execs exists (219 MB, executable).
Both manifests share the same fcoeoabgfenejglbffodgkkbkcdhcgfn extension ID in allowed_origins.
Steps tried (none changed behavior)
- Verified extension is enabled, signed into the correct account, no Errors badge in chrome://extensions/
- Removed
CLAUDE_CODE_OAUTH_TOKENenv var → fresh interactiveclaude login(in case headless token auth blocks the bridge) - Full Chrome restart (Cmd+Q + reopen)
- Full Claude Code restart
- VPN disconnected
- Launched the Desktop app in case the unified NMH (
com.anthropic.claude_browser_extension) is what the extension calls - Watched extension service worker DevTools (
chrome://extensions/→ Inspect views: service worker → Console) during retry — stays completely empty, no message received
Most likely cause (best guess)
The "service worker never receives any message" observation suggests the failure is upstream of Chrome's NMH dispatch entirely. Either:
- The CLI's MCP server tries to connect to the extension by a different NMH name than the one the extension expects (unified-vs-CLI-specific name mismatch), and Chrome therefore never dispatches the call.
- A version/protocol mismatch between extension 1.0.75 and CLI 2.1.162's
--chrome-native-hostmode that fails before any message gets logged.
The error message Browser extension is not connected appears to be the MCP server's give-up response, not the result of a failed handshake at the extension end.
Useful to provide if requested
- Output of
claude --chrome-native-hostinvocation behavior strace/dtrussof CLI side during a bridge attempt- Network/extension communication trace
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗