Rove
NPM · @ROVEAPI/MCP · 2 COMPONENTS
Rove — supervised browser for AI agents. Your agent drives; a human watches, takes over.
Available components
Last scanned (3 hours ago)
Scores higher than 48% of npm servers
Category Browser Automation
How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →
Supply Chain Security98
- No malware found by supply-chain analysis.Pass
- No known CVEs affecting this package version or its production dependencies.Pass
- No install/post-install scripts declared.Pass
- 30 of 92 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency19
- Repository check failed: the declared repository URL returned HTTP 404. See how to fix → View diagnostics → Fail
- Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
- Clear OSI-approved license (MIT).Pass
- Actively maintained (last published 7 days ago).Pass
- Security-disclosure policy not yet verified: we couldn't inspect the source repository.Unverified
Schema Quality & AI Usability71
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 5704 tokens (~135/item across 42 items; 42 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management70
- Stability observed for 21 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 100% of tool parameters carry a description.Pass
- Structured output schemas are declared (7% of tools); any adoption earns full credit.Pass
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- All 3 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
- An AI judge read all 42 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 5 Nov 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 67 to 70. That category is still filling its 30-day observation window: 20 days of observed history at the previous scan, 21 at this one. The score rises as the window fills, whether or not the server changes.
- 3 Nov 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 60 to 63. That category is still filling its 30-day observation window: 18 days of observed history at the previous scan, 19 at this one. The score rises as the window fills, whether or not the server changes.
- 1 Nov 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 53 to 57. That category is still filling its 30-day observation window: 16 days of observed history at the previous scan, 17 at this one. The score rises as the window fills, whether or not the server changes.
- 29 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 43 to 47. That category is still filling its 30-day observation window: 13 days of observed history at the previous scan, 14 at this one. The score rises as the window fills, whether or not the server changes.
- 28 Oct 26 0
- Stability: 0.40 → unverified ▼ security
- Tool safety: pass → unverified ▼ security
- Malware scan: pass → unverified ▼ security
- Known CVEs: pass → unverified ▼ security
- Schema quality: 4851 → 5704 ▼ functional
- Schema quality: 4851 → 5571 ▼ functional
- Schema quality: 4851 → 5355 ▼ functional
- Tool coverage: 100 → unverified ▼ functional
- Capabilities: pass → unverified ▼ functional
- Dependency health: 0.85 → unverified ▼ functional
- Package version: 1.15.1 → 1.18.0 functional
- Package version: 1.15.1 → 1.17.0 functional
- Package version: 1.15.1 → 1.16.0 functional
- 27 Oct 26 +16
- Malware scan: unverified → pass ▲ security
- 26 Oct 26 −15
- Malware scan: pass → unverified ▼ security
- Package version: 1.15.0 → 1.15.1 functional
- 25 Oct 26 +2
- Stability: 0.30 → unverified ▼ security
- Tool safety: pass → unverified ▼ security
- Schema quality: 124 → 137 ▼ functional
- Tool coverage: 100 → unverified ▼ functional
- Capabilities: pass → unverified ▼ functional
- First check of Tool coverage: 9 functional
- Destructive annotations: All 2 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation. functional
- Package version: 1.10.0 → 1.15.0 functional
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 5 Nov 2026 · Analysed npm/@roveapi/mcp@1.18.0
Provenance No attestation
The registry publishes no build provenance for this version, so there is nothing to verify.
| Result | No attestation |
|---|---|
| Ecosystem | npm |
Background: How many MCP packages publish verified provenance →
Dependencies 92 packages
| Packages resolved | 92 |
|---|---|
| Stale | 30 |
| Tree resolution | Complete |
Background: SBOMs and build attestations, explained →
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
account_info Show account ~24
Show this account's plan, credit balance and whether this key may buy credits.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
authenticate Sign in by email ~87
Sign in to Rove with your email when no API key is configured: sends a magic link, and once you open it this connection uses your live key. Supervised sessions need a live key; test keys (rvp_test_) run mock actions. Apps connected through OAuth are already signed in and cannot call it.
| Name | Type | Req | Description |
|---|---|---|---|
| string | yes | Your email address, to receive the magic link. |
No output schema declared.
No examples provided.
buy_credits Buy credits ~251
Without arguments: shows Rove credit prices and whether this key may buy. With item_id: buys that credit pack and may charge the account owner's saved card, or returns a payment link for a person, within limits the owner set. Pass the same idempotency_key when retrying the same purchase. Without idempotency_key, the same call again in this MCP session returns the first purchase for 10 to 20 minutes; to buy the same pack twice on purpose, pass a new idempotency_key each time.
| Name | Type | Req | Description |
|---|---|---|---|
| idempotency_key | string | – | The idempotency_key an earlier buy_credits result returned, to retry that same purchase. Use a new one for a new purchase. 1-128 characters of A-Z a-z 0-9 _ . : - |
| item_id | string | – | A pack id from top_ups or get_credit_catalogue, e.g. pack_1k. Omit it to see prices without buying. |
| payment | string | – | auto (default): charge the saved card when the owner allowed it, else return a payment link for a person; checkout: always a payment link; saved_method: only the saved card. |
No output schema declared.
No examples provided.
cancel_purchase Cancel purchase ~44
Cancels an unpaid purchase this key made, so its payment link stops working.
| Name | Type | Req | Description |
|---|---|---|---|
| purchase_id | string | yes | The purchase id, from buy_credits or list_purchases. |
No output schema declared.
No examples provided.
clear_history Clear browsing history ~44
Delete this API key's supervised browsing history. Cookies, storage and open-pages restore are kept. Refused (profile-busy) while a supervised session on this key is running.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
click Click element ~279
Click an element by CSS selector, accessible label or a11y tree ref. A click can submit, delete or buy on the site, as a person clicking would. In a supervised session, a click that opens a popup makes the popup the current page.
| Name | Type | Req | Description |
|---|---|---|---|
| button | string | – | Mouse button to click with. Default: "left". |
| click_count | number | – | Number of clicks (e.g. 2 for double-click). Default: 1. |
| frame | – | – | A CSS selector for an iframe, or a list of them for nested iframes. selector, label and ref then resolve inside it. |
| label | string | – | Accessible name or visible text to click by (e.g. "Sign in"). Alternative to selector. |
| page_id | string | – | The page to act on, from list_pages or pages_opened. Defaults to the current page. Does not change the current page. |
| ref | string | – | An element ref from this page's latest get_a11y_tree, such as e5, or f1e3 inside an iframe. |
| selector | string | – | CSS selector of the element to click. Either selector, label or ref is required. |
| session_id | string | yes | The browser session ID. |
| wait_after_ms | number | – | Milliseconds to wait after clicking before returning. |
No output schema declared.
No examples provided.
close_page Close page ~64
Close an open page. If it was current, the session returns to the page that was current when it opened. The last open page cannot be closed.
| Name | Type | Req | Description |
|---|---|---|---|
| page_id | string | yes | The open page to close. |
| session_id | string | yes | The browser session ID. |
No output schema declared.
No examples provided.
close_session Close session ~86
End a browser session and release its browser; its open pages close. A supervised session's browser profile (cookies, history) is kept for the next session; delete_profile removes it. When it was this connection's active session, the next navigate or start_supervised_session starts a new one.
| Name | Type | Req | Description |
|---|---|---|---|
| session_id | string | yes | Browser session ID to close. Must be an active session. |
No output schema declared.
No examples provided.
create_viewer_grant Create viewer link ~102
Create a one-time, origin-bound viewer link for a supervised session, for the person who will watch and take over. Give viewer_url to that person (one click opens the session). The admission_code in it works once and expires after expires_in_seconds. Never send passwords or other site credentials through chat: the person signs in themselves, in the viewer.
| Name | Type | Req | Description |
|---|---|---|---|
| session_id | string | – | Supervised session ID. Defaults to this connection's active session. |
No output schema declared.
No examples provided.
delete_passkey Delete passkey ~72
Delete one passkey from this API key's browser profile by its credential_id from list_passkeys. Returns deleted: false if absent. Refused (profile-busy) while a supervised session on this key is running; close it first.
| Name | Type | Req | Description |
|---|---|---|---|
| credential_id | string | yes | The credential_id from list_passkeys. |
No output schema declared.
No examples provided.
delete_profile Delete browser profile ~52
Delete this API key's whole supervised browser profile: cookies, storage, history and any restore offer. The next session starts signed out. Refused (profile-busy) while a supervised session on this key is running.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
evaluate Run JavaScript ~129
Run a JavaScript expression in the page and return its result as JSON. The script can read or change anything the page can, including submitting forms. Refused on a site's pages while a Poppy Session with that site is connected (see poppy_status).
| Name | Type | Req | Description |
|---|---|---|---|
| expression | string | yes | JavaScript expression to evaluate in the page context. The return value is serialized as JSON. |
| page_id | string | – | The page to act on, from list_pages or pages_opened. Defaults to the current page. Does not change the current page. |
| session_id | string | yes | The browser session ID. |
No output schema declared.
No examples provided.
extract_schema Extract fields from a URL ~189
One-shot and unsupervised: open a URL in a throwaway browser and, for each key in schema, return the text that follows that key on the page (as in "Price: $10"), or null. Nothing persists and no one can watch; for pages behind a sign-in, start a supervised session and read them with get_a11y_tree or get_text. API docs: https://roveapi.com/docs.
| Name | Type | Req | Description |
|---|---|---|---|
| schema | object | yes | The fields to return. Each key is a label to find in the page text (e.g. {"price": "the product price"}); the values are notes for you and are not used. |
| url | string | yes | Full URL of the page to read (e.g. "https://example.com/product/123"). |
| wait_for_selector | string | – | CSS selector to wait for before reading, for content that loads later. |
No output schema declared.
No examples provided.
fill Fill form field ~248
Type text into a form field, found by CSS selector, accessible label or a11y tree ref. By default it clears the existing value first. Never fill in passwords or other credentials you were sent through chat; in a supervised session, hand the sign-in to the person in the viewer.
| Name | Type | Req | Description |
|---|---|---|---|
| clear_first | boolean | – | Clear the existing value before typing. Default: true. |
| frame | – | – | A CSS selector for an iframe, or a list of them for nested iframes. selector, label and ref then resolve inside it. |
| label | string | – | Accessible label of the input. Alternative to selector. |
| page_id | string | – | The page to act on, from list_pages or pages_opened. Defaults to the current page. Does not change the current page. |
| ref | string | – | An element ref from this page's latest get_a11y_tree, such as e5, or f1e3 inside an iframe. |
| selector | string | – | CSS selector of the input element. Either selector, label or ref is required. |
| session_id | string | yes | The browser session ID. |
| value | string | yes | The text to type into the field. |
No output schema declared.
No examples provided.
fill_credential Fill saved credential ~192
Fill saved username and password fields in a supervised session without returning credential values. etld_plus_one identifies the saved credential site and must match the target page, including private suffixes. Requires agent control; frame targeting is refused. Optional selectors override the default username/email and password inputs.
| Name | Type | Req | Description |
|---|---|---|---|
| etld_plus_one | string | yes | The saved credential site, for example example.com or alice.github.io. |
| frame | – | – | Frame targeting is refused for credential fills; use the main page. |
| page_id | string | – | The page to act on, from list_pages or pages_opened. Defaults to the current page. Does not change the current page. |
| password_selector | string | – | CSS selector for the password input. Defaults to current-password/password inputs. |
| session_id | string | – | The browser session ID. |
| username_selector | string | – | CSS selector for the username input. Defaults to username/email inputs. |
No output schema declared.
No examples provided.
fill_otp Fill saved OTP ~163
Fill the current six-digit TOTP (SHA-1, 30-second step) into the focused main-page input in a supervised session without returning the code or seed. etld_plus_one identifies the saved credential site and must match the target page, including private suffixes. Requires agent control; frame targeting is refused.
| Name | Type | Req | Description |
|---|---|---|---|
| etld_plus_one | string | yes | The saved credential site, for example example.com or alice.github.io. |
| frame | – | – | Frame targeting is refused for OTP fills; use the focused input in the main page. |
| page_id | string | – | The page to act on, from list_pages or pages_opened. Defaults to the current page. Does not change the current page. |
| session_id | string | – | The browser session ID. |
No output schema declared.
No examples provided.
get_a11y_tree Read page ~330
Read the current page's content and controls, with element refs (such as e5) that click, fill, get_text and screenshot accept. After a person hands a supervised session back, this or screenshot is the fresh observation required before the next action. The page comes back as an accessibility tree: roles, names, values and states. On large pages it scopes itself to the main content; selector, max_depth, max_chars, visible_only and exclude_selectors narrow it further.
| Name | Type | Req | Description |
|---|---|---|---|
| exclude_selectors | array | – | CSS selectors to exclude from the tree (e.g. ["nav", "footer", ".ad-slot"]). Elements are hidden before snapshotting. |
| frame | – | – | A CSS selector for an iframe, or a list of them for nested iframes. selector, label and ref then resolve inside it. |
| max_chars | number | – | Maximum characters to return. Truncates at nearest line boundary. |
| max_depth | number | – | Maximum tree depth. Limits nesting to get a structural overview without deep details. |
| page_id | string | – | The page to act on, from list_pages or pages_opened. Defaults to the current page. Does not change the current page. |
| selector | string | – | CSS selector to scope the tree to a specific element (e.g. "#search-results", "main"). If omitted on large pages, auto-scopes to the main landmark. |
| session_id | string | yes | The browser session ID. |
| visible_only | boolean | – | Only include visible elements. Skips hidden menus, modals, and offscreen content. |
No output schema declared.
No examples provided.
get_credit_balance Show credit balance ~34
Shows this account's credits, exact to the millicredit, and whether this key may buy more and within what limits.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
get_credit_catalogue Show credit prices ~30
Shows Rove credit packs, subscription tiers and what an action or supervised minute costs. Never buys.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
get_download Fetch download ~140
Fetch a captured download using its artifact_id from list_downloads, in chunks of at most 1 MiB. Returns session_id, artifact_id, content_type, data_base64, offset, total_bytes and next_offset. Decode each chunk separately and concatenate the bytes. Repeat with offset set to next_offset until next_offset is null. Defaults to offset 0 and this connection's active session.
| Name | Type | Req | Description |
|---|---|---|---|
| artifact_id | string | yes | The download id from list_downloads. |
| offset | integer | – | Byte offset to fetch, starting at 0. Use next_offset from the previous chunk to continue. |
| session_id | string | – | The browser session ID. |
No output schema declared.
No examples provided.
get_purchase Show purchase ~50
Shows one purchase this key made and what to do next (for example, a payment link for a person).
| Name | Type | Req | Description |
|---|---|---|---|
| purchase_id | string | yes | The purchase id, from buy_credits or list_purchases. |
No output schema declared.
No examples provided.
get_text Read element text ~188
Read the text of one element, such as a price, a heading or a status message, by CSS selector or a11y tree ref.
| Name | Type | Req | Description |
|---|---|---|---|
| frame | – | – | A CSS selector for an iframe, or a list of them for nested iframes. selector, label and ref then resolve inside it. |
| page_id | string | – | The page to act on, from list_pages or pages_opened. Defaults to the current page. Does not change the current page. |
| ref | string | – | An element ref from this page's latest get_a11y_tree, such as e5, or f1e3 inside an iframe. |
| selector | string | – | CSS selector of the element to read text from. Either selector or ref is required. |
| session_id | string | yes | The browser session ID. |
| trim | boolean | – | Trim leading/trailing whitespace. Default: true. |
No output schema declared.
No examples provided.
interact Click or fill by selector ~135
Click an element or fill a field by CSS selector, as one tool: action is click or fill, and params carries selector (and value, for fill). click and fill take the same actions with labels, refs, frames and pages; prefer them.
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | "click" to click an element, "fill" to type text into an input field. |
| params | object | – | Action parameters. For click: {"selector": "button.submit"}. For fill: {"selector": "input[name=email]", "value": "user@example.com"}. |
| session_id | string | yes | The browser session ID. |
No output schema declared.
No examples provided.
list_downloads List downloads ~76
List this session's captured downloads as artifacts, with id, name, content_type, file_size_bytes, url and expires_at, plus download_errors for refused or failed captures. Use get_download with an artifact id to fetch its bytes. Defaults to this connection's active session.
| Name | Type | Req | Description |
|---|---|---|---|
| session_id | string | – | The browser session ID. |
No output schema declared.
No examples provided.
list_history List browsing history ~125
List the pages this API key's supervised browser profile visited, newest first, across sessions: URL, title, time, session id and whether the agent or a human held control. Sign-in callback codes and tokens are never stored. To reopen an entry, navigate to its url.
| Name | Type | Req | Description |
|---|---|---|---|
| before | string | – | An entry_id from an earlier page (next_before): return older entries. |
| limit | number | – | How many entries to return. Default 50, maximum 200. |
| query | string | – | Only entries whose URL or title contains this text (case-insensitive). |
No output schema declared.
No examples provided.
list_pages List open pages ~86
List the pages open in this session's browser, with page ids, opener, URL, title and status, and which page is current. Popups the page opened appear here. Does not count as a fresh observation.
| Name | Type | Req | Description |
|---|---|---|---|
| after_seq | number | – | Report page events after this seq. Default: since the previous list_pages. |
| session_id | string | yes | The browser session ID. |
No output schema declared.
No examples provided.
list_passkeys List passkeys ~61
List this API key's browser profile passkeys by site, including credential IDs and account labels. Private keys and other key material are never returned. No browser session is required.
| Name | Type | Req | Description |
|---|---|---|---|
| rp_id | string | – | Only passkeys for this exact relying-party site. |
No output schema declared.
No examples provided.
list_purchases List purchases ~57
Lists purchases this key made, newest first.
| Name | Type | Req | Description |
|---|---|---|---|
| cursor | string | – | next_cursor from an earlier page: return older purchases. |
| limit | number | – | How many purchases to return, 1 to 100. Default 20. |
No output schema declared.
No examples provided.
list_sessions Show active session ~30
Show which browser session this MCP connection is using: the session later tools act on when you omit session_id.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
navigate Open URL ~254
Open a URL in the session's browser and return the final URL and page title after redirects. In a supervised session the person watching sees the page. For a parked challenge (challenge_parked), use navigate on the same session to poll every 10 to 60 seconds with backoff, never in a tight loop. With no session_id and no active session, it creates an ordinary session that no one can watch or take over; call start_supervised_session first when a person may need to step in, for example to sign in. API docs: https://roveapi.com/docs.
| Name | Type | Req | Description |
|---|---|---|---|
| page_id | string | – | The page to act on, from list_pages or pages_opened. Defaults to the current page. Does not change the current page. |
| session_id | string | – | Reuse an existing browser session. Omit to use the active session, or to create an ordinary session when there is none. |
| timeout_ms | number | – | Navigation timeout in milliseconds. Default: 30000. |
| url | string | yes | Full URL to open, including protocol (e.g. "https://example.com"). |
| wait_until | string | – | Page lifecycle event to wait for. Default: "networkidle". |
No output schema declared.
No examples provided.
poppy_connect Connect to a Poppy site ~351
Declare this supervised session to a site that takes part in the Personal Agent Protocol (Poppy) as the person's agent: Rove reads https://<site>/.well-known/poppy.json, starts a signed-out Poppy Session and joins the browser to it, so the site admits the session instead of challenging it. A site without a valid poppy.json answers poppy-not-participating and is browsed as usual. While connected, changes (any request that isn't GET, HEAD or OPTIONS) and live-update sockets on the site are refused until the person signs in with poppy_sign_in and approves them. If this browser profile already holds the site's cookies or saved data, the answer is poppy-company-cookies-present: ask the person, then call again with replace_company_cookies: true. Follow next in every answer.
| Name | Type | Req | Description |
|---|---|---|---|
| origin | string | yes | The site, as an https URL (e.g. "https://shop.example"). |
| page_id | string | – | The page to act on, from list_pages or pages_opened. Defaults to the current page. Does not change the current page. |
| replace_company_cookies | boolean | – | Remove this profile's existing cookies and saved data for the site first. Ask the person before setting it: it signs the profile out of the site outside Poppy. |
| return_to | string | – | An https URL on the site to land on after the join. Default: the site's home page. |
| scopes | array | – | With a stored approval: the scopes to use from it. [] skips the stored approval and connects signed out. |
| session_id | string | – | Supervised session ID. Defaults to this connection's active session. |
| Name | Type | Req | Description |
|---|---|---|---|
| available_scopes | array | yes | – |
| cleanup | string | yes | – |
| company | object | yes | – |
| company_cookies_cleared | integer | – | – |
| company_storage_origins_cleared | integer | – | – |
| effective_authority | – | yes | – |
| ended_at | string | – | ISO 8601 UTC instant. |
| ended_detail | string | – | – |
| ended_reason | string | – | – |
| granted_scopes | array | yes | – |
| last_reset | – | yes | – |
| next | string | yes | What to do now, from the state and the latest sign-in outcome. |
| page_id | string|null | – | – |
| poppy_session_id | string | yes | – |
| recovery | – | yes | – |
| refusals | array | yes | – |
| refusals_dropped_through_seq | integer | yes | – |
| refusals_head_seq | integer | yes | – |
| requested_scopes | array | yes | – |
| sign_in | – | yes | – |
| sign_in_modes | array | yes | – |
| sign_in_modes_unsupported | array | yes | – |
| sign_in_starting | boolean | yes | – |
| signed_in | boolean | yes | – |
| state | string | yes | – |
| stored_sign_in | object | yes | – |
No examples provided.
poppy_disconnect Disconnect a Poppy site ~127
End a Poppy Session. Rove removes the site's cookies and saved data from this browser before the site is used without Poppy again (poppy_status shows cleanup done). With sign_out: true it also deletes the person's stored approval for the site and revokes it there.
| Name | Type | Req | Description |
|---|---|---|---|
| poppy_session_id | string | yes | The Poppy Session to end. |
| session_id | string | – | Supervised session ID. Defaults to this connection's active session. |
| sign_out | boolean | – | Also delete and revoke the stored approval, so the next connection to the site starts signed out. |
No output schema declared.
No examples provided.
poppy_sign_in Sign in to a Poppy site ~186
Ask the person to sign in to a connected Poppy site and approve permissions for you (default poppy:read; poppy:write allows changes). Rove opens the site's own sign-in in a separate sign-in window in the supervised viewer; the person signs in there themselves, and you never see their password, codes or tokens. Then send the person a viewer link (create_viewer_grant), tell them what next says, and check poppy_status for the outcome.
| Name | Type | Req | Description |
|---|---|---|---|
| poppy_session_id | string | yes | The Poppy Session, from poppy_connect or poppy_status. |
| scopes | array | – | The complete set of permissions to ask for, from the site's available_scopes. Default: ["poppy:read"] when the site offers it. |
| session_id | string | – | Supervised session ID. Defaults to this connection's active session. |
| Name | Type | Req | Description |
|---|---|---|---|
| available_scopes | array | yes | – |
| cleanup | string | yes | – |
| company | object | yes | – |
| effective_authority | – | yes | – |
| ended_at | string | – | ISO 8601 UTC instant. |
| ended_detail | string | – | – |
| ended_reason | string | – | – |
| granted_scopes | array | yes | – |
| last_reset | – | yes | – |
| next | string | yes | What to do now, from the state and the latest sign-in outcome. |
| poppy_session_id | string | yes | – |
| recovery | – | yes | – |
| refusals | array | yes | – |
| refusals_dropped_through_seq | integer | yes | – |
| refusals_head_seq | integer | yes | – |
| requested_scopes | array | yes | – |
| sign_in | – | yes | – |
| sign_in_modes | array | yes | – |
| sign_in_modes_unsupported | array | yes | – |
| sign_in_starting | boolean | yes | – |
| signed_in | boolean | yes | – |
| state | string | yes | – |
| stored_sign_in | object | yes | – |
No examples provided.
poppy_status Show Poppy connections ~114
Show this supervised session's Poppy Sessions: their state, the permissions granted and in force, the requests Rove refused, the latest sign-in's outcome, and next, what to do now. Changes nothing.
| Name | Type | Req | Description |
|---|---|---|---|
| after_seq | number | – | Report only refusals after this seq (the highest seq you have seen). |
| poppy_session_id | string | – | One Poppy Session. Default: all of them. |
| session_id | string | – | Supervised session ID. Defaults to this connection's active session. |
| Name | Type | Req | Description |
|---|---|---|---|
| sessions | array | yes | – |
No examples provided.
request_human Request human help ~114
Pause a supervised session and ask a person to help. Explain what they need to do in reason. Returns waiting_for_human, the reason, human_wait_expires_at and a one-time viewer_url to give the person. Agent actions are refused until they return control. Repeating this request renews the viewer grant without extending the wait deadline.
| Name | Type | Req | Description |
|---|---|---|---|
| reason | string | yes | What the person needs to do in the browser. |
| session_id | string | – | Supervised session ID. Defaults to this connection's active session. |
No output schema declared.
No examples provided.
restore_pages Restore or dismiss pages ~110
Answer a supervised session's restore offer. When the previous session on this profile ended unexpectedly (crash, hang or restart), list_pages and the session status carry restore.available and the pages that were open; nothing reopens until you choose. restore reopens them (each through the target policy) and makes the recorded current page current; dismiss drops the offer.
| Name | Type | Req | Description |
|---|---|---|---|
| decision | string | yes | restore reopens the offered pages; dismiss drops the offer. |
| session_id | string | – | The browser session ID. |
No output schema declared.
No examples provided.
screenshot Take screenshot ~307
Capture the current page, or one element, as a PNG or JPEG. In a supervised session this is, like get_a11y_tree, a fresh observation after a person hands control back. With no session_id and no active session, pass url instead for a one-shot capture in a throwaway browser. API docs: https://roveapi.com/docs.
| Name | Type | Req | Description |
|---|---|---|---|
| format | string | – | Image format. In-session only. Default: "png". |
| frame | – | – | A CSS selector for an iframe, or a list of them for nested iframes. selector, label and ref then resolve inside it. |
| full_page | boolean | – | Capture the full scrollable page, not just the viewport. In-session only. Default: false. |
| page_id | string | – | The page to act on, from list_pages or pages_opened. Defaults to the current page. Does not change the current page. |
| ref | string | – | An element ref from this page's latest get_a11y_tree, such as e5, or f1e3 inside an iframe. |
| selector | string | – | CSS selector to capture a specific element instead of the page. In-session only. |
| session_id | string | – | Browser session ID. Defaults to this connection's active session. Omit, with no active session, for a one-shot capture of url. |
| url | string | – | URL for a one-shot capture in a throwaway browser. Ignored when there is a session. |
No output schema declared.
No examples provided.
scroll Scroll page ~193
Scroll the page, or one scrollable element, in a direction, for example to load more content or reach elements below the fold.
| Name | Type | Req | Description |
|---|---|---|---|
| amount | number | – | Pixels to scroll. Default: 500. |
| direction | string | yes | Scroll direction. |
| frame | – | – | A CSS selector for an iframe, or a list of them for nested iframes. selector, label and ref then resolve inside it. |
| page_id | string | – | The page to act on, from list_pages or pages_opened. Defaults to the current page. Does not change the current page. |
| ref | string | – | An element ref from this page's latest get_a11y_tree, such as e5, or f1e3 inside an iframe. |
| selector | string | – | CSS selector of a scrollable element. If omitted, the window is scrolled. |
| session_id | string | yes | The browser session ID. |
No output schema declared.
No examples provided.
simulate_purchase Simulate purchase (test keys) ~63
Test keys only: moves a simulated purchase to paid, expired, failed or needs-authentication. Never charges.
| Name | Type | Req | Description |
|---|---|---|---|
| outcome | string | yes | What happens to the simulated payment. |
| purchase_id | string | yes | The purchase id, from buy_credits or list_purchases. |
No output schema declared.
No examples provided.
start_supervised_session Start supervised browser session ~286
Start a supervised browser session: a hosted Chromium browser your agent drives while a person can watch live, take exclusive control and hand it back. It signs in with the browser profile this API key keeps, so cookies and sign-ins carry over between sessions. Next, call create_viewer_grant to get the person a viewer link. While the person holds control, agent actions are refused; after they hand back, call get_a11y_tree or screenshot before acting again. Later tools use this session unless you pass session_id. viewport_mode defaults to follow-human; use fixed when the page layout must stay at the agent viewport. Charged per minute. Needs a live key (rvp_live_).
| Name | Type | Req | Description |
|---|---|---|---|
| egress | string | – | The network route, fixed for the session. warp routes through a WARP-backed gateway; direct uses the default route. Omitted egress uses the account default (warp); where warp is unconfigured it resol… |
| viewport_mode | string | – | follow-human (default): the page resizes to the person's viewer while they hold control. fixed: the page keeps the agent viewport. |
No output schema declared.
No examples provided.
switch_page Switch page ~67
Make another open page current. Later actions without page_id run on it, and in a supervised session the viewer shows it.
| Name | Type | Req | Description |
|---|---|---|---|
| page_id | string | yes | The open page to make current, from list_pages or pages_opened. |
| session_id | string | yes | The browser session ID. |
No output schema declared.
No examples provided.
wait_for_popup Wait for popup ~164
Wait for a popup opened by your last navigate, click, fill, scroll or evaluate, even one that has already opened, and return its page_id. In a supervised session the popup becomes current. In other sessions, call switch_page or pass page_id. A popup Rove blocks answers popup-blocked at once instead of waiting. After a human returns control, a popup they opened counts; pass after_seq to wait for a newer one.
| Name | Type | Req | Description |
|---|---|---|---|
| after_seq | number | – | Wait for a popup after this page event seq, such as an earlier result's page_events_seq_start. |
| session_id | string | yes | The browser session ID. |
| timeout_ms | number | – | How long to wait, in milliseconds. Default: 10000; maximum 30000. |
No output schema declared.
No examples provided.
How do I install the Rove MCP server?
Rove runs locally as an npm package, launched with npx -y @roveapi/mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
npm · @roveapi/mcp
claude mcp add noncelogic-rove -- npx -y @roveapi/mcp
What is the Rove MCP server?
Rove is an MCP server listed in the public MCP registry as io.github.noncelogic/rove. Rove, supervised browser for AI agents. Your agent drives; a human watches, takes over. This page covers its npm package (@roveapi/mcp).
Is the Rove MCP server safe to use?
Rove scores 74 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 5 November 2026. It declares no install or post-install scripts. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the Rove MCP server expose?
Rove exposes 42 tools: start_supervised_session, create_viewer_grant, request_human, navigate, get_a11y_tree, and 37 more. Their descriptions and schemas cost roughly 5,704 tokens of context every time the server is loaded.
Is the Rove MCP server still maintained?
Rove is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.
What licence is the Rove MCP server under?
Rove declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.