Clearcote Browser

io.github.clearcotelabs由 GitHub 帳號 clearcotelabs 發布v0.3.1更新於 Nov 3, 2026

Drive the Clearcote Chromium browser from any MCP client: read pages, click, fill, screenshot.

概覽

AI 產生的概覽

讓任何 MCP 用戶端驅動隱身 Chromium 瀏覽器:導覽、讀取頁面、點擊、填表、截圖,並可透過 CDP 共用同一個瀏覽器。

可以做什麼
  • 導覽分頁,並以 Markdown、純文字或 HTML 讀取目前頁面,附帶 HTTP 狀態與 blocked/empty/ok 頁面狀態
  • 列出可互動元素、執行 JavaScript、等待選擇器出現、讀取 Cookie 與列出分頁
  • 點擊元素、填寫輸入欄位、按鍵,以及開啟或關閉分頁
  • 在沙箱目錄中截圖並將頁面存成 PDF
  • 將 Cookie 與儲存狀態存成具名設定檔並還原
  • 回報對外出口 IP 與目前身分,並提供原始 CDP 端點,讓 Playwright、Puppeteer 或 Crawl4AI 連上同一個瀏覽器
適用情境
適合需要讓助理瀏覽真實網站、擷取頁面內容、填寫表單或截圖的情境,也適合需要固定瀏覽器身分或代理出口的用途。已有 Playwright 或 Puppeteer 程式碼、希望接上同一個隱身瀏覽器的團隊同樣適用。
執行需求
以 stdio 在本機執行,可用 npx 啟動,或安裝後執行 clearcote-mcp;啟動器需要 uv、pipx 或 pip。首次使用會下載並以 SHA-256 驗證 Clearcote 二進位檔,僅支援 Windows x64 與 Linux x64。選用環境變數可設定身分、代理與無頭模式;雲端模式需要 CLEARCOTE_CLOUD=1 與 CLEARCOTE_API_KEY。
安裝前請注意
CLEARCOTE_PROXY 可能含有代理帳密,CLEARCOTE_API_KEY 是可計費的金鑰;雲端模式與 run_task 工具會產生費用並回傳費用金額。瀏覽器可在真實網站上點擊、填寫並送出,儲存的設定檔會留下 Cookie 與儲存狀態。頁面內容雖被標記為不可信資料,但私有位址攔截僅限 http/https,頁面指令碼的 WebSocket 連線與 DNS 重綁定不在防護範圍內。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Clearcote Browser,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

Clearcote MCP server

Drive the open-source Clearcote stealth Chromium from any MCP client — Claude Desktop, Cursor, Cline, Continue, or your own agent. One shared, coherent stealth browser; ~20 tools to navigate, read, extract, click, fill, screenshot, and persist sessions — plus get_cdp_endpoint, which hands the same stealth browser to any Playwright / Puppeteer / browser-use / Crawl4AI client.

The fingerprint is corrected in Chromium's C++, so you do not add puppeteer-stealth / undetected-chromedriver / any JS patching — those self-reveal and undo it. Driving over CDP adds no automation flags, so navigator.webdriver stays false and the persona is intact end to end.


Run it

Node (no install):

bash
npx clearcote-mcp

The launcher runs the Python server with uvx if you have uv, else with pipx, else installs it with pip (a Python whose pip install is refused outside a virtual environment, as on Debian 12+, Ubuntu 23.04+ and Homebrew, needs uv or pipx; the launcher says so).

Python:

bash
pip install clearcote-mcpclearcote-mcp            # stdio server

Both auto-download + SHA-256-verify the right Clearcote binary per OS on first use (native Windows x64 + Linux x64).

Add it to a client

Claude Desktop / Cursor / Cline mcpServers config:

json
{  "mcpServers": {    "clearcote": {      "command": "npx",      "args": ["-y", "clearcote-mcp"],      "env": {        "CLEARCOTE_FINGERPRINT": "acct-1",        "CLEARCOTE_PLATFORM": "windows",        "CLEARCOTE_PROXY": "http://user:pass@host:port",        "CLEARCOTE_GEOIP": "1"      }    }  }}

The persona lives in the environment, so the tool surface stays clean:

