crawlio-browser 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,10 @@
1
+ {
2
+ "name": "crawlio-browser",
3
+ "description": "AI skills for browser automation — screenshots, clicks, network capture, framework detection via Chrome",
4
+ "version": "1.3.0",
5
+ "author": { "name": "Crawlio" },
6
+ "homepage": "https://crawlio.app/agent",
7
+ "repository": "https://github.com/Crawlio-app/crawlio-browser-mcp",
8
+ "license": "MIT",
9
+ "keywords": ["browser-automation", "chrome", "cdp", "mcp", "agent-skills", "screenshots"]
10
+ }
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Crawlio
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,508 @@
1
+ # Crawlio Agent
2
+
3
+ MCP server that gives AI full control of a live Chrome browser via CDP. 89 browser tools + framework-aware intelligence — captures what static crawlers can't see.
4
+
5
+ [![npm version](https://img.shields.io/npm/v/crawlio-browser)](https://www.npmjs.com/package/crawlio-browser)
6
+ [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
7
+
8
+ ## When to use Crawlio Agent
9
+
10
+ Use Crawlio Agent when your AI needs to interact with a **real browser** — SPAs, authenticated pages, dynamic content, JS-rendered frameworks. Unlike headless browser tools, Crawlio Agent connects to **your actual Chrome** via a lightweight extension, giving the AI access to your logged-in sessions, cookies, and full browser state.
11
+
12
+ **Crawlio Agent vs Playwright MCP:** Playwright MCP launches a headless browser. Crawlio Agent connects to your existing Chrome — no separate browser process, no login flows, full access to your tabs and sessions.
13
+
14
+ ## Quick Start
15
+
16
+ 1. Install the [Chrome Extension](https://crawlio.app/agent)
17
+ 2. Run setup:
18
+ ```bash
19
+ npx crawlio-browser setup
20
+ ```
21
+
22
+ That's it. Auto-detects and configures Claude Code, Cursor, VS Code, Codex,
23
+ Claude Desktop, and 9 more MCP clients. Starts a persistent background server.
24
+
25
+ ### Manual setup (any client)
26
+
27
+ If you prefer manual configuration or use `add-mcp`:
28
+
29
+ ```bash
30
+ # Start the server
31
+ npx crawlio-browser --portal
32
+
33
+ # Configure your client (auto-detects 14 clients)
34
+ npx add-mcp http://127.0.0.1:3001/mcp --name crawlio-browser -g
35
+ ```
36
+
37
+ ### Add Crawlio skills (optional)
38
+
39
+ ```bash
40
+ npx crawlio-browser setup --plugin
41
+ ```
42
+
43
+ Installs slash commands for Claude Code: `/crawlio:crawl-site`, `/crawlio:audit-site`,
44
+ `/crawlio:observe`, `/crawlio:finding`, `/crawlio:extract-and-export`
45
+
46
+ <details>
47
+ <summary><b>Per-client manual config</b></summary>
48
+
49
+ **Claude Desktop** — add to `claude_desktop_config.json`:
50
+ ```json
51
+ { "mcpServers": { "crawlio-browser": { "command": "npx", "args": ["-y", "crawlio-browser"] } } }
52
+ ```
53
+
54
+ **Claude Code (Portal Mode)** — start `npx crawlio-browser --portal`, then add to `.mcp.json`:
55
+ ```json
56
+ { "mcpServers": { "crawlio-browser": { "type": "http", "url": "http://127.0.0.1:3001/mcp" } } }
57
+ ```
58
+
59
+ **Claude Code (stdio):**
60
+ ```bash
61
+ claude mcp add crawlio-browser -- npx -y crawlio-browser
62
+ ```
63
+
64
+ **Cursor** — add to `.cursor/mcp.json`:
65
+ ```json
66
+ { "mcpServers": { "crawlio-browser": { "command": "npx", "args": ["-y", "crawlio-browser"] } } }
67
+ ```
68
+
69
+ **Windsurf** — add to Windsurf Settings > MCP:
70
+ ```json
71
+ { "mcpServers": { "crawlio-browser": { "command": "npx", "args": ["-y", "crawlio-browser"] } } }
72
+ ```
73
+
74
+ **Cline (VS Code)** — add to `settings.json`:
75
+ ```json
76
+ { "cline.mcpServers": { "crawlio-browser": { "command": "npx", "args": ["-y", "crawlio-browser"] } } }
77
+ ```
78
+
79
+ **ChatGPT Desktop** — Settings > Integrations > MCP:
80
+ URL: `http://127.0.0.1:3001/mcp` | Type: Streamable HTTP
81
+
82
+ </details>
83
+
84
+ ## How It Works
85
+
86
+ ```
87
+ AI Client (stdio) ──► MCP Server (Node.js) ──► Chrome Extension (MV3)
88
+ crawlio-browser WebSocket → CDP
89
+ ```
90
+
91
+ The MCP server communicates with the Chrome extension via WebSocket. The extension controls the browser through Chrome DevTools Protocol — the same protocol used by Chrome DevTools and Playwright.
92
+
93
+ ## Architecture: JIT Context Runtime
94
+
95
+ The execution runtime is built on four pillars that separate it from stateless cloud sandboxes:
96
+
97
+ - **Attention Dilution Cure** — 3 tools (`search`, `execute`, `connect_tab`) instead of 89. The agent discovers capabilities on demand through `search`, keeping the context window clean and tool selection accurate.
98
+ - **Polymorphic Context** — Before code executes, the runtime probes the browser for framework signatures and injects a shape-shifting `smart` object with framework-native accessors (React, Vue, Next.js, Shopify, etc. — 17 namespaces across 4 tiers).
99
+ - **Deterministic Execution** — Every `smart.click()` runs an actionability check (visibility, dimensions, enabled state, overlay detection) with progressive backoff, then enforces a post-action settle delay (500ms/300ms/1000ms).
100
+ - **Agentic REPL** — The runtime maintains a persistent connection to the browser. When a script fails, the browser state is preserved — the agent reads the structured error and iterates against the same live session.
101
+
102
+ ```
103
+ execute call lifecycle:
104
+ search → discover capabilities
105
+ detect → probe DOM for active frameworks
106
+ inject → build polymorphic smart object
107
+ run → execute with actionability checks + settle delays
108
+ return → result or structured error (browser state preserved)
109
+ ```
110
+
111
+ [Read the full architecture guide &rarr;](https://docs.crawlio.app/browser-agent/jit-context-runtime)
112
+
113
+ ## Two Modes
114
+
115
+ ### Full Mode (89 tools)
116
+
117
+ The default. Every tool is exposed directly to the LLM — navigate, click, type, screenshot, capture network, detect frameworks, and more. Mutative tools (`browser_click`, `browser_type`, `browser_navigate`, `browser_select_option`) include **auto-settling**: Playwright-inspired actionability checks, progressive backoff, and post-action DOM stability waiting.
118
+
119
+ ### Code Mode (3 tools)
120
+
121
+ For token-constrained environments. Collapses 89 tools into 3 high-level tools with ~95% schema token reduction:
122
+
123
+ ```json
124
+ {
125
+ "mcpServers": {
126
+ "crawlio-browser": {
127
+ "command": "npx",
128
+ "args": ["-y", "crawlio-browser", "--code-mode"]
129
+ }
130
+ }
131
+ }
132
+ ```
133
+
134
+ | Tool | Description |
135
+ |------|-------------|
136
+ | `search` | Discover available commands by keyword |
137
+ | `execute` | Run async JS with `bridge`, `crawlio`, `smart`, and `sleep` in scope |
138
+ | `connect_tab` | Connect to a browser tab |
139
+
140
+ ```javascript
141
+ // Navigate and screenshot
142
+ await bridge.send({ type: 'browser_navigate', url: 'https://example.com' }, 30000);
143
+ await sleep(2000);
144
+ const screenshot = await bridge.send({ type: 'take_screenshot' }, 10000);
145
+ return screenshot;
146
+ ```
147
+
148
+ ## Smart Object
149
+
150
+ In Code Mode, the `smart` object provides framework-aware helpers with auto-waiting and actionability checks.
151
+
152
+ ### Core Methods
153
+
154
+ | Method | Description |
155
+ |--------|-------------|
156
+ | `smart.evaluate(expression)` | Execute JS in the page via CDP |
157
+ | `smart.click(selector, opts?)` | Auto-waiting click with 500ms settle |
158
+ | `smart.type(selector, text, opts?)` | Auto-waiting type with 300ms settle |
159
+ | `smart.navigate(url, opts?)` | Navigate with 1000ms settle |
160
+ | `smart.waitFor(selector, timeout?)` | Poll until element is actionable |
161
+ | `smart.snapshot()` | Accessibility tree snapshot |
162
+
163
+ ### Framework Namespaces
164
+
165
+ When a framework is detected, the smart object exposes framework-specific helpers:
166
+
167
+ <details>
168
+ <summary><b>React</b> — <code>smart.react</code></summary>
169
+
170
+ | Method | Returns |
171
+ |--------|---------|
172
+ | `getVersion()` | Version string and bundle type |
173
+ | `getRootCount()` | Number of React root components |
174
+ | `hasProfiler()` | Whether profiler is available |
175
+ | `isHookInstalled()` | Whether DevTools hook is installed |
176
+
177
+ </details>
178
+
179
+ <details>
180
+ <summary><b>Vue.js</b> — <code>smart.vue</code></summary>
181
+
182
+ | Method | Returns |
183
+ |--------|---------|
184
+ | `getVersion()` | Vue version string |
185
+ | `getAppCount()` | Number of Vue app instances |
186
+ | `getConfig()` | App config object |
187
+ | `isDevMode()` | Whether DevTools is enabled |
188
+
189
+ </details>
190
+
191
+ <details>
192
+ <summary><b>Angular</b> — <code>smart.angular</code></summary>
193
+
194
+ | Method | Returns |
195
+ |--------|---------|
196
+ | `getVersion()` | ng-version attribute value |
197
+ | `isDebugMode()` | Whether debug APIs available |
198
+ | `isIvy()` | Whether Ivy compiler is active |
199
+ | `getRootCount()` | Number of Angular root elements |
200
+ | `getState()` | Full state object |
201
+
202
+ </details>
203
+
204
+ <details>
205
+ <summary><b>Svelte</b> — <code>smart.svelte</code></summary>
206
+
207
+ | Method | Returns |
208
+ |--------|---------|
209
+ | `getVersion()` | Svelte version string |
210
+ | `getMeta()` | Svelte metadata object |
211
+ | `isDetected()` | Whether Svelte is detected |
212
+
213
+ </details>
214
+
215
+ <details>
216
+ <summary><b>Redux</b> — <code>smart.redux</code></summary>
217
+
218
+ | Method | Returns |
219
+ |--------|---------|
220
+ | `isInstalled()` | Whether Redux DevTools is installed |
221
+ | `getStoreState()` | Full store state |
222
+
223
+ </details>
224
+
225
+ <details>
226
+ <summary><b>Alpine.js</b> — <code>smart.alpine</code></summary>
227
+
228
+ | Method | Returns |
229
+ |--------|---------|
230
+ | `getVersion()` | Alpine version string |
231
+ | `getStoreKeys()` | Store object keys |
232
+ | `getComponentCount()` | Count of `[x-data]` components |
233
+
234
+ </details>
235
+
236
+ <details>
237
+ <summary><b>Next.js</b> — <code>smart.nextjs</code></summary>
238
+
239
+ | Method | Returns |
240
+ |--------|---------|
241
+ | `getData()` | `__NEXT_DATA__` object |
242
+ | `getRouter()` | Router state (pathname, query, asPath) |
243
+ | `getSSRMode()` | SSR mode (hybrid, app-router, static) |
244
+ | `getRouteManifest()` | Current page data |
245
+
246
+ </details>
247
+
248
+ <details>
249
+ <summary><b>Nuxt</b> — <code>smart.nuxt</code></summary>
250
+
251
+ | Method | Returns |
252
+ |--------|---------|
253
+ | `getData()` | `__NUXT__` object |
254
+ | `getConfig()` | App config |
255
+ | `isSSR()` | Whether server-rendered |
256
+
257
+ </details>
258
+
259
+ <details>
260
+ <summary><b>Remix</b> — <code>smart.remix</code></summary>
261
+
262
+ | Method | Returns |
263
+ |--------|---------|
264
+ | `getContext()` | `__remixContext` object |
265
+ | `getRouteData()` | Loader data from state |
266
+
267
+ </details>
268
+
269
+ <details>
270
+ <summary><b>Shopify</b> — <code>smart.shopify</code></summary>
271
+
272
+ | Method | Returns |
273
+ |--------|---------|
274
+ | `getShop()` | Shop metadata (theme, locale, currency) |
275
+ | `getCart()` | Shopping cart object |
276
+
277
+ </details>
278
+
279
+ <details>
280
+ <summary><b>WordPress</b> — <code>smart.wordpress</code></summary>
281
+
282
+ | Method | Returns |
283
+ |--------|---------|
284
+ | `isWP()` | Whether WordPress is present |
285
+ | `getRestUrl()` | REST API endpoint |
286
+ | `getPlugins()` | List of active plugins |
287
+
288
+ </details>
289
+
290
+ <details>
291
+ <summary><b>More frameworks</b> — Gatsby, WooCommerce, Laravel, Django, Drupal, jQuery</summary>
292
+
293
+ | Namespace | Methods |
294
+ |-----------|---------|
295
+ | `smart.gatsby` | `getData()`, `getPageData()` |
296
+ | `smart.woocommerce` | `getParams()` |
297
+ | `smart.laravel` | `getCSRF()` |
298
+ | `smart.django` | `getCSRF()` |
299
+ | `smart.drupal` | `getSettings()` |
300
+ | `smart.jquery` | `getVersion()` |
301
+
302
+ </details>
303
+
304
+ ## Auto-Settling
305
+
306
+ Mutative tools (`browser_click`, `browser_type`, `browser_navigate`, `browser_select_option`) use Playwright-inspired actionability checks:
307
+
308
+ 1. **Pre-flight**: Polls element visibility, stability, and enabled state before acting
309
+ 2. **Action**: Dispatches the CDP command
310
+ 3. **Post-settle**: Waits for DOM mutations to quiesce with progressive backoff `[0, 20, 100, 100, 500]ms`
311
+
312
+ This means the AI doesn't need to manually add `sleep()` or `waitFor()` calls between actions — the tools handle SPA rendering delays automatically.
313
+
314
+ ## Framework Detection
315
+
316
+ Detects **64 technologies** across 4 tiers using globals, DOM markers, meta tags, HTTP headers, and script URLs:
317
+
318
+ | Tier | Frameworks | Signal Strength |
319
+ |------|-----------|----------------|
320
+ | **Meta-frameworks** | Next.js, Nuxt, SvelteKit, Remix, Gatsby | Unique globals + parent detection |
321
+ | **Core** | React, Vue.js, Angular, Svelte, Astro, Qwik, SolidJS, Lit, Preact | Globals + DOM markers |
322
+ | **CMS & Platforms** | WordPress, Shopify, Webflow, Squarespace, Wix, Drupal, Magento, Ghost, Bubble | Meta tags + globals |
323
+ | **Libraries & Tools** | jQuery, Bootstrap, Tailwind CSS, Alpine.js, HTMX, Turbo, Stencil, Redux, Ember.js, Backbone.js | DOM + globals |
324
+
325
+ Multi-framework detection returns a **primary** framework (meta-framework takes priority) plus a `subFrameworks` array for the full stack.
326
+
327
+ ## Tools Reference
328
+
329
+ ### Connection & Status
330
+
331
+ | Tool | Description |
332
+ |------|-------------|
333
+ | `connect_tab` | Connect to a browser tab by URL, tab ID, or active tab |
334
+ | `disconnect_tab` | Disconnect from the current tab |
335
+ | `list_tabs` | List all open tabs with IDs and URLs |
336
+ | `get_connection_status` | Check CDP connection state |
337
+ | `reconnect_tab` | Force reconnect to fix stale connections |
338
+ | `get_capabilities` | List all tools and their availability |
339
+
340
+ ### Page Capture
341
+
342
+ | Tool | Description |
343
+ |------|-------------|
344
+ | `capture_page` | Full capture: framework + network + console + DOM |
345
+ | `detect_framework` | Detect JS framework and version |
346
+ | `start_network_capture` | Start recording network requests |
347
+ | `stop_network_capture` | Stop recording and return captured requests |
348
+ | `get_console_logs` | Get console logs (errors, warnings, info) |
349
+ | `get_cookies` | Get cookies (sensitive values redacted) |
350
+ | `get_dom_snapshot` | Simplified DOM tree with shadow DOM and iframe support |
351
+ | `take_screenshot` | Screenshot as base64 PNG |
352
+ | `get_response_body` | Get response body for a captured network request |
353
+
354
+ ### Navigation & Interaction
355
+
356
+ | Tool | Description |
357
+ |------|-------------|
358
+ | `browser_navigate` | Navigate to a URL (auto-settle) |
359
+ | `browser_click` | Click element by CSS selector (auto-settle, left/right/middle, modifiers) |
360
+ | `browser_double_click` | Double-click element |
361
+ | `browser_type` | Type text into element (auto-settle) |
362
+ | `browser_press_key` | Press keyboard key (Enter, Tab, Escape, shortcuts) |
363
+ | `browser_hover` | Hover over element |
364
+ | `browser_select_option` | Select `<option>` by value (auto-settle) |
365
+ | `browser_scroll` | Scroll page or element |
366
+ | `browser_drag` | Drag from one element to another |
367
+ | `browser_file_upload` | Upload files to `<input type="file">` |
368
+ | `browser_wait` | Wait N milliseconds |
369
+ | `browser_wait_for` | Wait for element state (visible, hidden, attached, detached) |
370
+
371
+ ### Network
372
+
373
+ | Tool | Description |
374
+ |------|-------------|
375
+ | `browser_intercept` | Block, modify headers, or mock responses for URL patterns |
376
+ | `emulate_network` | Throttle network (offline, 3G, 4G, WiFi presets) |
377
+ | `set_cache_disabled` | Disable/enable browser cache |
378
+ | `set_extra_headers` | Add custom headers to all requests |
379
+ | `get_websocket_connections` | List active WebSocket connections |
380
+ | `get_websocket_messages` | Get WebSocket message history |
381
+
382
+ ### Frames & Tabs
383
+
384
+ | Tool | Description |
385
+ |------|-------------|
386
+ | `get_frame_tree` | Get frame hierarchy (main + iframes) |
387
+ | `switch_to_frame` | Switch execution context to iframe |
388
+ | `switch_to_main_frame` | Switch back to main frame |
389
+ | `create_tab` | Create new tab with URL |
390
+ | `close_tab` | Close tab by ID |
391
+ | `switch_tab` | Focus a tab by ID |
392
+
393
+ ### Cookies & Storage
394
+
395
+ | Tool | Description |
396
+ |------|-------------|
397
+ | `set_cookie` | Set cookie (supports httpOnly via CDP) |
398
+ | `delete_cookies` | Delete cookies by name/domain/path |
399
+ | `get_storage` | Read localStorage or sessionStorage |
400
+ | `set_storage` | Write storage item |
401
+ | `clear_storage` | Clear all storage items |
402
+ | `get_databases` | List IndexedDB databases |
403
+ | `query_object_store` | Query IndexedDB object store |
404
+ | `clear_database` | Clear or delete IndexedDB database |
405
+
406
+ ### Dialogs
407
+
408
+ | Tool | Description |
409
+ |------|-------------|
410
+ | `get_dialog` | Get pending JS dialog (alert/confirm/prompt) |
411
+ | `handle_dialog` | Accept or dismiss dialog |
412
+
413
+ ### Emulation
414
+
415
+ | Tool | Description |
416
+ |------|-------------|
417
+ | `set_viewport` | Set viewport dimensions |
418
+ | `set_user_agent` | Override User-Agent string |
419
+ | `emulate_device` | Emulate device (iPhone, iPad, Pixel, Galaxy, Desktop) |
420
+ | `set_geolocation` | Override geolocation coordinates |
421
+ | `set_stealth_mode` | Anti-detection mode (opt-in, patches webdriver fingerprint) |
422
+
423
+ ### Security
424
+
425
+ | Tool | Description |
426
+ |------|-------------|
427
+ | `get_security_state` | TLS certificate details, protocol, cipher |
428
+ | `ignore_certificate_errors` | Ignore cert errors for staging environments |
429
+
430
+ ### Service Workers
431
+
432
+ | Tool | Description |
433
+ |------|-------------|
434
+ | `list_service_workers` | List all service worker registrations |
435
+ | `stop_service_worker` | Stop/unregister a service worker |
436
+ | `bypass_service_worker` | Bypass service workers for network requests |
437
+
438
+ ### DOM Manipulation
439
+
440
+ | Tool | Description |
441
+ |------|-------------|
442
+ | `set_outer_html` | Replace element's HTML |
443
+ | `set_attribute` | Set element attribute |
444
+ | `remove_attribute` | Remove element attribute |
445
+ | `remove_node` | Remove element from DOM |
446
+
447
+ ### CSS & JS Coverage
448
+
449
+ | Tool | Description |
450
+ |------|-------------|
451
+ | `start_css_coverage` / `stop_css_coverage` | Track which CSS rules are used |
452
+ | `start_js_coverage` / `stop_js_coverage` | Track which JS code is executed |
453
+ | `get_computed_style` | Get resolved CSS properties for element |
454
+ | `force_pseudo_state` | Force :hover, :focus, :active states |
455
+
456
+ ### Performance & Memory
457
+
458
+ | Tool | Description |
459
+ |------|-------------|
460
+ | `get_performance_metrics` | Chrome metrics + Web Vitals (LCP, CLS, FID) |
461
+ | `get_dom_counters` | Count DOM nodes, documents, event listeners |
462
+ | `force_gc` | Force garbage collection |
463
+ | `take_heap_snapshot` | V8 heap snapshot summary |
464
+
465
+ ### PDF & Accessibility
466
+
467
+ | Tool | Description |
468
+ |------|-------------|
469
+ | `print_to_pdf` | Generate PDF (custom paper, margins, orientation) |
470
+ | `get_accessibility_tree` | Accessibility tree for screen-reader audit |
471
+
472
+ ### Targets & Contexts
473
+
474
+ | Tool | Description |
475
+ |------|-------------|
476
+ | `get_targets` | List all Chrome targets (pages, workers, extensions) |
477
+ | `attach_to_target` | Attach CDP session to any target |
478
+ | `create_browser_context` | Create isolated (incognito-like) context |
479
+
480
+ ### Visual Debug
481
+
482
+ | Tool | Description |
483
+ |------|-------------|
484
+ | `highlight_element` | Highlight element with colored overlay |
485
+ | `show_layout_shifts` | Visualize CLS regions |
486
+ | `show_paint_rects` | Visualize paint/repaint areas |
487
+
488
+ ### Crawlio App Integration
489
+
490
+ > Optional — requires [Crawlio.app](https://crawlio.app) running locally.
491
+
492
+ | Tool | Description |
493
+ |------|-------------|
494
+ | `extract_site` | Start a Crawlio crawl of the active tab's URL |
495
+ | `get_crawl_status` | Get crawl progress and status |
496
+ | `get_enrichment` | Get browser enrichment data |
497
+ | `get_crawled_urls` | Get crawled URLs with status and pagination |
498
+ | `enrich_url` | Navigate + capture + submit enrichment in one call |
499
+
500
+ ## Requirements
501
+
502
+ - **Node.js** >= 18
503
+ - **Chrome** (or Chromium) with the [Crawlio Agent extension](https://crawlio.app/agent) installed
504
+ - **Crawlio.app** (optional) — for site crawling and enrichment
505
+
506
+ ## License
507
+
508
+ MIT
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env node
2
+
3
+ // Thin launcher for the Crawlio Browser MCP server.
4
+ // Forwards all arguments (e.g., --code-mode) to the bundled server.
5
+ import "../dist/mcp-server/index.js";
@@ -0,0 +1,30 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __commonJS = (cb, mod) => function __require() {
8
+ return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
19
+ // If the importer is in node compatibility mode or this is not an ESM
20
+ // file that has been converted to a CommonJS file using a Babel-
21
+ // compatible transform (i.e. "__esModule" has not been set), then set
22
+ // "default" to the CommonJS "module.exports" for node compatibility.
23
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
24
+ mod
25
+ ));
26
+
27
+ export {
28
+ __commonJS,
29
+ __toESM
30
+ };
@@ -0,0 +1,2 @@
1
+
2
+ export { }