Skip to main content
Glama
Immmmmmortal1

UI-dbugbridge-mcp

UI-dbugbridge-mcp

UI-dbugbridge-mcp 是 Mac 侧的 MCP Server。它通过 stdio 接收 MCP 请求,再通过 iproxy 访问运行在 iOS App 内的 LookDebugBridge HTTP 服务。

本仓库只负责 MCP 编排,不负责编译、安装或启动 App。真机编译安装由 XcodeBuildMCP 的 build_run_device 完成。

两个仓库的职责

仓库

职责

UI-dbugbridge-mcp

Mac 侧 MCP Server:真机预检、端口转发、UI 操作、UI 树读取、日志读取、运行态校验

LookDebugBridgeService

iOS Debug Pod:在 App 进程内启动 HTTP Bridge,提供 UI、UI 树和临时内存日志能力

Related MCP server: MCP Safari Server

当前运行约束

  • 只发现物理设备上的 DebugBridge,不扫描 iOS Simulator,也不回退到 localhost。

  • ensure_ports / ping 默认探测真机目标的 App 端口 37777(与 Pod 默认值对齐),并在结果里返回 discovered 列表。

  • 通过 bundleID / sessionID / deviceUDID(或 deviceID)/ mode=device 选择当前激活目标;设备选择器支持物理 UDID 和 CoreDevice ID。

  • 未指定选择器时,优先有线真机上的活桥,其次任意真机。

  • App 编译安装由 XcodeBuildMCP 负责;本仓库不激活 Xcode scheme,不发送 Command+R

  • 不读取 Xcode Console,不调用 Lookin CLI。

  • 真机优先走 CoreDevice tunnel;旧设备回退 iproxy

端口与会话语义

维度

默认行为

说明

远端 App 端口

37777

与 Pod 默认值对齐,同一真机/同一 App 只暴露一个端口;连续会话直接复用,不靠多端口隔离

CoreDevice 直连

http://[<tunnelIP>]:37777

iOS 17+ 默认走 CoreDevice tunnel,MCP 直接访问 tunnelIP:37777,BRIDGE_BASE_URL / BRIDGE_LOCAL_PORT 在此模式下忽略

iproxy 回退

iproxy <localPort>:37777

旧设备无 tunnelIP 时回退 iproxy;localPort 由 Mac 侧动态分配,远端始终 37777

sessionID

上下文标记,非并发隔离

默认(未传 args.sessionID)不按 sessionID 过滤;自动 POST /debug/session 仅把 Mac 侧真实会话 id 注入 App,用于日志/identity 匹配;显式工具参数 sessionID 优先于 MCP 环境 sessionID 用于目标匹配与注入

连续会话 release

下个会话可重连

App 侧 37777 端口在 NWListener 上 allowLocalEndpointReuse,session A release 后 session B 可重新 ping 同一端口

若两个 MCP 会话并发控制同一 App,当前没有 ownership/lease 机制保护,仍可能互相覆盖 sessionID。仅适合"连续会话"(同一时刻只有一个活跃会话)场景。

App 侧接入

CocoaPods

正式接入使用独立 Pod 仓库:

target 'YourApp' do
  use_frameworks!

  pod 'LookDebugBridge',
      :git => 'git@github.com:Immmmmmortal1/LookDebugBridgeService.git',
      :tag => '0.1.17',
      :configurations => ['Debug']
end

不要再添加 LookinServer。执行:

pod install

启动 Bridge

在 App 启动阶段,仅 Debug 构建启动服务:

#if DEBUG
import LookDebugBridge

Task { @MainActor in
    LookDebugBridge.shared.startIfNeeded()
}
#endif

Bridge 启动后提供:

HTTP 接口

用途

GET /ping

检查 Bridge 是否可用

GET /debug/identity

只读 bundleID / sessionID / port;Mac 侧 preflight 据此校验目标 App

POST /debug/session

运行时注入 sessionID(上下文标记,非并发隔离);覆盖式写入,幂等可重入

GET /debug/page

读取当前语义页面和注册元素

GET /debug/windows

读取当前 UIWindow/UIView 树

POST /debug/runtime/node

按 accessibility anchor 读取运行态节点

POST /debug/tap

点击注册元素

POST /debug/switch

设置 UISwitch

POST /debug/text/set

替换 UITextField/UITextView 文本

POST /debug/text/type

追加 UITextField/UITextView 文本

GET /debug/logs

查询或等待当前 App 进程的日志

/debug/identity/debug/session 中的 sessionID 是上下文标记(用于日志、identity 匹配),不代表真正并发隔离。两个 MCP 会话并发控制同一 App 仍需后续 ownership/lease 机制。

日志接入

业务 Debug 日志必须进入 LookDebugBridge.log,或由 App 的 Debug 日志入口统一转发:

#if DEBUG
LovOnDebugLog.error("request failed", category: "api")
#endif

日志级别和分类是自由字符串,不限于固定枚举。levelcategory 查询为不区分大小写的精确匹配,query 为不区分大小写的消息子串匹配。

日志生命周期和查询规则

日志是 App 进程内的临时内存池:

  • 不写本地文件;

  • 不跨 App 进程保留;

  • App 重启后创建新的日志池;

  • 不使用 cursor、offset 或读取位置;

  • read_app_logs 直接检索当前进程已经产生的完整日志池,默认返回最近 500 条,最多 5000 条;

  • wait_app_logs 只等待本次请求开始后产生的、符合条件的新日志,最多等待 120 秒;

  • sessionID 是 App 本次进程生成的调试会话标识(上下文标记,不是文件目录,也不是日志游标,不作为并发隔离依据);

  • DEV_FLOW_SESSION_ID 是 DevFlow/MCP 上下文标识,作为上下文标记通过 POST /debug/session 注入 App(用于日志/identity),两者用途不同但语义都是上下文标记。

日志返回结构:

{
  "success": true,
  "sessionID": "app-process-session-id",
  "status": "matched",
  "lines": [
    {
      "timestamp": "2026-07-31T06:00:00Z",
      "level": "error",
      "category": "api",
      "message": "request failed"
    }
  ],
  "error": null
}

