Skip to main content
Glama

screen_tree

Read-onlyIdempotent

Read a Flutter app's UI as text by listing labelled on-screen elements with bounds and tap targets; optionally return only controls marked clickable.

Instructions

List every labelled element on screen with its bounds.

The primary way to read a Flutter UI: Flutter publishes its semantics tree only while an accessibility service is bound, which this tool arranges temporarily and then reverts.

Each line gives class, flags, pixel size, centre coordinate and label. Flags: C=clickable, F=focusable, E=enabled, k=checked, s=selected. Only elements marked C are real controls -- Flutter also marks plain text focusable, so do not treat F alone as tappable.

Pass tappable=True to get just the tap-target table.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
deviceNo
tappableNo
max_depthNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.1.0

TDQS

A4.3/5.0
Behavior5/5

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

Annotations cover the safety profile (readOnly, idempotent, non-destructive), and the description adds material side effects they cannot express: it temporarily binds an accessibility service to make Flutter publish its semantics tree and then reverts it. It also warns that F alone does not mean tappable, which prevents a real mis-invocation.

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

Conciseness5/5

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

Front-loads the core purpose, then the mechanism, then the output format and flags. Every sentence earns its place, and the flag legend is necessary because there is no output schema to carry it.

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?

With no output schema, the description correctly documents the return format (class, flags, pixel size, centre coordinate, label) and the flag legend. The remaining gaps are the device and max_depth parameters, which an agent still has to guess at.

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

Parameters2/5

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

Schema description coverage is 0%, so the description carries the full burden, yet it only explains one of three parameters (tappable, with its effect on output). device and max_depth are never mentioned, leaving their format and purpose (e.g. depth truncation) entirely undocumented.

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?

Opening sentence gives a specific verb and resource ('List every labelled element on screen with its bounds') and the second sentence positions it precisely as the Flutter semantics-tree reader. This distinguishes it from sibling screenshot (pixels) and audit_layout (layout diagnostics) without needing to name them.

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?

States it is 'the primary way to read a Flutter UI,' which tells the agent when to reach for this over screenshot, and explains the tappable=True shortcut. It stops short of explicit when-not-to-use guidance or naming sibling alternatives for non-Flutter surfaces.

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

Deploy Server

Other Tools