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

Scout

OCI · GHCR.IO/FELIXGEELHAAR/SCOUT:1.10.0 · SCANNED AUG 3

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

−6 this week 32 Trust /100
Trust breakdown (6 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 →

Supply Chain Security0
  • Malware scan not yet available for this package.Unverified
  • CVE data not yet available for this package.Unverified
  • Install-script risk not yet assessed.Unverified
  • Dependency-health data not yet available.Unverified
Provenance & Transparency19
Schema Quality & AI Usability71
  • AI-judged instruction clarity (good).Pass
  • Tool/resource definitions use about 5478 tokens (~65/item across 84 items; 84 tools + 0 resources), lean.Pass
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management23
  • Stability observed for 7 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
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 (7% of tools); any adoption earns full credit.Pass
Capabilities20
  • Spec-recency check failed: implements MCP spec 2024-11-05; the latest is 2026-07-28. See how to fix → Fail

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.

Install

Add this component to your MCP client. Where a client-specific snippet is available, pick your client below and copy it straight into your config; otherwise use the connection detail shown.

oci · ghcr.io/felixgeelhaar/scout:1.10.0

# add to Claude Code
claude mcp add felixgeelhaar-scout -- docker run --rm -i ghcr.io/felixgeelhaar/scout:1.10.0
# add to Codex CLI
codex mcp add felixgeelhaar-scout -- docker run --rm -i ghcr.io/felixgeelhaar/scout:1.10.0
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "felixgeelhaar-scout": {
      "type": "local",
      "command": [
        "docker",
        "run",
        "--rm",
        "-i",
        "ghcr.io/felixgeelhaar/scout:1.10.0"
      ],
      "enabled": true
    }
  }
}
# ~/.hermes/config.yaml
mcp_servers:
  felixgeelhaar-scout:
    command: "docker"
    args: ["run", "--rm", "-i", "ghcr.io/felixgeelhaar/scout:1.10.0"]
// mcp.json
{
  "mcpServers": {
    "felixgeelhaar-scout": {
      "command": "docker",
      "args": [
        "run",
        "--rm",
        "-i",
        "ghcr.io/felixgeelhaar/scout:1.10.0"
      ]
    }
  }
}
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.

  • 2 Aug 26 +2
    • Stability: unverified → 0.20 functional
  • 1 Aug 26 −8
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 27 Jul 26 +33
    • Tool coverage: unverified → 100 functional
    • First check of Tool coverage: 94 functional
    • First check of Tool coverage: 7 functional
    • First check of Schema quality: good functional
    • First check of Schema quality: pass functional
    • First check of Schema quality: fail functional
  • 26 Jul 26 5

    First indexed and scored.

    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
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 3 Aug 2026 · Analysed oci/ghcr.io/felixgeelhaar/scout:1.10.0

Provenance none

Ecosystem: oci · Outcome: none

Reason: no_attestation

MCP tools — 84 exposed · ~5,125 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.

Tool Tokens
accessibility_tree ~32

Get a compact accessibility tree showing all interactive elements.

NameTypeReqDescription
urlstringOptional 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_imagebooleanInclude 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
urlstringOptional 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_insensitivebooleanFold case when comparing. Default false.
selectorstringOptional 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
urlstringOptional URL to navigate to before observing

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
urlstringOptional URL to navigate to before observing

No output schema declared.

No examples provided.

click ~50

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

NameTypeReqDescription
selectorstringyesCSS selector of element to click
waitbooleanIf 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
rolestringOptional 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
namestringTab name (for open_tab and switch_tab)
urlstringURL 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 ~159

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_ipsbooleanAllow navigation to loopback (127.0.0.1
freshbooleanKill 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…
headlessbooleanRun browser in headless mode (no visible window). Default true.

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
urlstringOptional URL to navigate to before observing

No output schema declared.

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
domainstringOptional domain scope when deleting a single cookie.
namestringCookie name to delete. Leave empty to clear all cookies.
pathstringOptional 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
urlstringOptional URL to navigate to before observing

No output schema declared.

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
urlstringOptional 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
urlstringOptional 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
urlstringOptional 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
selectorstringCSS selector for specific form (empty = all forms)

No output schema declared.

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
urlstringOptional 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
detailobjectEvent 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
waitbooleanIf 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
patternsarrayURL 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
urlstringOptional URL to navigate to before observing

No output schema declared.

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.

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_imagebooleanInclude 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
urlstringOptional URL to navigate to before observing

No output schema declared.

No examples provided.

markdown ~36

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

NameTypeReqDescription
urlstringOptional 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_recentintegerMaximum number of most recent requests to return (0 = all)
patternstringURL substring filter

No output schema declared.

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
patternstringOptional 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
urlstringOptional 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
urlstringOptional URL to navigate to before observing

No output schema declared.

No examples provided.

observe_scoped ~135

Observe a subset of the page. Limit by landmark roles (nav/main/footer/...) and/or cap text length and element counts. Use on listing pages where the unscoped observation eats more tokens than the task needs.

NameTypeReqDescription
buttons_limitintegerCap on returned buttons (0 = session default).
inputs_limitintegerCap on returned inputs (0 = session default).
limit_charsintegerMaximum length of the returned text blob.
links_limitintegerCap on returned links (0 = session default).
sectionsarrayLandmark roles to limit the observation to: nav
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_with_budget ~31

Observe the page within a token budget.

NameTypeReqDescription
budgetintegeryesApproximate token budget for the response

No output schema declared.

No examples provided.