npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@rizonetech/chromemcp

v0.3.1

Published

Bootstrap installer for ChromeMCP — drives your real signed-in Chrome on Windows from WSL2 agents via MCP.

Readme

ChromeMCP

npm license

A small, opinionated stack that lets agents in WSL2 drive your real, signed-in Chrome on Windows through the Model Context Protocol (MCP). You launch Chrome once with CDP enabled against a dedicated user-wide profile, expose that debug port to WSL through a scoped portproxy + firewall rule, and run Playwright MCP as a long-running HTTP/SSE service that any MCP client (Codex, Claude Code, Cursor, Continue, etc.) can attach to. Every client shares the same browser session — same tabs, same cookies, same logins. Multi-client by design: repositories point to the same service instead of installing their own ChromeMCP runtime.

Architecture

┌─────────────── Windows host ───────────────┐    ┌──────── WSL2 ────────┐
│                                            │    │                      │
│  Chrome.exe                                │    │  Playwright MCP      │
│  ├─ profile: %LOCALAPPDATA%\ChromeMCP      │    │  (HTTP/SSE server)   │
│  └─ --remote-debugging-port=9222           │    │  localhost:8931/mcp  │
│         │                                  │    │       │              │
│         │ 127.0.0.1:9222 (CDP)             │    │       │              │
│         ▼                                  │    │       ▼              │
│  netsh portproxy ◄───── firewall ──────────┼────┤  CDP client          │
│  (vEthernet WSL IP)    (WSL subnet only)   │    │                      │
│                                            │    │  ▲ ▲ ▲               │
└────────────────────────────────────────────┘    │  │ │ │  MCP clients  │
                                                  │  Claude Code, Cursor,│
                                                  │  Continue, ...       │
                                                  └──────────────────────┘

The Chrome profile lives in %LOCALAPPDATA%\ChromeMCP\Profile, not in this repo (browser data belongs on Windows-native storage, not on a 9p share). The portproxy binds only to the WSL vEthernet adapter IP, and the firewall rule restricts source to the WSL subnet — your LAN cannot see port 9222.

Requirements

  • Windows 10/11 with WSL2 and Google Chrome 140+ (pinning guide)
  • A WSL2 distro (tested on Ubuntu) with Node.js ≥ 18.18
  • PowerShell 5.1+ on Windows (ships by default)
  • Administrator rights on Windows for the one-time bridge setup

Install

# One-liner (installs to ~/ChromeMCP):
curl -fsSL https://raw.githubusercontent.com/rizonetech/ChromeMCP/main/scripts/install.sh | bash

# Via npm / npx (no clone required):
npx @rizonetech/chromemcp install

# From source:
git clone https://github.com/rizonetech/ChromeMCP.git ~/ChromeMCP
cd ~/ChromeMCP && bash scripts/install.sh --from-source

Quick start

chromemcp setup-bridge   # one-time Windows bridge setup (UAC required)
chromemcp chrome         # launch Chrome with CDP
chromemcp up             # start the MCP server
chromemcp token          # print bearer token for client config
chromemcp test           # smoke test

Sign in to any sites you need in the new Chrome window. The profile persists across restarts — sign in once.

Optional lanes for isolation or concurrency

The shared instance on 8931 is the default and recommended path, including when more than one MCP client is connected. Do not allocate a lane merely because another client or repository uses ChromeMCP.

Use a lane only when simultaneous browser actions would interfere, or when a workflow explicitly needs separate cookies, storage, login state, or browser policy. For an isolated Codex run:

eval "$(chromemcp codex-lane acquire --format shell --owner "overnight-$$")"
chromemcp codex-bridge "$CODEX_CHROMEMCP_LANE"
chromemcp codex-chrome "$CODEX_CHROMEMCP_LANE"
chromemcp codex-up "$CODEX_CHROMEMCP_LANE"
chromemcp codex-status "$CODEX_CHROMEMCP_LANE"

The default instance remains unchanged on MCP 8931, upstream 8932, CDP 9222, token ~/.config/chromemcp/token, and Windows profile %LOCALAPPDATA%\ChromeMCP\Profile. The Codex instance uses MCP 8941, upstream 8942, CDP 9232, token ~/.config/chromemcp-codex/token, and profile %LOCALAPPDATA%\ChromeMCP-Codex\Profile.

Point Codex at mcp/client-config-codex.json or set:

eval "$(chromemcp codex-lane env "$CODEX_CHROMEMCP_LANE")"

Release the lock when the run is finished:

chromemcp codex-lane release "$CODEX_CHROMEMCP_LANE"

Lane 1 keeps the compatibility defaults above. Lane 2 uses MCP 8951, upstream 8952, CDP 9242, token ~/.config/chromemcp-codex-2/token, and profile %LOCALAPPDATA%\ChromeMCP-Codex-2\Profile; higher lanes follow the same +10 port pattern.

Lanes for any client

codex-lane is an alias for the client-generalized lane command. Each client gets its own port band, so concurrent Codex and Claude overnight runs can never collide with each other or with the default stack:

eval "$(chromemcp lane acquire --client claude --format shell --owner "overnight-$$")"
chromemcp lane up --client claude "$CHROMEMCP_LANE"     # starts MCP, Chrome, bridge
chromemcp lane config --client claude "$CHROMEMCP_LANE" # client config JSON
chromemcp lane release --client claude "$CHROMEMCP_LANE"

Claude lanes start at MCP 8741 / upstream 8742 / CDP 9432 (lane 1) and step +10 per lane, with profile %LOCALAPPDATA%\ChromeMCP-Claude[-N]\Profile and token ~/.config/chromemcp-claude[-N]/token. Crashed runs are reclaimed automatically: the next acquire reuses a lane whose owner process is gone.

Connect your MCP client

The server listens at http://localhost:8931/mcp. Get the token:

chromemcp token --header   # prints: Authorization: Bearer <token>

Merge into your client's MCP config:

{
  "mcpServers": {
    "chromemcp-playwright": {
      "type": "http",
      "url": "http://localhost:8931/mcp",
      "headers": { "Authorization": "Bearer <TOKEN>" }
    }
  }
}

Older clients can target /sse instead of /mcp. Full per-client instructions: docs/CLIENTS.md.

CLI reference

| Command | What it does | |---|---| | chromemcp up | Start the MCP server (auto-launches Chrome and bridge if needed) | | chromemcp down | Stop the MCP server | | chromemcp status | Health report | | chromemcp test | Smoke test (initialize + browser_tabs + browser_snapshot) | | chromemcp chrome | Launch Chrome with CDP on Windows | | chromemcp setup-bridge | Install/refresh the WSL↔Windows portproxy | | chromemcp bridge-check | Diagnose bridge health (--fix to auto-repair) | | chromemcp token | Print bearer token (--header, --rotate, --path) | | chromemcp logs | Tail server logs (auto-detects systemd vs file mode) | | chromemcp enable | Install systemd user unit (crash auto-restart) | | chromemcp disable | Uninstall systemd unit; revert to ad-hoc mode | | chromemcp update | Pull latest release and reinstall |

Links

License

MIT © 2026 Rizonetech (Pty) Ltd.