Skip to main content
Glama
marcondesmacaneiro

chrome-profile-debug

chrome-profile-debug

Drive any of your named Chrome profiles from an MCP client — Claude Code, Codex, or anything else that speaks MCP over stdio.

Chrome keeps every profile in one browser process. Tools that attach over --remote-debugging-port therefore see all of your open profiles at once and cannot tell them apart, while extension-based tools usually bind to whichever single profile happens to be paired. Neither lets you say "work in the profile I call staging".

This does. You name each profile once, and every tool call takes that name.

list_profiles()                → ["personal", "staging", "prod-readonly"]
new_tab(profile: "staging", url: "https://app.example.com")   → { tabId: 42 }
read_page(profile: "staging", tabId: 42)

No listening TCP port. No telemetry. No Chrome Web Store account required.

How it works

  MCP client
      │ stdio
      ▼
  server/index.js ──── Unix domain socket (0600)
      ▲
      │ NDJSON
  host/host.js ─────── one process per profile, spawned by Chrome
      ▲
      │ Chrome native messaging
  extension/ ───────── one instance per profile
      │ chrome.debugger
      ▼
    web page

The wire format is specified in docs/PROTOCOL.md. The threat model and its limits are in docs/SECURITY.md.

Related MCP server: chrome-remote-debugging-mcp

Install

Requires Node.js 20+ and a Chromium-family browser.

1. Get the code

git clone https://github.com/marcondesmacaneiro/chrome-profile-debug.git
cd chrome-profile-debug
npm install

Keep the directory where it is. An unpacked extension's ID is derived from its absolute path, and the native messaging manifest pins that ID — moving the folder breaks the link until you re-run the installer.

2. Load the extension into each profile you want to drive

In each Chrome profile, separately:

  1. Open chrome://extensions

  2. Turn on Developer mode

  3. Click Load unpacked and select the extension/ directory

The extension always gets the same ID, whether it was loaded from source or installed from the Chrome Web Store:

clkflehjfcefahjgchgcomflocccphnj

That is because extension/manifest.json pins the public key. Without it, an unpacked extension's ID derives from its absolute path and would differ on every machine.

3. Register the native messaging host

Once per machine:

npm run install-host -- --extension-id clkflehjfcefahjgchgcomflocccphnj

This writes a manifest into Chrome's NativeMessagingHosts directory. It contains an absolute path, so it is generated locally and never committed.

The same command covers every profile on the machine: the ID identifies the extension, not the profile.

4. Name each profile

Click the extension icon in a profile and give it a name — staging, personal, whatever you will type in your prompts. A profile with no name never connects, which is what makes participation opt-in.

5. Point your MCP client at the server

Claude Code:

claude mcp add chrome-profile-debug -- node /absolute/path/to/chrome-profile-debug/server/index.js

Any other client: run server/index.js over stdio.

Tools

list_profiles first — everything else takes a profile name.

Tool

Purpose

list_profiles

Connected, named profiles

list_tabs

Tabs in that profile

new_tab, close_tab, activate_tab

Tab lifecycle

navigate

Open a URL

read_page

Accessibility tree with click-ready coordinates

page_text

Plain text of the page

screenshot

PNG or JPEG of the viewport

evaluate

Run JavaScript in the page

click, type_text, press_key, scroll

Input

read_console

Console messages, optionally filtered by regex

read_network

Network requests

Troubleshooting

A profile does not appear in list_profiles. Check, in order: the extension is loaded in that profile; it has a name in the popup; the native host manifest lists that profile's extension ID; the MCP server is running.

DEBUGGER_BUSY. Chrome allows one debugger client per tab. Close DevTools on that tab.

RESTRICTED_URL. Extensions cannot touch chrome://, devtools://, or the Chrome Web Store. This is a browser restriction with no workaround.

License

MIT

F
license - not found
Not graded
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables MCP clients to drive a real, logged-in Chrome browser for web automation tasks like navigation, clicking, typing, and screenshotting.
    1
    1
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Local MCP server for persistent Chrome automation with multi-profile support, enabling tab management, page inspection, element interaction, JavaScript evaluation, and screenshots while preserving login sessions across restarts.
    165
    2
    MIT

View all related MCP servers

Related MCP Connectors

  • Hosted real Google Chrome MCP with per-user persistent state. Navigate, click, type, screenshot.

  • Browser MCP for logged-in tasks. Uses your Chrome — credentials stay local. Zero-token replay.

  • Live browser debugging for AI assistants — DOM, console, network via MCP.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/marcondesmacaneiro/chrome-profile-debug'

If you have feedback or need assistance with the MCP directory API, please join our Discord server