Coder Chrome Automation and MCP
Provision a Coder workspace with headless Chrome browser, CDP proxy, and noVNC interface for browser automation and monitoring.
๐ Features
- Preconfigured Chrome with undetected-chromedriver
- CDP (Chrome DevTools Protocol) HTTP proxy API
- noVNC remote desktop access
- Randomized browser fingerprint generation
- Persistent user profile storage
- Supervisor process management
๐ฆ Getting Started
1. Build the Docker image
docker build -t coder-chrome .
2. Run the container
docker run -d \
-p 6080:6080 \
-p 9223:9223 \
--name chrome-workspace \
coder-chrome
3. Access the workspace
- noVNC: http://localhost:6080
- CDP Proxy: http://localhost:9223
- Chrome Profile:
/home/chrome/profile
(persistent volume)
๐งฑ Architecture
The workspace includes:
- Xvfb - Virtual display server
- Fluxbox - Lightweight window manager
- x11vnc + noVNC - Remote desktop access
- Chrome Browser - With undetected-chromedriver
- CDP Proxy Server - HTTP API for DevTools commands
- Supervisor - Process management
๐ ๏ธ Example API Requests
1. Get browser fingerprint
curl -X POST http://localhost:9223 \
-H "Content-Type: application/json" \
-d '{"method": "Browser.getFingerprint"}'
2. Set network conditions
curl -X POST http://localhost:9223 \
-H "Content-Type: application/json" \
-d '{
"method": "Network.emulateNetworkConditions",
"params": {
"offline": false,
"latency": 50,
"downloadThroughput": 1024000,
"uploadThroughput": 512000
}
}'
3. Get page load metrics
curl -X POST http://localhost:9223 \
-H "Content-Type: application/json" \
-d '{"method": "Performance.getMetrics"}'
๐งช Advanced Usage
Custom User-Agent
curl -X POST http://localhost:9223 \
-H "Content-Type: application/json" \
-d '{
"method": "Network.setUserAgentOverride",
"params": {
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36"
}
}'
Add browser extensions
- Mount extension directory as volume
- Update
init_chrome.py
to load extensions - Example configuration:
options.add_argument('--load-extension=/home/chrome/extensions/your-extension')
๐งช Testing the Setup
- Start the container
- Open noVNC at http://localhost:6080
- Verify Chrome is running with:
docker exec -it chrome-workspace ps aux
๐งผ Maintenance
Update dependencies
docker build --no-cache -t coder-chrome .
Clean up old containers
docker rm -f chrome-workspace