Click element
browser_clickClick a semantic element from the latest observation. Required: sessionId, observationId, elementId (the element's id from browser_observe). Optional button: left (default), middle, or right (contextmenu). Uses the DOM click() path; events are not isTrusted. File pickers and similar APIs return ELEMENT_NOT_INTERACTABLE — the human must click. If the click opens a JavaScript alert, confirm, or prompt, it returns promptly with dialog: { type, message, pending: true } and the dialog stays open until browser_handle_dialog or the 30s timeout. Another click, type, or navigation while it is open returns DIALOG_PENDING. A successful click, type, select, press_key, scroll, or navigate invalidates that observationId; reuse returns STALE_OBSERVATION — observe again. A second action on the same session waits up to 5s for the first to finish, then runs. That wait is a per-session FIFO stored with the session, so it still holds when calls land on different server instances. If that wait times out, the call returns BUSY with retryAfterMs. STALE_OBSERVATION means the page changed — observe again. Do not omit observationId. Clicks are paced; RATE_LIMITED means wait retryAfterMs. On a sensitive site the click waits for human Approve in the extension (APPROVAL_REQUIRED, recoverable). Approve runs that click once. Deny is APPROVAL_DENIED (not recoverable). While that action is waiting, observe/screenshot/wait/get_status/release_control and other same-origin actions on allowed origins still work; retrying the same pending action returns APPROVAL_PENDING. Cancel with browser_cancel_approval. Pending approvals expire after ~2 minutes (APPROVAL_EXPIRED). That wait is not CHALLENGE_DETECTED. Do not retry through CHALLENGE_DETECTED.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| button | No | ||
| elementId | Yes | ||
| sessionId | Yes | ||
| observationId | Yes | ||
| idempotencyKey | No | A key replays the original result only within ~60 seconds of the first call, only for the same Mcp-Session-Id, the same credential (API key or OAuth token), the same browser session, and the same tool. After the window, or under a different session/credential/tool, the call executes and bills normally. Reusing a key with different arguments returns IDEMPOTENCY_KEY_REUSED and is not executed or billed. Refusals (e.g. NO_HISTORY_ENTRY) are not cached, so the same key re-executes once state changes. A key passed in _meta is ignored. |