Chrome Debug MCP Server
# Chrome Debug MCP Playwright
A Model Context Protocol (MCP) implementation for browser automation using Playwright, with full Greasemonkey API support.
<a href="https://glama.ai/mcp/servers/nguhnsghor">
<img width="380" height="200" src="https://glama.ai/mcp/servers/nguhnsghor/badge" alt="Chrome Debug Server MCP server" />
</a>
## Features
### Core Browser Features
- Browser launch and management
- Multi-tab support with create/switch/close capabilities
- Page navigation and interaction
- Screenshot capture
### Greasemonkey API Support
- GM_addStyle for CSS injection
- GM_getValue/GM_setValue for data storage
- GM_deleteValue for storage cleanup
- GM_notification for desktop notifications
- GM_setClipboard for clipboard operations
- GM_xmlhttpRequest for cross-origin requests
### Resource Management
- Network request interception
- Request blocking, modification, and logging
- Resource type filtering
### Debug Features
- Detailed logging system
- Log file organization
- Clean interface output
## Installation
```bash
npm install chrome-debug-mcp-playwright
```
## Quick Start
```javascript
// Launch browser
tool browser launch_browser --url "https://example.com" --browserType "chromium"
// Use GM functions
tool browser gm_setValue --key "setting" --value "test"
tool browser gm_getValue --key "setting"
// Intercept requests
tool browser intercept_requests --patterns ["*.jpg", "*.css"] --action "block"
```
## Documentation
- [Commands](COMMANDS.md) - Detailed command documentation with examples
- Full command list with usage examples available in COMMANDS.md
## Core Features
### Browser Management
```javascript
// Launch browser
tool browser launch_browser --url "https://example.com"
// Create new tab
tool browser create_tab --url "https://example.com"
// Switch between tabs
tool browser switch_tab --index 1
```
### Greasemonkey API
```javascript
// Add custom styles
tool browser gm_addStyle --css "body { background: #f0f0f0; }"
// Store data
tool browser gm_setValue --key "setting" --value "test"
// Make cross-origin requests
tool browser gm_xmlhttpRequest --url "https://api.example.com/data" --method "GET"
```
### Resource Interception
```javascript
// Block image loading
tool browser intercept_requests --patterns ["*.jpg", "*.png"] --action "block"
// Log all CSS requests
tool browser intercept_requests --patterns ["*.css"] --action "log"
```
## Implementation Details
### Logging System
- All debug output redirected to log files
- Timestamped entries
- Organized in logs directory
- Clean interface output
### Error Handling
- Detailed error logging
- Proper cleanup on errors
- Resource management
## Dependencies
- Playwright: Browser automation
- @modelcontextprotocol/sdk: MCP implementation
## Development
### Prerequisites
- Node.js 16 or higher
- npm 7 or higher
### Setup
```bash
git clone https://github.com/yourusername/chrome-debug-mcp-playwright.git
cd chrome-debug-mcp-playwright
npm install
```
## License
MIT License - See LICENSE file for details.
## Contributing
We welcome contributions! Please see our [Contributing Guide](CONTRIBUTING.md) for details.
## Acknowledgments
Based on the original [chrome-debug-mcp](https://github.com/robertheadley/chrome-debug-mcp) by Robert Headley.
=======
=======
>>>>>>> parent of 64acbb3 (Add files via upload)
=======
>>>>>>> parent of 64acbb3 (Add files via upload)
=======
>>>>>>> parent of 64acbb3 (Add files via upload)
=======
>>>>>>> parent of 64acbb3 (Add files via upload)
=======
>>>>>>> parent of 64acbb3 (Add files via upload)
=======
>>>>>>> parent of 64acbb3 (Add files via upload)
=======
>>>>>>> parent of 64acbb3 (Add files via upload)
# Chrome Debug MCP Server
A Model Context Protocol (MCP) server for controlling Chrome with debugging capabilities, userscript injection, and extension support.
<<<<<<< HEAD
<<<<<<< HEAD
<<<<<<< HEAD
<<<<<<< HEAD
<<<<<<< HEAD
<<<<<<< HEAD
<<<<<<< HEAD
=======
=======
>>>>>>> parent of 64acbb3 (Add files via upload)
=======
>>>>>>> parent of 64acbb3 (Add files via upload)
=======
>>>>>>> parent of 64acbb3 (Add files via upload)
=======
>>>>>>> parent of 64acbb3 (Add files via upload)
=======
>>>>>>> parent of 64acbb3 (Add files via upload)
=======
>>>>>>> parent of 64acbb3 (Add files via upload)
<a href="https://glama.ai/mcp/servers/nguhnsghor">
<img width="380" height="200" src="https://glama.ai/mcp/servers/nguhnsghor/badge" alt="Chrome Debug Server MCP server" />
</a>
<<<<<<< HEAD
<<<<<<< HEAD
<<<<<<< HEAD
<<<<<<< HEAD
<<<<<<< HEAD
<<<<<<< HEAD
>>>>>>> parent of 64acbb3 (Add files via upload)
=======
>>>>>>> parent of 64acbb3 (Add files via upload)
=======
>>>>>>> parent of 64acbb3 (Add files via upload)
=======
>>>>>>> parent of 64acbb3 (Add files via upload)
=======
>>>>>>> parent of 64acbb3 (Add files via upload)
=======
>>>>>>> parent of 64acbb3 (Add files via upload)
=======
>>>>>>> parent of 64acbb3 (Add files via upload)
## Features
### Chrome Control
- Launch Chrome with custom configurations
- Support for custom Chrome executable paths
- User profile management (default or custom user data directory)
- Extension support and management
- Disable Chrome's "Automation Controlled" banner
<<<<<<< HEAD
<<<<<<< HEAD
<<<<<<< HEAD
<<<<<<< HEAD
<<<<<<< HEAD
<<<<<<< HEAD
<<<<<<< HEAD
=======
=======
>>>>>>> parent of 64acbb3 (Add files via upload)
=======
>>>>>>> parent of 64acbb3 (Add files via upload)
=======
>>>>>>> parent of 64acbb3 (Add files via upload)
=======
>>>>>>> parent of 64acbb3 (Add files via upload)
=======
>>>>>>> parent of 64acbb3 (Add files via upload)
=======
>>>>>>> parent of 64acbb3 (Add files via upload)
### Page Automation
- Click, type, and interact with page elements
- Handle dropdowns and form inputs
- Hover and wait for elements
- Take screenshots of full page or elements
- Navigate between pages
- Set viewport size and device emulation
- Extract text and attributes from elements
### Tab Management
- List all open tabs with their IDs and URLs
- Open new tabs with specified URLs
- Close tabs by ID
- Switch between tabs
- Track and manage multiple tab states
<<<<<<< HEAD
<<<<<<< HEAD
<<<<<<< HEAD
<<<<<<< HEAD
<<<<<<< HEAD
<<<<<<< HEAD
>>>>>>> parent of 64acbb3 (Add files via upload)
=======
>>>>>>> parent of 64acbb3 (Add files via upload)
=======
>>>>>>> parent of 64acbb3 (Add files via upload)
=======
>>>>>>> parent of 64acbb3 (Add files via upload)
=======
>>>>>>> parent of 64acbb3 (Add files via upload)
=======
>>>>>>> parent of 64acbb3 (Add files via upload)
=======
>>>>>>> parent of 64acbb3 (Add files via upload)
### Debugging Capabilities
- Remote debugging via Chrome DevTools Protocol (CDP)
- Console log capture and monitoring
- JavaScript evaluation in page context
- Real-time console output streaming
### Userscript Support
- Inject userscripts into web pages
- Greasemonkey-style API support:
- `GM_setValue`/`GM_getValue` for persistent storage
- `GM_addStyle` for CSS injection
- `GM_xmlhttpRequest` for cross-origin requests
- `GM_openInTab` for new tab creation
- `GM_registerMenuCommand` for menu commands
### Extension Integration
- Load unpacked extensions
- Maintain extension states and configurations
- Support for default Chrome profile extensions
- Selective extension enabling/disabling
## Installation
### Prerequisites
- [Node.js](https://nodejs.org/) (v14 or higher)
- [Chrome](https://www.google.com/chrome/) browser installed
- [Visual Studio Code](https://code.visualstudio.com/)
- [Roo Code Extension](https://marketplace.visualstudio.com/items?itemName=RooVeterinaryInc.roo-cline)
### Installing Roo Code Extension
1. Open Visual Studio Code
2. Go to Extensions (Ctrl+Shift+X)
3. Search for "Roo Code"
4. Click Install
### Setting up Chrome Debug MCP Server
1. Clone this repository:
```bash
git clone https://github.com/yourusername/chrome-debug-mcp.git
cd chrome-debug-mcp
```
2. Install dependencies:
```bash
npm install
```
3. Build the project:
```bash
npm run build
```
4. Configure in Roo Code:
Add to `cline_mcp_settings.json`:
```json
{
"mcpServers": {
"chrome-debug": {
"command": "node",
"args": ["path/to/chrome-debug-mcp/build/index.js"],
"disabled": false,
"alwaysAllow": []
}
}
}
```
## Usage
<<<<<<< HEAD
<<<<<<< HEAD
<<<<<<< HEAD
<<<<<<< HEAD
<<<<<<< HEAD
<<<<<<< HEAD
<<<<<<< HEAD
=======
For a complete reference of all available commands, tools, and functions, see [COMMANDS.md](docs/COMMANDS.md).
>>>>>>> parent of 64acbb3 (Add files via upload)
=======
For a complete reference of all available commands, tools, and functions, see [COMMANDS.md](docs/COMMANDS.md).
>>>>>>> parent of 64acbb3 (Add files via upload)
=======
For a complete reference of all available commands, tools, and functions, see [COMMANDS.md](docs/COMMANDS.md).
>>>>>>> parent of 64acbb3 (Add files via upload)
=======
For a complete reference of all available commands, tools, and functions, see [COMMANDS.md](docs/COMMANDS.md).
>>>>>>> parent of 64acbb3 (Add files via upload)
=======
For a complete reference of all available commands, tools, and functions, see [COMMANDS.md](docs/COMMANDS.md).
>>>>>>> parent of 64acbb3 (Add files via upload)
=======
For a complete reference of all available commands, tools, and functions, see [COMMANDS.md](docs/COMMANDS.md).
>>>>>>> parent of 64acbb3 (Add files via upload)
=======
For a complete reference of all available commands, tools, and functions, see [COMMANDS.md](docs/COMMANDS.md).
>>>>>>> parent of 64acbb3 (Add files via upload)
### Basic Chrome Launch
```javascript
use_mcp_tool({
server_name: "chrome-debug",
tool_name: "launch_chrome",
arguments: {
executablePath: "C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe",
url: "https://example.com"
}
})
```
### Launch with Custom Profile
```javascript
use_mcp_tool({
server_name: "chrome-debug",
tool_name: "launch_chrome",
arguments: {
executablePath: "C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe",
userDataDir: "path/to/chrome/profile",
disableAutomationControlled: true
}
})
```
### Inject Userscript
```javascript
use_mcp_tool({
server_name: "chrome-debug",
tool_name: "launch_chrome",
arguments: {
url: "https://example.com",
userscriptPath: "path/to/userscript.js"
}
})
```
### Evaluate JavaScript
```javascript
use_mcp_tool({
server_name: "chrome-debug",
tool_name: "evaluate",
arguments: {
expression: "document.title"
}
})
```
### Get Console Logs
```javascript
use_mcp_tool({
server_name: "chrome-debug",
tool_name: "get_console_logs",
arguments: {
clear: true
}
})
```
<<<<<<< HEAD
<<<<<<< HEAD
<<<<<<< HEAD
<<<<<<< HEAD
<<<<<<< HEAD
<<<<<<< HEAD
<<<<<<< HEAD
=======
=======
>>>>>>> parent of 64acbb3 (Add files via upload)
=======
>>>>>>> parent of 64acbb3 (Add files via upload)
=======
>>>>>>> parent of 64acbb3 (Add files via upload)
=======
>>>>>>> parent of 64acbb3 (Add files via upload)
=======
>>>>>>> parent of 64acbb3 (Add files via upload)
=======
>>>>>>> parent of 64acbb3 (Add files via upload)
### Page Interaction Examples
#### Click an Element
```javascript
use_mcp_tool({
server_name: "chrome-debug",
tool_name: "click",
arguments: {
selector: "#submit-button",
delay: 500
}
})
```
#### Type into Input
```javascript
use_mcp_tool({
server_name: "chrome-debug",
tool_name: "type",
arguments: {
selector: "#search-input",
text: "search query",
delay: 100
}
})
```
#### Select from Dropdown
```javascript
use_mcp_tool({
server_name: "chrome-debug",
tool_name: "select",
arguments: {
selector: "#country-select",
value: "US"
}
})
```
#### Wait for Element
```javascript
use_mcp_tool({
server_name: "chrome-debug",
tool_name: "wait_for_selector",
arguments: {
selector: ".loading-complete",
visible: true,
timeout: 5000
}
})
```
#### Take Screenshot
```javascript
use_mcp_tool({
server_name: "chrome-debug",
tool_name: "screenshot",
arguments: {
path: "screenshot.png",
fullPage: true
}
})
```
#### Set Viewport Size
```javascript
use_mcp_tool({
server_name: "chrome-debug",
tool_name: "set_viewport",
arguments: {
width: 1920,
height: 1080,
deviceScaleFactor: 1
}
})
```
### Tab Management Examples
#### List All Tabs
```javascript
use_mcp_tool({
server_name: "chrome-debug",
tool_name: "list_tabs",
arguments: {}
})
```
#### Open New Tab
```javascript
use_mcp_tool({
server_name: "chrome-debug",
tool_name: "new_tab",
arguments: {
url: "https://example.com"
}
})
```
#### Switch to Tab
```javascript
use_mcp_tool({
server_name: "chrome-debug",
tool_name: "switch_tab",
arguments: {
tabId: "tab-id-from-list-tabs"
}
})
```
#### Close Tab
```javascript
use_mcp_tool({
server_name: "chrome-debug",
tool_name: "close_tab",
arguments: {
tabId: "tab-id-from-list-tabs"
}
})
```
<<<<<<< HEAD
<<<<<<< HEAD
<<<<<<< HEAD
<<<<<<< HEAD
<<<<<<< HEAD
<<<<<<< HEAD
>>>>>>> parent of 64acbb3 (Add files via upload)
=======
>>>>>>> parent of 64acbb3 (Add files via upload)
=======
>>>>>>> parent of 64acbb3 (Add files via upload)
=======
>>>>>>> parent of 64acbb3 (Add files via upload)
=======
>>>>>>> parent of 64acbb3 (Add files via upload)
=======
>>>>>>> parent of 64acbb3 (Add files via upload)
=======
>>>>>>> parent of 64acbb3 (Add files via upload)
## Dependencies
This project uses the following open-source packages:
- [Puppeteer](https://pptr.dev/) - Chrome automation library
- [chrome-remote-interface](https://github.com/cyrus-and/chrome-remote-interface) - Chrome DevTools Protocol client
- [@modelcontextprotocol/sdk](https://github.com/ModelContextProtocol/sdk) - MCP SDK for server implementation
## License
This project is licensed under the MIT License - see the LICENSE file for details.
## Contributing
See our [Contributing Guide](CONTRIBUTING.md) for details on making contributions.
## Acknowledgments
- [Chrome DevTools Protocol](https://chromedevtools.github.io/devtools-protocol/)
- [Greasemonkey API](https://wiki.greasespot.net/Greasemonkey_Manual:API)
<<<<<<< HEAD
<<<<<<< HEAD
<<<<<<< HEAD
<<<<<<< HEAD
<<<<<<< HEAD
<<<<<<< HEAD
<<<<<<< HEAD
- [Model Context Protocol](https://modelcontextprotocol.ai)
>>>>>>> parent of 8a57443 (Merge pull request #4 from robertheadley/feature/puppeteer-commands)
=======
- [Model Context Protocol](https://modelcontextprotocol.ai)
>>>>>>> parent of 64acbb3 (Add files via upload)
=======
- [Model Context Protocol](https://modelcontextprotocol.ai)
>>>>>>> parent of 64acbb3 (Add files via upload)
=======
- [Model Context Protocol](https://modelcontextprotocol.ai)
>>>>>>> parent of 64acbb3 (Add files via upload)
=======
- [Model Context Protocol](https://modelcontextprotocol.ai)
>>>>>>> parent of 64acbb3 (Add files via upload)
=======
- [Model Context Protocol](https://modelcontextprotocol.ai)
>>>>>>> parent of 64acbb3 (Add files via upload)
=======
- [Model Context Protocol](https://modelcontextprotocol.ai)
>>>>>>> parent of 64acbb3 (Add files via upload)
=======
- [Model Context Protocol](https://modelcontextprotocol.ai)
>>>>>>> parent of 64acbb3 (Add files via upload)