# Rove (npm · @roveapi/mcp)

Rove — supervised browser for AI agents. Your agent drives; a human watches, takes over.

- Trust score: 74/100 (medium)
- Change this week: +3
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-11-05

## Components

- remote · `api.roveapi.com`: 38/100, [markdown](https://verifymcp.io/servers/noncelogic-rove/api.md), [page](https://verifymcp.io/servers/noncelogic-rove/api)
- npm · `@roveapi/mcp`: 74/100 (this document), [markdown](https://verifymcp.io/servers/noncelogic-rove/roveapi-mcp.md), [page](https://verifymcp.io/servers/noncelogic-rove/roveapi-mcp)

## Channel facts

- Registry: `npm`
- Package: `@roveapi/mcp`
- Version: `1.18.0`
- Transport: `stdio`

## Trust breakdown

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. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-11-05.

- **Supply Chain Security**: 98/100
  - No malware found by supply-chain analysis.
  - No known CVEs affecting this package version or its production dependencies.
  - No install/post-install scripts declared.
  - 30 of 92 dependencies flagged as unhealthy.
- **Provenance & Transparency**: 19/100
  - Repository check failed: the declared repository URL returned HTTP 404.
  - Provenance check failed: no build-provenance attestation is published.
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 7 days ago).
  - Security-disclosure policy not yet verified: we couldn't inspect the source repository.
- **Schema Quality & AI Usability**: 71/100
  - AI-judged instruction clarity (excellent).
  - 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.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 70/100
  - Stability observed for 21 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
  - Structured output schemas are declared (7% of tools); any adoption earns full credit.
- **Tool Safety**: 100/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - All 3 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.
  - An AI judge read all 42 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### 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.

### Claude

```bash
claude mcp add noncelogic-rove -- npx -y @roveapi/mcp
```

### Cursor

```json
{
  "mcpServers": {
    "noncelogic-rove": {
      "command": "npx",
      "args": [
        "-y",
        "@roveapi/mcp"
      ]
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "noncelogic-rove": {
      "command": "npx",
      "args": [
        "-y",
        "@roveapi/mcp"
      ]
    }
  }
}
```

### Codex

```bash
codex mcp add noncelogic-rove -- npx -y @roveapi/mcp
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "noncelogic-rove": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "@roveapi/mcp"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add noncelogic-rove --command npx --arg -y --arg @roveapi/mcp
```

### Hermes

```yaml
mcp_servers:
  noncelogic-rove:
    command: "npx"
    args: ["-y", "@roveapi/mcp"]
```

### Netclaw

```json
{
  "McpServers": {
    "noncelogic-rove": {
      "Transport": "stdio",
      "Command": "npx",
      "Arguments": [
        "-y",
        "@roveapi/mcp"
      ]
    }
  }
}
```

### Vellum

```bash
assistant mcp add noncelogic-rove -t stdio -c npx -a -y @roveapi/mcp
```

### Other

```json
{
  "mcpServers": {
    "noncelogic-rove": {
      "command": "npx",
      "args": [
        "-y",
        "@roveapi/mcp"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-11-05 (score 74, +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.

### 2026-11-03 (score 73, +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.

### 2026-11-01 (score 72, +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.

### 2026-10-29 (score 71, +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.

### 2026-10-28 (score 70, 0)

- [security regression] Stability: 0.40 → unverified
- [security regression] Tool safety: pass → unverified
- [security regression] Malware scan: pass → unverified
- [security regression] Known CVEs: pass → unverified
- [functional regression] Schema quality: 4851 → 5704
- [functional regression] Schema quality: 4851 → 5571
- [functional regression] Schema quality: 4851 → 5355
- [functional regression] Tool coverage: 100 → unverified
- [functional regression] Capabilities: pass → unverified
- [functional regression] 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

### 2026-10-27 (score 70, +16)

- [security improvement] Malware scan: unverified → pass

### 2026-10-26 (score 54, −15)

- [security regression] Malware scan: pass → unverified
- [functional] Package version: 1.15.0 → 1.15.1

### 2026-10-25 (score 69, +2)

- [security regression] Stability: 0.30 → unverified
- [security regression] Tool safety: pass → unverified
- [functional regression] Schema quality: 124 → 137
- [functional regression] Tool coverage: 100 → unverified
- [functional regression] 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

## MCP tools (42)

### `start_supervised_session` (~286 tokens)

Start supervised browser session

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_).

Input parameters:

- `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.

### `create_viewer_grant` (~102 tokens)

Create viewer link

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.

Input parameters:

- `session_id` (string): Supervised session ID. Defaults to this connection's active session.

### `request_human` (~114 tokens)

Request human help

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.

Input parameters:

- `reason` (string, required): What the person needs to do in the browser.
- `session_id` (string): Supervised session ID. Defaults to this connection's active session.

### `navigate` (~254 tokens)

Open URL

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.

Input parameters:

- `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, required): Full URL to open, including protocol (e.g. "https://example.com").
- `wait_until` (string): Page lifecycle event to wait for. Default: "networkidle".

### `get_a11y_tree` (~330 tokens)

Read page

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.

Input parameters:

- `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, required): The browser session ID.
- `visible_only` (boolean): Only include visible elements. Skips hidden menus, modals, and offscreen content.

### `screenshot` (~307 tokens)

Take screenshot

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.

Input parameters:

- `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.

### `click` (~279 tokens)

Click element

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.

Input parameters:

- `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, required): The browser session ID.
- `wait_after_ms` (number): Milliseconds to wait after clicking before returning.

### `fill` (~248 tokens)

Fill form field

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.

Input parameters:

- `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, required): The browser session ID.
- `value` (string, required): The text to type into the field.

### `fill_credential` (~192 tokens)

Fill saved credential

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.

Input parameters:

- `etld_plus_one` (string, required): 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.

### `fill_otp` (~163 tokens)

Fill saved OTP

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.

Input parameters:

- `etld_plus_one` (string, required): 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.

### `interact` (~135 tokens)

Click or fill by selector

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.

Input parameters:

- `action` (string, required): "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, required): The browser session ID.

### `get_text` (~188 tokens)

Read element text

Read the text of one element, such as a price, a heading or a status message, by CSS selector or a11y tree ref.

Input parameters:

- `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, required): The browser session ID.
- `trim` (boolean): Trim leading/trailing whitespace. Default: true.

### `scroll` (~193 tokens)

Scroll page

Scroll the page, or one scrollable element, in a direction, for example to load more content or reach elements below the fold.

Input parameters:

- `amount` (number): Pixels to scroll. Default: 500.
- `direction` (string, required): 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, required): The browser session ID.

### `evaluate` (~129 tokens)

Run JavaScript

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).

Input parameters:

- `expression` (string, required): 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, required): The browser session ID.

### `extract_schema` (~189 tokens)

Extract fields from a URL

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.

Input parameters:

- `schema` (object, required): 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, required): 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.

### `list_downloads` (~76 tokens)

List downloads

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.

Input parameters:

- `session_id` (string): The browser session ID.

### `get_download` (~140 tokens)

Fetch download

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.

Input parameters:

- `artifact_id` (string, required): 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.

### `list_pages` (~86 tokens)

List open pages

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.

Input parameters:

- `after_seq` (number): Report page events after this seq. Default: since the previous list_pages.
- `session_id` (string, required): The browser session ID.

### `switch_page` (~67 tokens)

Switch page

Make another open page current. Later actions without page_id run on it, and in a supervised session the viewer shows it.

Input parameters:

- `page_id` (string, required): The open page to make current, from list_pages or pages_opened.
- `session_id` (string, required): The browser session ID.

### `close_page` (~64 tokens)

Close page

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.

Input parameters:

- `page_id` (string, required): The open page to close.
- `session_id` (string, required): The browser session ID.

### `wait_for_popup` (~164 tokens)

Wait for popup

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.

Input parameters:

- `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, required): The browser session ID.
- `timeout_ms` (number): How long to wait, in milliseconds. Default: 10000; maximum 30000.

### `poppy_connect` (~351 tokens)

Connect to a Poppy site

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.

Input parameters:

- `origin` (string, required): 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.

Output parameters:

- `available_scopes` (array)
- `cleanup` (string)
- `company` (object)
- `company_cookies_cleared` (integer)
- `company_storage_origins_cleared` (integer)
- `effective_authority`
- `ended_at` (string): ISO 8601 UTC instant.
- `ended_detail` (string)
- `ended_reason` (string)
- `granted_scopes` (array)
- `last_reset`
- `next` (string): What to do now, from the state and the latest sign-in outcome.
- `page_id` (string|null)
- `poppy_session_id` (string)
- `recovery`
- `refusals` (array)
- `refusals_dropped_through_seq` (integer)
- `refusals_head_seq` (integer)
- `requested_scopes` (array)
- `sign_in`
- `sign_in_modes` (array)
- `sign_in_modes_unsupported` (array)
- `sign_in_starting` (boolean)
- `signed_in` (boolean)
- `state` (string)
- `stored_sign_in` (object)

### `poppy_sign_in` (~186 tokens)

Sign in to a Poppy site

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.

Input parameters:

- `poppy_session_id` (string, required): 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.

Output parameters:

- `available_scopes` (array)
- `cleanup` (string)
- `company` (object)
- `effective_authority`
- `ended_at` (string): ISO 8601 UTC instant.
- `ended_detail` (string)
- `ended_reason` (string)
- `granted_scopes` (array)
- `last_reset`
- `next` (string): What to do now, from the state and the latest sign-in outcome.
- `poppy_session_id` (string)
- `recovery`
- `refusals` (array)
- `refusals_dropped_through_seq` (integer)
- `refusals_head_seq` (integer)
- `requested_scopes` (array)
- `sign_in`
- `sign_in_modes` (array)
- `sign_in_modes_unsupported` (array)
- `sign_in_starting` (boolean)
- `signed_in` (boolean)
- `state` (string)
- `stored_sign_in` (object)

### `poppy_status` (~114 tokens)

Show Poppy connections

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.

Input parameters:

- `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.

