Motorika
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| HEADLESS | No | Add --headless to run Chrome in headless mode instead of headed mode. | false |
| ISOLATED | No | Add --isolated to use a fresh isolated profile; isolated servers never share. | false |
| AUTO_CONNECT | No | Add --auto-connect to auto-connect to a running Chrome instance. | false |
| CDP_ENDPOINT | No | Attach to a running Chrome instance via the --cdp-endpoint flag. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| sessionA | Browser session: status (mode, headless, browser version, profile, tabs, active tab), launch (restart with new options; tabs are not carried over, cookies persist in a persistent profile), close (close the browser in launch mode, disconnect in attach modes). |
| tabsA | Tabs: list ("t1 "Title" url (active)"), new (optionally at url, becomes active unless background:true; returns a viewport snapshot when url is given (call snapshot for the whole page)), select (make active; brings it to the front in headed mode), close (default the active tab; the previously active tab becomes active). Tab ids are never reused; popups are registered automatically. |
| navigateA | Go to a URL (scheme-less gets https://), or back/forward/reload. Returns "[tN] navigated "" ()" and a viewport snapshot (call snapshot for the whole page; snapshot:false to skip, snapshot:true attaches the whole page). HTTP error statuses are reported, network failures are errors with the net::ERR code. A page that loaded (committed) but did not reach wait_until within timeout_ms is not an error: the result adds "(still loading: …)"; only a navigation that never committed is an error, and it is stopped. |
| snapshotA | Compact accessibility snapshot of a tab: one line per element "- role "name" eN attrs", indented by nesting; iframes are inlined. interactive mode (default) lists controls, headings, landmarks, dialogs, alerts; full adds text, lists, tables, images. Page with offset (line offset) when the footer says so. |
| screenshotA | Screenshot of the viewport (default), the full page, or a target element. Default jpeg quality 70, long edge at most max_edge (1280). Afterwards, "x,y" targets use this image's pixel coordinates. annotate draws each visible ref label on its element (removed before returning). save writes it under /screenshots/. |
| readA | Main content of the page (or of target) as markdown: title, headings, paragraphs, lists, links as text, simple tables. Navigation, footers, cookie banners, sidebars and ads are excluded. Long content is cut at max_chars content chars and ends with "… more chars (offset= to continue)"; pass that offset for the next page. |
| findA | Find elements by case-insensitive substring over accessible name, visible text (also text split across elements: the smallest element holding it), placeholder, label and value, in all frames. Exact matches first. An empty query with a role lists every element of that role. Each hit is a snapshot line with its ref, followed by a line " in ". |
| clickA | Click a target (ref, "x,y", or selector). Auto-waits for the element to be visible, stable, enabled and not covered. Returns an effect summary (navigation, new tabs, dialogs, downloads, live-region announcements as → alert (not JS dialogs), console errors). |
| typeA | Type text into a field (input, textarea, contenteditable). Replaces the value by default; append adds to it; slowly sends key-by-key events (autocomplete widgets); submit presses Enter afterwards. The typed text is never echoed. |
| fill_formA | Fill several fields in one call and optionally click submit (only if every field succeeded). Values: text-like fields take a string (replaced); select takes an option value or label (string[] for multiple); checkbox/switch take a boolean; radio takes true, or a label/value on any radio of the group; file inputs take path(s) inside the allowed roots; date/time/color/range take the string value. One result line per field; values are never echoed. |
| pressA | Press keys or chords in order, e.g. ["Tab"], ["Control+a"], ["Meta+Shift+K"], ["ArrowDown","Enter"]. target is focused first. |
| hoverA | Move the mouse over a target (reveals :hover menus and tooltips). |
| scrollA | Scroll the page or a container. Without direction/to, target is scrolled into view. With direction (amount px, default 80% of the viewport/container) or to top|bottom, target is the scroll container (default the page). Reports "scrolled y=/ viewport=" and a height change (infinite scroll). |
| dragA | Drag from one target to another with real mouse events; works for HTML5 drag-and-drop and pointer-event drags. |
| uploadA | Upload files: target is an input[type=file] (files set directly) or an element that opens a file chooser (intercepted; no native dialog appears). Paths must resolve inside the allowed roots (cwd, output dir, ~/Downloads, ~/Desktop, ~/Documents, --allow-file-root); dot-files are refused unless --allow-hidden-files. |
| dialogA | Accept or dismiss the pending JS dialog (confirm, prompt, beforeunload) on a tab; text answers a prompt. Alerts are auto-accepted. |
| waitA | Wait for exactly one condition: text (appears), text_gone, target with state (visible default, hidden, attached, detached), url (substring or /regex/), load_state, or ms (unconditional, at most 30000). On timeout the error names the condition. |
| evaluateA | Run JavaScript in the page. script is an expression or a function source; a function is called with the target element (or no argument). Promises are awaited. The result is JSON (truncated); DOM elements are rendered as snapshot lines with refs. Page exceptions are returned as errors. |
| videoA | Watch videos on the page (all frames, incl. cross-origin iframes). list: one line per video (ref, frame, src, duration, time, paused, muted, volume, rate, size, readyState, text tracks). play/pause/seek(time)/set(rate, muted, volume, loop). frames: images by element screenshot, each preceded by "frame i/n @ mm:ss.ss": times=[s…] (seek each), count (default 6, evenly spaced over start..end), or every_ms + duration_ms (sample while playing); seek-based capture restores time and paused state; all-black frames (DRM) are flagged. captions: text-track cues as "mm:ss.ss-mm:ss.ss text", optional start/end window. Default target: the largest visible playing video, else the largest visible one. |
| consoleA | Console messages and uncaught page errors of a tab, buffered from tab creation (at most 500): "[level] hh:mm:ss.mmm message (url:line)". level error|warning (warnings and errors)|all; pattern is a substring or /regex/; clear empties the buffer after reading. |
| networkA | Requests of a tab (at most 1000): "r METHOD status|failed: type url ms ". Filter by pattern (substring or /regex/), type (document, fetch, xhr, script, …), failed_only (network failures and HTTP >= 400). request_id shows headers (credentials redacted) and the body (text truncated at 10k; binary shows its size). |
| batchA | Run up to 50 tool calls sequentially in one call: steps [{tool, args}]. Each step's output is under "## step : " (images kept). stop_on_error (default true) lists the remaining steps as skipped after a failure. Over the output cap, every step keeps its header and first line and the rest is shared; a cut step ends with "… chars cut from step ". batch cannot nest. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 22 tools
Most tools target clearly distinct purposes (click vs hover vs drag vs upload; console vs network vs video). A few pairs could be confused at a glance—snapshot/read/find all extract page content, and type/fill_form/press all input text—but the descriptions draw sharp boundaries (accessibility tree vs markdown vs text search; single-field vs multi-field vs key chords).
All names are lowercase snake_case, and there is a coherent underlying convention: verbs for actions (navigate, click, scroll) and nouns for subsystem controllers (session, tabs, console, network, video). Only fill_form breaks the single-word pattern, and the verb/noun split is a minor deviation rather than a real inconsistency.
22 tools is on the heavy side, but browser automation is genuinely broad and each tool maps to a real capability (video, network, console, batch are legitimate subsystems rather than filler). Slightly over-scoped but nothing feels redundant enough to remove.
The surface covers navigation, interaction, forms, dialogs, uploads, extraction, screenshots, network, console, media and batching—an unusually complete lifecycle for a browser agent. Minor gaps: no direct cookie/storage manipulation, no download-management tool (only reported as a click effect), and no explicit viewport/resize control outside launch options.