
Crawlio Browser
app.crawlio由 crawlio.app 发布v1.11.0更新于 Oct 24, 2026
Bridge a live Chrome browser to your agent: 150 tools for capture, extraction, and observation.
概览
通过 CDP 把正在运行的 Chrome 浏览器接入 AI 助手,提供 150 个用于页面抓取、提取、交互与观察的工具。
- 可以做什么
- 连接并管理标签页、框架与 Chrome 配置文件
- 导航、点击、输入、滚动、拖拽和上传文件,并自动等待页面稳定
- 抓取页面、截图、DOM 快照、控制台日志、网络请求、Cookie 与存储
- 检查性能、无障碍、安全状态、CSS/JS 覆盖率与 Service Worker
- 拦截或模拟网络请求,模拟设备、网络状况与地理位置
- 录制会话并编译为自动化脚本,另有常驻页面监控与机器人训练数据包
- 适用场景
- 适合需要助手在真实且已打开的 Chrome 会话中操作,而非无头抓取的场景:站点审计、流程测试、前端行为调试,或采集静态爬虫看不到的证据。
- 运行要求
- 需要 Node.js 18 或更高版本、安装了 Crawlio for Chrome 扩展的 Chrome 或 Chromium,并通过初始化向导或手动配置本地 MCP 客户端。可选安装 Crawlio.app 以进行站点爬取与数据丰富,其本地令牌从 CRAWLIO_MCP_TOKEN 或本地令牌文件读取。
安装
在 SourceWeft 中
- 打开 控制台中的 Crawlio Browser,将其添加到工作区。
- 为需要使用其工具的对话启用该服务。
Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。
其他 MCP 客户端
参照 仓库 中的启动说明。
README
Crawlio Browser
Documentation | API Reference | Chrome Extension
MCP server that gives AI full control of a live Chrome browser via CDP. 150 tools with framework-aware intelligence, typed evidence infrastructure, tracking pixel analysis, technographic fingerprinting, SEO auditing, and confidence-tracked findings — captures what static crawlers can't see.
When to use Crawlio Browser
Use Crawlio Browser when your AI needs to interact with a real browser — SPAs, authenticated pages, dynamic content, JS-rendered frameworks. Unlike headless browser tools, Crawlio Browser connects to your actual Chrome via a lightweight extension, giving the AI access to your logged-in sessions, cookies, and full browser state.
Crawlio Browser vs headless browser tools: Headless tools launch a separate browser process. Crawlio Browser connects to your existing Chrome — no separate browser, no login flows, full access to your tabs and sessions.
[!WARNING] This is the trade-off, stated plainly: connecting your own Chrome is the feature, and it means an AI agent can act as you on every site you are logged into. It attaches Chrome's debugger to the tab you connect, so it can read cookies, storage, and page content for that session.
Review what you connect it to. Prefer a dedicated Chrome profile for agent work. Nothing is captured until you connect a tab, and you can see the exact tool surface before configuring anything by running
npx crawlio-browser tools. Sites can opt out with<meta name="crawlio-agent" content="disable">, which the extension honors.
Quick Start
- Install the Chrome Extension
- Run the init wizard:
That's it. Auto-detects and configures 14 MCP clients: Claude Code, Cursor, VS Code, Codex, Gemini CLI, Claude Desktop, ChatGPT Desktop, Windsurf, Cline, Zed, Goose, OpenCode, MCPorter, and Cline CLI.
Init wizard options
As an Agent Plugin
The package is also an Agent Plugins v1 plugin, so a conformant client
can load it directly instead of running the wizard — plugin.json at the root, the eleven skills
under skills/, and the MCP server declared in mcp.json.
The product-facing crawlio-* workflows are folded into the eleven shipped skills. The similarly
named definitions in agents/ remain repo-local development fixtures: they import src/evidence/*
and loops/*, neither of which is part of the npm runtime. They are excluded from package.json
instead of advertising a second, non-executable product surface.
Point the client at the installed package:
mcp.json resolves the server through ${PLUGIN_ROOT}/dist/mcp-server/index.js, which is why the
plugin has to be an installed package rather than an unpacked tarball — the server imports its
dependencies at runtime, so a bare extract starts and then dies without answering.
Inspecting what it exposes
Both are read-only and run without a browser, an extension, or a network connection — you can see the whole surface before you configure any client. The numbers come from the same builders the server registers, so they cannot disagree with what your client receives.
Transport Modes
Portal mode is recommended for Claude Code — the server persists across context compaction and session restarts. On macOS, --portal installs a launchd agent for auto-start on login.
Manual setup (any client)
Per-client manual config
Claude Desktop — add to claude_desktop_config.json:
Claude Code (Portal Mode) — start npx crawlio-browser --portal, then add to .mcp.json:
Claude Code (stdio):
Cursor — add to .cursor/mcp.json:
Windsurf — add to Windsurf Settings > MCP:
Cline (VS Code) — add to settings.json:
ChatGPT Desktop — Settings > Integrations > MCP:
URL: http://127.0.0.1:3001/mcp | Type: Streamable HTTP
How It Works
The MCP server communicates with the Chrome extension via WebSocket. The extension controls the browser through Chrome DevTools Protocol (CDP).
Capabilities
Framework-Aware Intelligence
Every execute call probes the browser for framework signatures and injects a shape-shifting smart object with framework-native accessors. React state, Vue reactivity, Next.js routing, Shopify cart data — 17 framework namespaces across 4 tiers, detected at runtime and rebuilt on every navigation. The AI doesn't query a generic DOM; it queries the framework's own data structures.
Evidence-Based Analysis
Method Mode adds higher-order methods and a typed evidence system on top of Code Mode. smart.extractPage() runs 7 parallel operations in a single call — page capture, performance metrics, security state, font detection, meta extraction, accessibility audit, and mobile-readiness check. Failed operations produce typed CoverageGap records instead of silent nulls. Findings created with smart.finding() get their confidence automatically adjusted when supporting data is missing. The result: structured, auditable research output with gap tracking and confidence propagation.
Session Recording & Replay
Record browser interactions as structured data, then compile them into reusable SKILL.md automations. 12 interaction tools are automatically intercepted during recording — clicks, typing, navigation, scrolling — each capturing args, result, timing, and page URL. One compileRecording() call converts the session into a deterministic automation script.
Robot Training
Capture human-guided browser demonstrations as replayable robot-training bundles. The default-mode
observe lifecycle starts an event-driven recorder inside the extension; collection keeps running
if the MCP process disconnects or restarts. On reconnection, training_stop exports the retained
run and materializes the complete 13-file RecordingBundle for replay and API synthesis. Full mode
keeps the existing robot_training_* names as compatibility aliases.
Page monitoring is resident for the same reason: an extension-owned background tab and Chrome alarm collect bounded ARIA snapshots while no MCP server is present. Training and monitor history share a 25 MiB local budget, with 20 completed training runs, 50 monitor jobs, 200 snapshots total, and 50 snapshots per monitor as count caps. Old completed data is evicted first; active work is never silently evicted. Work starts only through explicit MCP lifecycle actions; the same actions report status, stop collection, clear monitor snapshots, and—with an exact id plus explicit confirmation—delete a stopped training/recording record from Chrome while preserving its materialized files. The extension popup remains a connection and browser-access status surface. Storage values are keys-only unless the caller explicitly opts in. Monitor snapshots intentionally retain compact ARIA page text locally; starting a monitor should therefore be treated as consent to retain the visible content of that URL until it is cleared.
Auto-Settling & Actionability
Every mutative action (click, type, navigate, select_option) runs actionability checks before acting — polling visibility, dimensions, enabled state, and overlay detection. After the action, a progressive backoff settle delay ([0, 20, 100, 100, 500]ms) waits for DOM mutations to quiesce. The AI doesn't need manual sleep() calls between actions.
Several Tabs at Once
Any command that acts on a page takes an optional tabId from list_tabs. Omit it and the command runs on the connected tab, exactly as before; supply one and it runs on that tab instead, with the whole command surface available on each. Commands overlap, so two tabs can be driven at the same time:
Targeting a tab never changes which tab connect_tab points at, so an agent working several tabs cannot reassign the one a human is watching. Frame selection, coverage sessions, and framework detection are per tab. Network capture is the exception — it records one tab at a time and says which tab holds it rather than interleaving two.
Chrome Profiles
An extension instance is confined to its own Chrome profile and cannot see any other, so with Crawlio enabled in more than one, commands land in whichever profile connected first. list_profiles shows the profiles that have connected and which is being driven; switch_profile moves the connection to another. One profile is driven at a time — the released extension reconnects in the background, so switching back is immediate.
Profiles identify themselves with a UUID minted into their own extension storage. It distinguishes a profile without describing it: no account, no email, no path, and no additional permission.
Selecting a profile keeps cooperating extensions out of each other's way — it is not a security boundary, since the id is asserted by the extension rather than proved. The bridge's existing protections are unchanged: one extension at a time, and each must prove the server holds the real bridge token before anything executes.
Architecture
A layered execution architecture where each layer absorbs a category of complexity that would otherwise fall on the model. The model sees four primary tools and a clean SDK. Everything beneath that surface is the runtime absorbing reality.
The layer worth understanding is the one that assembles itself. Detection runs against the live page on first use, and the smart object is built to match what that page turned out to be — smart.react.* exists only where React does. Nothing about the target is known at startup, so the surface is composed per tab rather than declared up front.
What Each Layer Absorbs
Execution Lifecycle
- Discovery — Model calls
search("page capture performance")and gets documentation for relevant commands - Framework Detection — Runtime probes the live DOM, detects active frameworks, constructs polymorphic
smartobject with appropriate namespaces - Scope Assembly — Model's code is compiled into an async function with injected parameters:
bridge(the browser command channel),crawlio(HTTP client),sleep,TIMEOUTS,smart(7 core + 18 higher-order methods + up to 17 framework namespaces),compileRecording - Execution — Method Mode methods compose the lower layers:
extractPage()fires 7 parallelbridge.send()calls;click()runs the actionability engine;react.getVersion()evaluates framework-specific expressions - Error Recovery (Agentic REPL) — On failure, the browser stays in the exact state that produced the error. The model reads the structured error, adjusts, and calls
executeagain. Framework cache persists — no re-detection unless URL changed
Design Principles
- Absorb complexity downward — Every category of difficulty (connection management, DOM timing, framework detection, multi-step composition) is handled by the layer best equipped for it. The model only encounters the clean interface at the top.
- Shape the SDK to the target — The polymorphic context system detects what the page is and reshapes available methods to match. The model writes against a stable interface; the runtime adapts underneath.
- Preserve state across cycles — The tethered architecture means the model can fail, learn, and retry against the same live environment — transforming error handling from "restart from scratch" into "adjust and continue."
How It Compares
Code Mode is Cloudflare's idea and a good one: present tools as a typed API and let the model write code against it, because models have seen far more code than tool calls. Crawlio Browser applies that pattern to a target it was not built for — a live browser holding your session. This is an MCP server, not an alternative to MCP.
The row that matters is error recovery. An isolate is disposable by design — that is what makes it safe to run untrusted code, and it means a failure discards the state that caused it. Here execution is tethered to a real tab, so when code fails the browser is still sitting in exactly the situation that broke it: same scroll position, same modal, same half-filled form. The model reads the error and runs again against that. Neither approach is better in general; they are answers to different problems, and the sandboxing guarantees Cloudflare gets from V8 isolates are genuinely stronger than what a local async sandbox provides.
Read the full architecture guide →
Two Modes
Code Mode (4 primary tools) — default
Collapses 150 tools into four high-level tools, plus get_job_result,
list_jobs, and cancel_job for async execution — so tools/list reports
That makes the tools/list payload 85% smaller, measured by
serializing the result each mode actually returns rather than estimated from a tool count. Code
mode is not free: execute and search carry long descriptions, so the measured reduction is
smaller than a naive tools-only ratio suggests. Check it yourself — npx crawlio-browser tools --json prints both surfaces without connecting to anything.
Full Mode (150 tools)
Every tool exposed directly to the LLM. Enable with --full:
Smart Object
In Code Mode, the smart object provides framework-aware helpers with auto-waiting and actionability checks.
Core Methods
Higher-Order Methods
Typed Evidence
Methods for structured analysis findings with confidence propagation:
When a finding's dimension matches an active coverage gap, confidence is automatically capped:
Framework Namespaces
When a framework is detected, the smart object exposes framework-specific helpers:
React — smart.react
Vue.js — smart.vue
Angular — smart.angular
Svelte — smart.svelte
Redux — smart.redux
Alpine.js — smart.alpine
Next.js — smart.nextjs
Nuxt — smart.nuxt
Remix — smart.remix
Shopify — smart.shopify
WordPress — smart.wordpress
More frameworks — Gatsby, WooCommerce, Laravel, Django, Drupal, jQuery
Method Mode
Code Mode asks the model to write code. Method Mode gives that code a tested vocabulary:
18 higher-order methods that encode the multi-step patterns a modelwould otherwise improvise.
It is a domain layer over Code Mode, not a replacement: the tool surface does not change, the
model still sees the same four primary tools, and the same 182-command
catalog sits underneath. What changes is what happens inside execute.
The surface is assembled per page. Detection recognizes 64
frameworks and attaches up to 17 matching namespaces, so smart.react.*
exists only where React does — the model never has to ask what the page is built with, or guess
at hook paths and fiber internals to find out.
And because execution is tethered to a live tab rather than a disposable isolate, a failure leaves the browser in the exact state that produced it. The model reads the structured error and runs again against that state, rather than rebuilding the situation from scratch.
The Maturity Ladder
Architecture
Each layer up encodes more domain knowledge. bridge.send({ type: "capture_page" }) captures a page. smart.extractPage() captures a page AND runs performance metrics, security state, font detection, accessibility analysis, and mobile-readiness checks in parallel — seven operations, one call, graceful failure on supplementary data, typed gaps for anything that fails.
Evidence Infrastructure
Coverage Gaps — When supplementary operations in extractPage() fail, they don't silently return null. A typed gap is recorded with the dimension, reason, impact, and whether it reduces confidence on related findings:
Tool-Enforced Findings — smart.finding() validates every field at the tool level. The model cannot produce a finding without meeting the schema — it either returns a valid Finding or gets a clear error. Findings accumulate across execute calls within a session via smart.findings().
Session Aggregation — Findings and coverage gaps persist across execute calls. A model can make findings across multiple calls, then retrieve the full set with smart.findings(). Reset with smart.clearFindings().
End-to-End Example: Competitive Audit
Examples
Navigate, extract, and analyze
Mobile emulation + screenshot
Record and compile automation
Intercept and mock network
Session Recording
Record browser sessions as structured data, then compile them into reusable automation skills. 12 interaction tools are automatically intercepted during recording (click, type, navigate, scroll, etc.), capturing args, result, timing, and page URL.
In full mode, recording is available as 4 individual tools: start_recording, stop_recording, get_recording_status, and compile_recording.
Auto-Settling
Mutative tools (browser_click, browser_type, browser_navigate, browser_select_option) use actionability checks:
- Pre-flight: Polls element visibility, stability, and enabled state before acting
- Action: Dispatches the CDP command
- Post-settle: Waits for DOM mutations to quiesce with progressive backoff
[0, 20, 100, 100, 500]ms
This means the AI doesn't need to manually add sleep() or waitFor() calls between actions — the tools handle SPA rendering delays automatically.
Framework Detection
Detects 64 technologies across 4 tiers using globals, DOM markers, meta tags, HTTP headers, and script URLs:
Multi-framework detection returns a primary framework (meta-framework takes priority) plus a subFrameworks array for the full stack.
Tools Reference
The table below is a hand-written guide to the commonly used tools, not the complete set. For
the full, current surface — all 150 of them, read from the server itself —
run npx crawlio-browser tools --full.
Tool reference — Connection, Capture, Navigation, Network, Storage, Emulation, Tracking, SEO, and more
Connection & Status
Page Capture
Navigation & Interaction
Network
Frames & Tabs
Cookies & Storage
Dialogs
Emulation
Security
Service Workers
DOM Manipulation
CSS & JS Coverage
Performance & Memory
PDF & Accessibility
Targets & Contexts
Visual Debug
Session Recording
Robot Training
Crawlio App Integration
Optional — requires Crawlio.app running locally.
ControlServer authentication is automatic and local-only: the MCP reads CRAWLIO_MCP_TOKEN when
explicitly set, otherwise Crawlio.app's mode-0600 ~/Library/Logs/Crawlio/mcp.token, and sends it
only to the discovered 127.0.0.1 ControlServer. The value is never returned in MCP results or
written to logs.
Requirements
- Node.js >= 18
- Chrome (or Chromium) with the Crawlio for Chrome extension installed
- Crawlio.app (optional) — for site crawling and enrichment
Permission floor
The production extension has no standing host access. Its required permissions are debugger
(the CDP control plane), storage (bridge/session settings and durable resident metadata), and
alarms (reconnect, idle-release, and resident monitor wakeups). The dedicated onboarding page
asks once for every optional capability declared by the active build. In production that is tabs,
nativeMessaging, and http://127.0.0.1/*, covering tab discovery/adoption, authenticated local
token provisioning, and loopback bridge discovery.
Onboarding is the only surface that can open Chrome's permission prompt. The extension popup and
MCP tools only report missing access and route the user back to onboarding. connect_tab({url}),
agent-owned tabs, robot training, and resident monitoring can still create and control their own
tabs if the tabs metadata grant is denied. Crawlio does not request <all_urls>, activeTab,
tabGroups, or unlimitedStorage.
Build from Source
Build output lands in dist/mcp-server/ (ESM bundle) and dist/extension/ (the
unpacked MV3 extension).
To develop against the extension, build the dev variant and load it unpacked:
Then open chrome://extensions, enable Developer mode, choose Load unpacked,
and select dist/extension-dev. Reload the extension there after each rebuild.
Resources
Contributing
Contributions are welcome — see CONTRIBUTING.md for the build and development loop, and CODE_OF_CONDUCT.md for community expectations. Please report security vulnerabilities privately via SECURITY.md rather than in a public issue.
License
Apache-2.0 — see LICENSE.
The selector kernel in packages/selectors is MIT-licensed:
it contains code ported from Selector Forge (MIT) and Chromium DevTools
(BSD-3-Clause). See packages/selectors/LICENSE and
THIRD_PARTY_NOTICES.md for full attributions.
来源:README.md,提交 1aaed98
工具
0版本历史
1- v1.11.0最新Sep 16, 2026
评分
已满足适用检查项的 50%
该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。
- 近 30 天内可连通25 分
请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。
- 已声明认证方式10 分
请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。
- 已列出工具15 分
请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。
- 描述必需15 分
- 图标10 分
- 文档15 分
- 许可证10 分