bpc-oss/chrome-faithful
chrome-faithful
Faithful control of your real, logged-in Chrome profiles: MCP server + MV3 extension + authenticated localhost bridge. No copied profiles, no debug profile, no remote-debugging port, no Edge.
Install
npx @deepseek-ai/dsh plugin --profile web add @bpc-oss/[email protected]Restart `dsh web` after install. Bundle APIs can change during the developer preview.
README badge
[](https://dshhub.dev/plugins/chrome-faithful)Paste this into your README. The star count updates with every catalog sync.
From the README
Excerpt from bpc-oss/chrome-faithful, cleaned of badges and images.
Chrome Faithful
Faithful control of your real, logged-in Chrome profiles.
An MCP server + MV3 Chrome extension + authenticated localhost bridge that lets
AI agents drive the Chrome that already holds your logins, extensions, and
history. No copied profiles, no debug profile, no --remote-debugging-port,
no Edge, no global mouse/keyboard automation.
English · 简体中文
Why this exists
Browser-control tools optimize for different jobs:
| Approach | What you get | What you lose |
|---|---|---|
| Chrome DevTools MCP (Google) | Excellent DevTools, performance, and CDP workflows; Chrome 144+ can autoConnect to a running local browser with user approval | Chrome must already be running, and when several profiles are active Chrome chooses the default profile rather than accepting an exact profile name |
| Playwright / Puppeteer MCP servers | Deterministic, isolated browsers that are ideal for CI and repeatable tests | Existing logins, extensions, history, and two-factor sessions are not present unless separately provisioned |
| Extension-based MCPs (BrowserMCP, real-browser-mcp) | Control of an existing logged-in browser | A strong fit for live sessions; multi-profile setups may require separate server instances and ports, and normally expect Chrome to be running |
Chrome Faithful focuses on exact-profile, multi-profile control with a fail-closed local bridge:
- Exact multi-profile routing. Every profile registers with its exact
profileName; duplicate registrations are rejected, so concurrent agents cannot interleave inside one profile. - Launches a closed profile. If the target profile — or all of Chrome — is
closed, it starts the exact profile with ordinary Chrome and waits for the
exact extension registration before reporting success. No
--user-data-dirhacks. - Security depth. The bridge binds only
127.0.0.1and requires a generated 256-bit secret. Bootstrap uses one-use tokens; sessions use scoped grants. Configuration is closed-schema and must live outside the source tree. Installers are transactional with SHA-256-verified, DPAPI-encrypted backups (Windows). - File upload the honest way. Files are injected as page
File/DataTransferobjects — notDOM.setFileInputFiles, not an OS file chooser. - Media export without leaking URLs.
chrome_page_assetstreams page-exposed media using the tab's user agent, referer, and matching profile cookies; signed URLs, cookies, and headers never appear in MCP arguments or results. - Durable virtual-list capture. Scroll capture with asset parity, fail-closed manifests, exclusive cross-process locks, and resume that rewinds the tab through serialized wheel events — built for infinite-scroll feeds.
- Works minimized. Locator waits/actions and screenshots use CDP focus emulation, so virtualized controls keep rendering even when the Chrome window is minimized or obscured.
- Raw CDP when you need it, with an explicit trust boundary.
chrome_cdpevent reads redact Network headers, query strings, and post data; the bounded request/response projection actions reject sensitive selected fields. Itssendaction is deliberately unrestricted raw CDP and must be exposed only to a fully trusted MCP client: it can read authenticated page content,
…
