Mochi MCP server
Commit Nov 3, 2026Enables AI assistants to perform browser automation, maintain persistent project memory, and send in-page hint messages via a Chrome extension.
Also known as DevZonayed/Mochi
- Stars
- 3
- Tools
- 50
- Downloads, 30 days
- —
- Latest version
- —
- Last commit
- Nov 3, 2026
- License
- MIT
What is Mochi MCP?
Mochi enables AI assistants to perform browser automation, maintain persistent project memory, and send in-page hint messages via a Chrome extension. It exposes 50 tools, such as browser_session_start, browser_session_end, browser_request_attention.
Summary generated from the project's README
About Mochi MCP server
Automating browser-based quality assurance and maintaining project context is what Mochi enables for developers using AI assistants like Claude Code. It functions as a comprehensive browser companion that runs within dedicated Chrome tab groups to ensure your existing browsing sessions remain untouched. The system uses a Node-based MCP server and a Chrome Manifest V3 extension to bridge the gap between AI reasoning and live web interaction.
Users can perform complex tasks such as running design-QA passes, executing automated workflows, and verifying network responses. The server includes a unique memory system that stores selector caches and workflows in a local .continuum directory. This allows the agent to replay successful actions without re-discovering elements. If a website redesign breaks a selector, the engine uses ARIA roles and names to self-heal the automation. It also provides a way for humans to send in-page hints and screenshots to the AI using a specific keyboard shortcut.
What you can do with it
- 1Automated regression testingAn AI agent can replay saved workflows to test login flows or other critical paths using cached selectors.
- 2Visual design quality assuranceDevelopers can instruct an agent to perform a design-QA pass and pin specific issues directly onto the webpage.
- 3Interactive human-in-the-loop feedbackA user can send specific elements and screenshots to the AI assistant by pressing a keyboard shortcut on any tab.
Written from the project's README. Every use case is checked against a quote from it.
Mochi MCP tools 50
Detected from the READMEbrowser_session_startbrowser_session_endbrowser_request_attentionbrowser_navigatebrowser_open_tabbrowser_list_tabsbrowser_close_tabbrowser_textbrowser_linksbrowser_snapshotbrowser_snapshot_querybrowser_snapshot_node
| browser_session_start | — | |
| browser_session_end | — | |
| browser_request_attention | — | |
| browser_navigate | — | |
| browser_open_tab | — | |
| browser_list_tabs | — | |
| browser_close_tab | — | |
| browser_text | — | |
| browser_links | — | |
| browser_snapshot | — | |
| browser_snapshot_query | — | |
| browser_snapshot_node | — |
Show all 50 toolsShow fewer tools
browser_clickbrowser_click_atbrowser_typebrowser_press_keybrowser_scrollbrowser_waitbrowser_screenshotbrowser_window_resizebrowser_emulate_viewportbrowser_clear_emulationbrowser_assertbrowser_audit_interactivesbrowser_act_and_observebrowser_assert_no_errorsbrowser_wait_for_responsebrowser_page_assetsbrowser_set_storagebrowser_upload_stagebrowser_upload_filebrowser_playbook_listbrowser_playbook_getbrowser_playbook_savebrowser_playbook_deletebrowser_playbook_matchbrowser_playbook_runbrowser_playbook_propose_updatebrowser_playbook_secret_checkbrowser_playbook_seed_from_codebasebrowser_playbook_diff_acceptbrowser_playbook_exportbrowser_playbook_importbrowser_playbook_dashboardbrowser_recall_selectorbrowser_forget_selectorbrowser_list_selectorsbrowser_workflow_savebrowser_workflow_runbrowser_run_history
| browser_click | — | |
| browser_click_at | — | |
| browser_type | — | |
| browser_press_key | — | |
| browser_scroll | — | |
| browser_wait | — | |
| browser_screenshot | — | |
| browser_window_resize | — | |
| browser_emulate_viewport | — | |
| browser_clear_emulation | — | |
| browser_assert | — | |
| browser_audit_interactives | — | |
| browser_act_and_observe | — | |
| browser_assert_no_errors | — | |
| browser_wait_for_response | — | |
| browser_page_assets | — | |
| browser_set_storage | — | |
| browser_upload_stage | — | |
| browser_upload_file | — | |
| browser_playbook_list | — | |
| browser_playbook_get | — | |
| browser_playbook_save | — | |
| browser_playbook_delete | — | |
| browser_playbook_match | — | |
| browser_playbook_run | — | |
| browser_playbook_propose_update | — | |
| browser_playbook_secret_check | — | |
| browser_playbook_seed_from_codebase | — | |
| browser_playbook_diff_accept | — | |
| browser_playbook_export | — | |
| browser_playbook_import | — | |
| browser_playbook_dashboard | — | |
| browser_recall_selector | — | |
| browser_forget_selector | — | |
| browser_list_selectors | — | |
| browser_workflow_save | — | |
| browser_workflow_run | — | |
| browser_run_history | — |
Automated checks
Ran Nov 14, 2026Full report →Not verified yet. A server needs a score of 80, no serious finding, and enough data for us to check. How checks work
- Source repository linked and reachabledevzonayed/mochi is public and reachablegithub.com/devzonayed/mochi ↗Pass
- Package names this repository as its sourceNot checked
- Build provenance (Sigstore attestation)Not checked
- Open source license (OSI)MITspdx.org/licenses/MIT.html ↗Pass
- Commit or release in the last yearLast commit or release 2026-11-03github.com/devzonayed/mochi ↗Pass
- OpenSSF ScorecardNot checked
- Package name not close to a popular packageNot checked
- No critical advisory in the package or its dependenciesNot checked
- No hidden instructions to the model50 tool descriptions and the README read; no override phrases, credential paths or hidden charactersPass
- Destructive tools are labelledNo tool named like delete, drop or execPass
- Remote endpoint answers the MCP handshakeNot checked
README
View on GitHubMochi
Browser companion for AI assistants. Browser automation MCP + persistent project memory + in-page hint messaging, all in one Claude Code plugin.
A QA-tester MCP for AI assistants — with memory.
Each AI session runs inside its own Chrome tab group (your other tabs are untouched). What's new: every successful action is auto-traced, and the agent can save the trace as a named workflow scoped to a domain. Next time you ask "test the login flow on staging", the agent replays the saved workflow with cached selectors — no re-discovery, no re-screenshotting. If a selector breaks (refactor, A/B test, redesign), the engine self-heals by ARIA role + name and updates the cache.
selector cache + workflow store
(file-based, <project>/.continuum/)
▲
AI client (Claude Code / Codex / Cursor)
│ stdio (MCP) ▲
▼ │
server/ ──── auto-launches Chrome ─┴─▶ Chrome
│ WebSocket │
▼ ▼
extension/ background.js ◀────────────── manifest V3 extension
│
▼
session = { tab group, primary tab, tab set, CDP }
Layout
| Directory | What it is |
|---|---|
server/ |
Node MCP server. WS server (port 9009) + file-based memory + workflow replay engine. |
extension/ |
Chrome MV3 extension. Owns the tab group, CDP attachments, and DOM helpers. |
mcp/ |
Reference clone of upstream Browser MCP (not used; archival). |
Memory (selector cache, workflows, runs) lives in <project>/.continuum/
alongside the Continuum chain data — pure files, no database. Override with
SUPER_TESTER_DATA_DIR.
Install (one plugin, one extension, done)
Mochi is a Claude Code plugin bundling browser automation, context-chain
memory, and popup hint messaging. The server is pre-bundled into a single
file (server/dist/server.bundle.mjs) by GitHub Actions on every push to
the default branch — so installing means cloning the repo. No npm install,
no native binaries, no setup script.
Install from GitHub (recommended)
# Inside any Claude Code session:
/plugin marketplace add DevZonayed/Mochi
/plugin install mochi@mochi
That's it for the plugin. Then load the Chrome extension once:
chrome://extensions → Developer mode → Load unpacked → select
~/.claude/plugins/cache/mochi/mochi/0.6.0/extension
Restart Claude Code. Press ⌘⇧M (macOS) or Ctrl+Shift+M (other) on any tab to send a hint with picked elements + screenshot.
Install from a local checkout (if hacking on the plugin itself)
/plugin marketplace add /absolute/path/to/your/Mochi/checkout
/plugin install mochi@mochi
If you change source files, rebuild the bundle before reloading:
cd /path/to/Mochi/server && npm install && npm run build
Then /reload-plugins inside Claude (or /plugin uninstall mochi && /plugin install mochi@mochi for a clean refresh).
The plugin auto-registers:
- Two MCP servers —
browser(automation tools) andcontinuum(recall tool) - Seven slash commands —
/continuum:checkpoint,/continuum:recall,/continuum:status,/continuum:dream,/continuum:feedback,/continuum:rename,/continuum:render - Seven hooks — SessionStart, PreCompact, SessionEnd, PreToolUse, PostToolUse, Stop, UserPromptSubmit
- The
/browserskill
For the in-page hint modal: press ⌘⇧M (macOS) or Ctrl+Shift+M on any page once the extension is loaded.
Migrating from the older super-tester plugin name
If you had an earlier install when the plugin was called super-tester, run:
/plugin uninstall super-tester
/plugin marketplace remove super-tester
…then follow the install steps above using the new mochi names. Your
.continuum/ chain data, screenshots, and feedback queue are tied to your
project dir (not the plugin name) — they survive the rename.
Updating
Whenever new versions of mochi land (bumped version in plugin.json):
/plugin update mochi
Claude Code re-copies the source files into its plugin cache and switches the
active install over. MCP servers respawn on next Claude restart. For hook /
command / skill changes only, /reload-plugins works mid-session.
Legacy install script
The older ./install.sh script (which edited ~/.claude.json directly) is
still in the repo but is now redundant with the plugin route. Don't use both
at the same time — pick one.
./install.sh --uninstall # remove the legacy .claude.json entry if present
Tools (MCP)
65 tools, grouped by purpose.
Design-QA loop (0.9.0+). An agent can run a design-QA pass and drop a comment on every issue via
browser_comment_add— those comments appear to you as pins in Comment Mode (they share the extension's storage). You review/edit them client-side, then the agent reads the session back (browser_comment_list) and fixes everything in bulk, marking eachbrowser_comment_resolve. Drive it with/mochi:design-qa [focus]and/mochi:design-qa fix.
Notifications, not focus-stealing (0.5.0+). Automation never raises the Chrome window to the OS foreground on its own — it posts a click-to-focus notification titled
Mochi · <project>instead, so it won't yank you out of your editor. Clicking the toast brings that session's window forward. The agent can ping you on purpose viabrowser_request_attention. Requires a one-time "reload unpacked extension" (newnotificationspermission); on macOS, enable Google Chrome under System Settings → Notifications (the popup walks you through it).
Session + tabs
| Tool | What it does |
|---|---|
browser_session_start |
New tab group + primary tab. Pass newWindow:true to spawn a fresh window. Posts a click-to-focus notification instead of stealing focus. |
browser_session_end |
Detach debugger, ungroup or close session tabs. |
browser_request_attention |
Post an OS notification asking the human to look (captcha, choice, or "done — come look"). Click focuses the window. |
browser_navigate |
Navigate primary tab, wait for load. |
browser_open_tab |
Open new tab inside the session group. |
browser_list_tabs |
List session tabs + CDP attachment state. |
browser_close_tab |
Close a specific session tab. |
Discovery + interaction
| Tool | What it does |
|---|---|
browser_text |
Compact visible text lines, optionally filtered by query. Use before snapshot for reading/searching content. |
browser_links |
Compact visible links with text, href, selector ref, and box. |
browser_snapshot |
ARIA tree with stable refs + pixel boxes. Defaults to compact, viewport-only, redacted, depth-limited, and 12KB capped. |
browser_snapshot_query |
Search the stored snapshot by text/name/role/ref/tag and return tiny excerpts. |
browser_snapshot_node |
Return one compact subtree from the stored snapshot by ref, text, or query path. |
browser_click |
Click by selector (CDP). Pass intent to cache the selector for next time. |
browser_click_at |
Click at pixel coords (CDP). |
browser_type |
Focus + clear + insertText. Pass intent to cache. |
browser_press_key |
Real keyboard event (CDP). |
browser_scroll |
Absolute {x,y} or relative {deltaX,deltaY}. |
browser_go_back / browser_go_forward |
History navigation. |
browser_wait |
Sleep up to 60s. |
browser_screenshot |
PNG/JPEG (viewport / fullPage / elementRef). |
Viewport + window
| Tool | What it does |
|---|---|
browser_window_resize |
Resize/move/maximize the actual window (only safe with newWindow). |
browser_emulate_viewport |
Device Mode via CDP. Presets + custom width/height/DPR/UA. |
browser_clear_emulation |
Reset viewport overrides. |
Assertions
| Tool | What it does |
|---|---|
browser_assert |
Verify url-contains, url-equals, title-contains, element-exists, element-missing, text-contains, text-equals. Returns {ok, got}. |
QA truth & coverage (0.5.0)
The verdict-driven core of an exhaustive QA pass. Render != Works: a control that paints on screen is not a verified control. These tools enumerate every actionable element, drive each one, and prove what actually happened.
| Tool | What it's for |
|---|---|
browser_audit_interactives |
Enumerate every actionable control on the page (scope:"all"|"viewport", limit, includeHidden). The coverage backbone — returns {selector, role, accessibleName, visible, inViewport, disabled, hasClickHandler, box} per element so nothing goes UNTESTED. |
browser_act_and_observe |
Perform one action (click/type/navigate/press_key/click_at) and classify the result: WORKS / NO-OP / ERROR / NAVIGATES. A NO-OP (clickable but nothing changed) is a dead control = defect. Returns urlChanged, domChanged, networkDelta, consoleDelta. |
browser_assert_no_errors |
One-call health gate: ok=false if any console error/uncaught exception or any >=400/failed request happened since the page loaded (sinceNavigation default, or sinceMs, with ignoreUrlContains). Failed-request entries include .body. |
browser_wait_for_response |
Block until a matching network response arrives (urlGlob/urlContains, method, statusGte/statusLt, timeoutMs). Proves a write actually persisted instead of guessing from the UI. |
browser_page_assets |
Hash the live page assets (script/css/document) with sha256 + a pageHash. Confirm the live bundle hash == the built hash so you never test a stale cached deploy. |
browser_set_storage |
Deterministic auth/state seeding — set localStorage, sessionStorage, and cookies (or clear) in one call so a flow starts from a known logged-in state. |
Enhancements to existing tools in 0.5.0:
browser_navigatenow acceptshardReload(cache-bypass load) anddisableCache(persist cache-off for the tab) — pair withbrowser_page_assetsto defeat stale bundles.browser_console_messagesacceptssinceNavigation:trueto scope to the current page (the fix for a stale pre-navigation buffer reading as a false "no errors");level:"error"includes uncaught exceptions.browser_network_requestsacceptssinceNavigation,sinceMs, andincludeBody; error responses (>=400/failed) include the captured response body automatically, so an "Internal server error" tells you why (e.g. SMTP misconfig) instead of guessing.browser_clicknow reports disabled controls (fails loudly with "element is disabled" rather than silently passing) and retries a transient not-found once.browser_session_healthacceptsheal:trueto re-attach the debugger to session tabs.
File uploads
| Tool | What it does |
|---|---|
browser_upload_stage |
Stage a file into the per-project library at .continuum/uploads/. Accepts path, https url, dataUrl, or base64. Returns a stable stashId (sha256-based, idempotent) reusable across many uploads. |
browser_upload_file |
Attach a file to a page target via a strategy chain: direct (DOM.setFileInputFiles) → intercept (file-chooser dialog) → drop (synthesized DataTransfer + DragEvent) → paste (synthesized ClipboardEvent). Bypasses the native OS file picker entirely. Target by selector, ref, trigger, or auto: { near }. Smart-wait confirms upload (preview thumbnail / 2xx upload response / custom successSelector). |
Sources can be inlined into browser_upload_file or pre-staged with
browser_upload_stage; staging dedupes by sha256, so the same logo across
ten sites is fetched/decoded once and reused. Frame-traversal handles
same-origin iframes automatically. See
docs/superpowers/specs/2026-05-19-browser-file-upload-design.md
for the full design.
Playbooks (personal ops memory)
| Tool | What it does |
|---|---|
browser_playbook_list |
List playbooks under .continuum/playbooks/, filter by origin/tag/verifiable. |
browser_playbook_get |
Return one playbook with meta + body sections + workflow JSON. |
browser_playbook_save |
Create/update a playbook (validates frontmatter and required sections). |
browser_playbook_delete |
Remove a playbook + workflow + screenshots. |
browser_playbook_match |
Score-match playbooks against a URL, intent, or task description. |
browser_playbook_run |
Replay a playbook (with self-heal) using provided inputs; recursively executes composes/next chains; returns verdict + evidence. |
browser_playbook_propose_update |
Given a successful trace, create or update the matching playbook. Inputs and steps auto-inferred. |
browser_playbook_secret_check |
Validate that a playbook's type: secret inputs are resolvable (env or .continuum/secrets/). Returns availability only — never values. |
browser_playbook_seed_from_codebase |
Static-analyze the project's frontend (Next.js / Vite / CRA) and emit draft playbooks per route + form. Solves cold-start on in-house apps. |
browser_playbook_diff_accept |
Bless a run's per-step screenshots as the new visual reference; bumps playbook_version. |
browser_playbook_export |
Export one or more playbooks to a single JSON bundle file. Includes embedded base64 screenshots. |
browser_playbook_import |
Import a playbook bundle (file / inline JSON / https URL). Supports overwrite + rewriteOrigin (e.g., staging → production). |
browser_playbook_dashboard |
Generate a self-contained HTML dashboard from the library; opens in the active browser session. |
v1.5 capabilities:
- Typed secrets:
inputs[].type: secretresolves at runtime from${env:VAR}or${secret:name}(reads.continuum/secrets/<name>.txt, which ischmod 0700with an auto-protective.gitignore). Secret values never appear in.continuum/runs/traces or promoted playbook bodies. - Codebase-derived drafts: point
browser_playbook_seed_from_codebaseat this project and it walks your routes (Next.js App/Pages Router, Vite, CRA), extracts forms +data-testids +aria-labels, and emits draft playbooks per route. Password fields auto-typed assecret. - Visual diff regression: during
browser_playbook_run, each step's screenshot is compared (pixelmatch) against the playbook's reference.warnbetween 5–20% diff;fail≥20% (configurable per playbook). Usebrowser_playbook_diff_acceptto bless intentional UI changes.
See docs/superpowers/specs/2026-05-20-playbooks-v1-5-design.md.
v2 capabilities (Sharing & Polish):
- 1Password integration:
inputs[].type: secretrefs accept${1password:vault/item/field}(alias${op:...}). When theopCLI is installed and signed in, values are resolved viaop readat run time and never logged. - Vue + SvelteKit codebase seeding: Nuxt projects (
nuxt.config.*) and SvelteKit projects (svelte.config.*+@sveltejs/kit) are detected bybrowser_playbook_seed_from_codebasein addition to Next.js / Vite / CRA. - Blocked-verdict UX:
browser_playbook_runreturnsverdict: "blocked"with aneeds[]array (one entry per missing required input + ahintper source) instead of throwing. The main agent uses the hints to prompt the user (or fix env) and then retries. - Cross-project playbook bundles:
browser_playbook_exportwrites a single JSON containing markdown + workflow + base64 screenshots;browser_playbook_importrestores them anywhere. Supports overwrite + origin rewrite for staging → production migration. - HTML dashboard:
/mochi:playbook ui(orbrowser_playbook_dashboard) generates a self-contained dashboard with search, tag filters, and inline drill-down per playbook.
See docs/superpowers/specs/2026-05-20-playbooks-v2-design.md.
Combined with the bundled qa-tester subagent and the smart-router rule in
plugins/qa/CLAUDE.md, the playbook library is your personal ops memory —
each browser task you do once becomes replayable, chainable, and
scheduleable. Main Claude routes verifiable + repeatable tasks to the
isolated qa-tester subagent (which returns a pass/fail verdict + evidence)
while operational tasks (multi-step, decisive, may need mid-flow input)
stay in the main conversation and use playbooks as guidance.
Slash commands:
/qa <task>— dispatch the qa-tester subagent for a verifiable browser task./mochi:playbook list|show|run|delete|match [args]— manage playbooks./mochi:schedule-playbook <id>— wire up cron via the host'sscheduleskill./mochi:unschedule-playbook <id>— cancel a scheduled playbook.
See docs/superpowers/specs/2026-05-20-personal-ops-playbooks-design.md
for the full design.
Memory: selector cache (per origin)
| Tool | What it does |
|---|---|
browser_recall_selector |
"Do I already know how to find X on this site?" Returns cached selector or null. |
browser_forget_selector |
Drop a cached entry. |
browser_list_selectors |
Inspect the cache. |
Memory: workflows
| Tool | What it does |
|---|---|
browser_workflow_save |
Persist current session's auto-traced actions as a named workflow. |
browser_workflow_run |
Replay. Cached selector → self-heal by role+name → screenshot on miss. |
browser_workflow_list / _get / _delete |
Manage workflows. |
browser_workflow_export / _import |
Portable JSON (commit alongside your app's tests). |
browser_run_history |
Last N runs of a workflow. |
Compact inspection ladder
Use the smallest inspection tool that can answer the current question:
browser_text {query?, limit?}for page copy, search results, lists, and visible facts.browser_links {query?, limit?}for navigation choices.browser_snapshotfor clickable refs and visible actionable UI.browser_snapshot_queryfor targeted search inside the stored snapshot.browser_snapshot_nodefor the one subtree you need.browser_snapshot {mode:"full", scope:"all", maxBytes:0}only as an explicit last resort.
This keeps Claude Code, Codex, and parallel agents from flooding their context with full-page accessibility trees.
Visual placement loop
browser_snapshot → compact tree with refs + boxes
browser_screenshot → image (viewport / fullPage / elementRef)
↓
agent correlates ref ↔ box ↔ pixel position
↓
browser_click {ref, intent:"…"} ← intent caches the selector
Resize vs. emulate — when to use which
Read this carefully — these two tools are NOT interchangeable:
browser_emulate_viewportchanges the page's real JS layout. It drives CDPEmulation.setDeviceMetricsOverride, so it does changewindow.innerWidth/window.innerHeightand does flipmatchMedia/ CSS media queries. This is the tool you use for responsive and media-query testing — breakpoints, mobile layouts,@mediarules all respond to it.browser_window_resizeonly moves/sizes the OS-level Chrome window. It does NOT affectwindow.innerWidthormatchMedia— the page's JS layout is unchanged. Use it only when you genuinely need real OS window dimensions (e.g. screenshotting the full chrome of a large monitor).
A common past mistake was conflating the two — or assuming
emulate_viewport"only affects screenshots." It does not; it changes JS layout.
| Goal | Tool |
|---|---|
| Test a real responsive layout at iPhone size | browser_emulate_viewport {preset:"iphone-15-pro"} (changes innerWidth/matchMedia, includes touch + UA) |
| Verify a layout breakpoint at exactly 768px wide | browser_emulate_viewport {width:768, height:1024} (media queries respond) |
| Test how the OS window behaves at a real 2560×1440 monitor | browser_window_resize {width:2560, height:1440} (only safe in a session-owned window; JS layout unchanged) |
| Reset back to native | browser_clear_emulation |
emulate_viewport is preferred for layout/responsive testing — it's
deterministic, doesn't disturb anything else, matches Chrome DevTools' Device
Mode, and actually changes what the page's JavaScript sees. window_resize is
for when you genuinely need real OS-level window dimensions.
Exhaustive QA coverage mode
Beyond one-off checks, Mochi can run an exhaustive QA pass (/qa exhaustive)
that enumerates every actionable control with browser_audit_interactives,
drives each one through browser_act_and_observe, gates every page and action
with browser_assert_no_errors, and assigns one of five verdicts to each
control: WORKS, NO-OP (defect), ERROR (defect), NAVIGATES, or
DISABLED. Results are recorded in a verification ledger with
provenance stamping, and a built-in honesty gate refuses to report a run as
"pass" while any control is still UNTESTED/UNCERTAIN — the rule is never "everything
works" but "N of M controls verified — here is each result, and here is what I
could NOT verify and why." Hard-won tooling quirks live in a persistent
tooling-gotchas note so they're never
re-learned.
Memory model
Two layers, stored as plain JSON files under <project>/.continuum/ (no
database, no native bindings).
1) Selector cache — keyed by (origin, intent)
Every browser_click / browser_type call may carry an intent ("click sign in
button", "email field"). On success, the resolved selector is cached at
(origin, intent). The agent can short-circuit discovery by calling
browser_recall_selector before snapshotting:
browser_recall_selector {intent:"click sign in button"}
→ {found:true, selector:'button[aria-label="Sign in"]', last_box:{...}}
browser_click {ref:'button[aria-label="Sign in"]', intent:"click sign in button"}
The cache survives Chrome restarts, project reloads, server restarts.
Mochi MCP questions
What tools does Mochi MCP provide?
It exposes 50 tools, including browser_session_start, browser_session_end, browser_request_attention, browser_navigate, browser_open_tab.
How does Mochi handle selector changes in the UI?
The engine uses a self-healing mechanism based on ARIA roles and names to update the selector cache when a redesign or refactor occurs.
Where is the project memory and workflow data stored?
All memory, including selector caches, workflows, and runs, is stored as pure files in the <project>/.continuum/ directory.
Does the browser automation interrupt my current work?
No, automation does not steal OS focus; instead, it sends a click-to-focus notification when it needs attention.
How do I install Mochi for Claude Code?
You can install it directly within a Claude Code session using the plugin marketplace commands.