{"name":"io.github.Cubenest/peek-mcp","slug":"cubenest-peek-mcp","title":"peek","description":"Exposes recorded browser sessions (rrweb DOM, console, network) to AI coding agents, fully local","url":"https://mcp.market/server/cubenest-peek-mcp","rating":null,"grade":"B","score":74,"certified":false,"status":"active","category":"scraping","tags":["scraping"],"presence":{"score":30,"stars":7,"forks":0,"downloads_week":51,"last_push_at":"2026-07-10T16:00:26.000Z","license":"Apache-2.0"},"uptime":null,"claimed":false,"transport":"npm","callable_via_gateway":false,"default_price_micros":0,"repository":"https://github.com/Cubenest/rrweb-stack","website":"https://peek.cubenest.in","version":"0.1.0-alpha.24","remotes":[],"packages":[{"registryType":"npm","registryBaseUrl":"https://registry.npmjs.org","identifier":"@peekdev/mcp","version":"0.1.0-alpha.24","runtimeHint":"npx","transport":{"type":"stdio"}}],"tools":[{"name":"clear_highlight","description":"Remove the highlight overlay previously drawn by suggest_element in the user's live browser. Available at per-origin permission Level 2 (Suggest) and above. Idempotent. Recorded to ~/.peek/audit.log.","write_action":true,"price_micros":0,"input_schema":null},{"name":"execute_action","description":"","write_action":true,"price_micros":0,"input_schema":null},{"name":"generate_playwright_repro","description":"Generate a runnable Playwright test (TypeScript) reproducing the user actions in a session: clicks, typing, navigation, and <select> changes. Optionally limit to a [startTs, endTs] epoch-ms window. Pass errorId (from get_session_console_errors) to seed a console-error-absence regression assertion — the generated test will capture console errors and assert the given error is not reproduced. Returns","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_dom_snapshot","description":"Reconstruct the page DOM as it existed at a timestamp (or a selector subtree within it) and return it as HTML. Applies structural/attribute/text mutations on top of the nearest full snapshot at or before ts. Returns JSON { baseSnapshotTs, mutationsApplied, html }; html clipped to 24000 chars. Fails if no full snapshot exists at or before ts.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_element_detail","description":"Given a `ref` from get_page_view, return the FULL masked detail of that single element","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_page_view","description":"Return a compact, masked snapshot of the user's LIVE page as a list of interactive/labeled elements, each with a stable `ref` (e.g. e5). Pass a `ref` to execute_action / request_authorization (click/type/scroll/enter/dblclick) instead of authoring a CSS selector — deterministic and far cheaper than reading get_dom_snapshot's HTML. Refs expire on navigation; re-call after navigating. Available at p","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_session_console_errors","description":"List console error messages recorded in a session, oldest first. Each row has a numeric id to pass to get_user_action_before_error. Returns JSON rows ({ id, ts, level, message, stack }); message clipped to 500 and stack to 800 chars. For error counts at a glance, use get_session_summary first.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_session_network_errors","description":"List failed or notable network requests in a session (HTTP status >= statusGte, or a transport-level network error), oldest first. Returns JSON rows ({ id, ts, method, url, status, statusText, resourceType, durationMs, errorText }); url and errorText clipped to 300 chars.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_session_summary","description":"Get an LLM-readable narrative summary of one session — your orientation for debugging what already happened: pages visited, click/input/navigation counts, and error counts. Use this first for an overview before drilling into get_session_console_errors / get_session_network_errors. Returns a structured JSON summary.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_user_action_before_error","description":"Pre-assembled causal chain for a console error: the user actions, DOM mutations, and network errors in the window before it, merged into one time-ordered timeline with a deterministic narrative — to explain how the error was triggered. Returns JSON { errorId, errorTs, error, windowMs, actions, domMutations, networkErrors, timeline, narrative, truncated }. Get errorId from get_session_console_error","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_recent_sessions","description":"List the user's recorded browser sessions, newest first — the entry point for debugging what already happened (the get_session_* and DOM tools). Returns compact JSON rows ({ sessionId, origin, url, title, startedAt, ... }); free-text fields are clipped (origin 100, url 300, title 200 chars). If the MCP client scoped roots to specific origins and no origin filter is given, results are restricted to","write_action":false,"price_micros":0,"input_schema":null},{"name":"query_dom_history","description":"Timeline of DOM changes in a session. Two modes: (1) selector mode — pass `selector` to track one node's attribute/text history (use `op` to restrict). (2) window mode — pass `ts` (and optional `windowMs`) instead, to get ALL DOM changes in [ts - windowMs, ts] with per-change `target` hints, no selector needed. Returns JSON { selector, changes } or { ts, windowMs, changes }.","write_action":false,"price_micros":0,"input_schema":null},{"name":"request_authorization","description":"Ask the user to authorize a browser action via the side-panel banner (Level-3 act-with-confirm). On Allow, returns a one-shot confirmToken to pass to execute_action; on Deny, returns the denial. Every call - allowed or denied - is recorded to ~/.peek/audit.log. Use before execute_action when the origin is at permission Level 3, or to pre-authorize.","write_action":false,"price_micros":0,"input_schema":null},{"name":"request_pairing","description":"Initiate a connector-pairing handshake: present a pairing code and receive a one-shot secret on approval. The connecting client name is taken from the MCP connection identity. Returns JSON { approved, secret? }. Every attempt is recorded to ~/.peek/audit.log; the secret is never written to the log.","write_action":false,"price_micros":0,"input_schema":null},{"name":"request_user_input","description":"Pause the agent and hand the keyboard back to the user for ONE editable, non-destructive field (or a free-text prompt), then resume. Requires the origin at Level 4 with the control shield up. Blocks until the user clicks Done, a timeout fires, or the run is stopped. Returns { resumed:true, value? } or { resumed:false, reason }. The returned value is only included when readBack:true and the field i","write_action":false,"price_micros":0,"input_schema":null},{"name":"search_sessions","description":"","write_action":false,"price_micros":0,"input_schema":null},{"name":"set_intent","description":"Set the agent's status banner shown on the control shield (e.g. 'Applying to Senior Frontend · step 2/4'), so the user can follow what you're doing. Up to 80 chars, plain text. Requires the origin at Level 4 with the shield up; auto-allowed. Recorded to ~/.peek/audit.log. Advance the step only after the previous step verified (re-read it took); on a failure, set a 'stopped — <what> didn't take' st","write_action":false,"price_micros":0,"input_schema":null},{"name":"suggest_element","description":"Draw a non-destructive highlight overlay on a CSS selector in the user's live browser, with an optional label, to point something out. Available at per-origin permission Level 2 (Suggest) and above; it never clicks, types, or navigates. The overlay persists until clear_highlight is called. Every call is recorded to ~/.peek/audit.log.","write_action":false,"price_micros":0,"input_schema":null},{"name":"verify_audit_log","description":"Verify the integrity of peek's local action audit log (~/.peek/audit.log) — the append-only, hash-chained record of every browser action peek authorized or attempted. Returns JSON { logPresent, status, entriesVerified, prelude, headPresent, brokenAtLine?, expected?, got?, gaps?, summary }. status is one of intact | broken | truncated | tail-tampered | prefix-tampered | incomplete-final | gaps | he","write_action":false,"price_micros":0,"input_schema":null}],"scan":{"score":74,"grade":"B","scanned_at":"2026-09-26T05:14:58.761Z","report":{"scannerVersion":"0.1.9","scannedAt":"2026-09-26T05:14:58.728Z","components":{"code":{"score":15,"max":25,"notes":["79 source files scanned"]},"reliability":{"score":-1,"max":20,"notes":["no gateway calls yet and no remote to probe"]},"poisoning":{"score":-1,"max":15,"notes":["tools not inspected (local package is not executed); not counted"]},"auth":{"score":12,"max":15,"notes":["local package, no credentials required"]},"maintenance":{"score":12,"max":15,"notes":["last push 78 days ago"]},"identity":{"score":9,"max":10,"notes":["registry namespace matches repository owner","GitHub account older than a year"]}},"findings":[{"id":"install.script","severity":"medium","component":"code","title":"npm install lifecycle script present"},{"id":"install.script","severity":"medium","component":"code","title":"npm install lifecycle script present","evidence":"package.json: …t\": \"vitest run --passWithNoTests\", \"postinstall\": \"node ./scripts/postinstall-guard.mjs\" …"}],"inputs":{"packages":[{"registryType":"npm","identifier":"@peekdev/mcp","version":"0.1.0-alpha.24","found":true,"license":"Apache-2.0","hasInstallScripts":true,"dependencyCount":4,"publishedAt":"2026-07-09T07:51:21.908Z","repositoryUrl":"git+https://github.com/Cubenest/rrweb-stack.git","weeklyDownloads":51}],"repo":{"found":true,"owner":"Cubenest","repo":"rrweb-stack","archived":false,"pushedAt":"2026-07-10T16:00:26Z","stars":7,"forks":0,"openIssues":4,"ownerType":"Organization","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/54594610?v=4","ownerCreatedAt":"2019-08-27T16:52:28Z","license":"Apache-2.0"},"icon":{"url":"https://peek.cubenest.in/favicon.svg","source":"site"},"presence":{"stars":7,"forks":0,"downloadsWeek":51,"license":"Apache-2.0","lastPushAt":"2026-07-10T16:00:26.000Z","score":30}}}},"grade_history":[],"reviews":[]}