chrome-agent-mcp
Provides full browser control including navigation, element interaction, form filling, screenshot capture, DevTools inspection (console, network, elements, storage), tab management, and multi-session isolation via Chrome's remote debugging protocol.
Click on "Deploy 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., "@chrome-agent-mcp go to example.com 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.
chrome-agent-mcp
Full Chrome control for AI agents via the Model Context Protocol
Give Claude (or any MCP client) full control over your browser: navigate pages, click elements, fill forms, inspect DevTools — with parallel tab execution, session isolation per agent, and a real-time dashboard.
What it does
Each Claude session gets its own Chrome tab group — so multiple agents can run in parallel without stepping on each other. A companion Chrome extension shows a live dashboard: active tabs, event log, and screenshots in real time.
Claude session A → tab group "Pinguim" (blue)
Claude session B → tab group "Fenix" (red)
Claude session C → tab group "Girafa" (yellow)Every tool call is wrapped with resilient execution:
20 s primary timeout
2× parallel retries on timeout (10 s each)
Automatic fallback to a new Chrome group if all retries fail
Related MCP server: OpenChrome
Requirements
Node.js ≥ 18
Google Chrome with remote debugging enabled
Installation
1. Enable Chrome remote debugging
google-chrome --remote-debugging-port=9222To make it permanent, add the flag to your Chrome launcher or .desktop file.
2. Install the MCP server
# Run directly (no install)
npx chrome-agent-mcp
# Or install globally
npm install -g chrome-agent-mcp3. Configure your MCP client
Claude Desktop (~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"chrome-agent-mcp": {
"command": "npx",
"args": ["chrome-agent-mcp"],
"env": { "CHROME_DEBUG_PORT": "9222" }
}
}
}Claude Code (.claude/settings.json):
{
"mcpServers": {
"chrome-agent-mcp": {
"command": "node",
"args": ["/path/to/chrome-agent-mcp/dist/index.js"],
"env": { "CHROME_DEBUG_PORT": "9222" }
}
}
}4. Install the companion extension (optional but recommended)
Open
chrome://extensions/Enable Developer mode
Click Load unpacked → select the
extension/folder
The extension adds a popup dashboard showing which tabs are active, what the agent is doing, and captured screenshots — all updating in real time.
Available Tools
Navigation
Tool | Description |
| Navigate to a URL |
| Go back in browser history |
| Go forward in browser history |
| Reload the current tab |
Interaction
Tool | Description |
| Click an element by accessibility ref |
| Type text into a focused element |
| Hover over an element |
| Press a keyboard key or shortcut |
| Scroll the page or an element |
| Select a |
| Fill multiple form fields at once |
| Wait for an element or condition |
Page Inspection
Tool | Description |
| Get the accessibility tree of the page |
| Capture a full-page screenshot |
| Execute JavaScript and return the result |
Tab Management
Tool | Description |
| Open, close, switch, list, and mark tabs done |
DevTools
Tool | Description |
| Read and clear browser console logs |
| Inspect network requests and responses |
| Inspect and query DOM elements |
| Read cookies, localStorage, sessionStorage |
Browser Management
Tool | Description |
| List all open Chrome windows |
| Focus a specific window |
| List installed Chrome extensions |
| Sync session state with the extension dashboard |
Architecture
src/
├── index.ts MCP server + request dispatch
├── types.ts Shared type definitions
├── core/ Infrastructure layer
│ ├── connection.ts Chrome CDP connection lifecycle
│ ├── bridge.ts Extension event bridge
│ ├── favicon.ts Tab favicon animation manager
│ ├── resilience.ts Timeout / retry / fallback execution
│ └── groups/ Tab group isolation
│ ├── manager.ts Orchestrator (public API)
│ ├── state.ts File-based state persistence
│ └── chrome-api.ts Chrome Extension API bridge
├── tools/ MCP tool implementations
│ ├── tabs.ts
│ ├── navigation.ts
│ ├── browser.ts
│ ├── media.ts screenshot · snapshot · evaluate
│ ├── session.ts
│ ├── interaction/ click · type · hover · scroll · form · wait
│ └── devtools/ console · network · elements · storage
└── utils/ Pure utility functions
├── accessibility.ts AX tree formatter
├── description.ts Tab action labels
└── identity.ts Animal names + Chrome group colorsEngineering rules: every file ≤ 300 lines · every directory ≤ 7 items · SOLID principles throughout.
Configuration
Variable | Default | Description |
|
| Chrome remote debugging port |
Development
# Install dependencies
npm install
# Build TypeScript
npm run build
# Watch mode
npm run dev
# Run tests
npm test
# Coverage report (target: 80%)
npm run coverageLicense
MIT © Otavio Senne
Available Tools
24 toolsbrowser_clickA
Click on an element using its ref from browser_snapshot. Supports targeting a specific tab via tabId.
Inputs: ref (required), tabId, agentId, element, +1 more.
browser_evaluateA
Evaluate JavaScript in a page context. IMPORTANT: top-level const/let/var declarations persist across calls — always wrap multi-statement code in an IIFE: (() => { const x = ...; return x; })(). Never use bare 'return' at top level. Max timeout: 10s — avoid setTimeout > 10000ms. Supports targeting a specific tab via tabId.
Inputs: expression (required), tabId, agentId.
browser_fill_formC
Fill multiple form fields at once. Supports targeting a specific tab via tabId.
Inputs: fields (required), tabId, agentId.
browser_hoverB
Hover the mouse over an element. Supports targeting a specific tab via tabId.
Inputs: ref (required), tabId, agentId, element.
browser_press_keyB
Press a keyboard key in the specified tab.
Inputs: key (required), tabId, agentId.
browser_reloadA
Reload the page in the specified tab
Inputs: tabId, agentId.
browser_scrollB
Scroll the page or a specific element. Supports targeting a specific tab via tabId.
Inputs: direction (required), ref, tabId, amount, +1 more.
browser_select_optionB
Select an option in a element. Supports targeting a specific tab via tabId.
Inputs: ref (required), value (required), tabId, agentId, +1 more.
browser_snapshotA
Capture accessibility snapshot of a page. Returns the page structure with element refs for interaction. Use instead of screenshots to find elements to click/type. IMPORTANT: refs go stale after any DOM change or navigation — always re-snapshot before clicking if the page may have changed. Supports targeting a specific tab via tabId.
Inputs: tabId, agentId.
browser_tabsA
List, create, close, or switch browser tabs. Returns tabId for each tab — pass tabId to other tools to target a specific tab without switching.
Inputs: action (required), url, index, tabId, +1 more.
browser_take_screenshotA
Take a screenshot of a page. Use browser_snapshot to find interactable elements instead. Supports targeting a specific tab via tabId.
Inputs: tabId, agentId, fullPage.
browser_typeB
Type text into an input element. Supports targeting a specific tab via tabId.
Inputs: ref (required), text (required), tabId, submit, +2 more.
browser_wait_forA
Wait for text to appear on the page or wait a fixed duration. Max 10s per call — call multiple times for longer waits. If a previous attempt failed, do NOT increase wait time blindly; try a different action instead. Supports targeting a specific tab via tabId.
Inputs: text, time, tabId, agentId.
chrome_extensionsA
List installed Chrome extensions.
Inputs: no named parameters.
chrome_focusA
Bring a specific Chrome tab into focus (activate it in the browser UI).
Inputs: tabId (required).
chrome_windowsC
Manage Chrome browser windows. List all windows with their tabs, or focus a specific window. Each window groups multiple tabs.
Inputs: action (required).
devtools_consoleA
Inspect the browser console for a tab. Start monitoring to capture future logs, then list or clear them. Equivalent to the DevTools Console panel.
Inputs: action (required), level, limit, tabId, +1 more.
devtools_elementsA
Inspect DOM elements and computed CSS styles for a tab. Equivalent to the DevTools Elements panel.
Inputs: selector (required), tabId, agentId, includeStyles.
devtools_networkA
Inspect network requests for a tab. Start monitoring to capture future requests, then list or clear them. Equivalent to the DevTools Network panel.
Inputs: action (required), limit, tabId, filter, +2 more.
devtools_storageB
Read or write browser storage for a tab: localStorage, sessionStorage, or cookies. Equivalent to DevTools Application > Storage panel.
Inputs: action (required), storageType (required), key, tabId, +2 more.
session_syncA
Sync Claude session name/color with Chrome tab group. 'rename': renames BOTH the Claude chat AND Chrome group automatically. 'color': maps a Claude Code color to Chrome group color and returns the /color command. 'detect': reads current Chrome group state and returns matching /rename + /color commands.
Inputs: action (required), claudeColor, description.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 24 tools
Most tools are clearly distinct action primitives (click, type, scroll, navigate, etc.), but there is overlap among browser_tabs, chrome_windows, and chrome_focus around tab/window switching. browser_snapshot and devtools_elements both expose page structure, though one is interaction-oriented and the other is inspection-oriented.
The tool names mostly follow a clear browser_<verb>, devtools_<panel>, or chrome_<noun> pattern, which makes the set predictable. browser_tabs is a noun-based multi-action tool rather than a verb-noun name, and session_sync breaks the prefix convention.
24 tools covers a broad browser-automation surface, but it is on the heavy end and includes very granular actions like navigate_back and navigate_forward that could have been combined. The count is justified by the inclusion of devtools and window management, yet it feels more like a toolkit than a focused MCP server.
The server covers core browser workflows well: tab lifecycle, navigation, page interaction, devtools inspection, storage, and window management. Minor gaps exist such as advanced network interception and drag-and-drop, but these can often be worked around with browser_evaluate.
Maintenance
Related MCP Connectors
Give AI agents a real cloud Chrome: open sessions, navigate, read pages, click, type and screenshot.
Control a real browser from AI agents: navigate, click, type, screenshot, read the page.
Let AI agents use your real, signed-in Chrome: tabs, clicks, forms, screenshots and video.
Stealth web automation for AI agents. Login, signup, navigate, screenshot.
Related MCP Servers
- AlicenseBqualityDmaintenanceEnables AI agents to directly control your real Chrome browser with full context including login sessions, cookies, and open tabs. It provides tools for page scanning, JavaScript execution, CDP control, screenshots, and physical mouse/keyboard input for authentic browser automation.20244MIT
- AlicenseBqualityBmaintenanceControls a real Chrome browser for AI agents, enabling authenticated automation with parallel lanes, token-efficient page reads, and robust recovery mechanisms.122643 npm238MIT
- AlicenseAqualityCmaintenanceEnables AI agents to fully control a browser for web automation, including navigation, clicking, typing, scrolling, screenshots, and DOM inspection, with session persistence and anti-bot bypass.4043 npmMIT
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to control a Chrome browser through natural language, supporting navigation, interaction, tab management, and data extraction.MIT