env varmeaning
CLEARCOTE_FINGERPRINTseed → one stable, coherent identity (same seed = same machine across runs)
CLEARCOTE_PLATFORMwindows | linux | macos | android
CLEARCOTE_BRANDChrome | Edge | Opera | Vivaldi
CLEARCOTE_PROXYhttp://user:pass@host:port (routes all traffic)
CLEARCOTE_GEOIP1 → derive timezone/locale/WebRTC IP from the proxy exit IP
CLEARCOTE_TIMEZONE / CLEARCOTE_ACCEPT_LANGUAGEexplicit overrides
CLEARCOTE_HEADLESS0 for a visible window (default headless)
CLEARCOTE_BINARYpath to a specific Clearcote binary (optional)
CLEARCOTE_CLOUD1 → the shared browser is a hosted Clearcote session instead (needs CLEARCOTE_API_KEY)
CLEARCOTE_API_KEYyour cc_live_... key: cloud mode, and the run_task tool

Hardening knobs: CLEARCOTE_MCP_TOOL_TIMEOUT (s), CLEARCOTE_MCP_RUN_TIMEOUT (s, run_task; default 900), CLEARCOTE_MCP_WRITE_DIR (sandbox for file writes), CLEARCOTE_MCP_ALLOW_ANY_PATH=1, CLEARCOTE_ALLOW_PRIVATE_EGRESS=1 (allow localhost / private targets; still http/https only), CLEARCOTE_MCP_PREWARM=0, CLEARCOTE_SERVE_PORT, CLEARCOTE_MCP_INLINE_IMAGE_MAX (bytes; default 200000: the largest screenshot also returned inline).

Tools

Read · read_page (Markdown by default; format="text" or "both") · get_page_html · page_elements (interactive elements + selectors) · evaluate_js · wait_for · current_page · get_cookies · list_tabs Act · navigate · click (selector or visible text) · fill_field (selector/label/placeholder/name) · press_key · new_tab · close_tab Capture · screenshot_page (saved under the sandbox dir; up to 200 KB also returned as an image) · save_page_pdf Session · save_profile / load_profile (cookies + storage) Stealth / infra · get_egress_info (public IP + active persona) · get_cdp_endpoint (attach any other CDP client to the same stealth browser)

