Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

Scout

OCI · GHCR.IO/KLARLABS-STUDIO/SCOUT:1.15.3

Browser automation MCP server with 84 tools. Pure CDP, DOM diffing, vision hybrid.

0 this week 54 Trust /100

Last scanned (3 hours ago)

Scores higher than 91% of OCI servers

Category Browser Automation

Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →

Supply Chain Security0
  • No malware scan is available for this kind of package: the supply-chain vendors we use do not cover it. This is a permanent gap in our coverage, not a finding about the package.Unverified
  • Known CVEs could not be checked: this artifact ships no SBOM or dependency manifest, so there is no dependency list to read.Unverified
  • Install-script risk not yet assessed.Unverified
  • Dependency health could not be checked: this artifact ships no SBOM or dependency manifest, so there is no dependency list to read.Unverified
Provenance & Transparency48
  • Source repository is publicly reachable at the declared URL. View diagnostics → Pass
  • Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
  • Clear OSI-approved license (MIT).Pass
  • Actively maintained (last published 101 days ago).Pass
  • Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability78
  • AI-judged instruction clarity (excellent).Pass
  • Tool/resource definitions use about 5808 tokens (~66/item across 88 items; 88 tools + 0 resources), lean.Pass
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management100
  • No destabilizing schema changes in the last 30 days.Pass
Tool Coverage98
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 94% of tool parameters carry a description.Partial
  • Structured output schemas are declared (16% of tools); any adoption earns full credit.Pass
Tool Safety75
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • 0 of 2 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "batch" implies "execute" and declares no destructiveHint at all, which the MCP spec reads as destructive by default. See how to fix → Fail
  • An AI judge read all 89 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a current MCP spec version (2026-07-28).Pass

Unverified: 1 category

A category scored 0 because we could not verify it: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.

Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 1 Nov 26 0
    • Stability: 0.97 → pass security
  • 31 Oct 26 0
    • Stability: pass → 0.97 functional
  • 23 Oct 26 +1
    • Security disclosure: unverified → pass ▲ functional
  • 22 Oct 26 −1
    • Security disclosure: pass → unverified ▼ functional
  • 17 Oct 26 +1
    • Stability: 0.90 → pass security
  • 16 Oct 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 87 to 90. That category is still filling its 30-day observation window: 26 days of observed history at the previous scan, 27 at this one. The score rises as the window fills, whether or not the server changes.

  • 14 Oct 26 −2
    • Stability: pass → 0.83 functional
  • 13 Oct 26 0
    • Stability: 0.97 → pass security
Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 5 Nov 2026 · Analysed oci/ghcr.io/klarlabs-studio/scout:1.15.3

Provenance No attestation

The registry publishes no build provenance for this version, so there is nothing to verify.

Result No attestation
Ecosystem oci
Reason No attestation published

Background: How many MCP packages publish verified provenance →

MCP tools · 88 exposed · ~5,455 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
accessibility_tree ~32

Get a compact accessibility tree showing all interactive elements.

NameTypeReqDescription
urlstring–Optional URL to navigate to before observing

No output schema declared.

No examples provided.

annotated_screenshot ~136

Label all interactive elements with numbers and return their selectors/info. By default returns only the element list (compact). Set include_image=true to also get the screenshot with labels drawn on it. NOTE: label numbers are per-call only — after any DOM mutation (re-render, modal open, route change), the same label may point to a different element. Pair click_label with the most recent annotated_screenshot in the same turn; for stable identity across mutations use the returned selector.

NameTypeReqDescription
include_imageboolean–Include base64 image data in response. Default false to avoid large responses. Use screenshot tool separately if you need the image.

No output schema declared.

No examples provided.

app_state ~50

Extract global app state (Redux, Next.js, Nuxt, Remix, SvelteKit, Gatsby, Astro, Alpine, HTMX).

NameTypeReqDescription
urlstring–Optional URL to navigate to before observing

No output schema declared.

No examples provided.

aria_violations ~67

Minimal accessibility scan grouped by impact (critical/serious/moderate/minor). Covers image-alt, button-name, link-name, label, duplicate-id, html-has-lang, landmark-one-main. Zero dependency — for full WCAG coverage run axe-core in your test pipeline.

Input schema present but exposes no named parameters.

NameTypeReqDescription
countinteger––
criticalarray––
minorarray––
moderatearray––
seriousarray––

No examples provided.

assert_text_contains ~114

Check that the given text appears on the page in one round-trip. If selector is set, searches only that element's text; otherwise searches body innerText. Returns ok=true with a surrounding snippet on hit, ok=false with a short page-tail snippet on miss. Replaces extract+string-match for post-action verification.

NameTypeReqDescription
case_insensitiveboolean–Fold case when comparing. Default false.
selectorstring–Optional CSS selector to scope the search.
textstringyesText to search for.

