Rove

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

사용해야 할까요

품질 및 안전성

A
설명 품질
95%
스키마 완전성
83%
이름 품질
91%
오염 위험
100%
권한 일치
100%
프로토콜 준수
100%

발견 사항 (3)

  • LOWTool 'screenshot' description lacks action verbscreenshot에서
  • LOWTool 'get_text' description lacks action verbget_text에서
  • LOWTool 'scroll' description lacks action verbscroll에서

도구 정의와 프로토콜 준수에 대한 자동 분석을 기반으로 합니다.

컨텍스트 비용

~3,898토큰 (도구 정의)
~1.2 KB일반적인 응답 크기
상당한 주의 영향 (128k 컨텍스트의 3.05%)

이는 서버의 도구가 모델의 컨텍스트에 로드될 때마다 소비되는 대략적인 토큰 수입니다. 수치가 높을수록 다른 작업에 사용할 수 있는 주의가 줄어듭니다.

설치

원클릭 설치

`claude_desktop_config.json` 파일에 다음을 추가하세요:

{
  "mcpServers": {
    "rove": {
      "command": "npx",
      "args": [
        "@roveapi/mcp"
      ]
    }
  }
}

실행 가능한 패키지

npm@roveapi/mcp1.10.0stdio

원격 엔드포인트

https://api.roveapi.com/mcpstreamable-http

할 수 있는 일

도구 목록

도구 (27)

🟢 읽기 전용🟡 쓰기🔴 삭제⚪ 알 수 없음
⚪navigate(url, session_id, wait_until, timeout_ms, page_id)

Navigate to a URL. Creates a browser session automatically if none exists.

입력 스키마

{
  "type": "object",
  "properties": {
    "url": {
      "type": "string",
      "description": "Full URL to navigate to"
    },
    "session_id": {
      "type": "string",
      "description": "Reuse an existing session (optional)"
    },
    "wait_until": {
      "type": "string",
      "enum": [
        "load",
        "domcontentloaded",
        "networkidle"
      ],
      "description": "Page lifecycle event to wait for. Default: \"networkidle\"."
    },
    "timeout_ms": {
      "type": "number",
      "description": "Navigation timeout in milliseconds. Default: 30000."
    },
    "page_id": {
      "type": "string",
      "description": "The page to act on, from list_pages or pages_opened. Defaults to the current page. Does not change the current page."
    }
  },
  "required": [
    "url"
  ]
}
⚪click(session_id, selector, label, ref, frame, ...)

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.

입력 스키마

{
  "type": "object",
  "properties": {
    "session_id": {
      "type": "string",
      "description": "Browser session ID"
    },
    "selector": {
      "type": "string",
      "description": "CSS selector of the element to click. Either selector, label or ref is required."
    },
    "label": {
      "type": "string",
      "description": "Accessible name or visible text to click by (e.g. \"Sign in\"). Alternative to selector."
    },
    "ref": {
      "type": "string",
      "description": "An element ref from this page's latest get_a11y_tree, such as e5, or f1e3 inside an iframe."
    },
    "frame": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      ],
      "description": "A CSS selector for an iframe, or a list of them for nested iframes. selector, label and ref then resolve inside it."
    },
    "page_id": {
      "type": "string",
      "description": "The page to act on, from list_pages or pages_opened. Defaults to the current page. Does not change the current page."
    },
    "button": {
      "type": "string",
      "enum": [
        "left",
        "right",
        "middle"
      ],
      "description": "Mouse button to click with. Default: \"left\"."
    },
    "click_count": {
      "type": "number",
      "description": "Number of clicks (e.g. 2 for double-click). Default: 1."
    },
    "wait_after_ms": {
      "type": "number",
      "description": "Milliseconds to wait after clicking before returning."
    }
  },
  "required": [
    "session_id"
  ]
}
⚪fill(session_id, selector, label, ref, frame, ...)

Fill a form field with text. By default clears existing value first.

입력 스키마

