Skip to main content
Glama

Robot Actions — Remote Device Control

webpage_fill_form

Fill SEVERAL fields of a form in one call on the device browser — the batch form of webpage_type, and the counterpart to Playwright MCP's browser_fill_form. Works on BOTH iOS Safari and Android Chrome. Fields are filled IN ORDER inside a single browser session, which is what makes this different from calling webpage_type N times: order-dependent forms (a country select that repopulates the state list, an autocomplete that rewrites the next field) behave the way they do for a real person, and you pay one round trip instead of N. Each field takes the same target shape as webpage_type — a CSS selector or a ref from webpage_snapshot — plus text, and an optional per-field clear. On iOS each field is typed on the DEVICE keyboard so the page receives real trusted keystrokes; where that is unavailable it falls back to setting .value via the native setter and dispatching bubbling input/change (isTrusted:false), reporting via and fallbackReason PER FIELD so a degraded field is never hidden by its neighbours succeeding. exact:false on a field means the keystrokes landed but the component rewrote the value as you typed (masks, autocompletes) — that is a success, not a failure. Stops at the first failure by default, because a form is usually order-dependent and filling past a field that did not take produces a state no one asked for; pass continueOnError:true to attempt every field anyway, which is what you want when diagnosing WHICH selectors are stale. This does NOT submit the form — follow it with webpage_press_key("Enter") or webpage_click on the submit control. ONE CROSS-PLATFORM TRAP, measured on device: change fires differently. Android dispatches change on every field. iOS fires it only on a real BLUR, and the LAST field still holds focus when this returns — so its change has NOT fired, and a form that validates on change will not have seen the final field. Follow with webpage_press_key("Tab") or a click elsewhere if that matters. Also on iOS, a field filled with clear:true emits one isTrusted:false input carrying the empty value (the wipe) before the trusted keystrokes.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
udidYesDevice UDID / serial (iOS or Android)
clearNoDefault for every field that does not set its own `clear` (default: false)
fieldsYesFields to fill, in the order they should be filled
pageIdNoTarget page/tab id — auto-picked when omitted
socketNoAndroid only: abstract unix socket name (default: chrome_devtools_remote)
requireNoSet to "native" to fail a field loudly when the device keyboard is unavailable, instead of silently setting .value (isTrusted:false). iOS only.
continueOnErrorNoAttempt every field even after one fails, instead of stopping at the first failure. Use it to find out which selectors are stale in one round trip; leave it off for order-dependent forms.
platformVersionNoIgnored (kept for compatibility)

Schema Changelog

Changes observed during successful MCP inspections.

  1. Added

TDQS

A4.8/5.0
Behavior5/5

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

With no annotations provided, the description carries the full behavioral burden and does so thoroughly. It discloses the trusted-keystroke behavior on iOS, the fallback to setting .value with isTrusted:false, per-field via/fallbackReason reporting, exact:false semantics, failure-stop default, and important iOS/Android change-event differences. This gives an agent an unusually complete picture of what will happen.

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 long but well structured and front-loaded with the core purpose before diving into caveats. Every paragraph adds information needed for correct use, though a few explanatory asides could be tightened without losing value.

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

Completeness5/5

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

Given the tool's complexity, eight parameters, no annotations, and no output schema, the description is remarkably complete. It covers core behavior, failure handling, platform-specific caveats, fallback behavior, and follow-up actions, leaving little for an agent to have to guess.

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 the baseline is 3, but the description adds meaningful semantics: it explains that each field uses the same target shape as webpage_type, that the top-level clear acts as the default for per-field clear, and that exact:false means success rather than failure. This goes beyond the schema and makes parameter intent clearer.

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?

The description clearly states the tool fills several form fields in one call on the device browser, and explicitly positions it as the batch form of webpage_type and the counterpart to Playwright MCP's browser_fill_form. It names the specific resource (form fields on iOS Safari and Android Chrome) and distinguishes it from calling webpage_type multiple times.

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

Usage Guidelines5/5

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

The description explicitly explains when this tool is appropriate: when filling several fields in order within one browser session, especially for order-dependent forms or to save round trips. It also gives concrete follow-up guidance (do not submit the form; use webpage_press_key or webpage_click) and tells when to use continueOnError:true for diagnosing stale selectors.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources