Skip to content
Agentmart
Submit a tool

Sitelooper

Record a browser flow once with a model, then compile it to a Playwright spec that needs no model.

Connector by restspace · GitHub account verified by the MCP Registry

IndexedMITLocal (stdio)★ 1
Write a review

Install

Works with Claude Code, Codex, VS Code, Cursor, Windsurf, Claude Desktop. Read the repository before you give any tool access to your data.

npx agentmarket install connector/restspace-sitelooper

Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

Record a browser flow once with a model, then compile it to a Playwright spec that needs no model.

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this server can do and what it asks for, from its tool list, install config and code. Checked Oct 26, 2026.

Tools
11 read · 25 write · 3 delete · 9 not yet classified
Secrets
1 (API keys, tokens or passwords)
Install scripts
None found
Runs as
Node.js package

Tools by what they do 48

Read from the source code; the running server may list different tools.

Read 11 · Look things up without changing anything.

  • assert
  • doctor
  • fetch_source
  • job_status
  • list_flows
  • peek
  • read
  • screenshot
  • sessions
  • snapshot
  • tabs

Write 25 · Create, change, send or run things.

  • batch
  • build_start
  • click
  • download
  • drag
  • fill
  • goto
  • hover
  • modifier_click
  • open
  • press
  • rename_values
Show 13 more tools
  • repair_apply
  • repair_propose
  • rerecord
  • right_click
  • run_skill
  • save_flow
  • scroll_into_view
  • select
  • set_offline
  • set_var
  • set_viewport
  • type
  • upload

Delete 3 · Delete, drop, revoke or wipe things.

  • eval
  • run_command
  • stop

Not yet classified 9 · We could not tell from the name and description.

  • back
  • check
  • dblclick
  • dialog_expect
  • do
  • locate
  • read_all
  • report
  • wait_for

Secrets and settings it asks for

Secrets: values you paste in that let it act as you.

  • OPENROUTER_API_KEY

Network hosts it talks to 11

  • ademchic3.restspace.io · found in code
  • api.anthropic.com · found in code
  • api.novita.ai · found in code
  • api.openai.com · found in code
  • api.typesafe.ai · found in code
  • api.z.ai · found in code
  • github.com · found in code
  • href.invalid · found in code
  • json.schemastore.org · found in code
  • openrouter.ai · found in code
  • rapiderit.com · found in code

