Skip to main content
Glama
README.md
# Arche Browser

MCP Server for Browser Automation and Full Local PC Control.

Control a real Chrome browser AND your entire computer from Claude Code or any MCP client.

## Features

- **Full Browser Control**: Navigation, clicks, typing, screenshots, and more
- **Full PC Control**: Shell commands, Python execution, file system, clipboard, processes
- **Real Browser**: Uses your actual Chrome with cookies, extensions, login sessions
- **Remote Access**: Control browser/PC on any machine via SSE transport
- **Token Authentication**: Secure remote access with auto-generated tokens
- **Minimal Design**: Just a few powerful primitives that can do anything

## Design Philosophy

Inspired by Eric Gamma's principles: **Simple, Flexible, Powerful**

Instead of hundreds of specific tools, Arche provides a few powerful primitives:

| Primitive | What it does | What you can achieve |
|-----------|--------------|----------------------|
| `shell()` | Execute any shell command | Volume, reboot, programs, services, ANYTHING |
| `python_exec()` | Execute Python code | Camera, Excel, AI, complex logic, ANYTHING |
| `screen_capture()` | Desktop screenshot | Visual feedback for AI |

With just `shell` and `python_exec`, AI can literally control **EVERYTHING** on your computer.

## Installation

```bash
# From PyPI
pip install arche-browser

# From GitHub
pip install git+https://github.com/GizAI/arche-browser.git

# One-liner (no install)
uvx arche-browser
```

## Usage

### Browser Only (Default)

```bash
arche-browser
```

Claude Code config:
```json
{"mcpServers": {"browser": {"command": "arche-browser"}}}
```

### Full PC Control

```bash
arche-browser --local
```

Claude Code config:
```json
{"mcpServers": {"arche": {"command": "arche-browser", "args": ["--local"]}}}
```

### PC Control Only (No Browser)

```bash
arche-browser --local --no-browser
```

### Remote Access (SSE)

On the machine with Chrome:
```bash
arche-browser --sse --port 8080 --local

# Output:
# [*] Auth: ENABLED
# [*] Token: abc123...
# [*] Connect URL: http://localhost:8080/sse?token=abc123...
```

On Claude Code:
```json
{"mcpServers": {"remote": {"url": "http://YOUR_IP:8080/sse?token=YOUR_TOKEN"}}}
```

## Local Control Tools

### Core Primitives

| Tool | Description |
|------|-------------|
| `shell(command)` | Execute shell command (bash/cmd/powershell) |
| `python_exec(code)` | Execute Python code with full system access |
| `screen_capture(path)` | Capture desktop screenshot |

### Convenience Tools

| Tool | Description |
|------|-------------|
| `file_read(path)` | Read file content |
| `file_write(path, content)` | Write file content |
| `file_list(path, pattern)` | List directory contents |
| `file_delete(path)` | Delete file or directory |
| `file_copy(src, dst)` | Copy file or directory |
| `file_move(src, dst)` | Move/rename file or directory |
| `clipboard_get()` | Get clipboard content |
| `clipboard_set(content)` | Set clipboard content |
| `system_info()` | Get OS, CPU, memory, disk info |
| `process_list()` | List running processes |
| `process_kill(pid/name)` | Kill a process |

### What You Can Do

```python
# Volume control (Windows)
shell("powershell (Get-AudioDevice -Playback).SetMute($false)")

# Take a photo with webcam
python_exec("""
import cv2
cap = cv2.VideoCapture(0)
ret, frame = cap.read()
cv2.imwrite("photo.jpg", frame)
cap.release()
""")

# Create Excel spreadsheet
python_exec("""
import openpyxl
wb = openpyxl.Workbook()
ws = wb.active
ws['A1'] = 'Sales Report'
ws['A2'] = 1000
wb.save('report.xlsx')
""")

# System maintenance
shell("cleanmgr /d C:")  # Windows disk cleanup
shell("sudo apt autoremove")  # Linux cleanup

# Reboot computer
shell("shutdown /r /t 60")  # Windows
shell("sudo reboot")  # Linux

# Kill a program
process_kill(name="notepad.exe")
```

## Browser Tools

### Navigation
| Tool | Description |
|------|-------------|
| `goto(url)` | Navigate to URL |
| `get_url()` | Get current URL |
| `get_title()` | Get page title |
| `reload()` | Reload page |
| `go_back()` | Go back in history |
| `go_forward()` | Go forward in history |

### DOM & Input
| Tool | Description |
|------|-------------|
| `get_text(selector)` | Get element text |
| `get_html(selector)` | Get element HTML |
| `click(selector)` | Click element |
| `type_text(selector, text)` | Type into input |
| `select_option(selector, value)` | Select dropdown |
| `check_box(selector, checked)` | Check/uncheck |
| `scroll_to(x, y)` | Scroll page |

### Screenshots & PDF
| Tool | Description |
|------|-------------|
| `screenshot(path)` | Take screenshot |
| `pdf(path)` | Generate PDF |

### Cookies & Storage
| Tool | Description |
|------|-------------|
| `get_cookies()` | Get cookies |
| `set_cookie(name, value)` | Set cookie |
| `storage_get(key)` | Get localStorage |
| `storage_set(key, value)` | Set localStorage |

### JavaScript
| Tool | Description |
|------|-------------|
| `evaluate(script)` | Execute JS |

## CLI Options

```
arche-browser [OPTIONS]

Mode:
  --local          Enable full local PC control
  --no-browser     Disable browser tools (requires --local)

Transport:
  --sse            Run as SSE server for remote access
  --port PORT      SSE server port (default: 8080)

Browser:
  --headless       Run Chrome in headless mode

Authentication:
  --no-auth        Disable token authentication
  --token TOKEN    Use specific auth token
  --show-token     Show current auth token
  --reset-token    Generate new auth token
```

## Architecture

```
arche_browser/
├── __init__.py    # Package exports
├── __main__.py    # CLI entry point
├── chrome.py      # Chrome process management
├── browser.py     # Full CDP browser automation
├── server.py      # MCP server with all tools
├── auth.py        # Token authentication
├── local.py       # Local PC control primitives
└── sites/
    └── chatgpt.py # ChatGPT-specific client
```

## Security

- **Token Authentication**: Remote SSE servers require authentication by default
- **Explicit Opt-in**: Local PC control requires `--local` flag
- **No Sandbox**: Local control has NO restrictions - use responsibly

## Requirements

- Python 3.10+
- Chrome, Chromium, or Edge browser (for browser tools)
- MCP client (Claude Code, etc.)

## License

MIT