{
  "type": "object",
  "properties": {
    "session_id": {
      "type": "string",
      "description": "Browser session ID"
    },
    "selector": {
      "type": "string",
      "description": "CSS selector of the input element. Either selector, label or ref is required."
    },
    "label": {
      "type": "string",
      "description": "Accessible label of the input. Alternative to selector."
    },
    "ref": {
      "type": "string",
      "description": "An element ref from this page's latest get_a11y_tree, such as e5, or f1e3 inside an iframe."
    },
    "frame": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      ],
      "description": "A CSS selector for an iframe, or a list of them for nested iframes. selector, label and ref then resolve inside it."
    },
    "page_id": {
      "type": "string",
      "description": "The page to act on, from list_pages or pages_opened. Defaults to the current page. Does not change the current page."
    },
    "value": {
      "type": "string",
      "description": "Text to fill"
    },
    "clear_first": {
      "type": "boolean",
      "description": "Clear the existing value before typing. Default: true."
    }
  },
  "required": [
    "session_id",
    "value"
  ]
}
⚪screenshot(session_id, selector, ref, frame, page_id, ...)

Take a screenshot of the current page or a specific element.

입력 스키마

{
  "type": "object",
  "properties": {
    "session_id": {
      "type": "string",
      "description": "Browser session ID"
    },
    "selector": {
      "type": "string",
      "description": "CSS selector to screenshot a specific element instead of the page."
    },
    "ref": {
      "type": "string",
      "description": "An element ref from this page's latest get_a11y_tree, such as e5, or f1e3 inside an iframe."
    },
    "frame": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      ],
      "description": "A CSS selector for an iframe, or a list of them for nested iframes. selector, label and ref then resolve inside it."
    },
    "page_id": {
      "type": "string",
      "description": "The page to act on, from list_pages or pages_opened. Defaults to the current page. Does not change the current page."
    },
    "full_page": {
      "type": "boolean",
      "description": "Capture full scrollable page (default: false)"
    },
    "format": {
      "type": "string",
      "enum": [
        "png",
        "jpeg"
      ],
      "description": "Image format. Default: \"png\"."
    }
  },
  "required": [
    "session_id"
  ]
}
🟢get_a11y_tree(session_id, selector, max_chars, max_depth, visible_only, ...)

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.

입력 스키마

{
  "type": "object",
  "properties": {
    "session_id": {
      "type": "string",
      "description": "Browser session ID"
    },
    "selector": {
      "type": "string",
      "description": "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."
    },
    "max_chars": {
      "type": "number",
      "description": "Maximum characters to return. Truncates at nearest line boundary."
    },
    "max_depth": {
      "type": "number",
      "description": "Maximum tree depth. Limits nesting to get a structural overview without deep details."
    },
    "visible_only": {
      "type": "boolean",
      "description": "Only include visible elements. Skips hidden menus, modals, and offscreen content."
    },
    "exclude_selectors": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "CSS selectors to exclude from the tree (e.g. [\"nav\", \"footer\", \".ad-slot\"]). Elements are hidden before snapshotting."
    },
    "frame": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      ],
      "description": "A CSS selector for an iframe, or a list of them for nested iframes. selector, label and ref then resolve inside it."
    },
    "page_id": {
      "type": "string",
      "description": "The page to act on, from list_pages or pages_opened. Defaults to the current page. Does not change the current page."
    }
  },
  "required": [
    "session_id"
  ]
}
🟢get_text(session_id, selector, ref, frame, page_id, ...)

Extract text content from an element.

입력 스키마

