Claude-in-Chrome MCP server fails to connect on Windows (named pipe path missing)

Resolved 💬 3 comments Opened Feb 8, 2026 by Elies06 Closed Feb 12, 2026

Bug Description

The Claude-in-Chrome MCP server (--claude-in-chrome-mcp) cannot connect to the native host on Windows. tabs_context_mcp always returns "Browser extension is not connected", making all browser automation tools unusable.

Environment

  • OS: Windows 10/11
  • Claude Code version: v2.1.37 (installed via npm)
  • Chrome Extension: v1.0.47
  • Shell: Git Bash / PowerShell

Root Cause

In cli.js, the native host and MCP server use different functions to resolve the pipe path:

| Function | Used by | Windows behavior |
|----------|---------|-----------------|
| tW6() (createSocketServer) | Native host | Correctly returns \.\pipe\claude-mcp-browser-bridge-{user} |
| cc4() (getSocketPaths) | MCP server | Only returns file paths: C:\Users\{user}\AppData\Local\Temp\claude-mcp-browser-bridge-{user} and /tmp/claude-mcp-browser-bridge-{user} |

The MCP server's refreshClients() calls cc4() to discover where the native host is listening. Since cc4() never includes the \.\pipe\... path on Windows, the connection always fails silently.

Windows named pipes (\.\pipe\...) use a completely different namespace from the filesystem. The temp file path that cc4() returns does not exist as a socket — nothing is listening there.

Steps to Reproduce

  1. Install Claude Code on Windows: npm install -g @anthropic-ai/claude-code
  2. Install the Chrome extension
  3. Run claude in a terminal
  4. Try any mcp__claude-in-chrome__* tool (e.g., tabs_context_mcp)
  5. Result: "Browser extension is not connected"

Expected Behavior

The MCP server should include \.\pipe\claude-mcp-browser-bridge-{username} in its list of socket paths to try on Windows, matching what the native host creates.

Workaround (manual patch)

In cli.js, find the function that builds the socket paths array (search for claude-mcp-browser-bridge-). Before return A, add:

if(process.platform==="win32"){
  let WP=`\\.\pipe\${pipeName}`;
  if(!A.includes(WP)) A.push(WP);
}
Note: Function/variable names are minified and change between versions. In v2.1.37, the relevant identifiers are cc4(), QCY() (process.platform), K (pipe name), and A (paths array).

Proposed Fix

cc4() (getSocketPaths) should include the Windows named pipe path when process.platform === 'win32', the same way tW6() already does for the server side. This is a one-line addition.

View original on GitHub ↗

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