Command Palette

Search for a command to run...

UnylyUnyly
Весь каталог

Octo

БесплатноНе проверен

Controls Octo Browser antidetect profiles and automates browser tasks through natural language, enabling profile lifecycle management, web scraping, and full br

GitHubEmbed

Описание

Controls Octo Browser antidetect profiles and automates browser tasks through natural language, enabling profile lifecycle management, web scraping, and full browser automation via CDP.

README

Octo Browser MCP Server

Control antidetect browser profiles with AI through the Model Context Protocol

Python 3.10+ MCP License: MIT Octo Browser Playwright

Installation · Quick Start · Tools Reference · Examples · Architecture


Why This Exists

Managing hundreds of antidetect browser profiles manually is tedious. This MCP server bridges Octo Browser and AI assistants (Claude Code, Cursor, etc.), enabling natural language control over browser profiles and full browser automation through CDP.

Instead of clicking through UIs or writing scripts, just tell your AI:

"Start profile 5249_US, go to google.com, and take a screenshot"

The AI handles the rest -- finding the profile, launching it, connecting via CDP, navigating, and capturing the result.

Key Features

  • Profile Lifecycle -- Start, stop, find, and manage Octo Browser profiles via Local and Cloud APIs
  • Browser Automation -- Full Playwright-based control: navigate, click, type, scroll, screenshot
  • Dual API Support -- Local API (port 58888) for profile control + Cloud API for search and management
  • One-Time Profiles -- Temporary profiles that self-destruct after use (ideal for scraping)
  • Multi-Tab Control -- Open, switch, and close browser tabs programmatically
  • Remote/Docker Ready -- Automatic WebSocket URL rewriting for non-localhost setups
  • Rate Limit Handling -- Built-in retry with exponential backoff for API throttling

Architecture

┌─────────────────────────────────────────────────────┐
│                   AI Assistant                       │
│              (Claude Code / Cursor)                  │
└──────────────────────┬──────────────────────────────┘
                       │ MCP Protocol (stdio)
┌──────────────────────▼──────────────────────────────┐
│              octo-mcp Server                         │
│  ┌─────────────┐ ┌──────────────┐ ┌──────────────┐  │
│  │   server.py  │ │ octo_client  │ │browser_manager│ │
│  │  34 MCP Tools│ │  Local+Cloud │ │  Playwright   │ │
│  └──────┬───────┘ └──────┬───────┘ └──────┬───────┘  │
└─────────┼────────────────┼────────────────┼──────────┘
          │                │                │
    ┌─────▼────┐   ┌──────▼──────┐  ┌──────▼──────┐
    │ MCP SDK  │   │  Octo APIs   │  │  CDP / WS   │
    │  stdio   │   │ :58888 Cloud │  │  Playwright │
    └──────────┘   └──────┬───────┘  └──────┬──────┘
                          │                 │
                   ┌──────▼─────────────────▼──────┐
                   │        Octo Browser           │
                   │   (antidetect Chromium)        │
                   └───────────────────────────────┘

Installation

From Source

git clone https://github.com/mazamakasa/octo-mcp.git
cd octo-mcp
pip install -e .
playwright install chromium

From PyPI (coming soon)

pip install octo-mcp
playwright install chromium

Prerequisites

  • Python 3.10+
  • Octo Browser installed and running (download)
  • Playwright Chromium (installed via playwright install chromium)

Quick Start

1. Add to Claude Code

# Minimal setup (Local API only -- start/stop profiles by UUID)
claude mcp add octo-mcp -- octo-mcp

# Full setup (+ Cloud API for searching profiles by name)
claude mcp add octo-mcp \
  -e OCTO_USERNAME="[email protected]" \
  -e OCTO_PASSWORD="your_password" \
  -e OCTO_API_TOKEN="your_api_token" \
  -- octo-mcp

2. Or add to .claude/settings.json manually

{
  "mcpServers": {
    "octo-mcp": {
      "command": "octo-mcp",
      "env": {
        "OCTO_USERNAME": "[email protected]",
        "OCTO_PASSWORD": "your_password",
        "OCTO_API_TOKEN": "your_api_token"
      }
    }
  }
}

