[BUG] Chrome native host and Claude Code compete for same named pipe (EADDRINUSE on Windows)
Disclaimer: Ths report was written by Claude code after several hours of attempting to fix my issue: Claude Code in the terminal of my VS Code cannot access to my Claude Chrome Extension.
Description
On Windows, the Chrome native host and Claude Code's built-in claude-in-chrome MCP both attempt to create a named
pipe server on \\.\pipe\claude-mcp-browser-bridge-{username}. This causes an EADDRINUSE conflict - whichever starts
second crashes immediately.
The /mcp command shows claude-in-chrome · ✔ connected, but all MCP tool calls fail with "Browser extension is not
connected" because Chrome's native host cannot create the pipe.
Environment
- OS: Windows 11
- Claude Code version: 2.1.23
- Node.js version: 24.11.0
- Chrome extension version: Installed from chrome://extensions
- Claude Desktop: Was installed (uninstalled during troubleshooting)
Steps to Reproduce
- Install Claude Code and Chrome extension
- Launch Claude Code: claude
- Type /chrome to enable Chrome integration
- Check /mcp - shows claude-in-chrome · ✔ connected
- Any MCP tool call returns: "Browser extension is not connected"
Diagnostic Evidence
Native host test while Claude Code is running:
C:\Users\Acer>"C:\Users\Acer\.claude\chrome\chrome-native-host.bat"
[Claude Chrome Native Host] Initializing...
[Claude Chrome Native Host] Creating socket listener: \\.\pipe\claude-mcp-browser-bridge-Acer
[Claude Chrome Native Host] Socket server error: Error: listen EADDRINUSE: address already in use
\\.\pipe\claude-mcp-browser-bridge-Acer
Native host test with Claude Code NOT running:
[Claude Chrome Native Host] Initializing...
[Claude Chrome Native Host] Creating socket listener: \\.\pipe\claude-mcp-browser-bridge-Acer
[Claude Chrome Native Host] Socket server listening for connections
Chrome extension service worker console:
chrome.runtime.connectNative('com.anthropic.claude_browser_extension')
// Result: Unchecked runtime.lastError: Native host has exited.
Root Cause Analysis
Both components try to be the server on the same named pipe:
- /chrome command in Claude Code creates a pipe server
- Chrome extension triggers native host via connectNative()
- Native host tries to create the same pipe server
- EADDRINUSE → native host crashes → "Browser extension is not connected"
The architecture should have one component as server and the other as client, not both as servers.
Workarounds Attempted (all failed)
- ✅ Redirected Claude Desktop's native host manifest to Claude Code's batch file
- ✅ Removed Claude Desktop registry entry
- ✅ Killed all conflicting node processes
- ✅ Various restart sequences (Chrome first, Claude Code first, etc.)
- ✅ Launched without --chrome flag, then used /chrome
- ✅ Disabled/re-enabled Chrome extension
- ✅ Added Windows Defender exclusions
- ❌ None resolved the fundamental pipe conflict
Related Issues
- #20862 - MCP tools fail with "Browser extension is not connected" despite showing Connected
- #20943 - Claude Code and Claude.app conflict over Chrome extension native messaging host
- #15463 - Chrome native host enters zombie state without socket
- #21300 - Chrome extension not connecting on Windows despite MCP server showing "connected"
Expected Behavior
Chrome native host and Claude Code should use a client/server architecture where one creates the pipe and the other
connects to it, avoiding EADDRINUSE conflicts.
Suggested Fix
Either:
- Native host creates pipe server, Claude Code connects as client
- Claude Code creates pipe server, native host connects as client
- Implement pipe detection - if pipe exists, connect as client instead of failing
This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