# Shared Chrome access for AXI and MCP

> Chrome DevTools AXI offers client transport choices and opt-in metadata-only navigation output; a maintained Chrome DevTools MCP fork provides per-client MCP sessions over one shared Chrome connection.

[Human-readable case study](https://subagentura.tech/contributions/chrome-devtools-axi/)

## How the shared connection works

Multiple clients can use the same long-lived Chrome instance and page inventory. Chrome DevTools AXI selects how each client connects; the maintained Chrome DevTools MCP fork provides the HTTP server and separate MCP context and state for each HTTP client.

The fork serves loopback Streamable HTTP at `/mcp`, reuses one `BrowserManager`, Chrome instance, and page inventory, and creates a separate MCP server and context for each HTTP client. It also provides a stdio-to-HTTP proxy and cleans up sessions when clients disconnect.

## Contribution status

- **Chrome DevTools AXI:** [PR #139](https://github.com/kunchenguid/chrome-devtools-axi/pull/139) by lmn451 was merged on 2026-09-12 at [commit `a970109ced6a91e13f817581a7f05f07ad57f22d`](https://github.com/kunchenguid/chrome-devtools-axi/commit/a970109ced6a91e13f817581a7f05f07ad57f22d). The change is included in [AXI v0.1.35](https://github.com/kunchenguid/chrome-devtools-axi/releases/tag/chrome-devtools-axi-v0.1.35); this identifies the release containing the contribution, not the latest release.

- **Chrome DevTools AXI metadata-only navigation:** [PR #179](https://github.com/kunchenguid/chrome-devtools-axi/pull/179) was released in [AXI v0.1.43](https://github.com/kunchenguid/chrome-devtools-axi/releases/tag/chrome-devtools-axi-v0.1.43). This output-only option applies to `newpage` and `selectpage`.
- **Chrome DevTools MCP fork:** the server implementation was merged in [fork PR #3](https://github.com/lmn451/chrome-devtools-mcp/pull/3) and is maintained in [lmn451's fork](https://github.com/lmn451/chrome-devtools-mcp).
- **Chrome DevTools MCP upstream:** [PR #2733](https://github.com/ChromeDevTools/chrome-devtools-mcp/pull/2733), proposing HTTP transport, was closed without merge. [Issue #2188](https://github.com/ChromeDevTools/chrome-devtools-mcp/issues/2188) remains open; the [progress note](https://github.com/ChromeDevTools/chrome-devtools-mcp/issues/2188#issuecomment-6151860776) summarizes the implementation scope and limits.

## AXI client transport modes

AXI selects how a bridge reaches its MCP server from its environment configuration:

- Set `CHROME_DEVTOOLS_AXI_MCP_SERVER_URL` without a nonblank `CHROME_DEVTOOLS_AXI_MCP_PATH` to connect directly using Streamable HTTP. In this mode, AXI does not launch a local MCP child process.
- Set both `CHROME_DEVTOOLS_AXI_MCP_SERVER_URL` and a nonblank `CHROME_DEVTOOLS_AXI_MCP_PATH` to use the stdio proxy mode, after the compatibility check.
- Without `CHROME_DEVTOOLS_AXI_MCP_SERVER_URL`, AXI retains its existing standalone stdio mode.

## Metadata-only navigation for eval chains

Navigation-to-`eval` and chained page-level workflows may not need an automatically printed accessibility tree. AXI’s opt-in `--no-snapshot` flag on `newpage` or `selectpage` prints page metadata without the tree or snapshot-derived suggestions, so you can continue with `eval` when no UIDs are needed.

For a new page, then a metadata-only eval chain:

```text
newpage --no-snapshot https://example.com
eval 'document.title'
```

For an already-open page:

```text
selectpage --no-snapshot 2
```

Default navigation output is unchanged; `--no-snapshot` is opt-in, and `--full` does not override it. An explicit `snapshot` remains available for UID-based `click` or `fill` work. Snapshot capture and reference-freshness checks still run: this AXI CLI option changes printed output only, not browser or MCP behavior.

## Shared server behavior and limits

The fork shares one Chrome instance and page inventory across clients. Each HTTP client has its own MCP server/context and selected-page, roots, trace, recording, and request-mutex state. These separate MCP sessions do not isolate browser access: there is no global cross-client mutex and no automatic browser/profile isolation. The server listens on loopback; remote access uses an SSH tunnel, and it is not a public authenticated service.

## Sources

- [Chrome DevTools AXI repository](https://github.com/kunchenguid/chrome-devtools-axi)
- [Chrome DevTools AXI PR #139](https://github.com/kunchenguid/chrome-devtools-axi/pull/139)
- [AXI v0.1.35 release](https://github.com/kunchenguid/chrome-devtools-axi/releases/tag/chrome-devtools-axi-v0.1.35)
- [Chrome DevTools AXI PR #179](https://github.com/kunchenguid/chrome-devtools-axi/pull/179)
- [AXI v0.1.43 release](https://github.com/kunchenguid/chrome-devtools-axi/releases/tag/chrome-devtools-axi-v0.1.43)
- [Chrome DevTools MCP upstream repository](https://github.com/ChromeDevTools/chrome-devtools-mcp)
- [Chrome DevTools MCP upstream PR #2733](https://github.com/ChromeDevTools/chrome-devtools-mcp/pull/2733)
- [Chrome DevTools MCP upstream issue #2188](https://github.com/ChromeDevTools/chrome-devtools-mcp/issues/2188)
- [Chrome DevTools MCP fork](https://github.com/lmn451/chrome-devtools-mcp)
- [Fork PR #3](https://github.com/lmn451/chrome-devtools-mcp/pull/3)