status 的含义:

status

含义

matched

找到符合条件的日志

empty

当前池没有符合条件的日志(立即查询)

timeout

等待超时,期间没有符合条件的新日志

查询示例:

{
  "name": "read_app_logs",
  "arguments": {
    "query": "upload",
    "category": "oss",
    "limit": 50
  }
}

等待示例:

{
  "name": "wait_app_logs",
  "arguments": {
    "query": "completed",
    "level": "info",
    "waitMs": 30000
  }
}

Mac 侧安装与配置

要求:

  • macOS;

  • Node.js 18+;

  • Xcode command line tools;

  • iproxy

  • 已连接并信任的物理 iOS 设备。

Codex 配置示例:

[mcp_servers.ui_dbugbridge_mcp]
command = "/opt/homebrew/bin/node"
args = ["/absolute/path/UI-dbugbridge-mcp/src/server.js"]
startup_timeout_sec = 30.0

[mcp_servers.ui_dbugbridge_mcp.env]
# 默认不设置 BRIDGE_BASE_URL / BRIDGE_LOCAL_PORT:iproxy 模式下 localPort 动态分配,
# CoreDevice 隧道模式下 ensureBridgeReachable 用 tunnelIP 覆盖;二者均不需要固定本地端口
LOOKDEBUG_DEVICE_ID = "<core-device-id-or-physical-udid>"
IPROXY_PATH = "iproxy"
# 远端 App 端口默认 37777(与 Pod 对齐);1-65535,否则回退到 37777
# BRIDGE_REMOTE_PORT = "37777"
DEV_FLOW_SESSION_ID = "<devflow-session-id>"

DEV_FLOW_SESSION_ID 只作为上下文标记写入 App(通过 POST /debug/session),用于日志/identity 匹配,不作为并发隔离依据。同一时刻多个 MCP 会话并发控制同一 App 仍需后续 ownership/lease。

隧道模式 vs iproxy 模式(端口说明)

默认省略 BRIDGE_BASE_URL / BRIDGE_LOCAL_PORT:iproxy 模式下 localPort 动态分配,CoreDevice 隧道模式下用 tunnelIP 覆盖,二者均不需要固定本地端口:

模式

触发条件

BRIDGE_BASE_URL / BRIDGE_LOCAL_PORT

实际访问地址

CoreDevice 隧道(iOS 17+ 默认)

设备暴露 tunnelIPAddress

忽略ensureBridgeReachable 会用 tunnelIP 覆盖

http://[<tunnelIP>]:37777

iproxy(旧设备回退)

无 tunnelIP,走 iproxy 转发

默认省略;如显式设置则在 iproxy 模式生效,否则动态分配本地端口转回设备 37777

http://127.0.0.1:<localPort>

门禁类探针不要直接探测 127.0.0.1:37777:隧道模式下该端口无监听,会误报桥不可用。请通过 MCP 工具(ping / ensure_ports)走 preflight 流程判断桥可达性。

配置项:

配置项

必须

说明

BRIDGE_BASE_URL

默认省略;省略时 iproxy 模式下动态生成实际本机转发地址,CoreDevice 隧道模式用 tunnelIP 覆盖。如显式设置:host 仅允许回环(127.0.0.1/localhost/::1),非回环需显式开启 LOOKDEBUG_ALLOW_ANY_URL

LOOKDEBUG_DEVICE_ID

指定优先使用的 XcodeBuildMCP/CoreDevice ID;也接受物理设备 UDID

LOOKDEBUG_DEVICE_UDID

LOOKDEBUG_DEVICE_ID 的旧版兼容别名

IPROXY_PATH

默认 iproxy

BRIDGE_LOCAL_PORT

默认省略,由 iproxy 模式动态分配本机端口;显式设置后固定使用指定端口(1-65535),若被其他转发占用则失败。仅 iproxy 模式生效,CoreDevice 隧道模式忽略

BRIDGE_REMOTE_PORT

默认 37777(与 Pod 默认值对齐);显式设置后固定使用指定端口,必须 1-65535,否则回退到 37777

DEV_FLOW_SESSION_ID

DevFlow 上下文标识,作为上下文标记通过 POST /debug/session 注入 App(用于日志/identity),不作为并发隔离依据;未设置时回退 CODEX_THREAD_IDCURSOR_CONVERSATION_ID

LOOKDEBUG_SCREENSHOT_COMMAND

外部截图命令;使用 {output} 作为输出文件占位符(占位符替换后做 shell 转义,防止注入)

LOOKDEBUG_ARTIFACT_ROOT

artifact 根目录,设置后 audit_runtime 的输入/输出路径必须位于其内;未设置时写操作默认拒绝

LOOKDEBUG_ALLOW_ANY_PORT

危险开关,默认关闭。开启后允许 BRIDGE_LOCAL_PORT/BRIDGE_REMOTE_PORT 超出常规范围

LOOKDEBUG_ALLOW_ANY_URL

危险开关,默认关闭。开启后允许 BRIDGE_BASE_URL 指向非回环主机

截图不是 UI 树或日志的依赖能力。未配置 LOOKDEBUG_SCREENSHOT_COMMAND 时,get_screenshot 返回 screenshot_command_not_configured。配置后执行返回结果会带 warning: screenshot_command_executed_as_configured 提示。

标准真机调试流程

1. session_show_defaults
2. 未指定设备时,默认选中有线连接的第一台可用物理设备,再 build_run_device
3. 启动并确认 App 内 LookDebugBridge
4. MCP tools/call: ping 或任意业务工具(自动执行预检)
5. get_debug_page / inspect_ui
6. tap_element / set_switch / set_text / type_text / run_flow
7. read_app_logs 或 wait_app_logs 验证业务结果
8. get_runtime_node / audit_runtime 做运行态校验

