Skip to main content
Glama

tap

Tap a device screen coordinate in true device pixels. Debug unresponsive taps with identify or verify_change options.

Instructions

Tap a single coordinate in true device pixels. Use a center value from describe_ui. If a tap seems to do nothing, the coordinate is almost always stale/misscaled — re-run describe_ui and use a fresh center. Prefer tap_on_text when you know the element's label. When a tap lands but nothing happens, pass identify=true (reports which element the coordinate hit — or that it hit a non-clickable wrapper / no reported element) and/or verify_change=true (reports whether the UI actually changed) to tell the failure modes apart. Note: some native views (e.g. Compose/RN NativeTabs bars) don't respond to coordinate taps at all — use tap_on_text/tap_element with via_accessibility=true there (EXPERIMENTAL, requires adb-mcp bridge install once per device).

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
xYesX coordinate in true device pixels.
yYesY coordinate in true device pixels.
serialNoTarget device serial (adb -s). Optional when exactly one device is attached.
identifyNoAlso report which UI element the coordinate lands in (a hit test against the hierarchy read just before tapping). Use when a tap seems to do nothing: it tells you whether the coordinate hit the element you expected, a non-clickable wrapper, or no reported element at all (an unseen overlay). Costs one extra hierarchy read.
verify_changeNoAlso report whether the UI hierarchy changed after the tap (ui_changed: true/false). Costs two extra hierarchy reads (~2-3s); use when a tap silently doing nothing would send you down the wrong path.
Behavior5/5

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

Without any annotations, the description fully covers behavioral traits: it warns that stale coordinates cause silent failures, explains that some native views ignore coordinate taps entirely, details the side effects of passing 'identify' and 'verify_change' (extra hierarchy reads, time cost, and diagnostic value), and notes that 'verify_change=true' costs '~2-3s'. This is exceptionally thorough.

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

Conciseness3/5

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

The description packs a lot of valuable information, but it is somewhat long (several sentences) and could be more tightly organized. While every sentence earns its place, the structure feels a bit stream-of-consciousness rather than logically front-loaded. Still informative, but could be more concise.

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 context (5 params, 0 annotations, 0 output schema), the description is remarkably complete: it explains what the tool does, how to use it, when to avoid it, failure modes, and diagnostic flags. No missing critical information for an agent to use this tool effectively.

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 description coverage is 100%, so baseline is 3. The description adds significant value by explaining the purpose of 'identify' and 'verify_change' in troubleshooting scenarios (e.g., 'it tells you whether the coordinate hit the element you expected, a non-clickable wrapper, or no reported element at all'), which goes beyond the schema's terse descriptions. It doesn't add much for x, y, and serial, but the value added for the optional booleans warrants a 4.

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 a single coordinate in true device pixels', specifying the verb 'tap' and the resource 'coordinate'. It distinguishes itself from siblings like 'tap_on_text' and 'tap_element' by explicitly recommending them when label or element is known, and from 'drag' which uses coordinates differently.

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 provides explicit guidance on when to use alternatives: 'Prefer tap_on_text when you know the element's label.' It also advises when to avoid this tool for native views that don't respond to coordinate taps, directing to 'tap_on_text/tap_element with via_accessibility=true'. It tells users what to do if a tap seems to do nothing: re-run describe_ui and use fresh coordinates.

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

Install Server

Other Tools

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/iksnerd/adb-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server