Chrome Dialog MCP
# Chrome Dialog MCP
On Windows only, Codex Computer Use stops the current turn when examining a newly opened native Chrome dialog, giving the following error message, which always stops the turn and requires user intervention:
```
{
"content": [
{
"type": "text",
"text": "Computer Use has been stopped for this turn because it could not determine the current browser URL on Windows with enough confidence to enforce policy. Stop your work and send a final message noting why Computer Use ended."
}
],
"isError": true
}
```
This MCP lets agents handle expected dialogs (including OK/Cancel confirmations and prompts for text) securely via a different route, avoiding turn stopping. Unexpected dialogs still cause interruptions.
The Chrome-supplied originating web address, dialog type and message are available for the agent to check and respond to.
## Security
Using this MCP moves the decision to handle a native dialog from Computer Use to Codex. You are trusting Codex to check the source and choose a response that follows your instructions.
Before the expected action, the agent starts a capture using this MCP to record any dialogs that open. The MCP checks that:
- Exactly one dialog opened during the capture.
- That same dialog is still open.
- Permission to respond applies to that same dialog and is used once.
Each browser session has its own dialog records and response permissions.
## Requirements
Windows, Google Chrome, Codex desktop, and Node.js 24 or later with npm.
Check your Node version with `node --version` in PowerShell.
## Install
Download `chrome-dialog-mcp-1.0.1.tgz` from [GitHub Releases](https://github.com/mikebeaton/chrome-dialog-mcp/releases). The download can stay in any convenient folder; the install command chooses where the program will live.
Open PowerShell in the folder containing the download and run:
```powershell
npm install --prefix C:/Tools/chrome-dialog-mcp/1.0.1 --ignore-scripts --omit=dev ./chrome-dialog-mcp-1.0.1.tgz
```
npm extracts the package and installs the libraries it needs. The `--prefix` option selects the installation folder: `C:\Tools\chrome-dialog-mcp\1.0.1` in this example. Keep that folder while the MCP is configured.
For an installation under your own Windows account, use a path such as `C:/Users/YOUR_NAME/Tools/chrome-dialog-mcp/1.0.1` after `--prefix`. Replace `YOUR_NAME` with your Windows user-folder name.
## Configure Codex
In Codex, open **Settings → Configuration**. Select **Open config.toml**, the small grey link beside **User config**, only visible when **Codex** settings are selected.
Add the following settings to the file. If a `chrome_dialog` entry already exists, update it:
```toml
[mcp_servers.chrome_dialog]
command = "node"
args = ["C:/Tools/chrome-dialog-mcp/1.0.1/node_modules/chrome-dialog-mcp/src/adapter.js"]
tool_timeout_sec = 60
```
Adjust the path in `args` if you chose another installation folder.
Save the file and restart Codex. Codex starts the MCP automatically.
## Using it
Your agent should recognise this tool automatically when it encounters this problem, offering to retry in a managed browser on your next turn.
To avoid the problem in the first place you can ask the agent to use chrome_dialog to launch a managed Chrome window.
When the agent launches a managed browser, Codex opens a window labelled **Chrome Dialog MCP** and connects to it.
Each agent launches a separate Chrome process and profile, keeping its browser state separate when you switch between chats.
Chrome stays open between tasks. You can ask Codex to close its MCP managed browser when you have finished.
[Technical details](chrome-dialog-mcp-spec.md) · [Development](DEVELOPMENT.md) · [Releases](RELEASES.md) · [0BSD license](LICENSE)
TDQS
Scored across 6 tools
Each tool has a distinct role in the dialog-handling lifecycle: launch, check status, arm capture, retrieve captured dialog, respond, and close. The main potential overlap is between get_dialog_status and get_captured_dialog, but the descriptions clearly separate status-only reporting from consuming a capture interval and returning an ID. Minor ambiguity remains because launch_chrome's lengthy description references other tools and workflows, which could distract an agent from the tool's core purpose.
All tool names follow a consistent snake_case verb_noun pattern: launch_chrome, get_dialog_status, start_dialog_capture, get_captured_dialog, respond_to_dialog, close_chrome. The verbs are clear and the noun phrases are predictable, even though the ordering of qualifiers varies slightly (e.g., dialog_status vs captured_dialog).
Six tools is well-scoped for the server's purpose of managing Chrome native dialogs. Each tool corresponds to a necessary step in the workflow: session launch, status check, capture arming, dialog retrieval, response, and cleanup. No tool appears redundant or trivial.
The lifecycle is largely complete: create a session, check state, arm capture, retrieve an anticipated dialog, respond securely, and close the session. Minor gaps exist, such as no explicit tool to cancel an armed capture without consuming it, no way to list active sessions, and no dedicated reconnect operation beyond launch_chrome with a token. These are workarounds, but the core dialog-handling flow is covered.