Files it touches

  • /home/user/browser-pilot/bench/results/c0822ab-agent-browser-mutationlog.json
  • /home/user/browser-pilot/bench/results/c0822ab-agent-browser-transcript.jsonl
  • /home/user/browser-pilot/bench/results/c0822bp-browser-pilot-mutationlog.json
  • /home/user/browser-pilot/bench/results/c0822bp-browser-pilot-transcript.jsonl
  • /home/user/browser-pilot/bench/results/c0822bp2-browser-pilot-mutationlog.json
  • /home/user/browser-pilot/bench/results/c0822bp2-browser-pilot-transcript.jsonl
  • /home/user/browser-pilot/bench/results/c0822bp3-browser-pilot-mutationlog.json
  • /home/user/browser-pilot/bench/results/c0822bp3-browser-pilot-transcript.jsonl
  • /home/user/browser-pilot/bench/results/c0822bp4-browser-pilot-mutationlog.json
  • /home/user/browser-pilot/bench/results/c0822bp4-browser-pilot-transcript.jsonl
  • /home/user/browser-pilot/bench/results/c0822bp5-browser-pilot-mutationlog.json
  • /home/user/browser-pilot/bench/results/c0822bp5-browser-pilot-transcript.jsonl
  • /home/user/browser-pilot/bench/results/c0822or-browser-pilot-mutationlog.json
  • /home/user/browser-pilot/bench/results/c0822or-browser-pilot-transcript.jsonl
  • /home/user/browser-pilot/bench/results/c0822ora-agent-browser-mutationlog.json
  • /home/user/browser-pilot/bench/results/c0822ora-agent-browser-transcript.jsonl
  • /home/user/browser-pilot/bench/results/c0822orp-browser-pilot-mutationlog.json
  • /home/user/browser-pilot/bench/results/c0822orp-browser-pilot-transcript.jsonl
  • /home/user/browser-pilot/bench/results/fwgr16-n1-browser-pilot-transcript.jsonl
  • /home/user/browser-pilot/bench/results/fwgr16-skills
  • /home/user/browser-pilot/bench/results/fwgr17-n1-browser-pilot-transcript.jsonl
  • /home/user/browser-pilot/bench/results/fwgr17-skills
  • /home/user/browser-pilot/bench/results/fwgr18-n1-browser-pilot-transcript.jsonl
  • /home/user/browser-pilot/bench/results/fwgr18-skills
  • /home/user/browser-pilot/bench/results/fwgr19-n1-browser-pilot-transcript.jsonl
  • /home/user/browser-pilot/bench/results/fwgr19-skills
  • /home/user/browser-pilot/bench/results/fwkb1-n1-browser-pilot-transcript.jsonl
  • /home/user/browser-pilot/bench/results/fwkb1-skills
  • /home/user/browser-pilot/bench/results/fwkb2-n1-browser-pilot-transcript.jsonl
  • /home/user/browser-pilot/bench/results/fwkb2-skills
  • /home/user/browser-pilot/bench/results/fwod26-n1-browser-pilot-transcript.jsonl
  • /home/user/browser-pilot/bench/results/fwod26-skills
  • /home/user/browser-pilot/bench/results/fwod27-n1-browser-pilot-transcript.jsonl
  • /home/user/browser-pilot/bench/results/fwod27-skills
  • /home/user/browser-pilot/bench/results/fwod28-n1-browser-pilot-transcript.jsonl
  • /home/user/browser-pilot/bench/results/fwod28-skills
  • /home/user/browser-pilot/bench/results/fwod29-n1-browser-pilot-transcript.jsonl
  • /home/user/browser-pilot/bench/results/fwod29-skills
  • /home/user/browser-pilot/bench/results/fwod30-n1-browser-pilot-transcript.jsonl
  • /home/user/browser-pilot/bench/results/fwod30-skills

Tools (48)

