# Rove

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

- name: io.github.noncelogic/rove
- version: 1.10.0
- connection class: R2 (oauth_consent_once)
- trust: 96/100
- quality: 89/100 (new)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/io.github.noncelogic%2Frove
- tools: https://api.protogrid.dev/v1/servers/io.github.noncelogic%2Frove/tools

**An agent can connect after a one-time OAuth consent by a human.** Remote endpoint behind OAuth 2. Tokens stay with the agent; the registry only exposes the authorization metadata.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "rove": {
      "type": "http",
      "url": "https://api.roveapi.com/mcp",
      "headers": {
        "Authorization": "Bearer ${ROVE_TOKEN}"
      }
    }
  }
}
```

Placeholders to fill: `${ROVE_TOKEN}`.

## Trust

- hygiene: 100
- liveness: 97
- freshness: 100
- provenance: 90
- drivers: +repository +namespace-matches-repo +website +reachable +uptime-92% +updated-7d-ago
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 89/100 (new)

### protocol: n/a (weight 25)

- n/a `protocol.modern`, `protocol.stateless`, `protocol.transport`, `protocol.list_ttl`: no remote answered a protocol handshake (not probed yet, unreachable, or local-only)

### authorization: 83 (weight 15)

- pass `auth.prm`: Protected Resource Metadata (RFC 9728) published
- pass `auth.as_metadata`: authorization server metadata reachable
- warn `auth.cimd`: only Dynamic Client Registration, deprecated in 2026-07-28 in favour of CIMD
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 86 (weight 30)

- pass `tools.descriptions`: every tool has a description
- pass `tools.description_length`: descriptions are concise
- pass `tools.schemas`: every tool has an object input schema
- warn `tools.annotations`: only 7 of 27 tools declare readOnlyHint or destructiveHint
- warn `tools.directory_hints`: 7 of 27 tools declare all four hints; missing: navigate (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); click (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); fill (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); …
- pass `tools.token_cost`: about 3,958 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

### stability: n/a (weight 15)

- n/a `stability.changes`, `stability.rug_pull`: tool history recorded for 6 of the 7 days needed

### dependencies: 100 (weight 15)

- pass `deps.known_vulns`: no known advisory in 99 resolved packages
- pass `deps.mcp_sdk_version`: @modelcontextprotocol/sdk 1.32.1, no known advisory
- pass `deps.resolvable`: @roveapi/mcp@1.10.0 resolved: 99 packages

- tools: 27, about 3,958 tokens to load them all
- tool set hash: 93e3098e1016ad2c6a8760ad10650ef2
- badge: [![protogrid quality](https://protogrid.dev/badge/io.github.noncelogic/rove.svg)](https://protogrid.dev/servers/io.github.noncelogic/rove)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

_No tool definition changes recorded._

## Dependencies

- npm @roveapi/mcp@1.10.0: resolved, 98 dependencies, MCP SDK @modelcontextprotocol/sdk 1.32.1

Dependency graphs from deps.dev; advisories from OSV.dev, including the GitHub Advisory Database and the PyPI Advisory Database; all CC BY 4.0.

## Remotes

- https://api.roveapi.com/mcp (streamable-http, auth oauth2, reachable true, uptime30d 0.92)

## Packages

- npm @roveapi/mcp@1.10.0 secrets: ROVE_API_KEY

## Tools (27)

- `account_info`: Check your account status: credits balance, plan, and usage.
- `authenticate`: Authenticate this MCP session. Sends a magic link to your email — click it to activate. Required before using any other tool.
- `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.
- `cancel_purchase`: Cancels an unpaid purchase this key made, so its payment link stops working.
- `clear_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.
- `click`: Click an element by CSS selector, accessible label or a11y tree ref. In a supervised session, a click that opens a popup makes the popup the current page.
- `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.
- `close_session`: Close a browser session and release resources.
- `delete_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.
- `evaluate`: Execute JavaScript in the browser context.
- `fill`: Fill a form field with text. By default clears existing value first.
- `get_a11y_tree`: Get the accessibility tree snapshot of the current page. Returns structured data 77% smaller than a screenshot. Auto-scopes to the main content area on large pages (50K+ chars). Use selector to manually scope to a specific element.
- `get_credit_balance`: Shows this account's credits, exact to the millicredit, and whether this key may buy more and within what limits.
- `get_credit_catalogue`: Shows Rove credit packs, subscription tiers and what an action or supervised minute costs. Never buys.
- `get_purchase`: Shows one purchase this key made and what to do next (for example, a payment link for a person).
- `get_text`: Extract text content from an element.
- `list_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.
- `list_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.
- `list_purchases`: Lists purchases this key made, newest first.
- `list_sessions`: List all active browser sessions.
- `navigate`: Navigate to a URL. Creates a browser session automatically if none exists.
- `restore_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.
- `screenshot`: Take a screenshot of the current page or a specific element.
- `scroll`: Scroll the page in a direction, or scroll a specific element.
- `simulate_purchase`: Test keys only: moves a simulated purchase to paid, expired, failed or needs-authentication. Never charges.
- `switch_page`: Make another open page current. Later actions without page_id run on it, and in a supervised session the viewer shows it.
- `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.