{
  "type": "object",
  "properties": {
    "session_id": {
      "type": "string",
      "description": "Browser session ID"
    },
    "selector": {
      "type": "string",
      "description": "CSS selector. Either selector or ref is required."
    },
    "ref": {
      "type": "string",
      "description": "An element ref from this page's latest get_a11y_tree, such as e5, or f1e3 inside an iframe."
    },
    "frame": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      ],
      "description": "A CSS selector for an iframe, or a list of them for nested iframes. selector, label and ref then resolve inside it."
    },
    "page_id": {
      "type": "string",
      "description": "The page to act on, from list_pages or pages_opened. Defaults to the current page. Does not change the current page."
    },
    "trim": {
      "type": "boolean",
      "description": "Trim leading/trailing whitespace from the extracted text. Default: true."
    }
  },
  "required": [
    "session_id"
  ]
}
⚪scroll(session_id, direction, amount, selector, ref, ...)

Scroll the page in a direction, or scroll a specific element.

입력 스키마

{
  "type": "object",
  "properties": {
    "session_id": {
      "type": "string",
      "description": "Browser session ID"
    },
    "direction": {
      "type": "string",
      "enum": [
        "up",
        "down",
        "left",
        "right"
      ],
      "description": "Scroll direction"
    },
    "amount": {
      "type": "number",
      "description": "Pixels to scroll (default: 500)"
    },
    "selector": {
      "type": "string",
      "description": "CSS selector of a scrollable element. If omitted, the window is scrolled."
    },
    "ref": {
      "type": "string",
      "description": "An element ref from this page's latest get_a11y_tree, such as e5, or f1e3 inside an iframe."
    },
    "frame": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      ],
      "description": "A CSS selector for an iframe, or a list of them for nested iframes. selector, label and ref then resolve inside it."
    },
    "page_id": {
      "type": "string",
      "description": "The page to act on, from list_pages or pages_opened. Defaults to the current page. Does not change the current page."
    }
  },
  "required": [
    "session_id",
    "direction"
  ]
}
⚪evaluate(session_id, expression, page_id)

Execute JavaScript in the browser context.

입력 스키마

{
  "type": "object",
  "properties": {
    "session_id": {
      "type": "string",
      "description": "Browser session ID"
    },
    "expression": {
      "type": "string",
      "description": "JavaScript expression to evaluate in the page context. The return value is serialized as JSON."
    },
    "page_id": {
      "type": "string",
      "description": "The page to act on, from list_pages or pages_opened. Defaults to the current page. Does not change the current page."
    }
  },
  "required": [
    "session_id",
    "expression"
  ]
}
🟢list_pages(session_id, after_seq)

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.

입력 스키마

{
  "type": "object",
  "properties": {
    "session_id": {
      "type": "string",
      "description": "Browser session ID"
    },
    "after_seq": {
      "type": "number",
      "description": "Report page events after this seq. Default: since the previous list_pages."
    }
  },
  "required": [
    "session_id"
  ]
}
⚪switch_page(session_id, page_id)

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

입력 스키마

{
  "type": "object",
  "properties": {
    "session_id": {
      "type": "string",
      "description": "Browser session ID"
    },
    "page_id": {
      "type": "string",
      "description": "The open page to make current, from list_pages or pages_opened."
    }
  },
  "required": [
    "session_id",
    "page_id"
  ]
}
⚪close_page(session_id, page_id)

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.

입력 스키마

{
  "type": "object",
  "properties": {
    "session_id": {
      "type": "string",
      "description": "Browser session ID"
    },
    "page_id": {
      "type": "string",
      "description": "The open page to close."
    }
  },
  "required": [
    "session_id",
    "page_id"
  ]
}
⚪wait_for_popup(session_id, timeout_ms, after_seq)

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.

입력 스키마

{
  "type": "object",
  "properties": {
    "session_id": {
      "type": "string",
      "description": "Browser session ID"
    },
    "timeout_ms": {
      "type": "number",
      "description": "How long to wait, in milliseconds. Default: 10000; maximum 30000."
    },
    "after_seq": {
      "type": "number",
      "description": "Wait for a popup after this page event seq, such as an earlier result's page_events_seq_start."
    }
  },
  "required": [
    "session_id"
  ]
}
🟢list_history(query, limit, before)

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.

입력 스키마