No output schema declared.

No examples provided.

auto_extract ~46

Auto-detect repeating patterns (product cards, search results, list items) and extract structured data. No selectors needed.

NameTypeReqDescription
urlstring–Optional URL to navigate to before observing

No output schema declared.

No examples provided.

back ~31

Navigate to the previous page in browser history (like clicking the browser Back button). Errors if there is no previous entry.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

batch ~88

Execute multiple actions in a single call. Avoids repeated round-trips. Actions: click, type, fill_form_semantic, wait, scroll_to, click_label. Continues on error.

NameTypeReqDescription
actionsarrayyesArray of actions to execute. Each has action (click/type/fill_form_semantic/wait/scroll_to/click_label) plus selector/value/label/fields as needed.

No output schema declared.

No examples provided.

check_readiness ~58

Check how ready the page is for interaction. Returns a 0-100 score, pending XHR count, skeleton/spinner presence, and suggestions for what to wait for.

NameTypeReqDescription
urlstring–Optional URL to navigate to before observing
NameTypeReqDescription
has_skeletonboolean––
has_spinnerboolean––
pending_imagesinteger––
pending_xhrinteger––
scoreinteger––
statestring––
suggestionsarray––

No examples provided.

click ~50

Click an element by CSS selector. Set wait=true for navigation clicks.

NameTypeReqDescription
selectorstringyesCSS selector of element to click
waitboolean–If true wait for full page navigation after click

No output schema declared.

No examples provided.

click_handle ~107

Click the element identified by a stable node_handle from a previous annotated_screenshot. Unlike click_label, the handle survives DOM mutations that would shuffle label numbers. Returns a stale_handle error when the element is no longer in the DOM — re-annotate and retry.

NameTypeReqDescription
handlestringyesStable node handle from a previous annotated_screenshot call (the node_handle field). Survives DOM mutations that would shuffle label numbers; returns a stale_handle error if the element has since be…

No output schema declared.

No examples provided.

click_label ~38

Click an element by its label number from annotated_screenshot.

NameTypeReqDescription
labelstringyesLabel number from annotated screenshot (e.g. 8)

No output schema declared.

No examples provided.

click_text ~103

Click an element by its visible text. Resolution: aria-label exact match, then button/link text match, then closest interactive ancestor of a matching text node. Pass role="button"|"link" to disambiguate when text appears in both. Cheaper than annotated_screenshot for the common 'click that thing I can see' case.

