clearcote-mcp@r1
CAUTION· install onlyPublisher claims: "Drive Clearcote, a Chromium build with its fingerprint protection patched into the engine, from any MCP client: about 20 tools to navigate, read, extract, click, fill, screenshot and keep sessions, plus a CDP endpoint that hands the same browser to Playwright or Puppeteer. The server lives in the repo's mcp/ folder (npx clearcote-mcp or pip install clearcote-mcp)." Observed in sandbox: no network, touches nothing outside the project, writes no memory.
Coverage
Nothing executable in the bundle ran; the trace covers the install step only.- Tested
- every file read, file written and host contacted by what ran
- Not tested
- use of the skill by an agent
What this means for the label: Caution here covers what ran. The server's tools were not exercised with a real credential, so nothing about their behavior is asserted; the credential summary below says what to do with that.
Before you give it your token
- It will ask for
CC_SECRETS_FILECLEARCOTE_API_KEYCLEARCOTE_LICENSE_KEYGITHUB_TOKENOPENROUTER_API_KEYOWNER_TOKEN_LABELRUN_TOKEN_ENVSIGNING_KEY_FPRor--canvas-bridge-auth/--proxy-auth/--socks5-credentialsConfiguration, not credentials: CC_EXTRA_ARGS, CC_FINGERPRINT_PROFILE, CC_HEADLESS, CC_IDLE_EXIT_SECONDS, CC_LOCATION, CC_PROXY, CC_WEBRTC_IP, CCKEY, CLEARCOAT_BINARY, CLEARCOTE_AGENT_KEY, CLEARCOTE_API_URL, CLEARCOTE_AUTO_UPDATE, CLEARCOTE_BINARY, CLEARCOTE_BROWSER_VERSION, CLEARCOTE_CACHE, CLEARCOTE_CLOUD, CLEARCOTE_CRLSET, CLEARCOTE_CRLSET_DIR, CLEARCOTE_CRLSET_FILE, CLEARCOTE_CRLSET_URL, CLEARCOTE_DOCKER, CLEARCOTE_DOCKER_CACHE_VOLUME, CLEARCOTE_DOCKER_IDLE_EXIT, CLEARCOTE_DOCKER_IMAGE, CLEARCOTE_EXIT_CHECKIN, CLEARCOTE_EXIT_KEY, CLEARCOTE_GEOIP_TIMEOUT_SECONDS, CLEARCOTE_HELPER_DIR, CLEARCOTE_HELPER_PAIR_CODE, CLEARCOTE_HUMANIZE_ENGINE_CLICKS, CLEARCOTE_HUMANIZE_ENGINE_EXT, CLEARCOTE_HUMANIZE_TYPO_RATE- Where it talks to
- clearcotelabs.com (its own)Also googlesource.com, coherence-a.test, probe-b.test, openrouter.ai, docker.com, ipify.org, icanhazip.com, ip-api.com, tool.example, mux.invalid — not the publisher's domain; check what for before connecting.
- What the honeypot saw
- no credential files read · no network
- What we could not test
- use of the skill by an agent
Connect it with a scoped credential, under the guard, and read the third-party hosts first. The code names googlesource.com, coherence-a.test, probe-b.test, openrouter.ai, docker.com, ipify.org, icanhazip.com, ip-api.com, tool.example, mux.invalid as well as its own vendor. The guard injects CC_SECRETS_FILE, CLEARCOTE_API_KEY, CLEARCOTE_LICENSE_KEY, GITHUB_TOKEN, OPENROUTER_API_KEY, OWNER_TOKEN_LABEL, RUN_TOKEN_ENV, SIGNING_KEY_FPR only into requests to clearcotelabs.com (and its subdomains) and refuses the rest.
Never paste a credential into a chat, a ticket or a report, including ours. How the guard holds it.
Is clearcote-mcp@r1 safe to install?
KillerSkills ran it in the KillerSkills honeypot sandbox (1 scenario; nothing executable in the bundle ran; the trace covers the install step only) on 2026-11-11 and scored it 68/100 (Caution). It is not known to be malicious, but it has behaviour or code a security policy should decide on before install. Notable findings: Auto-update or dynamic fetch configuration; Credential pass-through configuration; URL with embedded credentials. Summary: no network, touches nothing outside the project, writes no memory.
Behavior trace
Honeypot run · 0 s · 1 scenarios · 0 deviationsStatic findings
…lePrivacySandbox, executablePath: exeOption, args, geoip, humanize, showCursor, autoUpdate, cacheDir, quiet, widevine, crlset, crlsetTimeout, version, licenseKey, licenseApiBase, licenseThroughProxy, offlineKey, releaseChannel, a…Fix: Pin versions and sources; vendor anything fetched at install time.const { server, username, password } = proxy ? proxyCredentials(proxy) : { server: "", username: "", password: "" };Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.// chromium.connectOverCDP("http://127.0.0.1:9222?fingerprint=acct-2&proxy=socks5://u:p@host:1080&geoip=true")Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose."no Clearcote API key: pass apiKey or set CLEARCOTE_API_KEY (create a key in the Clearcote dashboard)";Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.const child = execFile(argv[0], argv.slice(1), { env: env ? { ...process.env, ...env } : process.env, timeout: timeoutMs, maxBuffer: 16 << 20, windowsHide: true },Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.# Run with sudo if you are not root.Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.…lePrivacySandbox, executablePath: exeOption, args, geoip, humanize, showCursor, autoUpdate, cacheDir, quiet, widevine, crlset, crlsetTimeout, version, licenseKey, licenseApiBase, licenseThroughProxy, offlineKey, releaseChannel, a…Fix: Pin versions and sources; vendor anything fetched at install time./** URL of SHA256SUMS.txt.asc (auto-update only) for optional GPG verification. */Fix: Pin versions and sources; vendor anything fetched at install time.--proxy <url> proxy, e.g. http://user:pass@host:portFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose./** URL of the public signing key (auto-update only). */Fix: Pin versions and sources; vendor anything fetched at install time.const out = { ...env };Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.const probeEnv: Env = { ...env, CLEARCOTE_RUN_TOKEN: runToken }; // the probe runs after the licence gate, like every launchFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.|| sudo python3 build/install-build-deps.py --no-prompt \Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.chmod +x third_party/node/update_node_binaries 2>/dev/null || trueFix: Request the narrowest permission that works; replace wildcards with the exact paths or hosts./** The raw accepted parameters (proxy credentials redacted), for the status page. */Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.…y, disablePrivacySandbox, executablePath: exeOption, args: userArgs, geoip, autoUpdate, cacheDir, quiet, widevine, version, licenseKey, licenseApiBase, licenseThroughProxy, offlineKey, releaseChannel, a…Fix: Pin versions and sources; vendor anything fetched at install time.const { server, username, password } = proxyCredentials(proxy);Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.export function proxyCredentials(proxy: PwProxy): { server: string; username: string; password: string } {Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose./** Keep the persona switches (seed, overrides, proxy credentials, canvas-bridge token) off theFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.import { proxyCredentials, type PwProxy } from "./launchopts.js";Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.return ensureBinary({ cacheDir: options.cacheDir, quiet: options.quiet, autoUpdate: options.autoUpdate });Fix: Pin versions and sources; vendor anything fetched at install time./** Canonical form of an identity's launch options (proxy credentials included, never displayed). */Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.const { server, username, password } = proxyCredentials(proxy);Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.find "$STAGE" -type f \( -name '*.pak' -o -name '*.dat' -o -name '*.bin' -o -name '*.json' \) -exec chmod 0644 {} +Fix: Request the narrowest permission that works; replace wildcards with the exact paths or hosts.…1), checked by actually drawing with them. | | `050-shadow-dom` | Closed shadow-root access (`Element::FakeShadowRoot()`; since 151 no longer exposed to pages, see `960`) …Fix: Remove the text that addresses the agent rather than the reader; describe behavior, do not instruct.proc = subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.// console.log(run.status, run.result?.output);Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.// A normal exit removes what a caller never closed ("exit" handlers must be synchronous). Ctrl-C, a killFix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.printf '#!/bin/sh\nexit 0\n' > "$VC_DIR/bin/HostX64/x64/cl.exe"; chmod +x "$VC_DIR/bin/HostX64/x64/cl.exe"Fix: Request the narrowest permission that works; replace wildcards with the exact paths or hosts.find "$STAGE/fonts" -type f -exec chmod 0644 {} +Fix: Request the narrowest permission that works; replace wildcards with the exact paths or hosts.…m a page hit a TLS-reflection endpoint and read the offered groups, e.g. fetch('https://tls.peet.ws/api/all').then(r=>r.json()).then(j=>j.tls) and inspect the supported_groups ext…Fix: Replace encoded or assembled strings with plain literals and remove undeclared network calls.chmod 0755 "$STAGE/chrome" "$STAGE/chrome-sandbox" "$STAGE/chrome_crashpad_handler"Fix: Request the narrowest permission that works; replace wildcards with the exact paths or hosts.Cost to the agent
Tokens estimated at four characters each. Skills load their instruction text when triggered; the figure is what that costs.
Known vulnerabilities
Vulnerability advisories (OSV) cover npm and PyPI packages; this registry has no advisory database.
What would make this Verified
12 points to 80 · weights: behavior 45%, static 25%, prompt 15%, publisher 15%- Unclaimed publisher≈ +8 on the totalClaim clearcotelabs: a verified publisher gets +50 on publisher trust. It is free and usually instant with GitHub sign-in.
- Auto-update or dynamic fetch configuration≈ +4 on the totalPin versions and sources; vendor anything fetched at install time.
- Credential pass-through configuration≈ +4 on the totalStop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.
- URL with embedded credentials≈ +4 on the totalStop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.
- Access to sensitive file paths≈ +4 on the totalStop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.
- Privileged sudo command≈ +4 on the totalBuild commands from fixed arguments; do not interpolate untrusted strings into a shell.