Skip to main content
Glama

browser.execute_action

Execute a single browser action like navigate, click, type, or scroll in a live session. Use browser.observe first to get element IDs, then run policy-checked actions and receive verification plus a page observation.

Instructions

Execute one browser action (navigate, click, hover, type, press, select_option, scroll, …) in a session, using the same action schema the agent planner emits. Actions are policy-checked and audited, and governed actions may require a granted approval_id. Call browser.observe first to get targetable element IDs and selectors. Returns the action's verification (what changed) and an observation of the page after it (up to 20 interactables).

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
actionYesThe browser action to execute, in the shared action schema: an action type (navigate, click, type, scroll, wait, done, …) plus its arguments, e.g. a URL for navigate or an element selector/index for click and type.
detailNo'compact' (default) leaves out what choosing the next step does not need: the full session record (see browser.get_session), remote-access diagnostics and, for actions, the pre-action snapshot. 'full' returns the complete payload.compact
session_idNoTarget session id, from browser.create_session or browser.list_sessions. Optional when exactly one session is live; observe and act tools create one when none is.
approval_idNoID of a granted approval that authorizes this action when the active policy requires one. Omit when the action does not need approval.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Addedv1.8.1
  2. Removedv1.4.2
  3. Changed3 schema fields changedv1.4.2
    • addedInput schema / properties / action / description
      Added value: +"The browser action to execute, in the shared action schema: an action type (navigate, click, type, scroll, wait, done, …) plus its arguments, e.g. a URL for navigate or an element selector/index for click and type."
    • addedInput schema / properties / approval_id / description
      Added value: +"ID of a granted approval that authorizes this action when the active policy requires one. Omit when the action does not need approval."
    • addedInput schema / properties / session_id / description
      Added value: +"ID of the target browser session, as returned by browser.create_session or listed by browser.list_sessions."
  4. Changed1 schema field changedv1.0.5
    • changedInput schema / $defs / BrowserActionDecision / properties / action / enum
      Previous value: -[
      -  "navigate",
      -  "click",
      -  "hover",
      -  "select_option",
      -  "type",
      -  "press",
      -  "scroll",
      -  "wait",
      -  "reload",
      -  "go_back",
      -  "go_forward",
      -  "upload",
      -  "social_login",
      -  "social_post",
      -  "social_comment",
      -  "social_like",
      -  "social_follow",
      -  "social_unfollow",
      -  "social_repost",
      -  "social_dm",
      -  "request_human_takeover",
      -  "done"
      -]New value: +[
      +  "navigate",
      +  "click",
      +  "hover",
      +  "select_option",
      +  "type",
      +  "press",
      +  "scroll",
      +  "wait",
      +  "reload",
      +  "go_back",
      +  "go_forward",
      +  "upload",
      +  "request_human_takeover",
      +  "done"
      +]
  5. Changed14 schema fields changedv1.0.3
    • changedInput schema / $defs / BrowserActionDecision / properties / element_id / anyOf
      Previous value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "maxLength": 500,
      +    "minLength": 1,
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / $defs / BrowserActionDecision / properties / file_path / anyOf
      Previous value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "maxLength": 500,
      +    "minLength": 1,
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / $defs / BrowserActionDecision / properties / key / anyOf
      Previous value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "maxLength": 120,
      +    "minLength": 1,
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / $defs / BrowserActionDecision / properties / label / anyOf
      Previous value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "maxLength": 1000,
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / $defs / BrowserActionDecision / properties / platform / anyOf
      Previous value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "maxLength": 120,
      +    "minLength": 1,
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / $defs / BrowserActionDecision / properties / recipient / anyOf
      Previous value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "maxLength": 200,
      +    "minLength": 1,
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / $defs / BrowserActionDecision / properties / selector / anyOf
      Previous value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "maxLength": 2000,
      +    "minLength": 1,
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / $defs / BrowserActionDecision / properties / text / anyOf
      Previous value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "maxLength": 5000,
      +    "minLength": 1,
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / $defs / BrowserActionDecision / properties / url / anyOf
      Previous value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "maxLength": 2000,
      +    "minLength": 1,
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / $defs / BrowserActionDecision / properties / username / anyOf
      Previous value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "maxLength": 500,
      +    "minLength": 1,
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / $defs / BrowserActionDecision / properties / value / anyOf
      Previous value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "maxLength": 1000,
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • addedInput schema / additionalProperties
      Added value: +false
    • addedInput schema / properties / session_id / maxLength
      Added value: +120
    • addedInput schema / properties / session_id / minLength
      Added value: +1
  6. First observedv0.5.0

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations provide basic flags (readOnlyHint=false, openWorldHint=true, idempotentHint=false, destructiveHint=false) but are not highly informative. The description adds valuable behavioral context: actions are policy-checked and audited, governed actions may require approval, and the return value includes verification and a post-action observation. This goes beyond the annotations and clarifies side effects and authorization needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, well-structured paragraph with three sentences. It front-loads the main purpose, then covers policy/approval, the prerequisite, and the return format. No filler or repetition, though it could be slightly more compact by removing the ellipsis in the action list, which is already clear from the schema enum.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (nested action schema, many parameters, no output schema), the description is sufficiently complete. It explains the workflow (observe first), the approval mechanism, and the return value. It does not enumerate all action types, but the schema covers that. It also doesn't mention session creation, but that is handled in the session_id parameter description.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so parameters are well-documented in the schema. The description adds semantic value by explaining the action schema is the same one the planner emits and by advising to call browser.observe for element IDs and selectors, which directly aids correct use of element_id and selector. This exceeds the baseline for full schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states it executes one browser action, enumerates action types, and distinguishes itself from observation tools by specifying the action-execution role. Mentions the shared action schema, making its purpose unambiguous and distinct from siblings like browser.observe or browser.wait_for_selector.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly instructs to call browser.observe first to obtain element IDs and selectors, which is a critical prerequisite. Also mentions the approval_id for governed actions, giving context on when to include it. Does not explicitly state when to avoid this tool in favor of alternatives, but the observe-first hint is strong guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.