Skip to main content
Glama

Robot Actions — Remote Device Control

device_tap

Tap at (x,y) coordinates on a device screen. Coordinates are in DEVICE TAP-COORD SPACE (the "Tap-coord space" dims printed in the device_screenshot footer; same space as device_page_source bounds). First call starts a device control session (~3s).

COORDINATE SOURCES — in priority order:

  1. PRIMARY: device_page_source bounds [L,T][R,B] (or the "Labeled elements" block bundled with device_screenshot) → tap center = ((L+R)/2, (T+B)/2). NO scaling. Pixel-exact.

  2. FALLBACK ONLY (element not in page_source — image-only widget / custom Canvas): visual estimate from the screenshot pixels, scaled with the formula below.

VISUAL → TAP COORDINATE FORMULA (Android): scale = device_width / rendered_chat_width tap_x = visual_x × scale tap_y = visual_y × scale where device_width is the "Tap-coord space" width from the device_screenshot footer and rendered_chat_width is the "Image" width from the same footer. Both axes share one scale (aspect preserved). The footer prints concrete values per device — never assume any constant.

Skipping the scale on a visual estimate is the #1 cause of taps landing in the wrong place — the agent sees a downscaled image but device_tap expects full-resolution tap-space coords.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
xYesX coordinate in device tap-coord space (NOT visual screenshot pixels — apply scale = device_width / rendered_chat_width if you started from a visual estimate)
yYesY coordinate in device tap-coord space (NOT visual screenshot pixels — apply scale = device_width / rendered_chat_width if you started from a visual estimate)
udidYesDevice serial number (UDID)

TDQS

A4.8/5.0
Behavior5/5

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

No annotations are provided, so the description carries full behavioral disclosure burden. It reveals a non-obvious 3-second session-start cost on first call, the coordinate space transformation semantics (tap-coord vs visual pixels), and explicitly warns about the #1 failure mode of skipping scale. This is exceptionally transparent behavioral context.

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 dense with high-value content and front-loaded the core purpose immediately. It's longer than ideal but every section earns its place: coordinate sources, priority order, fallback formula, and a concrete warning. Well organized with headers. Slightly verbose for the format but justified given the complexity of coordinate-space mapping.

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?

For a 3-param tool with no output schema, this description is thoroughly complete. It covers the coordinate space ambiguity, the scaling formula, the session-start cost, the primary/fallback sourcing strategy, and the most common failure mode. The agent has everything needed to invoke correctly without guessing. This exceeds completeness expectations for a simple tap tool.

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% with parameter descriptions, and the schema fields (udid, x, y) are self-explanatory. The description adds substantial value by explaining the coordinate computation formula (scale = device_width / rendered_chat_width) and warning not to assume constants. The description supplements rather than repeats the schema — a slight deduction since parameters themselves are covered well by schema.

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 'Tap at (x,y) coordinates on a device screen' with a specific verb+resource. It distinguishes itself from siblings like device_tap_by_text, ios_tap, and device_long_press by defining the coordinate space explicitly. It also identifies its coordinate source relationship to device_page_source and device_screenshot.

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 gives explicit when-to-use guidance with a priority order: use page_source bounds as PRIMARY source, and visual estimate only as FALLBACK for widgets not in page_source. It names the specific sibling tools to reference (device_page_source, device_screenshot) and explains which to use when, including the coordinate-space relationship.

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.

TDQS

B3.1/5.0
Disambiguation2/5

The set contains near-identical duplicate families: web_* and playwright_* expose ~15 pairs of the same desktop-grid-browser operations (web_get_text/playwright_get_text, web_reload/playwright_reload), and screenshot/log/network/mock capabilities each have 5-8 entry points (device_screenshot vs android_mjpeg_screenshot vs ios_screenshot vs ios_fast_screenshot vs web_screenshot vs webpage_screenshot vs session_screenshot). Many individual descriptions carefully draw boundaries (devtools vs traffic, HID vs session), but an agent cannot reliably distinguish web_* from playwright_*, and ios_screenshot/ios_fast_screenshot/ios_mjpeg_screenshot blur together.

Naming Consistency2/5

The prefix scheme is broken: Android functionality is split arbitrarily between android_* and device_* (device_screenshot vs android_mjpeg_screenshot), the desktop browser gets two parallel prefixes (web_* and playwright_*), and verbs vary across equivalents (device_navigate_url vs web_navigate vs ios_safari_navigate). session_* uses bare verbs (session_url, session_back), and the same concept gets different names (ios_clipboard_get_hid vs ios_get_pasteboard; device_screen vs ios_orientation).

Tool Count1/5

333 tools is an extreme count by any measure — far beyond the 50+ threshold — and much of the bulk is duplicative (the web_*/playwright_* pairs alone double ~15 slots) or out-of-scope for a device-control server (TestRail, Jira, AzDO, agent memory, secret variables, feedback). Even granting that remote device control + test automation is a broad domain, this surface will devastate agent context budgets and is impossible to navigate coherently.

Completeness4/5

The core device-control and test-automation domain is remarkably thorough: Android and iOS each have full interaction, app-lifecycle, file, network/proxy, performance, crash, accessibility, recording, and replay coverage, with CRUD lifecycles for flows, suites, app uploads, TestRail cases, and visual-review baselines. Minor gaps exist at the margins — Jira/AzDO lack update/transition/comment operations, and iOS cannot open/close tabs — but the central workflows have no dead ends.

Resources