{"name":"app.crawlio/crawlio-browser","slug":"crawlio-browser","title":null,"description":"Bridge a live Chrome browser to your agent: 150 tools for capture, extraction, and observation.","url":"https://mcp.market/server/crawlio-browser","rating":null,"grade":"C","score":66,"certified":false,"status":"active","category":"scraping","tags":["scraping","ai"],"presence":{"score":22,"stars":7,"forks":0,"downloads_week":null,"last_push_at":"2026-08-10T05:43:13.000Z","license":"Apache-2.0"},"uptime":null,"claimed":false,"transport":"npm","callable_via_gateway":false,"default_price_micros":0,"repository":"https://github.com/Crawlio-app/crawlio-browser","website":"https://www.crawlio.app/browser-agent","version":"1.11.0","remotes":[],"packages":[{"registryType":"npm","registryBaseUrl":"https://registry.npmjs.org","identifier":"crawlio-browser","version":"1.11.0","transport":{"type":"stdio"}}],"tools":[{"name":"agent_session_action","description":"Run one semantic action inside an agent-owned browser session without activating the tab. Prefer selector targets; refs from agent_session_snapshot also work for AX-backed elements. Supported actions include navigate, click, hover, insertText/type/fill, select, scroll, key/press/command, and evaluate.","write_action":true,"price_micros":0,"input_schema":null},{"name":"agent_session_artifacts","description":"List artifacts captured by an agent-owned browser session, including snapshots, screenshots, page summaries, and action logs. Payload data is omitted unless includeData=true.","write_action":false,"price_micros":0,"input_schema":null},{"name":"agent_session_batch","description":"Run a sequential batch of semantic actions inside an agent-owned browser session. Use this for background workflows that should keep running without the user watching the browser.","write_action":true,"price_micros":0,"input_schema":null},{"name":"agent_session_claim_tab","description":"Adopt an existing user tab into a logical agent session fleet so the agent can drive it. Rejects non-HTTP tabs and tabs already owned by another session. Requires tabs because it reads user-tab metadata.","write_action":false,"price_micros":0,"input_schema":null},{"name":"agent_session_close","description":"Close an agent-owned browser session. By default also closes its backing tab.","write_action":false,"price_micros":0,"input_schema":null},{"name":"agent_session_create","description":"Create an agent-owned browser session in a background tab. The session has its own ID and is not tied to the foreground connected tab. Actions use semantic DOM/CDP operations and do not activate the tab by default.","write_action":true,"price_micros":0,"input_schema":null},{"name":"agent_session_create_tab","description":"Open a new agent-owned tab inside a logical session fleet. The tab is created in the background and CDP-attached without disturbing the foreground connected tab. No optional permission is required.","write_action":true,"price_micros":0,"input_schema":null},{"name":"agent_session_finalize","description":"End an agent session by disposing of its tabs. keep[].status labels retained tabs as handoff or deliverable in the result. Agent-created tabs not kept are closed; adopted user tabs are released and never closed. No optional permission is required for already-owned tab IDs.","write_action":false,"price_micros":0,"input_schema":null},{"name":"agent_session_list","description":"List agent-owned browser sessions. By default returns active/error sessions and omits closed sessions.","write_action":false,"price_micros":0,"input_schema":null},{"name":"agent_session_name","description":"Set the title of an agent's logical session fleet. The name is retained in extension session state; Crawlio does not request Chrome's tabGroups permission.","write_action":false,"price_micros":0,"input_schema":null},{"name":"agent_session_snapshot","description":"Capture a snapshot from an agent-owned browser session without activating the tab. Modes: aria, screenshot, page, or all. ARIA snapshots populate refs for later agent_session_action calls.","write_action":false,"price_micros":0,"input_schema":null},{"name":"agent_session_status","description":"Get status for an agent-owned browser session, including tab metadata, action count, error state, and optional page summary/artifacts.","write_action":false,"price_micros":0,"input_schema":null},{"name":"browser_click","description":"Click an element on the active tab. Target by ref (from browser_snapshot, preferred) or CSS selector. Auto-waits for element to be visible and enabled before acting. Settles 500ms after action for SPA re-renders.","write_action":false,"price_micros":0,"input_schema":null},{"name":"browser_double_click","description":"Double-click on an element. Target by ref (from browser_snapshot, preferred) or CSS selector. Dispatches two click pairs with clickCount 1 then 2 (chromedriver pattern).","write_action":false,"price_micros":0,"input_schema":null},{"name":"browser_drag","description":"Drag from one element to another. Target by refs (from browser_snapshot, preferred) or CSS selectors. Simulates mousedown on source, interpolated mousemove steps to target, mouseup on target.","write_action":false,"price_micros":0,"input_schema":null},{"name":"browser_evaluate","description":"Execute a JavaScript expression in the page context and return the result. Useful for reading page state, checking values, or performing calculations.","write_action":true,"price_micros":0,"input_schema":null},{"name":"browser_file_upload","description":"Upload files to a file input element. The element must be an <input type='file'>. Files are specified by their absolute paths on the local machine.","write_action":true,"price_micros":0,"input_schema":null},{"name":"browser_fill_form","description":"Fill multiple form fields at once. Each field is targeted by ref (from browser_snapshot). Supports textbox, checkbox, radio, and combobox types. Returns post-fill snapshot.","write_action":false,"price_micros":0,"input_schema":null},{"name":"browser_hover","description":"Hover over an element on the active tab. Target by ref (from browser_snapshot, preferred) or CSS selector. Dispatches a mouseMoved event to the element's center coordinates.","write_action":false,"price_micros":0,"input_schema":null},{"name":"browser_intercept","description":"Intercept network requests on the active tab via CDP Fetch domain. Can block, modify headers, or mock responses for matching URL patterns. Call with action='disable' to stop interception.","write_action":false,"price_micros":0,"input_schema":null},{"name":"browser_navigate","description":"Navigate the active tab to a URL. Waits for page load to complete, then settles 1000ms for SPA hydration before returning.","write_action":false,"price_micros":0,"input_schema":null},{"name":"browser_press_key","description":"Press a keyboard key (Enter, Tab, Escape, ArrowDown, Backspace, etc.). Dispatches keyDown + keyUp events via CDP. Supports modifier keys.","write_action":false,"price_micros":0,"input_schema":null},{"name":"browser_scroll","description":"Scroll the page or scroll an element into view. Use ref (preferred) or selector to scroll an element into view. Use deltaX/deltaY for additional scroll offset after positioning. Returns post-scroll snapshot.","write_action":false,"price_micros":0,"input_schema":null},{"name":"browser_select_option","description":"Select an option in a <select> element by value. Target by ref (from browser_snapshot, preferred) or CSS selector. Auto-waits for element to be visible and enabled before acting. Settles 500ms after selection.","write_action":false,"price_micros":0,"input_schema":null},{"name":"browser_snapshot","description":"Capture accessibility snapshot of the current page. Returns a compact ARIA tree with ref strings (e.g., [ref=e1]) for interactive elements. Use refs with browser_click, browser_type, browser_hover to target elements without constructing CSS selectors. Refs are valid until the page navigates or significant DOM changes occur \\u2014 call browser_snapshot again after navigation. Options: interactive=t","write_action":false,"price_micros":0,"input_schema":null},{"name":"browser_type","description":"Type text into an editable element. Uses atomic Input.insertText by default (no double-character bugs on SPAs). Set slowly=true for per-character key events. Set submit=true to press Enter after typing.","write_action":false,"price_micros":0,"input_schema":null},{"name":"browser_wait","description":"Wait for a specified number of seconds (max 30). Useful for waiting for animations, network requests, or page transitions.","write_action":false,"price_micros":0,"input_schema":null},{"name":"browser_wait_for","description":"Wait for an element matching a CSS selector to reach a specific state. States: 'attached' (exists in DOM), 'visible' (visible and has dimensions), 'hidden' (not visible or not in DOM), 'detached' (removed from DOM). Returns when condition is met or timeout expires.","write_action":false,"price_micros":0,"input_schema":null},{"name":"cancel_picker","description":"Cancel an in-progress pick_element overlay on the connected tab and remove its highlight. Safe to call when no picker is active.","write_action":true,"price_micros":0,"input_schema":null},{"name":"capture_page","description":"Capture comprehensive browser data for the active tab: framework detection, network requests, console logs, and DOM snapshot. Optionally sends results to Crawlio.","write_action":false,"price_micros":0,"input_schema":null},{"name":"clear_storage","description":"Clear all localStorage or sessionStorage items for the current page.","write_action":false,"price_micros":0,"input_schema":null},{"name":"close_tab","description":"Close a browser tab by its ID. If the tab is currently connected for CDP capture, it will be disconnected first. Returns success/failure.","write_action":false,"price_micros":0,"input_schema":null},{"name":"connect_tab","description":"Pin a browser tab for subsequent commands and start CDP capture. Three modes: (1) provide a URL: with the optional tabs grant Crawlio reuses a match, otherwise it creates a fresh owned tab; (2) provide a tabId to adopt a specific existing tab (tabs grant required); (3) no args to discover and pin the active tab (tabs grant required). Pass background:true to avoid stealing the user's active tab/win","write_action":false,"price_micros":0,"input_schema":null},{"name":"create_tab","description":"Create a new browser tab with the given URL. Pass connect:true to auto-attach CDP and start capturing \\u2014 the tab is immediately ready for interaction (screenshot, evaluate, navigate, etc).","write_action":true,"price_micros":0,"input_schema":null},{"name":"delete_cookies","description":"Delete browser cookies matching the given criteria. At minimum, name is required. Optionally scope by domain and path.","write_action":true,"price_micros":0,"input_schema":null},{"name":"detect_framework","description":"Detect the JavaScript framework used by the active tab (Next.js, Nuxt, React, Vue, Svelte, Angular, Gatsby, Remix, Astro, etc.)","write_action":false,"price_micros":0,"input_schema":null},{"name":"diff_snapshot","description":"Compare the current ARIA snapshot against a previous one using Myers line-level diff. Returns a unified diff with addition/removal stats. If no baseline is provided, diffs against the last cached snapshot (from the most recent browser_snapshot call). Use this to verify interaction effects \\u2014 click a button, then diff to see what changed.","write_action":false,"price_micros":0,"input_schema":null},{"name":"disconnect_tab","description":"Disconnect from the current tab. Detaches CDP debugger, stops capture, and clears connection state. Safe to call even if not connected.","write_action":false,"price_micros":0,"input_schema":null},{"name":"emulate_device","description":"Emulate a specific device by name. Sets viewport, scale factor, user agent, and mobile flag to match the device. Supported: 'iPhone 14', 'iPhone 14 Pro Max', 'iPhone SE', 'iPad Pro 11', 'iPad Mini', 'Pixel 7', 'Galaxy S24', 'Desktop 1920x1080', 'Desktop 1440x900', 'Desktop 1366x768'.","write_action":false,"price_micros":0,"input_schema":null},{"name":"emulate_network","description":"Emulate network conditions (throttling). Use a preset name or custom values. Presets: offline, slow-3g, fast-3g, 4g, wifi. Call with no args to clear throttling.","write_action":false,"price_micros":0,"input_schema":null},{"name":"enrich_url","description":"Navigate to a URL, capture browser intelligence (framework, network, console, DOM), and send enrichment to Crawlio \\u2014 all in one call. Compound tool: connects tab if needed, navigates, waits for hydration, captures, and posts enrichment. Returns a compact summary (not the full capture).","write_action":false,"price_micros":0,"input_schema":null},{"name":"export_session_raw","description":"Export the active tab's cookies to ~/.crawlio/<domain>-session.json WITHOUT redaction, so you can reuse your own authenticated session across runs. Writes the raw CDP cookie array to disk \\u2014 the file contains live credentials, so treat it like a password and keep it out of version control. The output path is confined to your home directory. Optionally filter by a specific domain.","write_action":false,"price_micros":0,"input_schema":null},{"name":"extract_site","description":"Start a Crawlio crawl of the active tab's URL. Requires Crawlio to be running.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_accessibility_tree","description":"Get the accessibility tree (AXTree) of the current page. Returns a simplified tree with role, name, value, description, and children for each node. Useful for understanding page structure from a screen-reader perspective. Optionally limit depth to reduce output size.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_capabilities","description":"Report browser-bridge command availability for the current tab, CDP domains, and optional permissions. Shows which commands are available, use a fallback, or are unavailable.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_connection_status","description":"Get current connection state: whether a tab is connected, CDP debugger attached, MCP server connected, and capture status. Use to check if connect_tab is needed.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_console_logs","description":"Get console logs (errors, warnings, info, debug) from the active tab.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_cookies","description":"Get cookies for the active tab's page via CDP Network.getCookies with document.cookie fallback. Returns domain-scoped cookies with sensitive values (session, csrf, auth, jwt) redacted.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_crawl_status","description":"Get the current Crawlio crawl status \\u2014 engine state, progress counters, sequence number.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_crawled_urls","description":"Get URLs crawled by Crawlio with their status, content type, and size. Supports filtering by status (queued/downloading/completed/failed) and type (html/css/js/image). Returns paginated results.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_dialog","description":"Get the current pending JavaScript dialog (alert/confirm/prompt/beforeunload). Returns null if no dialog is open. Use handle_dialog to accept or dismiss it.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_dom_snapshot","description":"Get a simplified DOM snapshot of the active tab (strips script/style/svg, captures tag/attrs/text/children). Returns stats summary by default; set summarize=false for full tree.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_enrichment","description":"Get browser enrichment data stored in Crawlio for a URL (framework, network, console, DOM).","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_frame_tree","description":"Get the frame hierarchy of the current page. Returns all frames (main + iframes) with their IDs, URLs, names, and parent relationships. Use frameId with switch_to_frame to execute JS in a specific frame.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_performance_metrics","description":"Get performance metrics for the current page. Includes Chrome's built-in metrics (DOM nodes, JS heap, layout counts, script duration) and Web Vitals (LCP, CLS, FID). Useful for performance auditing and optimization.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_response_body","description":"Get the response body for a network request by URL or requestId. The request must have been captured during the current network capture session. Returns body as text (HTML/JSON/CSS) or base64 (binary content like images).","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_security_state","description":"Get the current page's security state including TLS certificate details, protocol, cipher, and mixed content status.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_storage","description":"Read localStorage or sessionStorage items for the current page. Returns all items as key-value pairs, or a single item if key is specified.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_user_tabs","description":"List all of the user's open tabs across every window, most-recently-accessed first, with window and tab-group membership. Broader than list_tabs (includes non-HTTP and ungrouped tabs). Requires the tabs permission.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_websocket_connections","description":"List all WebSocket connections observed since network capture started. Shows connection URL, status (connecting/open/closed/error), and message count. Requires active network capture.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_websocket_messages","description":"Get WebSocket messages for a specific connection or all connections. Returns message direction (sent/received), opcode, data payload, and timestamp.","write_action":false,"price_micros":0,"input_schema":null},{"name":"handle_dialog","description":"Accept or dismiss the current JavaScript dialog. For 'prompt' dialogs, optionally provide text to enter. For 'beforeunload' dialogs, accept=true allows navigation, accept=false stays on page.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ignore_certificate_errors","description":"Enable or disable ignoring certificate errors. When enabled, self-signed and expired certificates will not block navigation. Useful for testing staging environments.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_profiles","description":"List the Chrome profiles that have connected to this server, marking which one currently holds the browser connection. A profile appears once its extension has connected at least once \\u2014 Chrome gives an extension no way to see other profiles, so a profile that has never connected is invisible here.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_service_workers","description":"List all service worker registrations for the current page. Shows scope URL, script URL, running status, and lifecycle state.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_tabs","description":"List all open HTTP/HTTPS browser tabs with their IDs, URLs, titles, and which tab is currently connected. Use this to discover tab IDs for connect_tab.","write_action":false,"price_micros":0,"input_schema":null},{"name":"monitor_page","description":"Manage extension-resident page monitoring. start creates an extension-owned background tab, captures a compact ARIA baseline, and schedules Chrome-alarm recaptures that continue with no MCP server connected. status/results query retained local data; stop ends collection; clear deletes a monitor and its snapshots. Data is bounded and managed through these explicit lifecycle actions; no additional C","write_action":false,"price_micros":0,"input_schema":null},{"name":"pick_element","description":"Interactive element picker (extension-only \\u2014 needs a human at the tab). Injects a hover-highlight overlay into the connected page; the user clicks an element and the tool returns a VERIFIED selector plus the 5-rail SelectorBundle (xpath/attribute/classChain/textContent/rolePlusText) forged by the @crawlio/selectors kernel and gated by resolvesExactlyTo. Set multiple=true to pick a repeating s","write_action":false,"price_micros":0,"input_schema":null},{"name":"print_to_pdf","description":"Generate a PDF of the current page. Returns base64-encoded PDF data. Supports landscape/portrait orientation, custom scale, margins, page ranges, paper size, and preset formats (letter, legal, tabloid, a3, a4, a5).","write_action":false,"price_micros":0,"input_schema":null},{"name":"reconnect_tab","description":"Force reconnect to the connected tab \\u2014 detach CDP debugger and reattach, re-enabling all domains. Use when tools fail with stale connection or timeout errors.","write_action":false,"price_micros":0,"input_schema":null},{"name":"recording_artifacts","description":"List files in a canonical RecordingBundle directory without loading large bodies into the MCP response.","write_action":false,"price_micros":0,"input_schema":null},{"name":"recording_capture_bundle","description":"One-shot background canonical capture for automated flows: opens an owned tab without taking focus, starts a bundle, optionally waits for network idle, then stops and writes RecordingBundle v1 artifacts. For human demos prefer recording_start then recording_stop.","write_action":false,"price_micros":0,"input_schema":null},{"name":"recording_clear","description":"Delete one stopped canonical recording's extension-retained record while preserving every materialized RecordingBundle file. Requires explicit confirmation; stop an active recording first.","write_action":true,"price_micros":0,"input_schema":null},{"name":"recording_start","description":"Start an extension-resident canonical RecordingBundle v1 capture. Collection and bounded retention continue without an MCP process; this compatibility tool writes manifest.json and later materializes the resident export.","write_action":false,"price_micros":0,"input_schema":null},{"name":"recording_status","description":"Report active canonical RecordingBundle captures and the underlying browser recording status.","write_action":false,"price_micros":0,"input_schema":null},{"name":"recording_stop","description":"Stop a canonical RecordingBundle capture. Dumps stateLog first, stops recording, fetches response bodies by requestId while CDP Network is still enabled, then stops network capture and writes all bundle artifacts.","write_action":false,"price_micros":0,"input_schema":null},{"name":"recording_validate_bundle","description":"Validate that a canonical RecordingBundle directory contains the required v1 artifacts.","write_action":false,"price_micros":0,"input_schema":null},{"name":"replay_request","description":"Re-fire a previously captured network request with optional modifications. Requires active network capture. Specify the request by URL. Optionally override headers, body, or method. Returns the new response status, headers, and body. Useful for API testing, auth token replay, and form submission testing.","write_action":false,"price_micros":0,"input_schema":null},{"name":"robot_training_artifacts","description":"List files in a robot-training artifact directory. Use after robot_training_stop to discover recording, network, body, state, and flows.jsonl files for robot training or OpenAPI synthesis.","write_action":false,"price_micros":0,"input_schema":null},{"name":"robot_training_clear","description":"Delete one stopped/interrupted/error robot-training record from the extension's bounded IndexedDB retention. Requires explicit confirmation and never deletes canonical artifact files. Active runs must be stopped first.","write_action":true,"price_micros":0,"input_schema":null},{"name":"robot_training_start","description":"Start an extension-resident robot-training run. Chrome owns the event monitor, recording state, and bounded IndexedDB retention, so collection continues while MCP is disconnected or restarted. The server writes an initial manifest and later materializes the resident capture as a canonical bundle.","write_action":false,"price_micros":0,"input_schema":null},{"name":"robot_training_status","description":"Query extension-owned robot-training runs and recording state. Status survives MCP server restarts and reports whether a retained bundle is available.","write_action":false,"price_micros":0,"input_schema":null},{"name":"robot_training_stop","description":"Stop an extension-resident robot-training run, fetch its bounded/redacted export, and materialize the complete 13-file RecordingBundle: manifest/raw dump, recording, network, bodies, state log/state, flows, causal graph/markdown, recipe, registry, and a captured-endpoint OpenAPI draft that requires validation. The extension fetches response bodies before its Network domain is stopped.","write_action":false,"price_micros":0,"input_schema":null},{"name":"semantic_classify","description":"Classify text against caller-provided labels using Crawlio's local semantic grounding seam. Provider outputs are advisory and provenance-stamped.","write_action":false,"price_micros":0,"input_schema":null},{"name":"semantic_find","description":"Find page candidate refs for a natural-language query using Crawlio's local semantic grounding seam. Provider outputs are advisory and include provenance; they do not authorize actions.","write_action":false,"price_micros":0,"input_schema":null},{"name":"set_cache_disabled","description":"Enable or disable browser cache. When disabled, the browser will not serve cached resources.","write_action":false,"price_micros":0,"input_schema":null},{"name":"set_cookie","description":"Set a browser cookie. Requires name, value, and domain at minimum. The cookie is set via CDP Network.setCookie, not document.cookie, so httpOnly cookies can be set.","write_action":false,"price_micros":0,"input_schema":null},{"name":"set_extra_headers","description":"Set extra HTTP headers to be sent with every request. Pass an empty object to clear. Useful for auth tokens, custom X-headers, A/B test variants.","write_action":false,"price_micros":0,"input_schema":null},{"name":"set_geolocation","description":"Override the browser's geolocation. Affects navigator.geolocation.getCurrentPosition() and watchPosition(). Pass no arguments to clear the override and revert to real location.","write_action":false,"price_micros":0,"input_schema":null},{"name":"set_stealth_mode","description":"Enable or disable anti-detection stealth mode. When enabled, patches navigator.webdriver, plugins, WebGL renderer, and other automation signals to avoid bot detection. Disabled by default. Call with enabled: true to activate.","write_action":false,"price_micros":0,"input_schema":null},{"name":"set_storage","description":"Set a localStorage or sessionStorage item for the current page.","write_action":false,"price_micros":0,"input_schema":null},{"name":"set_user_agent","description":"Override the browser's User-Agent string. Affects all subsequent requests and navigator.userAgent.","write_action":false,"price_micros":0,"input_schema":null},{"name":"set_viewport","description":"Set the browser viewport dimensions. Affects page layout and media queries. Does not affect the actual browser window size.","write_action":false,"price_micros":0,"input_schema":null},{"name":"start_network_capture","description":"Start capturing network requests on the active tab via Chrome DevTools Protocol. Call stop_network_capture to retrieve results.","write_action":false,"price_micros":0,"input_schema":null},{"name":"stop_network_capture","description":"Stop network capture and return all captured requests with timing, size, and type information.","write_action":false,"price_micros":0,"input_schema":null},{"name":"switch_profile","description":"Move the browser connection to another Chrome profile. One profile is driven at a time; this chooses which. The current profile's extension is released and reconnects in the background, so switching back is immediate. Pass no profileId to clear the preference and accept whichever profile connects first.","write_action":false,"price_micros":0,"input_schema":null},{"name":"switch_tab","description":"Switch browser focus to a specific tab by its ID. Makes the tab active/visible. Does NOT connect CDP \\u2014 use connect_tab after switching if needed.","write_action":false,"price_micros":0,"input_schema":null},{"name":"switch_to_frame","description":"Switch execution context to a specific frame by its frameId (from get_frame_tree). Subsequent browser_evaluate, browser_click, browser_type, and browser_wait_for calls will run in this frame until switched back.","write_action":false,"price_micros":0,"input_schema":null},{"name":"switch_to_main_frame","description":"Switch execution context back to the main (top-level) frame. Use after switch_to_frame to return to the main page context.","write_action":false,"price_micros":0,"input_schema":null},{"name":"take_screenshot","description":"Capture the viewport, full page, or one CSS-selected element. JPEG is the bounded default; request PNG when lossless output matters. If a PNG exceeds the response budget, capture falls back to JPEG and reports its actual MIME type.","write_action":false,"price_micros":0,"input_schema":null}],"scan":{"score":66,"grade":"C","scanned_at":"2026-09-23T21:40:03.045Z","report":{"scannerVersion":"0.1.9","scannedAt":"2026-09-23T21:40:02.945Z","components":{"code":{"score":13,"max":25,"notes":["47 source files scanned"]},"reliability":{"score":-1,"max":20,"notes":["no gateway calls yet and no remote to probe"]},"poisoning":{"score":-1,"max":15,"notes":["tools not inspected (local package is not executed); not counted"]},"auth":{"score":12,"max":15,"notes":["local package, no credentials required"]},"maintenance":{"score":12,"max":15,"notes":["last push 45 days ago"]},"identity":{"score":6,"max":10,"notes":["namespace and repository owner differ","website matches verified namespace"]}},"findings":[{"id":"net.suspicious-host","severity":"high","component":"code","title":"Network call to a paste/tunnel/webhook host","evidence":"dist/mcp-server/chunk-KOSIYU6N.js: …\",meta:{generator:\"Yoast SEO\"},website:\"https://yoast.com\",implies:\"WordPress\"},\"Schema.org\":{…"}],"inputs":{"packages":[{"registryType":"npm","identifier":"crawlio-browser","version":"1.11.0","found":true,"license":"Apache-2.0","hasInstallScripts":false,"dependencyCount":7,"publishedAt":"2026-08-10T05:29:47.321Z","repositoryUrl":"git+https://github.com/Crawlio-app/crawlio-browser.git"}],"repo":{"found":true,"owner":"Crawlio-app","repo":"crawlio-browser","archived":false,"pushedAt":"2026-08-10T05:43:13Z","stars":7,"forks":0,"openIssues":0,"ownerType":"Organization","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/261838986?v=4","ownerCreatedAt":"2026-02-16T02:20:31Z","license":"Apache-2.0"},"icon":{"url":"https://crawlio.app/crawlio-logo.svg","source":"site"},"presence":{"stars":7,"forks":0,"downloadsWeek":null,"license":"Apache-2.0","lastPushAt":"2026-08-10T05:43:13.000Z","score":22}}}},"grade_history":[],"reviews":[]}