3. Restart Claude Code and verify

Ask Claude: "Check if Octo Browser is running" -- it will use octo_health_check.

Getting Your API Token

  1. Open Octo Browser app
  2. Go to SettingsAPI
  3. Copy your API token

The API token is only needed for Cloud API operations (searching profiles by name, managing tags/proxies/extensions). Basic profile start/stop works without it.

Environment Variables

Variable Description Default
OCTO_HOST Octo Browser host (for remote/Docker setups) localhost
OCTO_PORT Local API port 58888
OCTO_USERNAME Account email for auto-login --
OCTO_PASSWORD Account password for auto-login --
OCTO_API_TOKEN Cloud API token (for search, tags, proxies) --

Tools Reference (34 tools)

Profile Management (Local API)

Tool Description
octo_health_check Check Octo Browser API availability and version
octo_list_profiles List all active (running) profiles with their WebSocket endpoints
octo_start_profile Start a profile by UUID; returns ws_endpoint for CDP connection
octo_stop_profile Gracefully or forcefully stop a running profile
octo_start_one_time_profile Create a temporary profile (auto-deleted on stop); supports OS selection

Profile Search & Management (Cloud API)

Tool Description
octo_find_profile_by_name Find a profile by exact or partial name match
octo_start_profile_by_name Find profile by name and start it (combines find + start)
octo_search_profiles Search profiles by name, tags, status; supports sorting and pagination
octo_get_profile Get full profile data: fingerprint, proxy, extensions, tags

Team Resources (Cloud API)

Tool Description
octo_get_extensions List all team browser extensions (name, version, UUID)
octo_delete_extensions Delete team extensions by UUID
octo_get_tags List all profile tags (name, color, UUID)
octo_get_proxies List all saved proxies (type, host, port, UUID)

Browser Connection

Tool Description
browser_connect Connect to a running profile via CDP WebSocket endpoint
browser_disconnect Disconnect from browser (does not stop the Octo profile)

Navigation

Tool Description
browser_navigate Navigate to URL with configurable wait strategy (load, domcontentloaded, networkidle)
browser_get_url Get the current page URL
browser_go_back Navigate back in history
browser_go_forward Navigate forward in history
browser_reload Reload the current page

Page Interaction

Tool Description
browser_click Click by CSS selector or (x, y) coordinates; supports right-click, double-click
browser_type Type text into an element (via fill) or simulate keystrokes with delay
browser_press_key Press a keyboard key (Enter, Tab, Escape, ArrowDown, etc.)
browser_scroll Scroll page or specific element in any direction
browser_hover Hover over an element (useful for dropdowns and tooltips)
browser_select Select an option in a <select> dropdown

Information Extraction

Tool Description
browser_screenshot Capture screenshot of full page or specific element (returns PNG image)
browser_get_text Extract text content from an element
browser_get_html Get innerHTML or outerHTML of element, or full page HTML
browser_get_attribute Get any attribute value from an element
browser_query_selector_all Find all matching elements with their tag, text, class, bounds
browser_wait_for_selector Wait for element to appear/disappear with configurable timeout

JavaScript Execution

Tool Description
browser_evaluate Execute arbitrary JavaScript and return the result

Tab Management

Tool Description
browser_list_tabs List all open tabs with title, URL, and active status
browser_switch_tab Switch to a tab by index
browser_new_tab Open a new tab, optionally navigating to a URL
browser_close_tab Close the current tab

Usage Examples

Start a profile by name and automate

You: Start profile "work_US" and check my IP on whatismyipaddress.com

Claude: I'll start the profile, connect to it, and check your IP.

→ octo_start_profile_by_name(name="work_US")
  Profile 'work_US' (uuid: abc-123) started. ws_endpoint: ws://localhost:52341/...

→ browser_connect(ws_endpoint="ws://localhost:52341/...")
  Connected to browser.

→ browser_navigate(url="https://whatismyipaddress.com")
  Navigated to https://whatismyipaddress.com

→ browser_screenshot()
  [Screenshot showing IP address]