Output parameters:

- `sessions` (array)

### `poppy_disconnect` (~127 tokens)

Disconnect a Poppy site

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.

Input parameters:

- `poppy_session_id` (string, required): 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.

### `restore_pages` (~110 tokens)

Restore or dismiss pages

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.

Input parameters:

- `decision` (string, required): restore reopens the offered pages; dismiss drops the offer.
- `session_id` (string): The browser session ID.

### `list_history` (~125 tokens)

List browsing history

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.

Input parameters:

- `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).

### `clear_history` (~44 tokens)

Clear browsing history

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.

### `delete_profile` (~52 tokens)

Delete browser profile

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.

### `list_passkeys` (~61 tokens)

List passkeys

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.

Input parameters:

- `rp_id` (string): Only passkeys for this exact relying-party site.

### `delete_passkey` (~72 tokens)

Delete passkey

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.

Input parameters:

- `credential_id` (string, required): The credential_id from list_passkeys.

### `list_sessions` (~30 tokens)

Show active session

Show which browser session this MCP connection is using: the session later tools act on when you omit session_id.

### `close_session` (~86 tokens)

Close session

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.

Input parameters:

- `session_id` (string, required): Browser session ID to close. Must be an active session.

### `authenticate` (~87 tokens)

Sign in by email

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.

Input parameters:

- `email` (string, required): Your email address, to receive the magic link.

### `account_info` (~24 tokens)

Show account

Show this account's plan, credit balance and whether this key may buy credits.

### `buy_credits` (~251 tokens)

Buy credits

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.

Input parameters:

- `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.

### `get_credit_catalogue` (~30 tokens)

Show credit prices

Shows Rove credit packs, subscription tiers and what an action or supervised minute costs. Never buys.

### `get_credit_balance` (~34 tokens)

Show credit balance

Shows this account's credits, exact to the millicredit, and whether this key may buy more and within what limits.

### `get_purchase` (~50 tokens)

Show purchase

Shows one purchase this key made and what to do next (for example, a payment link for a person).

Input parameters:

- `purchase_id` (string, required): The purchase id, from buy_credits or list_purchases.

### `list_purchases` (~57 tokens)

List purchases

Lists purchases this key made, newest first.

Input parameters:

- `cursor` (string): next_cursor from an earlier page: return older purchases.
- `limit` (number): How many purchases to return, 1 to 100. Default 20.

### `cancel_purchase` (~44 tokens)

Cancel purchase

Cancels an unpaid purchase this key made, so its payment link stops working.

Input parameters:

- `purchase_id` (string, required): The purchase id, from buy_credits or list_purchases.

### `simulate_purchase` (~63 tokens)

Simulate purchase (test keys)

Test keys only: moves a simulated purchase to paid, expired, failed or needs-authentication. Never charges.

Input parameters:

- `outcome` (string, required): What happens to the simulated payment.
- `purchase_id` (string, required): The purchase id, from buy_credits or list_purchases.

## Diagnostics

Captured diagnostic sections: Provenance, Dependencies. The full working is on the page: https://verifymcp.io/servers/noncelogic-rove/roveapi-mcp#diagnostics

## Score history

- 2026-11-05: 74
- 2026-11-04: 73
- 2026-11-03: 73
- 2026-11-02: 72
- 2026-11-01: 72
- 2026-10-31: 71
- 2026-10-30: 71
- 2026-10-29: 71
- 2026-10-28: 70
- 2026-10-27: 70
- 2026-10-26: 54
- 2026-10-25: 69
- 2026-10-24: 67
- 2026-10-23: 67
- 2026-10-22: 63
- 2026-10-21: 63
- 2026-10-20: 63
- 2026-10-19: 63
- 2026-10-18: 63
- 2026-10-17: 63
- 2026-10-16: 63
- 2026-10-15: 63
- 2026-10-14: 33
- 2026-10-13: 33

## Common questions

### 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.

### What did VerifyMCP test on the Rove MCP server?

VerifyMCP ran 15 checks on Rove, covering Malware scan, Known CVEs, Install scripts, Dependency health and 11 more. One item could not be completed, a gap on our side rather than a finding about Rove: Security disclosure. Endpoint Security and Transport & Reachability do not apply to an npm package, so they were not tested. The score does not measure everything, and the scoring documentation lists what it leaves out.

## Links

- npm package: https://www.npmjs.com/package/@roveapi/mcp
- Socket report: https://socket.dev/npm/package/@roveapi/mcp
- Website: https://roveapi.com/
- Changelog RSS feed: https://verifymcp.io/servers/noncelogic-rove/roveapi-mcp.xml
- Changelog JSON feed: https://verifymcp.io/servers/noncelogic-rove/roveapi-mcp/changelog.json
- Trust report (JSON): https://verifymcp.io/servers/noncelogic-rove/roveapi-mcp.json
- HTML version of this page: https://verifymcp.io/servers/noncelogic-rove/roveapi-mcp