{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "description": "Only entries whose URL or title contains this text (case-insensitive)."
    },
    "limit": {
      "type": "number",
      "description": "How many entries to return. Default 50, maximum 200."
    },
    "before": {
      "type": "string",
      "description": "An entry_id from an earlier page (next_before): return older entries."
    }
  }
}
🟢restore_pages(session_id, decision)

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.

입력 스키마

{
  "type": "object",
  "properties": {
    "session_id": {
      "type": "string",
      "description": "Browser session ID"
    },
    "decision": {
      "type": "string",
      "enum": [
        "restore",
        "dismiss"
      ],
      "description": "restore reopens the offered pages; dismiss drops the offer."
    }
  },
  "required": [
    "session_id",
    "decision"
  ]
}
🔴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.

입력 스키마

{
  "type": "object",
  "properties": {}
}
🔴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.

입력 스키마

{
  "type": "object",
  "properties": {}
}
⚪close_session(session_id)

Close a browser session and release resources.

입력 스키마

{
  "type": "object",
  "properties": {
    "session_id": {
      "type": "string",
      "description": "Browser session ID"
    }
  },
  "required": [
    "session_id"
  ]
}
🟢list_sessions

List all active browser sessions.

입력 스키마

{
  "type": "object",
  "properties": {}
}
⚪authenticate(email)

Authenticate this MCP session. Sends a magic link to your email — click it to activate. Required before using any other tool.

입력 스키마

{
  "type": "object",
  "properties": {
    "email": {
      "type": "string",
      "description": "Your email address"
    }
  },
  "required": [
    "email"
  ]
}
🟢account_info

Check your account status: credits balance, plan, and usage.

입력 스키마

{
  "type": "object",
  "properties": {}
}
🔴buy_credits(item_id, payment, idempotency_key)

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.

입력 스키마

{
  "type": "object",
  "properties": {
    "item_id": {
      "type": "string",
      "description": "A pack id from top_ups or get_credit_catalogue, e.g. pack_1k. Omit it to see prices without buying."
    },
    "payment": {
      "type": "string",
      "enum": [
        "auto",
        "checkout",
        "saved_method"
      ],
      "description": "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."
    },
    "idempotency_key": {
      "type": "string",
      "description": "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 _ . : -"
    }
  }
}
🟢get_credit_catalogue

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

입력 스키마

{
  "type": "object",
  "properties": {}
}
🟢get_credit_balance

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

입력 스키마

{
  "type": "object",
  "properties": {}
}
🟢get_purchase(purchase_id)

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

입력 스키마

{
  "type": "object",
  "properties": {
    "purchase_id": {
      "type": "string",
      "description": "The purchase id, from buy_credits or list_purchases."
    }
  },
  "required": [
    "purchase_id"
  ]
}
🟢list_purchases(limit, cursor)

Lists purchases this key made, newest first.

입력 스키마

{
  "type": "object",
  "properties": {
    "limit": {
      "type": "number",
      "description": "How many purchases to return, 1 to 100. Default 20."
    },
    "cursor": {
      "type": "string",
      "description": "next_cursor from an earlier page: return older purchases."
    }
  }
}
🔴cancel_purchase(purchase_id)

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

입력 스키마

{
  "type": "object",
  "properties": {
    "purchase_id": {
      "type": "string",
      "description": "The purchase id, from buy_credits or list_purchases."
    }
  },
  "required": [
    "purchase_id"
  ]
}
⚪simulate_purchase(purchase_id, outcome)

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

입력 스키마

{
  "type": "object",
  "properties": {
    "purchase_id": {
      "type": "string",
      "description": "The purchase id, from buy_credits or list_purchases."
    },
    "outcome": {
      "type": "string",
      "enum": [
        "paid",
        "expired",
        "failed",
        "authentication_required"
      ],
      "description": "What happens to the simulated payment."
    }
  },
  "required": [
    "purchase_id",
    "outcome"
  ]
}

커뮤니티

이 서버 평가하기

증거

최근 관측

검증됨버전이 기록되지 않음도구 27개