NameTypeReqDescription
rolestring–Optional role filter: button or link.
textstringyesVisible text to match (exact

No output schema declared.

No examples provided.

close_tab ~49

Close a named tab. Cannot close the currently active tab.

NameTypeReqDescription
namestring–Tab name (for open_tab and switch_tab)
urlstring–URL to open in new tab

No output schema declared.

No examples provided.

compare_tabs ~51

Compare content between two named tabs. Returns what's different, what's only in one tab.

NameTypeReqDescription
tab1stringyesName of the first tab
tab2stringyesName of the second tab

No output schema declared.

No examples provided.

component_state ~44

Extract component state/props from any framework (React, Vue, Svelte, Angular, Alpine, Lit).

NameTypeReqDescription
selectorstringyesCSS selector of the component root element

No output schema declared.

No examples provided.

configure ~179

Change browser settings without restarting. Use headless=false to see the browser window. Set allow_private_ips=true for local-dev workflows (localhost, 127.0.0.1, private IPs). Pass fresh=true to force-kill the current page and start clean (use after observing session_dead in status).

NameTypeReqDescription
allow_private_ipsboolean–Allow navigation to loopback (127.0.0.1
freshboolean–Kill the current page and browser and start a fresh session even if headless/allow_private_ips didn't change. Use after observing session_dead=true in status or when accumulated SPA state needs to be…
headlessboolean–Run browser in headless mode (no visible window). Omit to keep the current setting (default true); a missing value no longer silently switches to a visible window.

No output schema declared.

No examples provided.

console_errors ~64

Get captured console.error / console.warn messages plus recent network 4xx/5xx failures. Auto-installs lightweight network observers, so failures recorded after the first call surface here without an explicit enable_network_capture.

NameTypeReqDescription
urlstring–Optional URL to navigate to before observing
NameTypeReqDescription
messagesarray––
network_failuresarray––

No examples provided.

cookies_clear ~104

Clear cookies. With no name, drops all cookies via Network.clearBrowserCookies. With a name, deletes only that cookie (optionally scoped by domain/path). Use this when a backend has been restarted and the previous session token is invalid.

NameTypeReqDescription
domainstring–Optional domain scope when deleting a single cookie.
namestring–Cookie name to delete. Leave empty to clear all cookies.
pathstring–Optional path scope when deleting a single cookie.

No output schema declared.

No examples provided.

cookies_list ~51

List all cookies for the active page (names + flags only — values are redacted). Useful for diagnosing stale-session issues after a backend restart.

NameTypeReqDescription
urlstring–Optional URL to navigate to before observing
NameTypeReqDescription
itemsarray––
totalinteger––

No examples provided.

cookies_set ~83

Set a cookie on the active page. Useful for restoring sessions or seeding state.

NameTypeReqDescription
domainstring––
expiresnumber––
http_onlyboolean––
namestring––
pathstring––
same_sitestring––
secureboolean––
valuestring––

No output schema declared.

No examples provided.

detect_auth_wall ~46

Check if the page is a login wall, paywall, or CAPTCHA. Returns type, confidence, and reason.

NameTypeReqDescription
urlstring–Optional URL to navigate to before observing

No output schema declared.

No examples provided.

detect_dialog ~48

Check if a modal, dialog, popup, or overlay is currently visible. Returns its title, text, buttons, and inputs.

NameTypeReqDescription
urlstring–Optional URL to navigate to before observing

No output schema declared.

No examples provided.

detect_frameworks ~33

Detect which frontend frameworks are active on the page.

NameTypeReqDescription
urlstring–Optional URL to navigate to before observing

No output schema declared.

No examples provided.

discover_form ~38

Discover form fields with their labels, types, and CSS selectors.

NameTypeReqDescription
selectorstring–CSS selector for specific form (empty = all forms)
NameTypeReqDescription
actionstring––
fieldsarray––
form_selectorstring––
methodstring––

No examples provided.

dismiss_cookies ~55

Auto-dismiss cookie consent banners. Tries common selectors and text patterns (Accept, Agree, Got it, OK). Returns whether a banner was found and dismissed.

NameTypeReqDescription
urlstring–Optional URL to navigate to before observing

No output schema declared.

No examples provided.

dispatch_event ~139

Dispatch a DOM event on an element. Useful for triggering SPA event handlers. Special cases: event_type='submit' on a <form> (or any element inside one) calls form.requestSubmit() — the only reliable way to fire Vue @submit.prevent / React onSubmit and run HTML5 validation. event_type='click' invokes el.click() so the default action runs (e.g. submitting the owning form when target is type=submit).

NameTypeReqDescription
detailobject–Event detail/payload data
event_typestringyesDOM event type (e.g. click
selectorstringyesCSS selector of the target element

No output schema declared.

No examples provided.

double_click ~42

Double-click an element.

NameTypeReqDescription
selectorstringyesCSS selector of element to click
waitboolean–If true wait for full page navigation after click

No output schema declared.

No examples provided.

drag_drop ~43

Drag an element and drop it on another element.

NameTypeReqDescription
fromstringyesCSS selector of element to drag
tostringyesCSS selector of drop target

No output schema declared.

No examples provided.

enable_network_capture ~40

Start capturing network XHR/fetch responses. Patterns filter by URL substring.

NameTypeReqDescription
patternsarray–URL substring patterns to capture (empty = all)

No output schema declared.

No examples provided.

extract ~28

Extract text content from a single element.

NameTypeReqDescription
selectorstringyesCSS selector to extract text from

No output schema declared.

No examples provided.

extract_all ~31

Extract text from all elements matching a selector.

NameTypeReqDescription
selectorstringyesCSS selector to extract all matching texts

No output schema declared.

No examples provided.

extract_table ~33

Extract structured data from an HTML table (headers + rows).

NameTypeReqDescription
selectorstringyesCSS selector for the table element

No output schema declared.

No examples provided.

failed_requests ~56

Recent network requests with status >= 400 (4xx/5xx). URL + method + status + response body snippet. Use after a form submission that silently failed.

NameTypeReqDescription
urlstring–Optional URL to navigate to before observing
NameTypeReqDescription
itemsarray––
totalinteger––

No examples provided.

fill_form ~28

Fill multiple form fields at once.

NameTypeReqDescription
fieldsobjectyesField values keyed by CSS selector

No output schema declared.

No examples provided.

fill_form_semantic ~116

Fill form fields by label or name. Strings fill text inputs; booleans toggle checkboxes; for radios pass the label/value as a string. Each result includes the value re-read after dispatching input/change events plus a warning when framework binding (Vue v-model / React onChange) didn't pick up the change.

NameTypeReqDescription
fieldsobjectyesField values keyed by human-readable field name. Strings fill text inputs/textareas/selects. Booleans toggle checkboxes (or pick a radio when paired with a string label).

No output schema declared.

No examples provided.

find_by_coordinates ~64

Find the interactive element at given pixel coordinates. Returns the smallest element containing that point, with CSS selector and text. Use after hybrid_observe.

NameTypeReqDescription
xintegeryesX pixel coordinate in the viewport
yintegeryesY pixel coordinate in the viewport

No output schema declared.

No examples provided.

focus ~32

Set focus on an element, triggering :focus CSS state.

NameTypeReqDescription
selectorstringyesCSS selector of element to focus

No output schema declared.

No examples provided.

forward ~31

Navigate to the next page in browser history (like clicking the browser Forward button). Errors if there is no next entry.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

has_element ~29

Check if an element exists on the page.

NameTypeReqDescription
selectorstringyesCSS selector to check for

No output schema declared.

No examples provided.

hover ~39

Hover over an element to trigger CSS :hover states, tooltips, and dropdown menus.

NameTypeReqDescription
selectorstringyesCSS selector of element to hover over

No output schema declared.

No examples provided.

hybrid_observe ~74

Vision+DOM hybrid mode: returns a clean screenshot (no labels) plus bounding boxes for all interactive elements. Use find_by_coordinates to select elements by pixel position. Set include_image=true to get the base64 screenshot.

NameTypeReqDescription
include_imageboolean–Include base64 screenshot in response. Default false to keep responses compact.

No output schema declared.

No examples provided.

install_submit_tracker ~48

Pre-install the submit tracker so the next submit event records defaultPrevented + XHR count. Call after navigate, before triggering a form submit, if you plan to read submit_outcome afterwards.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

list_tabs ~35

List all open tabs with their names, URLs, and titles.

NameTypeReqDescription
urlstring–Optional URL to navigate to before observing
NameTypeReqDescription
itemsarray––
totalinteger––

No examples provided.

markdown ~36

Get a compact markdown representation of the page. Ideal for LLM processing.

NameTypeReqDescription
urlstring–Optional URL to navigate to before observing

No output schema declared.

No examples provided.

navigate ~29

Navigate to a URL. Returns page title and URL.

NameTypeReqDescription
urlstringyesURL to navigate to

No output schema declared.

No examples provided.

network_requests ~106

Get captured network requests/responses including request bodies (POST/PUT/PATCH) and response bodies (max 32KB each, truncated if larger). Includes recent buffered requests so you can inspect traffic even if capture was enabled late. If the list is empty and capture was never enabled, the response includes a hint pointing at enable_network_capture.

NameTypeReqDescription
max_recentinteger–Maximum number of most recent requests to return (0 = all)
patternstring–URL substring filter
NameTypeReqDescription
capture_enabledboolean––
countinteger––
hintstring––
requestsarray––

No examples provided.

network_summary ~95

Rolled-up view of captured network traffic. Returns total count, bucketed by status class (1xx/2xx/3xx/4xx/5xx/0), every request with status >= 400 inline, and the pending count. Single call replaces enable_network_capture → act → failed_requests for the common 'did this action succeed at the network layer' question.

NameTypeReqDescription
patternstring–Optional URL substring filter.
NameTypeReqDescription
by_statusobject––
capture_enabledboolean––
failuresarray––
hintstring––
pendinginteger––
totalinteger––

No examples provided.

observe ~38

Get a structured snapshot of the current page. Optionally pass url to navigate first.

NameTypeReqDescription
urlstring–Optional URL to navigate to before observing
NameTypeReqDescription
active_navigationarray––
active_tabstring––
active_tab_idstring––
buttonsarray––
cookiesobject––
dialog_textstring––
dialog_typestring––
has_dialogboolean––
inputsarray––
interactive_elementsinteger––
linksarray––
metaobject––
textstring––
titlestring––
urlstring––

No examples provided.

observe_diff ~31

Return only page changes since the last observation.

NameTypeReqDescription
urlstring–Optional URL to navigate to before observing

No output schema declared.

No examples provided.

Install

How do I install the Scout MCP server?

Scout runs locally as a container image, launched with docker run --rm -i ghcr.io/klarlabs-studio/scout:1.15.3. Ready-made configuration for Claude, Cursor, VS Code, Codex and 3 more is on this page, copied from each client's own documentation.

oci · ghcr.io/klarlabs-studio/scout:1.15.3

# add to Claude Code
claude mcp add klarlabs-studio-scout -- docker run --rm -i ghcr.io/klarlabs-studio/scout:1.15.3
Common questions

What is the Scout MCP server?

Scout is an MCP server listed in the public MCP registry as io.github.klarlabs-studio/scout. Browser automation MCP server with 84 tools. Pure CDP, DOM diffing, vision hybrid. This page covers its container image (ghcr.io/klarlabs-studio/scout:1.15.3).

Is the Scout MCP server safe to use?

Scout scores 54 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the Scout MCP server expose?

Scout exposes 88 tools: accessibility_tree, annotated_screenshot, app_state, aria_violations, assert_text_contains, and 83 more. Their descriptions and schemas cost roughly 5,455 tokens of context every time the server is loaded.

Is the Scout MCP server still maintained?

Scout is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

What licence is the Scout MCP server under?

Scout declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.