navigate and read_page also return http_status (the shown document's HTTP status; null when there is none, as for a local file or about:blank, or the browser has none for it) and page_state: blocked (HTTP 401, 403, 429 or 503), empty (under 20 characters of visible text: still loading, or nothing to read) or ok. Output formats changed in 0.3.0: see CHANGELOG.md.

Cloud · run_task(task, url?, schema_json?): a whole task run by the hosted agent (Clearcote Jet) on a cloud browser, returning its JSON result (run_status, result.output, cost_eur). Listed only when CLEARCOTE_API_KEY is set.

Cloud mode

Set CLEARCOTE_CLOUD=1 and CLEARCOTE_API_KEY and the shared browser runs on Clearcote's servers instead of this machine: nothing to download, a residential IP included. Every tool works the same, and the persona variables above still apply (CLEARCOTE_BINARY and CLEARCOTE_SERVE_PORT are local-only and ignored). The one difference: a cloud session's CDP URL is single-use and the server holds it, so get_cdp_endpoint has no endpoint to hand out; start your own hosted browser with clearcote.launch(cloud=True) instead. Needs clearcote 0.34 or newer.

json
{  "mcpServers": {    "clearcote": {      "command": "npx",      "args": ["-y", "clearcote-mcp"],      "env": { "CLEARCOTE_CLOUD": "1", "CLEARCOTE_API_KEY": "cc_live_..." }    }  }}

Guardrails (built in)

  • Every tool has a wall-clock timeout and returns a structured error instead of crashing the server.
  • Private addresses are refused — only http/https urls, read the way the browser reads them (file:, view-source:, chrome: and every other scheme are always refused); this machine, the local network and cloud metadata endpoints are refused, for the url a tool gets and for every request the browser then makes (redirects, images, frames, script requests, popups), unless you opt in. Checking every request turns the browser's HTTP cache off. Not covered: WebSocket connections a page script opens, and a host name whose address changes between the check and the browser's own lookup (DNS rebinding).
  • File writes are confined to a sandbox dir (no path traversal).
  • Oversized text is capped so a response never floods the agent's context, with an explicit <field>_truncated flag.
  • Everything a page controls (text, Markdown, HTML, element lists, script results and errors, titles, cookies, and the browser's error messages, which can quote the page) is fenced as untrusted data (<untrusted_page_content>), and nothing in it can pass for a fence tag.
  • The shared browser is rebuilt automatically if it dies, and closed whenever the server stops (its input closed, Ctrl+C, Ctrl+Break, SIGTERM or SIGHUP), with its profile and temporary files. Not after a forced kill of the server; not a browser whose launch is still under way 20 s after the stop (the server waits no longer); and on Windows a Ctrl+Break also ends Playwright's driver at once, which leaves its playwright-artifacts-* folder in the temp directory.

Just want the raw endpoint?

If you don't need the tools, run the browser as a standing CDP endpoint and attach your existing code:

bash
clearcote-serve --port 9222 --fingerprint acct-1 --platform windows# → prints http://127.0.0.1:9222 ; then:  connect_over_cdp / puppeteer.connect({browserURL})

See USAGE.md for per-client examples. Part of clearcote-browser (BSD-3).

來源:mcp/README.md,提交 90c4ae3

工具

20

navigate

Navigate the current tab to a URL. Returns the resolved url, title, http_status and page_state (see read_page).

輸入參數url必填

read_page

Read the current page (or navigate to `url` first) as Markdown (default), its visible "text", or "both". Also returns http_status (the shown document's; null if unknown) and page_state: "blocked" (HTTP 401, 403, 429 or 503), "empty" (under 20 characters of visible text) or "ok". Long fields are cut; markdown_truncated / text_truncated say so.

輸入參數urlformat

get_page_html

Get the HTML of the current page (or navigate to `url` first), inside the untrusted-content fence.

輸入參數url

page_elements

List the interactive elements (links, buttons, inputs) on the page, one JSON object per line, each with a selector.

輸入參數url

click

Click an element by CSS selector or by visible text (navigate to `url` first if given).

輸入參數urltarget必填

fill_field

Fill an input matched by selector, label, placeholder, or name.

輸入參數urlfield必填value必填

press_key

Press a key on the current page, e.g. 'Enter', 'Tab', 'Control+A'.

輸入參數key必填

evaluate_js

Evaluate a JavaScript expression in the page and return its (JSON-serializable) result, as JSON text inside the untrusted-content fence.

輸入參數urlexpression必填

wait_for

Wait until a selector appears (up to timeout_ms).

輸入參數urlselector必填timeout_ms

current_page

Return the current tab's url + title.

無需輸入參數。

screenshot_page

Screenshot the current page (or navigate to `url` first), saved under the sandbox dir. Up to 200 KB it is also returned as an image; a bigger one only as its file path (inline: false).

輸入參數urlpath

save_page_pdf

Save the current page as a PDF (headless only). Saved under the sandbox dir.

輸入參數urlpath

get_cookies

Get cookies for the current context (optionally filtered to `url`). Each cookie's name, value, domain and path are the site's, each between untrusted-content tags on one line.

輸入參數url

list_tabs

List open tabs (index, url, title, which is current).

無需輸入參數。

new_tab

Open a new tab (optionally navigate it) and make it current.

輸入參數url

close_tab

Close the tab at `index` (from list_tabs).

輸入參數index必填

save_profile

Save cookies + storage state to a named profile under the sandbox dir.

輸入參數name

load_profile

Restore cookies + storage from a named profile (see save_profile).

輸入參數name

get_egress_info

Report the browser's public egress IP (through any configured proxy) + the active persona.

無需輸入參數。

get_cdp_endpoint

Return the stealth browser's raw CDP endpoint so ANY other client (Playwright / Puppeteer / browser-use / Crawl4AI / Stagehand) can attach to the SAME browser with `connect_over_cdp`, keeping the stealth persona. This is the whole point of the drop-in model.

無需輸入參數。

版本歷史

2
  1. v0.3.1最新Nov 1, 2026
  2. v0.3.0Oct 31, 2026

評分

已滿足適用檢查項的 90%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分
  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具必需15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分