build_run_devicesession_show_defaults 属于 XcodeBuildMCP,不是本仓库提供的 MCP 工具。本仓库不主动切换 Xcode scheme,也不模拟 Command+R。设备选择遵循上方「有线第一台」规则;LOOKDEBUG_DEVICE_ID(或旧版 LOOKDEBUG_DEVICE_UDID)仅用于显式覆盖。

MCP 工具契约

所有业务工具都通过 stdio 的 MCP tools/listtools/call 暴露。工具结果统一包含:

{
  "source": "debug_bridge",
  "success": true,
  "payload": {},
  "error": null
}

环境与连接

工具

参数

说明

ping

bundleID?, sessionID?, deviceUDID? / deviceID?, mode?, remotePort?

扫描全部目标上的活桥并激活一个

release_session

exitAfterRelease?, reason?

释放本 MCP 实例的 iproxy;默认随后退出 server 进程

ensure_ports

同上

同上;结果包含 discovered 多目标列表

UI 页面和节点

工具

主要参数

说明

get_debug_page

expectedPageID?, saveArtifact?, timeoutMs?, intervalMs?

读取当前语义页面、页面标题和注册元素

inspect_ui

depth?, includeHidden?, maxNodes?

读取当前 UIWindow/UIView 节点树

get_runtime_node

anchor

UIView.accessibilityIdentifier 查找运行态节点;要求结果唯一

get_page

get_debug_page

兼容别名,已弃用

get_ui_hierarchy

inspect_ui 兼容别名,已弃用

inspect_ui 示例:

{
  "name": "inspect_ui",
  "arguments": {
    "depth": 8,
    "includeHidden": false,
    "maxNodes": 2000
  }
}

UI 操作

工具

必填参数

说明

tap_element

id

点击注册元素

set_switch

id, isOn

设置开关状态

set_text

id, text

替换输入控件文本

type_text

id, text

追加输入控件文本

run_flow

steps

按顺序执行多步 UI 流程

操作工具使用 DebugBridge 注册的稳定 id,不使用坐标。单步可附加 waitForPageIDwaitForElementtimeoutMsintervalMs 等等待条件。

run_flow.steps 支持:

tap
tap_if_present
set_switch
set_text
type_text
wait_for_page
wait_for_element
sleep

流程示例:

{
  "name": "run_flow",
  "arguments": {
    "steps": [
      {"action": "set_text", "id": "login.email", "text": "user@example.com"},
      {"action": "tap", "id": "login.submit", "waitForPageID": "home"},
      {"action": "wait_for_element", "id": "home.content"}
    ]
  }
}

日志、截图和运行态审查

工具

必填参数

说明

read_app_logs

查询当前 App 进程日志池

wait_app_logs

等待当前请求开始后的新匹配日志

get_screenshot

调用配置的外部截图命令

audit_runtime

figmaRawPath

将 Figma raw JSON 与当前 DebugBridge 页面做语义校对并生成报告

audit_runtime 可选 figmaNodeIDexpectedPageIDlabelAliasesartifactDiroutJsonPathoutMarkdownPathtimeoutMsintervalMs

页面、流程和审查工具的 artifact 默认写入 .devflow-ui/runtime;截图默认写入当前工作目录下的 .tmp/lookdebug-mcp。日志不写入这些目录。

常见错误

错误

处理

physical_device_required

连接物理设备,开启开发者模式并确认 Developer Disk Image 服务可用

physical_device_detection_failed:*

检查 xcrun devicectl list devices --json-output - 和 Xcode command line tools

missing_LOOKDEBUG_DEVICE_UDID