Your IP is 192.168.x.x (US location, matching profile proxy).

Scrape with a temporary profile

You: Create a temp profile and scrape the title from news.ycombinator.com

Claude:
→ octo_start_one_time_profile(os="win")
  Temporary profile created. UUID: tmp-456. ws_endpoint: ws://...

→ browser_connect(ws_endpoint="ws://...")
→ browser_navigate(url="https://news.ycombinator.com")
→ browser_evaluate(script="document.title")
  Result: "Hacker News"

→ octo_stop_profile(uuid="tmp-456")
  Profile stopped and deleted.

The page title is "Hacker News".

Manage profiles in bulk

You: Find all profiles tagged "ads" and list them

Claude:
→ octo_search_profiles(tags=["ads"], limit=50)
  Found 12 profiles:
  - ads_US_01 (UUID: ...)
  - ads_UK_02 (UUID: ...)
  ...

Check fingerprint configuration

You: Show me the fingerprint details for profile "5249_US"

Claude:
→ octo_find_profile_by_name(name="5249_US")
→ octo_get_profile(uuid="found-uuid")

  Profile: 5249_US
  Fingerprint:
    OS: win
    User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)...
    Screen: 1920x1080
  Proxy: socks5://proxy.example.com:1080
  Extensions (2):
    - uBlock Origin v1.55
    - EditThisCookie v1.6

Remote / Docker Setup

When Octo Browser runs on a different machine, set OCTO_HOST:

claude mcp add octo-mcp \
  -e OCTO_HOST="192.168.1.100" \
  -e OCTO_USERNAME="[email protected]" \
  -e OCTO_PASSWORD="your_password" \
  -- octo-mcp

The server automatically rewrites WebSocket URLs from 127.0.0.1/localhost to your configured host, so CDP connections work seamlessly across networks.

Requirements for remote setup:

  • Port 58888 (Local API) must be accessible
  • CDP debug ports (random, per-profile) must be accessible
  • Consider using SSH tunnel for security

Troubleshooting

Problem Solution
"Octo Browser API unavailable" Make sure Octo Browser is running. The Local API starts with the app.
"OCTO_API_TOKEN is not set" Add your API token or use octo_start_profile with UUID directly.
"Profile not found" Profile names are case-sensitive. Use octo_search_profiles to browse.
WebSocket connection fails Check that OCTO_HOST is correct and CDP ports are accessible.
"Browser not connected" Call browser_connect with the ws_endpoint from profile start.

Development

git clone https://github.com/mazamakasa/octo-mcp.git
cd octo-mcp
python -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"

# Lint & format
ruff check src/
ruff format src/

# Run tests
pytest

Tech Stack

  • MCP SDK -- Model Context Protocol server framework
  • Playwright -- Browser automation via CDP (Chrome DevTools Protocol)
  • httpx -- Async HTTP client for Octo Browser APIs
  • Hatchling -- Modern Python build system

License

MIT License -- see LICENSE for details.

Author

Maksym Babenko -- GitHub · Telegram

Links

from github.com/mazamakasa/octo-mcp

Установка Octo

У этого сервера нет опубликованного пакета — он собирается из исходников. Открой репозиторий и следуй инструкции в README.

▸ github.com/mazamakasa/octo-mcp

FAQ

Octo MCP бесплатный?

Да, Octo MCP бесплатный — установка в пару кликов через Unyly без оплаты.

Нужен ли API-ключ для Octo?

Нет, Octo работает без API-ключей и переменных окружения.

Octo — hosted или self-hosted?

Доступен hosted-вариант: Unyly запускает сервер в облаке, локальная установка не обязательна.

Как установить Octo в Claude Desktop, Claude Code или Cursor?

Открой Octo на unyly.org, выбери вкладку своего клиента (Claude Desktop, Claude Code, Cursor) и нажми Install — конфиг сгенерируется автоматически, без правки JSON.

Похожие MCP

Compare Octo with

Не уверен что выбрать?

Найди свой стек за 60 секунд

Автор?

Embed-бейдж для README

Похожее

Все в категории browse