Codex Chrome MCP
Coordinate a real, logged-in Chrome browser from MCP clients (like Cursor or Claude Code) using Codex’s Chrome plugin. Capabilities include:
Tab & session management — list user‑controlled tabs, open new tabs, claim existing ones, navigate to URLs, and finalize sessions.
Page interaction — click elements (by node ID, selector, text, or coordinates), type, press keys, scroll, and capture viewport/full‑page screenshots.
DOM inspection — snapshot the DOM with interactable node IDs; fetch rendered content from a URL using the browser’s session cookies (
fetch_url); read console logs.Code execution — run sandboxed, read‑only JavaScript in the page (
eval_js) or execute full‑power async Node.js scripts with access to the browser API (browser_exec), including Node’sfetchfor arbitrary HTTP requests.Raw DevTools (CDP) — send arbitrary Chrome DevTools Protocol commands and read buffered events for advanced debugging, network interception, profiling, and breakpoints (requires compatible client).
API reference — retrieve the live documentation for the browser/tab object graph.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Codex Chrome MCPNavigate to my Gmail inbox and take a screenshot"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Codex Chrome MCP
English | 中文
Exposes Codex's Chrome ("Control Chrome with Codex") plugin as an MCP server, so any MCP client (Cursor, Claude Code, etc.) can drive your real, logged-in Chrome — navigate, snapshot the DOM, click, type, screenshot, run Playwright, and more.
How it works
Unlike Computer Use (a self-contained .exe), the Chrome plugin is a Node bundle (browser-client.mjs) that talks to Chrome through a Codex-owned native pipe and the Codex Chrome extension:
MCP client (Cursor, ...)
↓ MCP (stdio)
codex-chrome-mcp ──imports──▶ <Codex plugin cache>/chrome/<ver>/scripts/browser-client.mjs
↓ named pipe \\.\pipe\codex-browser-use\<uuid>
extension-host.exe ↔ Codex Chrome extension (hehggadaopoacecdllhhajmbjkdcmajg)
↓
your Chrome tabsThis server provides the host-environment shims that the Codex node_repl normally supplies (privileged pipe bridge, per-turn metadata, security mode, approval callback, fetch) and then reuses the official browser-client, so the API always matches your installed plugin.
Related MCP server: Codex Control Chrome MCP
Requirements
Windows 10/11
Node.js 18+
ChatGPT desktop (formerly Codex Desktop) with the "Chrome" plugin installed ("Control Chrome with ChatGPT"; compatibility identifiers keep the Codex-era names —
~/.codex,codex-browser-use, …). The plugin'sbrowser-client.mjsmust exist under~/.codex/plugins/cache/openai-bundled/chrome/…, or use the vendored client undervendor/(required for raw CDP, see below).A live
codex-browser-usepipe — created by the extension/host. In practice, keep the ChatGPT desktop app running and Chrome open with its extension enabled.
Install
See INSTALL.md. In short: npm install && npm run build, then register node <repo>/bin/codex-chrome-mcp.js as a stdio MCP server.
Tools
Tool | Description |
| Full live API reference for |
| Run arbitrary async JS against the API ( |
| List the user's real open Chrome tabs. |
| List tabs controlled by this session. |
| Create a controlled tab (optionally navigate). |
| Take control of an existing user tab. |
| Navigate the active tab to a URL. Auto-restores the previous page if a failed navigation leaves a |
| url + title + node-id DOM ( |
| Screenshot the active tab. |
| Click by node_id, selector, text, or x/y. |
| Type text (optionally fill a selector). |
| Press a key/chord. |
| Scroll by delta / into a container ( |
| Evaluate JS in the page via Playwright's hardened read-only sandbox (no fetch/XHR/DOM writes); warns on |
| ⚠️ Known-incompatible with the |
| Read the tab's console logs. |
| Send a raw Chrome DevTools Protocol command to the tab or an attached child target (developer mode). See Raw CDP. |
| Read buffered CDP events with cursor paging ( |
| Name the browser session. |
| Clean up session tabs (optionally keep some). |
Raw CDP (developer mode)
cdp_send / cdp_events expose the tab's cdp capability — raw Chrome DevTools Protocol for developer/debugging work (network interception, emulation, profiling, breakpoints). Upstream's own guidance applies: prefer the higher-level tools for ordinary automation.
Requirements — all three must hold, otherwise the tools fail with Capability is not available: cdp:
A 26.727+ browser-client: only 26.727+ injects the
cdptab capability (the plugin cache currently ships26.715.31925, which lacks it). This repo vendors a working client atvendor/chrome-26.727.51351/; pointCODEX_CHROME_CLIENTat itsscripts/browser-client.mjsand keep thescripts/anddocs/siblings together (elsebrowser_documentationbreaks).full_cdp_access_enabled = truein~/.codex/browser/config.toml— the client's full-CDP gate reads it through the shim'snodeRepl.configsurface (src/runtime.ts).The tab is on an http(s) origin: navigate first; raw CDP is scoped to the tab's current web origin.
Behavior:
The first
cdp_sendauto-attaches the debugger extension-side; Chrome shows its "started debugging" bar. Event domains (Page,Network, …) emit nothing until their.enablecommand is sent.To observe events for an action: take a cursor with
cdp_events, perform the action, then read from that cursor withafter_sequence; page whilehasMoreis true (truncatedmeans older events were evicted; reuse the same filters while paging).Child targets (iframes, workers): discover selectors from
Target.attachedToTargetevents, then passsession_idortarget_id.
Guardrails enforced upstream (some commands are refused with guidance):
No top-level
Documentinterception — intercept sub-resources or page-initiated requests instead.Fetch.enablepatterns must name an explicit non-DocumentresourceType(XHR,Fetch,Script, …); an unscoped pattern implicitly includesDocumentand is rejected.No
Fetch.disable— clear interception withFetch.enable({ patterns: [] }).Breakpoints: a pause blocks the
Runtime.evaluatethat triggered it. Trigger fire-and-forget (awaitPromise: false, or wrap insetTimeout(fn, 0)), then pollDebugger.paused, inspect withDebugger.evaluateOnCallFrame, andDebugger.resume.
Verification harnesses (repo root): node verify-cdp.mjs runs the built modules end to end (capability injection, auto-attach, Runtime.evaluate, event paging); node verify-stdio.mjs spawns bin/codex-chrome-mcp.js over stdio exactly as an MCP client does. Verified end to end 2026-08-04 against the vendored 26.727 client.
Configuration (env)
Variable | Default | Purpose |
| auto-detected | Absolute path to |
|
| Codex home directory. |
|
| Backend id: |
|
|
|
|
| Auto-approve elicitation prompts. |
|
| Session name shown in the UI. |
Caveats
Not self-contained/redistributable: it reuses the proprietary plugin from your machine and is tied to the installed plugin version.
Requires a live
codex-browser-usepipe (generally the ChatGPT desktop app + the Chrome extension active).May share/contend with the app's own browser session; behavior can change across app/plugin updates.
Raw CDP attaches Chrome's debugger to the tab (visible "started debugging" bar), is scoped to the tab's current web origin, and upstream refuses some commands (see Raw CDP). If CDP changes page/browser state beyond ordinary navigation and the change is left in place, upstream guidance is to tell the user what changed.
Disclaimer
Uses OpenAI's proprietary bundled browser-client.mjs at runtime; it is not redistributed here. No affiliation with OpenAI. Use at your own risk.
Maintenance
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
- Alicense-qualityDmaintenanceEnables browser automation and web scraping by exposing Playwright tools through an HTTP-based MCP server. Users can navigate pages, interact with web elements, capture screenshots, and extract structured content using a persistent Chromium instance.Last updatedMIT
- AlicenseBqualityAmaintenanceExposes the Codex Chrome extension flow to other Agent tools through MCP, enabling Chrome automation via CDP and tab management.Last updated16117MIT
- Alicense-qualityCmaintenanceLocal browser automation MCP server for Claude Code, enabling navigation, clicking, typing, and inspecting real web pages via Google Chrome.Last updated121MIT
- Flicense-qualityBmaintenanceA Chrome browser automation MCP server. Connect Claude (or any MCP client) to a real Chrome session — using your existing profiles with their cookies, saved passwords, and history.Last updated3
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.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/ohaoz/chrome-use-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server