设置 LOOKDEBUG_DEVICE_ID(或旧版 LOOKDEBUG_DEVICE_UDID

iproxy_not_reachable

检查 iproxy 路径、设备 UDID 和端口占用

debug_bridge_ping_failed

确认 App 已启动 DebugBridge 且 BRIDGE_BASE_URL 正确

release_session

dev-flow commit 完成后调用,释放本 MCP 实例的 iproxy 并退出进程

page_unavailable

当前页面没有可用的页面描述或 App 仍在切换页面

element_not_found

重新调用 get_debug_page,使用当前页面中的稳定元素 ID

unsupported_element_type

当前元素不支持请求的操作

read_app_logs 返回 empty

确认日志入口确实调用了 LookDebugBridge.log,并放宽 query、level、category 条件

本地开发和验证

npm run build
npm test

运行 MCP Server:

node src/server.js

该进程使用 newline-delimited JSON 的 stdio MCP transport,支持 initializenotifications/initializedtools/listtools/call

发布与群通知

MCP 更新后的 Bridge 版本门禁

每次更新 MCP 代码或准备发布前,必须主动检查以下版本是否同步:

  • package.json 的 MCP 版本

  • LookDebugBridge.podspec 的 Pod 版本

  • 独立 LookDebugBridgeService 仓库的最新稳定 tag

  • README 中示例 Pod 的 tag

执行联网校验:

npm run check:bridge-version

校验无法访问远端或任一版本不一致时会以非零状态退出,禁止继续发布。仅检查本地文件一致性时可使用 npm run check:bridge-version:offline

打 tag 发布新版本并 push 时,.githooks/pre-push 会自动推送飞书群机器人通知(仅发版触发,普通提交不通知)。

新 clone 后启用 hook(一次性):

git config core.hooksPath .githooks

发布流程:

# 1. bump 版本(package.json 的 version)
# 2. npm run release:check
# 3. commit 改动
# 4. git tag -a <版本> -m "Release <版本>"
# 5. git push origin main && git push origin <版本>   # 触发飞书通知

默认 webhook 地址内置于 .githooks/pre-push,可用环境变量 LOOKDEBUG_LARK_WEBHOOK 覆盖。

Available Tools

16 tools
audit_runtimeB

Compare a Figma raw frame with the current DebugBridge page and write semantic audit artifacts.

ParametersJSON Schema
NameRequiredDescriptionDefault
timeoutMsNoHow long to retry /debug/page while the app is launching or transitioning. Defaults to 8000.
intervalMsNoRetry interval for transient /debug/page failures. Defaults to 300.
artifactDirNoDirectory for JSON/Markdown report artifacts. Defaults to .devflow-ui/runtime.
figmaNodeIDNoOptional target Figma node id when the raw file contains multiple nodes.
outJsonPathNoOptional exact JSON artifact path.
figmaRawPathYesPath to the raw Figma JSON artifact.
labelAliasesNoOptional label alias map, e.g. {"Share":["分享"]}.
artifactPrefixNoOptional file prefix for saved report artifacts.
expectedPageIDNoOptional expected DebugBridge pageID.
outMarkdownPathNoOptional exact Markdown artifact path.

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations, the description must disclose behavioral traits. It mentions writing artifacts but does not specify side effects, permissions, what gets modified, or what the output contains. It also fails to clarify the semantics of 'semantic audit artifacts' or the comparison process. This ambiguity is risky for a tool with side effects.

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 single-sentence description is concise and front-loaded, but it lacks important context. It is not verbose, but the brevity sacrifices essential information. A well-crafted description of this length can earn a higher score, but this one doesn't include usage or side-effect details, so it's adequate but not exemplary.

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

Completeness2/5

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

The tool has 10 parameters, a nested object, no output schema, and no annotations. The description covers only the high-level purpose and fails to explain return values, artifact format, retry behavior, or how the comparison works. The schema provides parameter details, but the description leaves significant contextual gaps, making it incomplete for a tool of this complexity.

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

Parameters3/5

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

The input schema has 100% description coverage, so the schema already documents all 10 parameters. The description does not add additional parameter semantics beyond referencing 'Figma raw frame' and 'current DebugBridge page', which loosely correspond to figmaRawPath and expectedPageID. This meets the baseline but adds little value.

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 action: comparing a Figma raw frame with the current DebugBridge page and writing semantic audit artifacts. This verb+resource phrasing distinguishes it from sibling tools like get_debug_page or get_runtime_node, which focus on retrieval rather than comparison/audit.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives. The description does not mention prerequisites, exclusions, or compare-and-contrast with sibling tools. It only states what the tool does, leaving the agent to infer usage context.

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

ensure_portsB

Require a connected physical device and ensure the DebugBridge port is forwarded.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations, the description carries full responsibility for disclosing behavior. It mentions the device requirement and port forwarding goal, but it does not explain side effects, failure behavior if no device is present, whether it merely checks or actively modifies port forwarding, or any permissions required. This is a significant gap for a tool that likely sets up the debugging environment.

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?

The description is a single sentence with no filler, immediately front-loading the key requirement ('Require a connected physical device') and the main action ('ensure the DebugBridge port is forwarded'). It is appropriately sized for a tool with no parameters.

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

Completeness2/5

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

Given no annotations, no output schema, and no parameter details, the description is too thin to fully understand the tool's role in a workflow. It does not specify success/failure conditions, preconditions beyond device connection, whether port forwarding is persistent, or how this tool relates to sibling tools like 'get_debug_page' or 'run_flow'. The description only provides a high-level statement without enough operational context.

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?

The input schema has zero parameters, so there is nothing to document beyond the schema itself. Per the baseline rule for 0 params, a score of 4 is appropriate. The description does not add parameter-level detail because none exist.

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

Purpose4/5

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

The description clearly states the tool's function: it requires a connected physical device and ensures the DebugBridge port is forwarded. The verb 'ensure' and the resource 'DebugBridge port' are specific. However, it does not explicitly distinguish this from sibling tools like 'ping' which also deal with device connectivity.

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

Usage Guidelines2/5

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

There is no explicit guidance on when to use this tool versus alternatives. It implies it is a prerequisite for other debugging operations but does not state when to call it, what conditions warrant its use, or whether there are alternative tools for similar setups. The context signals show many siblings, but the description offers no differentiation.

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

get_debug_pageB

Get semantic page and registered actionable element IDs from the in-app DebugBridge, optionally saving an artifact.

ParametersJSON Schema
NameRequiredDescriptionDefault
timeoutMsNoHow long to retry while the app is launching or transitioning. Defaults to 8000.
intervalMsNoRetry interval for transient /debug/page failures. Defaults to 300.
artifactDirNoDirectory for saved artifacts. Defaults to .devflow-ui/runtime.
saveArtifactNoSave the captured page JSON to artifactDir. Defaults to false.
artifactPrefixNoOptional file prefix for saved artifacts.
expectedPageIDNoOptional expected pageID. When provided, mismatch returns an error with the captured page payload.

TDQS

B3.2/5.0
Behavior2/5

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

With no annotations provided, the description must disclose behavior, but it only mentions optional artifact saving. It does not explain retry/timeout behavior, error conditions, side effects of saving, or whether the operation is read-only, leaving significant behavioral ambiguity.

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?

The description is a single, well-structured sentence that front-loads the core purpose and adds the optional artifact-saving behavior without redundant detail.

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

Completeness2/5

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

Despite the tool having six parameters, retry logic, and no output schema, the description provides no return structure, retry semantics, or usage context. The one-sentence description is too sparse for the tool's complexity, leaving gaps beyond what the schema covers.

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

Parameters3/5

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

Schema description coverage is 100%, so all six parameters are already documented in the input schema. The description adds little beyond the schema, only restating the artifact-saving capability, which the saveArtifact parameter already conveys.

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 uses a specific verb ('Get') and identifies a unique resource: the semantic page and registered actionable element IDs from the in-app DebugBridge. It distinguishes this from sibling tools like get_page/get_ui_hierarchy by emphasizing DebugBridge and actionable element IDs.

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

Usage Guidelines2/5

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

The description gives no explicit guidance on when to use this tool over alternatives such as get_page or get_ui_hierarchy. It implies a debugging context but lacks exclusions or fallback conditions, leaving the agent to infer the appropriate scenario.

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

get_pageA

Deprecated alias of get_debug_page.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior3/5

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

The description adds the deprecated status, which is useful behavioral context. However, with no annotations, it does not disclose what the tool actually does (e.g., side effects, safety, return format). The behavior is only implied via the alias, so the agent must inspect get_debug_page to fully understand.

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?

The description is a single sentence, front-loaded with the most important fact (deprecated) and the alternative. No wasted words.

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 what is essentially a deprecated alias with no parameters and no output schema, the description is completely sufficient. It tells the agent everything needed: don't use this, use get_debug_page instead.

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?

The tool has zero parameters, so the description does not need to provide parameter details. The schema confirms this with an empty properties object. The baseline of 4 applies.

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

Purpose4/5

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

The description clearly identifies the tool as a deprecated alias of get_debug_page, which tells the agent its purpose by referencing the canonical tool. It does not directly state what the tool does, but the alias relationship makes the purpose evident.

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 says 'Deprecated alias' and names the alternative tool (get_debug_page). This is a clear directive to avoid this tool and use get_debug_page instead, providing both when-to-use (never) and an alternative.

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

get_runtime_nodeA

Read a live UIKit node by runtime anchor/accessibilityIdentifier via the in-app DebugBridge, optionally saving a runtime detail artifact.

ParametersJSON Schema
NameRequiredDescriptionDefault
anchorYesRuntime anchor to match against UIView.accessibilityIdentifier, for example figma.1739_13055.
artifactDirNoDirectory for saved artifacts. Defaults to .devflow-ui/runtime.
saveArtifactNoSave the captured runtime node JSON to artifactDir. Defaults to false.
artifactPrefixNoOptional file prefix for saved artifacts.

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations, the description carries the burden of disclosing behavior. It correctly frames the operation as a read (suggesting non-destructive) and flags the optional artifact saving side effect. However, it omits important behavioral context such as prerequisites (DebugBridge must be active), failure behavior when the anchor isn't found, and whether saving artifacts affects the app or filesystem beyond creating files.

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?

The description is a single, front-loaded sentence. It leads with the core action and resource, mentions the mechanism, and appends the optional artifact behavior in a compact clause. No filler words or redundant information present.

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

Completeness2/5

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

The tool has 4 parameters, no annotations, and no output schema. The description explains the primary read operation and optional artifact saving, but it fails to mention what the response contains (e.g., JSON structure) or any runtime prerequisites like DebugBridge being enabled. This leaves a significant gap for an agent deciding whether to call the tool and interpreting its result.

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

Parameters3/5

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

The input schema is fully described with 100% coverage, including defaults and types. The description adds no extra meaning about parameters beyond what the schema already provides, so the baseline of 3 applies. There are no examples or clarifications for the anchor format or artifact naming beyond schema text.

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 verb 'Read' and the specific resource 'live UIKit node' via an anchor/accessibilityIdentifier, which distinguishes it from siblings like get_ui_hierarchy or get_page that operate on broader structures. The reference to DebugBridge and optional artifact saving adds specificity without ambiguity.

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

Usage Guidelines3/5

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

The description implies the tool should be used when a runtime anchor is available and one needs the corresponding node details. However, it does not explicitly state when not to use it or name alternatives (e.g., get_ui_hierarchy for whole-hierarchy queries), leaving usage criteria implicit.

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

get_screenshotA

Capture a screenshot using the configured screenshot command.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior2/5

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

With no annotations, the description carries the full burden. It mentions 'using the configured screenshot command,' which hints at an external configuration, but it does not disclose what happens with the screenshot (e.g., saved file, base64 output), whether it is synchronous, or any side effects.

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?

The description is a single, front-loaded sentence with no superfluous words. It is concise and fast to parse.

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

Completeness3/5

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

Given the tool's simplicity, zero parameters, and lack of an output schema, the description is adequate but leaves a notable gap: it does not specify what the agent receives as a result (e.g., file path, image data) or any caveats about the 'configured screenshot command.' The core action is clear, but operational details are missing.

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?

The tool has zero parameters and the schema coverage is 100%, so there is nothing for the description to add about parameters. The baseline of 4 applies because no parameter semantics are needed.

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's function with a specific verb ('Capture') and resource ('screenshot'). It is distinct from sibling tools that fetch pages or UI hierarchies, leaving no ambiguity about the operation.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives, nor are there any exclusions, prerequisites, or context hints. The intended usage is only implicitly derived from the verb and noun.

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

get_ui_hierarchyA

Deprecated alias of inspect_ui using the current App UIWindow/UIView tree.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It only mentions the deprecated alias and the UIWindow/UIView tree source, but does not disclose what the tool returns, whether it is read-only, potential errors, or deprecation consequences (e.g., may be removed). This is minimal behavioral disclosure.

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?

The description is a single sentence with no filler. It front-loads the key fact (deprecated alias) and includes the tree source, making it appropriately concise and well-structured.

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

Completeness3/5

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

Given the tool's simplicity (no params, no output schema), the description covers the essential guidance to avoid using it in favor of `inspect_ui`. However, it does not describe what the tool actually returns or any behavior, leaving the agent without a full picture if it were to use it. The deprecation warning helps, but completeness is moderate.

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?

There are zero parameters, and the input schema is empty with 100% coverage (vacuously). The baseline for no parameters is 4, and the description adds no parameter information because none is needed.

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

Purpose4/5

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

The description states it is a 'Deprecated alias of inspect_ui' and mentions 'current App UIWindow/UIView tree', which clearly indicates the tool retrieves the UI hierarchy. However, it does not explicitly state what the tool returns or directly define its function beyond being an alias, so it is clear but not fully independent of the sibling tool.

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 labels the tool as 'Deprecated alias of inspect_ui', which strongly implies that users should use `inspect_ui` instead. This provides an explicit alternative and exclusion, making the usage guidance very clear.

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

inspect_uiB

Read the current App UIWindow/UIView tree directly from DebugBridge.

ParametersJSON Schema
NameRequiredDescriptionDefault
colorNoDeprecated compatibility field; ignored.
depthNoOptional tree depth limit.
maxNodesNoMaximum nodes returned. Defaults to 2000.
includeHiddenNoInclude hidden or transparent nodes. Defaults to false.

TDQS

B3.3/5.0
Behavior3/5

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

The description uses the verb 'Read,' which signals a non-mutating operation, and mentions 'directly from DebugBridge' for context. However, no annotations are present, and the description does not disclose further behavioral details such as return format, error conditions, or performance implications. It adds limited value beyond the name.

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?

The description is a single concise sentence with no unnecessary words, front-loading the core functionality.

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

Completeness3/5

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

The description explains the basic operation but does not address usage context, distinguish from get_ui_hierarchy, or describe the output format. With simple optional parameters and no output schema, the description is adequate but lacks completeness for an agent comparing related tools.

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

Parameters3/5

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

All four parameters are documented in the schema with descriptions, giving 100% coverage. The description itself does not add additional parameter information, so the baseline of 3 applies.

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

Purpose4/5

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

The description clearly states the tool reads the current App UIWindow/UIView tree from DebugBridge, with a specific verb and resource. However, it does not distinguish itself from the sibling get_ui_hierarchy, which likely serves a similar purpose, so it lacks explicit differentiation.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives like get_ui_hierarchy. The description does not mention any prerequisites or exclusions, leaving the agent without direction for tool selection.

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

pingA

Require a connected physical iOS device, then check the in-app DebugBridge.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior2/5

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

With no annotations, the description carries the full burden of disclosing behavior. It mentions a prerequisite but does not explain what 'check' entails (e.g., whether it sends a ping, returns a boolean, or has side effects). The agent is left guessing about the tool's operational effect on the DebugBridge.

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?

The description is a single, front-loaded sentence with no redundant words. It immediately states the key requirement and the action, making it highly concise and easy to parse.

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

Completeness2/5

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

Given no output schema and no annotations, the description should explain what the agent can expect after calling this tool, such as return values or success/failure indicators. It does not, leaving the tool's output behavior completely unspecified. For a simple ping, this is a notable gap.

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?

The tool has zero parameters, so there is nothing to explain beyond the schema. The baseline for no params is 4, and the description adds no unnecessary parameter information.

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

Purpose4/5

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

The description uses a specific verb 'check' with a specific resource 'in-app DebugBridge', making it clear the tool verifies the debug bridge connection. It does not explicitly differentiate from siblings like ensure_ports or get_debug_page, but the action is distinct enough for a ping-like tool.

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?

It clearly states a prerequisite: 'Require a connected physical iOS device', which tells the agent when this tool can be used. It does not explicitly list alternatives or exclusions, but the prerequisite provides strong context for usage.

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

read_app_logsA

Search the current app run's in-memory DebugBridge log pool. Logs are temporary and are not written to disk or addressed by cursor.

ParametersJSON Schema
NameRequiredDescriptionDefault
levelNoOptional exact level filter, such as debug, info, or error.
limitNoMaximum most-recent matching entries. Defaults to 500.
queryNoOptional case-insensitive substring matched against log messages.
categoryNoOptional exact category filter.

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations, the description carries the transparency burden. It adds meaningful context by noting logs are temporary, not written to disk, and not addressed by cursor, but it does not explicitly state side effects, return behavior, or permissions, leaving some uncertainty.

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?

Two concise sentences front-load the core purpose ('Search...log pool') and add essential caveats in the second sentence. Every word earns its place, with no redundant or vague filler.

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

Completeness3/5

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

The description explains the source and temporary nature of logs but does not describe return format, ordering, or how results are presented. With no output schema, the agent is left to infer the result structure, making the description adequate but not fully complete.

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

Parameters3/5

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

The input schema provides 100% coverage with descriptions for all four parameters, including their optionality and semantics. The description adds little beyond the schema, only implying that the parameters serve as filters. Baseline 3 is appropriate given the schema's thoroughness.

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 a specific verb ('Search') and a specific resource ('current app run's in-memory DebugBridge log pool'). It distinguishes from siblings by emphasizing 'current' and 'in-memory', differentiating it from tools like wait_app_logs or persistent log readers.

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

Usage Guidelines3/5

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

The description provides context such as 'current app run' and 'in-memory', implying the tool is for temporary, ephemeral logs, but it does not explicitly state when to use this tool versus alternatives like wait_app_logs, nor does it mention exclusions or prerequisites.

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

run_flowC

Run a UI operation flow against the current app page using DebugBridge IDs or labels.

ParametersJSON Schema
NameRequiredDescriptionDefault
stepsYesOrdered UI steps. Supported actions: tap, tap_if_present, set_switch, set_text, type_text, wait_for_page, wait_for_element, sleep.
artifactDirNoDirectory for saved artifacts. Defaults to .devflow-ui/runtime.
saveArtifactsNoSave flow trace and final page JSON artifacts. Defaults to false.
artifactPrefixNoOptional file prefix for saved artifacts.

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations, the description carries the burden of behavioral disclosure, but it only says 'Run a UI operation flow.' It does not mention side effects (navigation, state changes), execution behavior (sequential, wait conditions), failure handling, or return values.

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?

The description is a single sentence that directly states the tool's core purpose without fluff or repetition. Every word contributes to the meaning.

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

Completeness2/5

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

Given the tool's complexity (ordered step flows, many optional parameters, wait behavior), the description is too thin. It relies entirely on the schema for context and offers no high-level guidance about execution semantics, suitable scenarios, or expected outcomes.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all parameters in detail. The description adds only 'using DebugBridge IDs or labels,' which is already reflected in the id/label property descriptions, so no meaningful semantic value is added beyond the schema.

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

Purpose4/5

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

The description states a specific verb and resource: 'Run a UI operation flow against the current app page using DebugBridge IDs or labels.' It distinguishes from sibling single-action tools (tap_element, set_text, etc.) by emphasizing 'flow,' though it doesn't explicitly contrast with those alternatives.

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

Usage Guidelines2/5

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

No explicit guidance on when to use this tool versus the sibling single-action tools. The name and description imply multi-step flows, but there is no stated context, exclusions, or mention of alternatives.

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

set_switchB

Set a UISwitch by stable DebugBridge ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesDebug element identifier, for example AutomationTest.toggleSwitch.
isOnYesTarget switch state.
timeoutMsNoHow long to wait for post-action page availability or target criteria. Defaults to 8000.
intervalMsNoPolling interval after changing the switch. Defaults to 300.
waitAfterMsNoDelay after setting the switch before reading the next page. Defaults to 350.
waitForLabelNoOptional exact element label to wait for after changing the switch.
waitForPageIDNoOptional pageID to wait for after changing the switch.
waitForElementNoOptional element criteria to wait for after changing the switch.
waitForPageIDsNoOptional acceptable pageIDs to wait for after changing the switch.
waitForElementIDNoOptional element ID to wait for after changing the switch.
waitForLabelIncludesNoOptional element label substring to wait for after changing the switch.

TDQS

B3.3/5.0
Behavior2/5

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

There are no annotations, so the description must disclose behavior. It only states the action and identifier, but omits important details such as waiting behavior, failure handling, or whether the switch state is forced. The many wait parameters in the schema are not referenced in the description.

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, clear sentence with no redundancy, making it efficient. However, its brevity omits useful context, though for a simple action it is appropriately sized.

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

Completeness2/5

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

With 11 parameters, a nested object, and no annotations or output schema, the one-sentence description is insufficient to guide an agent on using the optional wait parameters and understanding post-action behavior. The schema helps but the description does not integrate this context.

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

Parameters3/5

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

All parameters have descriptions in the schema (100% coverage), so the baseline is 3. The description's mention of 'stable DebugBridge ID' aligns with the id parameter but adds little beyond the schema's param descriptions.

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 action ('Set') and resource ('a UISwitch'), and identifies the identifier mechanism ('stable DebugBridge ID'). This distinguishes it from other input tools like set_text and tap_element.

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

Usage Guidelines3/5

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

No explicit when/when-not or alternatives are mentioned, but the tool's name and description imply it is for changing a switch state, contrasting with sibling tools for text/typing. However, there is no discussion of prerequisites or conditions.

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

set_textB

Replace text in a UITextField or UITextView by stable DebugBridge ID, focusing the control and firing editing-change events.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesDebug element identifier, for example photoComment.input.
textYesExact text to set.
timeoutMsNoHow long to wait for post-action page availability or target criteria. Defaults to 8000.
intervalMsNoPolling interval after setting text. Defaults to 300.
waitAfterMsNoDelay after setting text before reading the next page. Defaults to 350.
waitForLabelNoOptional exact element label to wait for after setting text.
waitForPageIDNoOptional pageID to wait for after setting text.
waitForElementNoOptional element criteria to wait for after setting text.
waitForPageIDsNoOptional acceptable pageIDs to wait for after setting text.
waitForElementIDNoOptional element ID to wait for after setting text.
waitForLabelIncludesNoOptional element label substring to wait for after setting text.

TDQS

B3.4/5.0
Behavior3/5

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

With no annotations, the description carries the burden of behavioral disclosure. It mentions focusing the control and firing editing-change events, which are important side effects. However, it does not describe post-action waiting behavior or potential issues, despite the schema including many wait parameters.

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?

The description is a single sentence with no filler, efficiently communicating the core action, target, and side effects. It is appropriately concise and front-loaded.

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

Completeness2/5

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

Despite the core action being clear, the description lacks context on when to use this tool versus type_text and does not mention the built-in waiting/timeout behavior after setting text—important given the many wait-related parameters. No output schema exists, so the description should have provided more post-condition context.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema fully documents all 11 parameters. The description adds little beyond the schema, only clarifying that 'id' is a stable identifier and the action is to replace text. It does not elaborate on timeout or wait parameters, but the schema already does.

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 action (replace text), target (UITextField/UITextView), method (by stable DebugBridge ID), and side effects (focusing, firing editing-change events). This specificity distinguishes it from siblings like type_text, which likely simulates typing rather than replacing.

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

Usage Guidelines2/5

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

No explicit guidance is provided on when to use this tool versus alternatives like type_text or tap_element. The description does not state prerequisites, exclusions, or preferred scenarios, leaving the agent to infer usage from the name and schema.

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

tap_elementC

Tap an element by stable DebugBridge ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesDebug element identifier, for example AutomationTest.primaryButton.
timeoutMsNoHow long to wait for post-tap page availability or target criteria. Defaults to 8000.
intervalMsNoPolling interval after tap. Defaults to 300.
waitAfterMsNoDelay after tap before reading the next page. Defaults to 350.
waitForLabelNoOptional exact element label to wait for after tap.
waitForPageIDNoOptional pageID to wait for after tap.
waitForElementNoOptional element criteria to wait for after tap.
waitForPageIDsNoOptional acceptable pageIDs to wait for after tap.
waitForElementIDNoOptional element ID to wait for after tap.
waitForLabelIncludesNoOptional element label substring to wait for after tap.

TDQS

C2.8/5.0
Behavior1/5

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

Annotations are absent, so the description must disclose behavioral traits. It only states the core action, omitting the fact that the tool waits after tapping (timeoutMs, waitAfterMs, waitFor* parameters), potential side effects, and error behavior. The description adds no behavioral context beyond the tool's name.

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 efficient sentence with a front-loaded verb (Tap) and no fluff. It is concise and well-structured, though extremely terse.

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

Completeness1/5

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

The tool has 10 parameters, nested objects, no annotations, and no output schema. The one-sentence description fails to explain the overall behavior (tap then wait for conditions), the meaning of the wait parameters, or return semantics. It is severely inadequate for this complexity.

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

Parameters3/5

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

All 10 parameters have descriptions in the input schema (100% coverage). The tool description adds no additional parameter semantics beyond the schema, so the baseline of 3 is appropriate.

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 action (Tap) and the target (element), and specifies the identification method (stable DebugBridge ID). This distinguishes it from sibling interaction tools like set_text or type_text, which perform different actions.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives, no prerequisites, and no exclusions. Usage context is only implied by the action name, not explicitly stated.

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

type_textA

Append text to a UITextField or UITextView by stable DebugBridge ID, focusing the control and firing editing-change events.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesDebug element identifier, for example photoComment.input.
textYesText to append.
timeoutMsNoHow long to wait for post-action page availability or target criteria. Defaults to 8000.
intervalMsNoPolling interval after typing text. Defaults to 300.
waitAfterMsNoDelay after typing text before reading the next page. Defaults to 350.
waitForLabelNoOptional exact element label to wait for after typing text.
waitForPageIDNoOptional pageID to wait for after typing text.
waitForElementNoOptional element criteria to wait for after typing text.
waitForPageIDsNoOptional acceptable pageIDs to wait for after typing text.
waitForElementIDNoOptional element ID to wait for after typing text.
waitForLabelIncludesNoOptional element label substring to wait for after typing text.

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the burden of disclosing behavior. It explicitly states that the tool focuses the control and fires editing-change events, which adds valuable side-effect information beyond the name. It does not cover all potential edge cases, but it provides meaningful transparency for a text-entry tool.

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?

The description is a single, front-loaded sentence that conveys the core action, target, identifier method, and side effects. Every element earns its place, with zero wasted words or redundancy.

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?

The tool has many parameters (11), but the schema descriptions cover them thoroughly, so the description need not repeat them. The core purpose and side effects are stated clearly, and the description is sufficient for selecting this tool over siblings. It could mention the wait/post-action behavior, but the schema already documents that.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description does not add parameter details beyond the schema; it only confirms the 'id' and 'text' purpose. No additional semantic value is provided for the wait-related parameters, but the schema already covers those.

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 uses a specific verb ('Append') with a resource ('text to a UITextField or UITextView') and identifier type ('stable DebugBridge ID'), clearly distinguishing it from siblings like set_text. It also explains the focusing behavior, making the tool's purpose unambiguous.

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?

The description provides clear context: use this tool to append text to a text field/view by ID, which implies it is not for replacing text (set_text would be for that). However, it does not explicitly mention alternatives or exclusions, so it falls short of a 5.

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

wait_app_logsA

Wait for a new matching entry in the current app run's in-memory DebugBridge log pool; no cursor is required or returned.

ParametersJSON Schema
NameRequiredDescriptionDefault
levelNoOptional exact level filter, such as debug, info, or error.
limitNoMaximum most-recent matching entries. Defaults to 500.
queryNoOptional case-insensitive substring matched against log messages.
waitMsNoMaximum wait time. Defaults to 30000.
categoryNoOptional exact category filter.

TDQS

A3.9/5.0
Behavior3/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It reveals the blocking nature and the in-memory pool, but lacks critical details such as timeout behavior (empty result vs. error), whether it returns single or multiple entries, and whether entries are consumed. This is a notable gap for a wait operation.

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?

The description is a single, front-loaded sentence with no redundant words. It efficiently conveys the core purpose and a key distinguishing feature (no cursor).

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

Completeness3/5

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

For a tool with no output schema and moderate complexity (5 optional parameters, blocking behavior), the description is incomplete. It does not explain what the tool returns when a match is found or on timeout, and the singular 'entry' potentially conflicts with the 'limit' parameter. Given this ambiguity, a score of 3 is appropriate.

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

Parameters3/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. The description adds minimal parameter-related value—it mentions 'matching entry' and 'no cursor' but does not elaborate on interaction between parameters (e.g., query vs. level) or return semantics. The schema already documents each parameter adequately.

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's action ('Wait for a new matching entry') and the resource ('current app run's in-memory DebugBridge log pool'). It distinguishes itself from sibling tools like read_app_logs by emphasizing the waiting and new-entry behavior, making its purpose unambiguous.

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?

The description provides clear context: it is a blocking operation for new log entries, and explicitly notes that no cursor is required or returned, which guides usage. However, it does not explicitly name alternatives (e.g., read_app_logs) or state when not to use this tool, so it falls short of a full 5.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 16 tool updatesv0.1.5
    • First observedaudit_runtime
    • First observedensure_ports
    • First observedget_debug_page
    • First observedget_page
    • First observedget_runtime_node
    • First observedget_screenshot
    • First observedget_ui_hierarchy
    • First observedinspect_ui
    • First observedping
    • First observedread_app_logs
    • First observedrun_flow
    • First observedset_switch
    • First observedset_text
    • First observedtap_element
    • First observedtype_text
    • First observedwait_app_logs

TDQS

A3.7/5.0

Scored across 16 tools

Disambiguation5/5

Each tool serves a clear, distinct purpose, such as connection setup, UI inspection, element interaction, log retrieval, or runtime auditing. The two deprecated aliases are explicitly labeled as such, minimizing confusion despite their overlap with get_debug_page and inspect_ui.

Naming Consistency5/5

All tool names follow a consistent snake_case verb_noun pattern (e.g., get_debug_page, tap_element, run_flow). Deprecated aliases also adhere to this pattern, so the naming style is uniform throughout.

Tool Count4/5

With 16 tools, the count is slightly above the typical 3-15 range, primarily due to two deprecated aliases. Excluding those, the 14 unique tools cover the domain comprehensively, making the count reasonable but marginally padded.

Completeness5/5

The tool set covers the full lifecycle of UI debugging: connection verification, port forwarding, UI tree inspection, runtime node retrieval, element interaction (tap, switches, text), log searching/waiting, screenshots, and Figma-based auditing. No significant gaps are evident for the stated purpose.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Bridges React Native DevTools, enabling AI assistants to debug, profile, and inspect React Native applications through a standardized protocol.
    16 npm
    4
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables AI agents to inspect and verify mobile UI hierarchies, nodes, styles, screenshots, and runtime attributes of iOS apps in simulators or on USB devices.
    123 npm
    2
    Apache 2.0
  • A
    license
    Not graded
    quality
    A
    maintenance
    TouchBridge is a local-first MCP server for iOS simulators and physical devices, enabling AI to see, control, test, and redesign iPhone screens through a structured screenshot bridge and tool surface.
    5
    MIT