claude-in-chrome MCP: bridge fails silently — extension service worker never receives any message

Resolved 💬 3 comments Opened Jun 4, 2026 by swift-develop Closed Jun 8, 2026

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_TOKEN env var → fresh interactive claude 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:

  1. 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.
  2. A version/protocol mismatch between extension 1.0.75 and CLI 2.1.162's --chrome-native-host mode 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-host invocation behavior
  • strace/dtruss of CLI side during a bridge attempt
  • Network/extension communication trace

View original on GitHub ↗

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