{"name":"io.github.Samrj12/doppel","slug":"samrj12-doppel","title":null,"description":"Drive your real, logged-in Chrome/Edge from AI agents over CDP. Faster. Sharper.","url":"https://mcp.market/server/samrj12-doppel","rating":null,"grade":"C","score":65,"certified":false,"status":"active","category":"productivity","tags":["productivity"],"presence":{"score":7,"stars":null,"forks":null,"downloads_week":28,"last_push_at":null,"license":"MIT"},"uptime":null,"claimed":false,"transport":"npm","callable_via_gateway":false,"default_price_micros":0,"repository":null,"website":null,"version":"0.7.2","remotes":[],"packages":[{"registryType":"npm","identifier":"doppel-mcp","version":"0.7.2","transport":{"type":"stdio"}}],"tools":[{"name":"doppel_batch","description":"Apply a SEQUENCE of actions (click/type/press_key/hover) in ONE call, in order. PREFER THIS over separate click/type calls whenever you can already see the targets in the current snapshot - e.g. filling a form, ticking several checkboxes, or 'pick an option then click Continue'. Each separate tool call costs a full model round-trip; a batch is one. Refs come from the latest snapshot, so all target","write_action":false,"price_micros":0,"input_schema":null},{"name":"doppel_cleanup_tabs","description":"Close leftover Doppel automation tabs. By default only the generic 'Doppel' / 'Doppel Test' groups (debris from past sessions), leaving purpose-named task groups alone. Pass all:true to also close every purpose-named Doppel task group. Non-Doppel tabs and groups are never touched.","write_action":false,"price_micros":0,"input_schema":null},{"name":"doppel_click","description":"Click an element by its [ref] from the latest snapshot. Waits until it's actionable, then uses trusted native input. If you already know several actions from this snapshot, prefer doppel_batch to run them in one call.","write_action":false,"price_micros":0,"input_schema":null},{"name":"doppel_close_tab","description":"Close a tab Doppel controls and drop its session.","write_action":false,"price_micros":0,"input_schema":null},{"name":"doppel_console","description":"See the page's console output + JS errors, captured read-only. By default shows browser-level problems (errors, warnings, failed network/CSP/deprecation), which is fully stealthy. Page console.log/info is NOT captured unless you set `pageConsole:true`, which enables the CDP Runtime domain (detectable by a hostile page while on, so off by default; captures from that point forward). Uncaught JS exce","write_action":false,"price_micros":0,"input_schema":null},{"name":"doppel_hover","description":"Hover the mouse over an element by its [ref] (reveals menus/tooltips). Waits until it's actionable.","write_action":false,"price_micros":0,"input_schema":null},{"name":"doppel_list_tabs","description":"List the tabs Doppel controls (its tab group), with URLs and which is active.","write_action":false,"price_micros":0,"input_schema":null},{"name":"doppel_navigate","description":"Navigate the active tab: go to a URL, or go back/forward/reload. Waits for load. Returns the final URL plus a fresh page snapshot (by default).","write_action":false,"price_micros":0,"input_schema":null},{"name":"doppel_network","description":"See the page's network activity, captured read-only from the moment the tab attaches. Without `reqid`, returns a compact one-line-per-request list; pass `reqid` for full detail plus the response body. Successful static assets (images/fonts/scripts/css) are hidden unless `includeStatic`. Filter with `grep` (URL), `status`, `method`, `resourceType`, `failedOnly`, `xhrOnly` (just API calls), or `sinc","write_action":false,"price_micros":0,"input_schema":null},{"name":"doppel_new_tab","description":"Open a new tab (background, no focus stealing) and make it active. Optionally load a URL. Pass `group` to name the tab group by the task's purpose (e.g. '27in Monitor'); tabs sharing a group cluster together.","write_action":false,"price_micros":0,"input_schema":null},{"name":"doppel_press_key","description":"Press a special key (Enter, Tab, Backspace, Delete, Escape, Arrow keys) via trusted native input.","write_action":false,"price_micros":0,"input_schema":null},{"name":"doppel_screenshot","description":"Screenshot the current page (PNG by default). Returns the image. Prefer doppel_snapshot (text) when possible; use this only when you need to SEE pixels.","write_action":false,"price_micros":0,"input_schema":null},{"name":"doppel_scroll","description":"Scroll an element into view by its [ref] - e.g. to scroll to the last item of a list to trigger lazy-loading / infinite scroll, then re-snapshot. The snapshot already captures the whole page (all elements, on- or off-screen) and clicks auto-scroll into view, so use this only to trigger scroll-driven loading, not to 'see more'.","write_action":false,"price_micros":0,"input_schema":null},{"name":"doppel_select_tab","description":"Switch the active tab to another tab Doppel controls (tabId from doppel_list_tabs).","write_action":false,"price_micros":0,"input_schema":null},{"name":"doppel_set_group","description":"Name the current tab's group by the task's PURPOSE (e.g. '27in Monitor', 'Job Apply'), not the site. Call this at the start of a task so the group chip reads as what you're doing instead of 'Doppel'.","write_action":false,"price_micros":0,"input_schema":null},{"name":"doppel_snapshot","description":"Capture a structured accessibility snapshot of the current page. Elements are tagged with a [ref] for doppel_click/doppel_type; refs stay stable across grep/offset within a snapshot. Fast: no screenshot. On dense pages (search results, shopping) use interactive:true and/or grep to cut noise, and offset to page through results.","write_action":false,"price_micros":0,"input_schema":null},{"name":"doppel_status","description":"Check whether the Doppel browser extension is connected. Call this first if other tools error out.","write_action":false,"price_micros":0,"input_schema":null},{"name":"doppel_type","description":"Type text into an element by its [ref]. Waits until actionable, focuses it, and inserts trusted text (works with React/controlled inputs).","write_action":false,"price_micros":0,"input_schema":null},{"name":"doppel_upload","description":"Upload local file(s) to a file input WITHOUT opening the native OS file dialog. Point `ref` at the upload control from a snapshot - the file input itself, or the button/label that opens it (Doppel finds the underlying <input type=file>). `path` is an absolute path on this machine; pass an array for a multi-file input. Fires the real change event, so the page reacts exactly as if a human picked the","write_action":true,"price_micros":0,"input_schema":null},{"name":"doppel_wait_for","description":"Wait until specific text appears on the page, or for a fixed time. Use after an action that loads content.","write_action":false,"price_micros":0,"input_schema":null}],"scan":{"score":65,"grade":"C","scanned_at":"2026-09-23T21:39:23.980Z","report":{"scannerVersion":"0.1.9","scannedAt":"2026-09-23T21:39:23.964Z","components":{"code":{"score":25,"max":25,"notes":["3 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":3,"max":15,"notes":["no repository listed"]},"identity":{"score":2,"max":10,"notes":["no repository or website to verify"]}},"findings":[{"id":"maint.no-repo","severity":"low","component":"maintenance","title":"No source repository listed"}],"inputs":{"packages":[{"registryType":"npm","identifier":"doppel-mcp","version":"0.7.2","found":true,"license":"MIT","hasInstallScripts":false,"dependencyCount":3,"publishedAt":"2026-08-10T16:53:13.905Z","weeklyDownloads":28}],"repo":{"found":false},"icon":{"url":null,"source":"none"},"presence":{"stars":null,"forks":null,"downloadsWeek":28,"license":"MIT","lastPushAt":null,"score":7}}}},"grade_history":[],"reviews":[]}