Read from the source code; the running server may differ. Descriptions are the server’s own words; hidden characters are shown as [U+…].

  • assert

    Check a condition on the current page now; never acts. State the expected text in the sentence, e.g. "the order list shows a row with total 42.00". In a learn session a passing assert becomes a flow step that fails the run when it does not hold. Credentials: write each secret as one {{env:NAME}} marker ({{totp:NAME}} for a one-time code), exactly as written: the marker alone, never the value and never $NAME. NAME must be set in the environment the MCP server was started with. Never ask the user for a secret value. isError with exit 1 = the condition did not hold; exit 2 = could not be checked.

  • back

    Go back one history entry.

  • batch

    Execute several actions in ONE call when you already know each next step with certainty (e.g. filling a form you have just seen, then submitting it). Steps run in order and stop at the first error; the result lists each step's outcome, which steps did not run, and ONE combined [state: …] summary. Do not batch across a judgment point — anything whose outcome you must see before deciding the next action.

  • build_start

    Start a background job that compiles a saved flow (or bundle) into a Playwright .flow.ts/.spec.ts and verifies it (readiness: clean runs). With a reset command (sitelooper.config.json resetCommand) it first converges, re-recording failing steps with the model. Readiness needs a reset command or fixture_isolation. Returns a job_id at once: poll job_status until done/failed (minutes).

  • check

    Set a checkbox/radio to checked or unchecked.

  • click

    Click an element.

  • dblclick

    Double-click an element.

  • dialog_expect

    Arm handling for native dialogs (alert/confirm/prompt) triggered by your NEXT action: accept or dismiss, with optional prompt text. Call BEFORE the click that opens the dialog. Captured dialog messages are returned in that action's result.

  • do

    Have the agent perform ONE verifiable outcome in the session's browser and verify it, e.g. "create a customer named {{runid}} and confirm it appears in the list". One verifiable outcome per do: split multi-part tasks into several calls. State expected values in the sentence. Credentials: write each secret as one {{env:NAME}} marker ({{totp:NAME}} for a one-time code), exactly as written: the marker alone, never the value and never $NAME. NAME must be set in the environment the MCP server was started with. Never ask the user for a secret value. Needs a model API key in the server environment. R…

  • doctorread-only

    Inspect the setup: browser, Node, and which model provider/API key is in use and why (never shows the key).

  • download

    Click an element and capture the download it triggers; saves to the session downloads dir (or save_path).

  • drag

    Drag one element onto another. Tries a real mouse drag, then falls back to synthetic HTML5 drag events (dragstart/dragover/drop with a DataTransfer).

  • eval

    Escape hatch: run a read-only JavaScript expression in the page and return its JSON-serialised result. Prefer the dedicated tools. Nothing an eval does or returns is replayed: never act through it or give elements ids, and never report or navigate by a value only an eval returned: read it with read/read_all, or click its link.

  • fetch_source

    Fetch the raw HTTP response body for a URL (default: the current page's URL) using the browser's cookies, WITHOUT executing JavaScript. This is the SERVER-RENDERED source — every other tool shows the live post-hydration DOM instead. Use it before making any claim about what the server sent, and to tell an SSR bug (element missing from the source) apart from a hydration bug (present in the source, absent live).

  • fill

    Set the full value of an input/textarea. React-safe: works on controlled components and number inputs (clears first). Use for text fields; use select for <select>. A {{env:NAME}} secret marker or a {{totp:NAME}} one-time-code marker in value is resolved at execution time — pass it through verbatim.

Show 33 more tools
  • goto

    Navigate the current tab to a URL and wait for load.

  • hover

    Hover an element (also dispatches synthetic mouseover/enter for JS-driven menus).

  • job_statusread-only

    Report a background job started by build_start, check (ready), repair_propose or rerecord: status running|done|failed, the last progress lines, and the final JSON result and exit code when finished. Waits up to wait_s seconds for the job to finish before answering.

  • list_flowsread-only

    List saved flows with their step counts, variables and origin.

  • locate

    Point to where each listed value is shown on the current page, so it can be re-read later.

  • modifier_click

    Click while holding modifier keys (e.g. Shift/Control-click gestures).

  • open

    Navigate a browser session to a URL (no model involved); starts the session if it is not running. learn and headed apply only when this call starts the session: learn=true records every later do/assert as a reusable flow step (needed before save_flow). Typical authoring: open (learn) → set_var → do/assert per outcome → save_flow → build_start.

  • peekread-only

    Return the session page's URL, title and an accessibility snapshot (no model, no actions).

  • press

    Press a key or chord (e.g. "Enter", "Escape", "Control+a") on an element or the page.

  • read

    Read text/value/attribute from ONE element — much cheaper than a full snapshot for spot checks. The target must match exactly one element, or the read fails: a snapshot ref (@e123) always does, and a bare tag like "h1" usually does not. Use read_all to read every match, or what=count to count them. If the value matters beyond this glance — a reference, id, name, or total the task or a later step will use — pass `label` NOW: a labelled value is published under that name automatically; an unlabelled one stays anonymous. what=url reads the current page URL (no target) — the way to report where a …

  • read_all

    Like read, but returns a JSON array of the value across EVERY element matching the selector — read a whole list of rows/cells in one call instead of many. what: text (visible text of each), value (input value of each), attr (an attribute of each), or count.

  • rename_values

    Submit the value renames for this session. Rename ONLY names that mislead or say nothing (selector fragments like h1, role_radiogroup_aria_che, generic value/value_2, or a name that contradicts what the value is). Leave every adequate name alone — churn costs more than it buys.

  • repair_apply

    Apply a proposal staged by repair_propose to its flow file exactly as checked (no browser run).

  • repair_propose

    Start a background job that replays a compiled .flow.ts against the app, repairs drifted steps and stages a checked candidate as a proposal file for review (repair --propose); never rewrites the spec. Returns a job_id: poll job_status. Apply a good proposal with repair_apply.

  • report

    REQUIRED final call: report the outcome of the instruction. Nothing after this is executed. Keep summary to one short paragraph.

  • rerecord

    Start a background job that re-records one step of a flow with the agent (optionally with a new instruction), then verifies it over several runs and re-pins it. Needs a model API key. Credentials: write each secret as one {{env:NAME}} marker ({{totp:NAME}} for a one-time code), exactly as written: the marker alone, never the value and never $NAME. NAME must be set in the environment the MCP server was started with. Never ask the user for a secret value. Returns a job_id: poll job_status.

  • right_click

    Right-click (context menu) an element.

  • run_command

    Description is built at runtime.

  • run_skill

    Replay a stored procedure listed under [skills] in the instruction, deterministically and without further reasoning: every recorded step runs in order with its parameters filled in, stopping at the first step that no longer works. Returns each step's outcome and every value read back from the live page. If it stops part-way, the steps that ran HAVE changed the page — observe, then continue from there yourself. Call it as your FIRST action when a listed procedure matches the instruction.

  • save_flow

    Stop a learn session, save what it recorded as a named flow, then export the flow with its pinned procedures to a bundle file (default .sitelooper/procedures.json in cwd). Closes the session's browser. Then call build_start with the flow name.

  • screenshotread-only

    Save a screenshot to disk and return its path (for evidence; you cannot see images).

  • scroll_into_view

    Scroll an element into view.

  • select

    Choose an option in a <select>, matching by visible label first, then by value.

  • sessionsread-only

    List browser sessions and whether each is running.

  • set_offline

    Toggle network offline mode.

  • set_var

    Set a session variable that later instructions reference as {{name}}; in a learn session it becomes a flow variable that build/check bind with vars. Not for secrets (use {{env:NAME}} markers).

  • set_viewport

    Resize the viewport.

  • snapshot

    Accessibility snapshot of the current page with @ref handles for elements. Returns interactive/labelled elements only by default (what you need to pick something to act on); pass full:true for the complete tree including static text nodes. Call after navigation or DOM changes; refs from older snapshots go stale. For a specific value prefer read/read_all over a full tree.

  • stopcan change or delete data

    Stop a browser session (closes its browser and daemon) without saving a flow. Use save_flow instead to keep a learn session's recording.

  • tabs

    List open tabs, or switch the active tab by index.

  • type

    Type text key-by-key into an element (triggers per-keystroke handlers, e.g. autocomplete). A {{env:NAME}} secret marker or a {{totp:NAME}} one-time-code marker in text is resolved at execution time — pass it through verbatim.

  • upload

    Set files on a file input.

  • wait_for

    Wait for a condition on a selector: visible, hidden, text_equals, text_contains, or count. Use this instead of sleeping or polling. Returns immediately if the condition already holds. Use count/text only for a value you expect to CHANGE — counting rendered rows is unreliable on virtualised lists (only visible rows exist in the DOM), so wait on a stable indicator instead.

Compare and alternatives

    Featured in

    Signals

    Stars
    1
    Forks
    0
    Open issues
    0
    Last commit
    Oct 22, 2026 (6 days ago)
    Last release
    Oct 22, 2026 (6 days ago)

    From GitHub (fetched Oct 24, 2026).

    Details

    Registry name
    io.github.restspace/sitelooper
    Version
    0.7.0
    Auth
    API key
    Packages
    npm sitelooper
    License
    MIT
    First seen
    Oct 24, 2026
    Last checked
    Oct 24, 2026
    Cite this page

    Sitelooper MCP server. Agent Mart. https://agentmart.dev/connectors/restspace-sitelooper (last updated 2026-10-24)