MobiLoop MCP
Builds, installs, and tests Android apps on emulators or physical devices, using adb/emulator tools, logcat evidence, and Appium-driven UI automation.
Performs Appium UI automation on mobile apps, including taps, typing, swipes, back navigation, visibility assertions, screenshots, and accessibility summaries.
Supports Flutter project workflows with build/test loops and source-flow analysis for generating UI test scenarios.
Builds, installs, and tests apps on iOS simulators using xcrun simctl and xcodebuild, with Appium XCUITest support.
Supports React Native Android projects with build, test, scenario generation, and source-flow analysis.
Controls iOS build and simulator workflows through Xcode's xcodebuild and xcrun simctl command-line tools.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@MobiLoop MCPRun the Android build, install on emulator, and execute the login Appium test with evidence."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
MobiLoop MCP
Guarded MCP servers for agentic mobile build-test-fix loops.
Documentation site | Security model | Tool reference
code change -> build -> install on device -> Appium test -> evidence -> classify -> reportMobiLoop MCP is a controlled tool layer between an AI coding agent and a real mobile development environment. It lets an MCP client read and patch a mobile project, build it, install it on Android or iOS targets, drive the app through Appium, verify logs/screens/API results, remember known app-flow checkpoints, and produce evidence-based reports.
The name reflects the core contract: mobile work should run through a measurable loop of change, build, device execution, verification, and evidence-backed triage.
It is built for the workflow where the agent does not just write code. It builds, runs, tests, observes, classifies failures, and hands back evidence. An agent can still use the separate guarded code tools to patch and retest, but that patch step is intentionally outside the default orchestrator.
Today, MobiLoop provides guarded build-test-verify loops and evidence-based failure classification. Fully automated patch-and-retest is intentionally kept outside the default orchestrator until stricter approval, rollback, and review controls are enabled.
Highlights
Evidence-first mobile loops: build logs, screenshots, Appium XML source, logcat/simulator logs, API responses, screenshot diffs, and iteration records.
Android and iOS tool split: Android
adb/emulator tools and iOSxcrun simctl/xcodebuildtools are separated.Appium UI automation: semantic taps, typing, swipes, back navigation, visibility assertions, screenshots, and accessibility summaries.
Flow memory: record runtime screen checkpoints, remember the latest passing path, and auto-replay stable setup steps to a target checkpoint.
Scenario generation and flow DSL: scan source for candidate E2E scenarios, then run high-level JSON flows with wait/tap/type/assert/evidence steps.
Source-flow analysis: scan Flutter, React Native, Android, and iOS source for screen, route, transition, and visible-text candidates.
Root-cause classification: classify logcat evidence into app bugs, automation errors, missing environment, remote rules, and test-data issues.
Server-side approval gate: secure mode requires valid approval payloads for high-impact tools.
Built-in mobile security loop: scan source and platform settings, generate a test plan, compare fixes, and gate release decisions without another scanner package.
Redaction by default: redact common secrets, bearer tokens, API keys, emails, and phone numbers from text artifacts, command output, and MCP/CLI text responses.
Guarded code tools: workspace-only reads/searches/patches, forbidden secret paths, guarded branches, commits, and PR creation.
Docker-ready MCP runtime: package the Node MCP server in Docker while keeping mobile SDKs, emulators, devices, and Appium on the host or runner.
Composable binaries: run everything as one server or split each responsibility into its own MCP server.
Related MCP server: Appium MCP Server
What This Is
This project provides MCP tools for this architecture:
AI / MCP client
|
v
MobiLoop MCP
|
|-- code tools
|-- environment preflight
|-- build tools
|-- Android device tools
|-- iOS simulator tools
|-- Appium tools
|-- verification tools
|-- flow-memory replay tools
|-- loop/report tools
|-- CI publication tools
|-- Android/iOS orchestrators
|-- security scan and release gate tools
|
v
mobile repo + emulator/device + Appium + build toolchainThe server does not claim that a test passed because a model says so. A pass should be backed by tool output: command exit codes, screenshots, page source, log checks, API assertions, and recorded loop iterations.
What This Is Not
It is not a replacement for Android SDK, Xcode, Flutter, Gradle, React Native, Appium, or platform drivers.
It is not a universal mobile emulator container. iOS simulator requires macOS, and Android emulator portability depends on host acceleration and device access.
It is not an unrestricted shell bridge. Tools are structured and guarded.
It is not a production deployer. Release signing, store upload, and production secrets remain outside the default scope.
Requirements
Install only what your target app needs.
Workflow | Host | Required tools |
MCP runtime | macOS, Linux, Windows | Node.js 20+ |
Android build/test | macOS, Linux, Windows | Android SDK, |
Flutter Android | macOS, Linux, Windows | Flutter SDK, Android SDK, Appium for UI flows |
React Native Android | macOS, Linux, Windows | Node/npm, Android Gradle toolchain, Android SDK, Appium |
iOS simulator | macOS only | Xcode, |
Docker MCP runtime | macOS, Linux, Windows | Docker, plus host-side mobile tools when driving devices |
Start Appium before Appium or flow replay tools:
appium --address 127.0.0.1 --port 4723Local Appium installs also work:
npx appium --address 127.0.0.1 --port 4723For Android, make sure the Appium process can see:
export ANDROID_HOME=/absolute/path/to/android/sdk
export ANDROID_SDK_ROOT=/absolute/path/to/android/sdk
export PATH="$ANDROID_HOME/platform-tools:$ANDROID_HOME/emulator:$PATH"For an already-running Genymotion device, add its Android SDK platform tools to PATH, then
verify the device before starting a flow:
export PATH="$HOME/Library/Android/sdk/platform-tools:$PATH"
adb devices -lInstall From Source
npm ci
npm testRun the all-in-one MCP server:
MOBILOOP_WORKSPACE_ROOT=/absolute/path/to/mobile/app \
node dist/src/index.jsFor development:
npm run devCLI Fallback
When an MCP client cannot expose the server as callable tools, use the CLI wrapper:
MOBILOOP_WORKSPACE_ROOT=/absolute/path/to/mobile/app \
node dist/src/cli.js list-toolsInspect tool policy metadata:
MOBILOOP_WORKSPACE_ROOT=/absolute/path/to/mobile/app \
node dist/src/cli.js list-tools --jsonThe same metadata is available inside MCP through policy.list_tools.
Call any tool directly:
MOBILOOP_WORKSPACE_ROOT=/absolute/path/to/mobile/app \
node dist/src/cli.js call flow.generate_test_scenarios '{"goal":"login smoke and validation"}'Generate scenario candidates:
MOBILOOP_WORKSPACE_ROOT=/absolute/path/to/mobile/app \
node dist/src/cli.js generate-scenarios "cover onboarding, login, and validation"MCP Client Configuration
All-In-One Server
Use this for local development and simpler MCP clients.
{
"mcpServers": {
"mobiloop": {
"command": "node",
"args": ["/absolute/path/to/mobiloop-mcp/dist/src/index.js"],
"env": {
"MOBILOOP_WORKSPACE_ROOT": "/absolute/path/to/mobile/app",
"APPIUM_SERVER_URL": "http://127.0.0.1:4723"
}
}
}
}Split Servers
Use split servers when you want tighter policy boundaries per responsibility.
{
"mcpServers": {
"mobile-code": {
"command": "node",
"args": ["/absolute/path/to/mobiloop-mcp/dist/src/servers/code.js"],
"env": {
"MOBILOOP_WORKSPACE_ROOT": "/absolute/path/to/mobile/app"
}
},
"mobile-build": {
"command": "node",
"args": ["/absolute/path/to/mobiloop-mcp/dist/src/servers/build.js"],
"env": {
"MOBILOOP_WORKSPACE_ROOT": "/absolute/path/to/mobile/app"
}
},
"mobile-device": {
"command": "node",
"args": ["/absolute/path/to/mobiloop-mcp/dist/src/servers/device.js"],
"env": {
"MOBILOOP_WORKSPACE_ROOT": "/absolute/path/to/mobile/app"
}
},
"mobile-appium": {
"command": "node",
"args": ["/absolute/path/to/mobiloop-mcp/dist/src/servers/appium.js"],
"env": {
"MOBILOOP_WORKSPACE_ROOT": "/absolute/path/to/mobile/app",
"APPIUM_SERVER_URL": "http://127.0.0.1:4723"
}
},
"mobile-flow": {
"command": "node",
"args": ["/absolute/path/to/mobiloop-mcp/dist/src/servers/flow.js"],
"env": {
"MOBILOOP_WORKSPACE_ROOT": "/absolute/path/to/mobile/app",
"APPIUM_SERVER_URL": "http://127.0.0.1:4723"
}
},
"mobile-verify": {
"command": "node",
"args": ["/absolute/path/to/mobiloop-mcp/dist/src/servers/verify.js"],
"env": {
"MOBILOOP_WORKSPACE_ROOT": "/absolute/path/to/mobile/app"
}
},
"mobile-loop": {
"command": "node",
"args": ["/absolute/path/to/mobiloop-mcp/dist/src/servers/loop.js"],
"env": {
"MOBILOOP_WORKSPACE_ROOT": "/absolute/path/to/mobile/app"
}
}
}
}All binaries are listed below.
Binary | Scope |
| CLI wrapper for listing tools, calling tools, and generating scenarios |
| All tools |
| Code and git tools |
| Environment preflight and compatibility matrix |
| Dependency, lint, test, and APK build tools |
| Android |
| iOS simulator and Xcode tools |
| Appium UI automation tools |
| Assertions and evidence collection |
| Source-flow analysis and checkpoint replay |
| Iteration records and reports |
| Artifact manifests, GitHub summaries, PR comments |
| Android and iOS build-install-test-verify loops |
| Static mobile security scan, test plan, scan comparison, release gate |
Configuration
Secure mode does not read configuration from the project directory. Set workspace and Appium values in the host environment:
export MOBILOOP_WORKSPACE_ROOT=/absolute/path/to/mobile/app
export APPIUM_SERVER_URL=http://127.0.0.1:4723For a host-controlled file configuration, copy the example and point to it explicitly:
cp mobiloop.config.example.json mobiloop.config.jsonOr point to it explicitly:
export MOBILOOP_CONFIG=/absolute/path/to/mobiloop.config.jsonAGENTIC_MOBILE_MCP_CONFIG and AGENTIC_MOBILE_WORKSPACE_ROOT are still accepted as legacy fallbacks, but new projects should use the MOBILOOP_* names.
Common fields:
Field | Default | Purpose |
|
| Secure ignores project-local config; trusted enables explicit overrides |
| current working directory | Mobile app workspace the MCP server may access |
|
| Evidence, logs, screenshots, reports, flow memory |
| unset | Optional run identifier; writes artifacts under |
|
| Default command timeout |
|
| Output cap for command tools |
|
| Suggested fix-loop limit |
|
| Orchestrator loop limit |
|
| Suggested total runtime limit |
|
| Branches where commit tools are allowed |
|
| Trusted-mode Appium endpoint; secure mode uses host environment |
|
| Android Debug Bridge path |
|
| Android emulator CLI path |
|
| iOS simulator CLI path |
|
| Xcode build CLI path |
|
| SQLite CLI path for read-only assertions |
| localhost only | URLs allowed for API verification |
| localhost only | Trusted-mode Appium origin allowlist |
| secret-like defaults | Files blocked from read/write operations |
| built-in defaults | Trusted-mode per-tool risk and approval metadata overrides |
|
| Require approval payloads for high-impact tools |
|
| Redact common secrets and PII from text artifacts and text responses |
MOBILOOP_ARTIFACTS_DIR may point to a dedicated host-controlled evidence mount, such as /artifacts in the read-only Docker security server.
Environment variables override selected fields:
export MOBILOOP_WORKSPACE_ROOT=/absolute/path/to/mobile/app
export APPIUM_SERVER_URL=http://127.0.0.1:4723
export MOBILOOP_RUN_ID=local-login-smoke
export MOBILOOP_REQUIRE_APPROVAL=true
export MOBILOOP_SECURITY_MODE=secureThe config schema is available at schema/mobiloop.config.schema.json. See docs/CONFIGURATION.md.
Approval payloads use this shape:
{
"approval": {
"approved": true,
"approvedBy": "human-or-ci",
"reason": "Run Android validation on emulator",
"expiresAt": "2026-05-11T12:00:00Z"
}
}Recommended First Run
Point
MOBILOOP_WORKSPACE_ROOTat your mobile app.Run
security.scan_sourceandsecurity.generate_test_plan.Start an emulator or connect a device, then start Appium.
Run
env.preflightandflow.analyze_from_code.Run approved build/lint/unit-test actions.
Install the app, create an Appium session, and verify one small user flow.
Collect evidence; if a bug is confirmed, patch, rerun, and compare the security scan.
Apply
security.release_gatebefore calling a fix ready for release.
Live Appium Proof
v0.1.0-alpha.10 was validated against an installed MiniTakip Android application on a
Genymotion Galaxy S24 running Android 15. The non-mutating proof used MobiLoop to discover the
ADB target, create an Appium 3 UiAutomator2 session, capture a screenshot and page-source XML,
read the accessibility tree, then close the session. It did not enter form data, create records,
or delete application data.
Direct W3C capabilities are accepted by appium.create_session as shown below. MobiLoop wraps
them in the WebDriver capabilities envelope before sending them to Appium:
{
"capabilities": {
"alwaysMatch": {
"platformName": "Android",
"appium:automationName": "UiAutomator2",
"appium:udid": "127.0.0.1:6555",
"appium:appPackage": "com.example.app",
"appium:appActivity": ".MainActivity",
"appium:noReset": true
}
},
"approval": {
"approved": true,
"approvedBy": "human-or-ci",
"reason": "Open an Appium session for a bounded validation run"
}
}After creating a session, use appium.observe_screen and appium.get_accessibility_tree for
evidence, then always call appium.delete_session. A successful session only proves the selected
screen and assertions; it does not claim that an entire product journey has passed.
For a Flutter Android app, the rough tool sequence is:
env.preflight { "target": "flutter" }
security.scan_source
security.generate_test_plan
flow.analyze_from_code
build.detect_project
build.install_dependencies
build.run_lint
build.run_unit_tests
build.build_debug_apk
device.list_devices
device.install_app
appium.create_session
appium.wait_for_visible
appium.tap_by_text
verify.assert_no_crash_in_logcat
verify.collect_evidence
loop.record_iteration
loop.generate_reportAndroid Orchestrator
orchestrator.run_android_validation_loop runs a bounded Android loop across build, install, Appium, verification, evidence, and iteration records.
Minimal shape:
{
"goal": "Build and verify login flow on Android.",
"kind": "flutter",
"packageName": "com.example.app",
"serial": "emulator-5554",
"runLint": true,
"runUnitTests": true,
"buildDebugApk": true,
"clearAppData": true,
"collectEvidence": true,
"maxTestIterations": 3,
"appiumCapabilities": {
"platformName": "Android",
"appium:automationName": "UiAutomator2",
"appium:deviceName": "Android Emulator",
"appium:udid": "emulator-5554",
"appium:appPackage": "com.example.app",
"appium:appActivity": ".MainActivity",
"appium:noReset": false
},
"appiumSteps": [
{
"tool": "appium.wait_for_visible",
"args": {
"locator": { "strategy": "text", "value": "Login" },
"timeoutMs": 10000
}
}
],
"expectedTexts": ["Home"]
}See examples/android-validation-loop.json.
iOS Orchestrator
orchestrator.run_ios_validation_loop runs a bounded iOS simulator loop across xcodebuild, simulator boot, app install/launch, Appium XCUITest, verification, evidence, and iteration records.
Minimal Flutter shape:
{
"goal": "Build and verify login flow on iOS.",
"kind": "flutter",
"workspace": "ios/Runner.xcworkspace",
"scheme": "Runner",
"configuration": "Debug",
"sdk": "iphonesimulator",
"destination": "platform=iOS Simulator,name=iPhone 15",
"buildSettings": {
"ARCHS": "arm64",
"EXCLUDED_ARCHS": ""
},
"simulatorDevice": "iPhone 15",
"bundleId": "com.example.app",
"runLint": true,
"runUnitTests": true,
"buildIosApp": true,
"bootSimulator": true,
"installApp": true,
"launchApp": true,
"collectEvidence": true,
"maxTestIterations": 2,
"appiumCapabilities": {
"platformName": "iOS",
"appium:automationName": "XCUITest",
"appium:deviceName": "iPhone 15",
"appium:bundleId": "com.example.app",
"appium:noReset": false
},
"appiumSteps": [
{
"tool": "appium.wait_for_visible",
"args": {
"locator": { "strategy": "text", "value": "Login" },
"timeoutMs": 15000
}
}
],
"expectedTexts": ["Home"]
}See examples/flutter-ios-validation-loop.json and docs/QUICKSTART_FLUTTER.md.
buildSettings and xcodebuildArgs are forwarded to ios.build_app, so projects can handle host-specific simulator requirements such as Apple Silicon arm64 simulator builds or custom DerivedData settings without leaving the MCP loop.
AI-Generated Scenario Candidates
MobiLoop can generate candidate E2E scenarios from the app source so the agent starts from a concrete test plan instead of an empty screen.
{
"tool": "flow.generate_test_scenarios",
"args": {
"goal": "cover onboarding, login, form validation, and main navigation",
"maxScenarios": 8,
"includeNegativeCases": true
}
}The output includes priorities, candidate steps, assertions, source references, and limitations. Treat these as executable candidates: the agent should run them through Appium, collect evidence, and refine them into stable checkpoint paths.
For scripted execution without writing custom client code:
{
"tool": "flow.run_script",
"args": {
"sessionId": "APPIUM_SESSION_ID",
"steps": [
{ "action": "observe", "waitForAnyText": ["GiriÅŸ Yap", "Login"], "waitForPackageIdle": true },
{ "action": "tapText", "text": "GiriÅŸ Yap", "matchMode": "auto" },
{
"action": "type",
"locator": { "strategy": "text", "value": "E-posta" },
"text": "test@example.com",
"mode": "sendKeys"
},
{ "action": "assertText", "text": "Ana Sayfa" },
{ "action": "collectEvidence", "label": "login-result" }
]
}
}Flow Memory And Auto-Replay
Flow memory makes repeated mobile tests faster without pretending that setup screens passed.
current Appium source
-> normalized screen signature
-> match recorded checkpoint
-> replay known semantic actions
-> arrive at target checkpoint
-> continue test-specific assertionsThe screen signature is built from Appium page source:
visible text
accessibility labels and content descriptions
resource ids
class names
clickable text
This data is persisted under:
.mobiloop/flow/memory.jsonWith runId enabled, the same file lives under .mobiloop/runs/<runId>/flow/memory.json.
Record Checkpoints
At a stable screen:
{
"testName": "onboarding-to-login",
"name": "Onboarding 1",
"order": 1,
"sessionId": "APPIUM_SESSION_ID",
"actionToNext": {
"tool": "appium.tap_by_text",
"args": {
"text": "Next"
}
}
}At the next screen:
{
"testName": "onboarding-to-login",
"name": "Login",
"order": 2,
"sessionId": "APPIUM_SESSION_ID"
}Record the passing path:
{
"testName": "onboarding-to-login",
"status": "passed",
"checkpointIds": ["onboarding-to-login-001-onboarding-1", "onboarding-to-login-002-login"]
}Replay Later
Plan without executing:
{
"sessionId": "APPIUM_SESSION_ID",
"testName": "onboarding-to-login",
"targetCheckpointId": "onboarding-to-login-002-login",
"dryRun": true
}Execute:
{
"sessionId": "APPIUM_SESSION_ID",
"testName": "onboarding-to-login",
"targetCheckpointId": "onboarding-to-login-002-login",
"minimumScore": 0.55,
"delayMs": 500
}Supported replay actions:
appium.tap_by_textappium.tap_by_accessibility_idappium.tap_by_resource_idappium.tap_coordinatesappium.type_textappium.swipeappium.go_backappium.wait_for_visibleappium.assert_visible
Prefer semantic actions. Coordinates should be the last fallback.
See examples/flow-memory-replay.json.
Docker
The recommended Docker model is:
Docker container
- read-only Security MCP for static project review
Trusted isolated worktree or self-hosted runner
- approved build, device, Appium, and patch actions
- Android SDK/emulator/device, Appium, Flutter/Gradle/React Native
- Xcode and iOS Simulator on macOSBuild:
docker build -t mobiloop-mcp:local .Published GHCR image:
docker pull ghcr.io/enessubass/mobiloop-mcp:latestRun as an MCP stdio server:
docker run --rm -i \
--read-only --cap-drop ALL --security-opt no-new-privileges \
--tmpfs /artifacts:rw,noexec,nosuid,size=256m,uid=10001,gid=10001,mode=0770 \
-e MOBILOOP_WORKSPACE_ROOT=/workspace \
-e MOBILOOP_ARTIFACTS_DIR=/artifacts \
-e MOBILOOP_SECURITY_MODE=secure \
-v /absolute/path/to/mobile/app:/workspace:ro \
--entrypoint node \
ghcr.io/enessubass/mobiloop-mcp:latest /app/dist/src/servers/security.jsSee docs/DOCKER.md.
Safety Model
Defaults are intentionally conservative.
File access is restricted to
workspaceRootafter symbolic-link resolution.Secure mode ignores project-local config, requires approval, and uses host-controlled loopback Appium.
Secret-like paths are blocked.
Commit tools only work on branches matching
feature/ai-*by default.There is no generic shell execution tool.
API checks are restricted by
apiAllowlist.Evidence is written under
.mobiloop, unless the host deliberately provides a dedicatedMOBILOOP_ARTIFACTS_DIRmount.Runtime and output limits are enforced.
Default blocked paths include:
.env,.env.**.keystore,*.jks,*.p12*.mobileprovisionGoogleService-Info.plistgoogle-services.jsonpaths containing
secretorcredential
Secure mode enforces approval for high-impact operations such as dependency installation, lint/test/build commands, device interaction, patches, commits, pushes, and PR creation.
MobiLoop exposes machine-readable policy metadata through mobiloop list-tools --json; see docs/TOOL_REFERENCE.md.
See docs/SECURITY.md.
Artifacts
The default artifact directory is:
.mobiloopWhen runId or MOBILOOP_RUN_ID is set, artifact writers use a run-scoped root:
.mobiloop/runs/<runId>Typical contents:
Directory | Contents |
| dependency, lint, test, and APK build logs |
| Appium or device screenshots |
| Appium page source XML |
| device or simulator logs |
| combined verification artifacts |
| source-flow analysis, checkpoint memory, replay records |
| JSONL iteration records |
| Markdown final reports |
| CI manifests, summaries, annotations |
| source scans, generated plans, comparisons |
Tool Groups
Code
code.read_filecode.search_codecode.apply_patchcode.git_diffcode.create_branchcode.commit_changescode.open_pr
Environment
env.preflightenv.compatibility_matrixenv.ensure_appium
Build
build.detect_projectbuild.install_dependenciesbuild.run_lintbuild.run_unit_testsbuild.build_debug_apkbuild.build_release_candidatebuild.collect_build_logs
Security
security.scan_sourcesecurity.generate_test_plansecurity.compare_scanssecurity.release_gate
Android Device
device.list_devicesdevice.start_emulatordevice.stop_emulatordevice.install_appdevice.uninstall_appdevice.clear_app_datadevice.grant_permissionsdevice.capture_screenshotdevice.pull_logs
iOS
ios.list_simulatorsios.boot_simulatorios.shutdown_simulatorios.build_appios.install_appios.launch_appios.capture_screenshotios.collect_logs
Appium
appium.create_sessionappium.delete_sessionappium.observe_screenappium.get_page_sourceappium.get_accessibility_treeappium.tap_by_textappium.tap_by_accessibility_idappium.tap_by_resource_idappium.tap_coordinatesappium.type_textappium.swipeappium.go_backappium.wait_for_visibleappium.assert_visibleappium.assert_not_visible
Verification
verify.assert_screen_contains_textverify.assert_no_crash_in_logcatverify.assert_appium_session_healthyverify.assert_api_responseverify.collect_evidenceverify.assert_navigation_reachedverify.assert_accessibility_labelsverify.assert_screenshot_diffverify.assert_sqlite_queryverify.hash_artifact
Flow
flow.analyze_from_codeflow.generate_test_scenariosflow.run_scriptflow.record_checkpointflow.record_test_runflow.plan_replayflow.replay_to_checkpointflow.read_memoryflow.clear_memory
Loop
loop.record_iterationloop.read_iterationsloop.generate_report
CI
ci.collect_artifact_manifestci.write_github_step_summaryci.comment_prci.create_github_annotations
Policy
policy.list_tools
Orchestrator
orchestrator.run_android_validation_looporchestrator.run_ios_validation_loop
Troubleshooting
env.preflight says Appium is missing
Start Appium and make sure APPIUM_SERVER_URL points to it:
APPIUM_SERVER_URL=http://127.0.0.1:4723env.preflight accepts either a reachable Appium server or a global appium command.
Appium cannot find Android SDK
Start Appium with Android environment variables:
ANDROID_HOME=/absolute/path/to/android/sdk \
ANDROID_SDK_ROOT=/absolute/path/to/android/sdk \
PATH="$ANDROID_HOME/platform-tools:$ANDROID_HOME/emulator:$PATH" \
appium --address 127.0.0.1 --port 4723Appium taps text but the screen does not move
Prefer accessibility ids or resource ids. If using text, this server first tries a clickable parent containing the text, then falls back to the text node. For custom Flutter or React Native widgets, add stable semantics/accessibility ids when possible.
Flow replay matched the wrong screen
Use flow.plan_replay first. Raise minimumScore, record better checkpoints, and avoid checkpointing transient loading states.
Docker cannot see the emulator or Appium
Run Appium on the host and point the container to it with host.docker.internal. On Linux, add --add-host=host.docker.internal:host-gateway.
iOS does not work in Docker
iOS simulator workflows require macOS with Xcode. Run iOS tools directly on the macOS host or a macOS self-hosted runner.
npm pack --dry-run fails with npm cache permissions
Use a clean cache:
npm_config_cache=/tmp/mobiloop-npm-cache npm pack --dry-runDevelopment
npm ci
npm run format:check
npm run lint
npm run typecheck
npm test
npm run site:check
npm run pack:checkThe Dockerfile also runs the test suite during image build.
Project Files
License
MIT. See LICENSE.
Available Tools
82 toolsappium.assert_not_visibleC
Assert that a locator is not visible within timeout.
| Name | Required | Description | Default |
|---|---|---|---|
| locator | Yes | ||
| serverUrl | No | ||
| sessionId | Yes | ||
| timeoutMs | No |
TDQS
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 mentions 'within timeout' but does not explain whether the tool polls, fails immediately, requires the element to exist, or what happens on timeout. This is minimal for a tool meant to gate test validity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler words. It is concise, though it sacrifices necessary behavioral detail for brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given four parameters, a nested locator object, no output schema, and no annotations, this description is too thin. An agent cannot infer the full calling contract, failure semantics, or default timeout behavior from it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description only loosely references 'locator' and 'timeout.' It does not explain sessionId, serverUrl, the nested locator structure, whether timeoutMs is optional, or how the strategy/value pair is interpreted.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('assert'), resource ('a locator'), and negation ('not visible') with a timeout scope. The 'not visible' phrasing clearly differentiates it from siblings such as appium.assert_visible and appium.wait_for_visible.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this versus assert_visible or wait_for_visible. The description conveys only what the tool does, not the conditions that should lead an agent to choose it over alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
appium.assert_visibleB
Assert that a locator is visible. Returns passed false instead of throwing when not visible.
| Name | Required | Description | Default |
|---|---|---|---|
| locator | Yes | ||
| serverUrl | No | ||
| sessionId | Yes | ||
| timeoutMs | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It usefully discloses that a non-visible element yields false rather than an exception. However, it omits whether it waits during timeoutMs, what it returns on success, and any failure/error behavior, leaving key traits unexplained.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short, front-loaded, and each sentence serves a purpose. It loses one point because 'Returns passed false' is awkwardly phrased and may confuse an agent into thinking a field named 'passed' is returned rather than simply 'false'.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no annotations, no output schema, and four parameters, the core assertion behavior and the false-on-failure contract are present. Yet timeout semantics, the success return value, and the role of optional parameters are missing, leaving meaningful gaps in what an agent needs to invoke it confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage, so the description needed to compensate, but it only refers generically to 'a locator'. It adds no meaning for sessionId, serverUrl, timeoutMs, or how locator strategies behave, making it hard for an agent to construct a correct call.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence names a concrete operation and target: assert visibility of a locator. The second sentence adds that it returns false instead of throwing, which helps distinguish it from tools like appium.assert_not_visible and appium.wait_for_visible. However, it never explicitly names a sibling or state the alternative condition.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The word 'Assert' plus the non-throwing return behavior implies this is for a boolean visibility check, but there is no explicit guidance on when to use this vs. waiting or negating. In particular, it does not point to appium.wait_for_visible for polling scenarios or appium.assert_not_visible for the inverse check.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
appium.create_sessionA
[approval required][device mutation][risk:dangerous] Create an Appium session. Pass W3C capabilities or raw capabilities object.
| Name | Required | Description | Default |
|---|---|---|---|
| serverUrl | No | ||
| capabilities | Yes |
TDQS
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 explicitly includes bracketed risk signals: '[approval required][device mutation][risk:dangerous]', which disclose approval needs, device-state mutation, and danger. It lacks detail on session cleanup or resource lifetime, but the key safety traits are surfaced.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with no filler. The risk flags are front-loaded, and every clause adds distinct value: what the tool does and what input shape it expects.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is adequate for a simple creation tool, and the risk flags cover approval and danger. But it omits the optional 'serverUrl' semantics, does not describe what the response returns (e.g., sessionId), and never mentions that the session should later be cleaned up with appium.delete_session. These are meaningful gaps given there is no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds real meaning for the 'capabilities' parameter by explaining it accepts W3C capabilities or a raw capabilities object, which is more than the schema's bare object type. However, 'serverUrl' is not mentioned in the description, and schema description coverage is 0%, so that parameter's semantics depend entirely on its self-explanatory name.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Create an Appium session.' It also clarifies the input form ('W3C capabilities or raw capabilities object'), which distinguishes it from session teardown tools like appium.delete_session. This is unambiguous and differentiating.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains how to call the tool ('Pass W3C capabilities or raw capabilities object') but gives no guidance on when to use it, prerequisites such as an Appium server or device, or how it relates to alternatives like appium.delete_session or env.ensure_appium. An agent must infer the appropriate usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
appium.delete_sessionC
[approval required][device mutation][risk:dangerous] Delete an Appium session.
| Name | Required | Description | Default |
|---|---|---|---|
| serverUrl | No | ||
| sessionId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No structured annotations are present, so the description carries the behavioral burden. It includes '[approval required][device mutation][risk:dangerous]', which communicates risk and destructive intent. However, it does not disclose the full behavioral consequences of deleting a session, such as what happens to the device under test or whether the session ID becomes invalid.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single short, front-loaded sentence with no filler text, and the warning tags are placed at the front. It is appropriately concise for a tool of this apparent simplicity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive lifecycle operation, this is thin context. It omits prerequisites or teardown usage, does not describe the effect on the device or Appium server, and provides no guidance about what to do after deletion. The lack of an output schema further raises the burden on the description to fill in these gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description adds no information about sessionId or serverUrl. The agent must infer parameter semantics solely from the parameter names, and the description does not compensate for the missing schema documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the action ('Delete an Appium session') clearly, identifying a specific verb and resource. It stops short of a 5 because it largely restates the tool name and does not add any scope or distinguishing details relative to sibling Appium lifecycle tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance about when this tool should be used, when it is unnecessary, or how it fits into a teardown flow versus other session-related tools. The warning tags signal caution but provide no decision criteria for an agent choosing whether to invoke this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
appium.get_accessibility_treeC
Return a compact accessibility summary parsed from page source.
| Name | Required | Description | Default |
|---|---|---|---|
| serverUrl | No | ||
| sessionId | Yes |
TDQS
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 states what the tool returns but not whether it requires an active Appium session, how it handles errors, whether it reads current UI state, or what 'compact' means in terms of output size or structure. The description adds only a minimal parsing nuance beyond the purpose statement.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, front-loads the core behavior with 'Return a compact accessibility summary', and contains no filler or redundant content. It earns its place without unnecessary elaboration.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has no output schema, no annotations, and undocumented parameters, so the description needs to supply substantial context. It does not define what the accessibility summary contains, how it relates to get_page_source, whether it can be used for assertions, or what the return structure looks like. An agent would likely need to inspect other tools or experiment to use it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate by explaining serverUrl and sessionId. It does not mention either parameter at all. An agent has no guidance on what serverUrl is for, whether sessionId is a session identifier from appium.create_session, or how the parameters relate to fetching and parsing page source.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Return') and a concrete resource ('compact accessibility summary parsed from page source'), making the core function clear. It implies a distinction from appium.get_page_source (raw page source vs. parsed summary) but does not explicitly differentiate itself from other accessibility-related siblings like appium.assert_accessibility_labels.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool versus alternatives such as appium.get_page_source, appium.observe_screen, or appium.assert_accessibility_labels. The phrase 'parsed from page source' hints at a relationship to get_page_source, but there is no explicit when-to-use, when-not-to-use, or prerequisite context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
appium.get_page_sourceC
Return raw Appium page source XML.
| Name | Required | Description | Default |
|---|---|---|---|
| serverUrl | No | ||
| sessionId | Yes |
TDQS
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 only states the output is raw XML, but does not mention potential errors, session requirements, or that the output may be large. It is a simple read operation but lacks any caveats or context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that immediately states the core function. No fluff or unnecessary detail; it is appropriately concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with two parameters and no output schema or annotations, the description is inadequate. It fails to explain the parameters, the structure of the XML returned, or when to use this tool over alternatives. An agent would likely struggle to invoke it correctly without additional context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not explain what serverUrl or sessionId mean. The agent cannot infer the purpose of these parameters from the description alone, making it impossible to correctly populate them without external knowledge.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Return') and the specific resource ('raw Appium page source XML'). It distinguishes itself from siblings like appium.observe_screen and appium.get_accessibility_tree by focusing on the raw XML output.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus the many Appium sibling tools. The description does not mention alternatives or conditions for selection, leaving the agent to infer from the name and description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
appium.go_backC
[approval required][device mutation][risk:dangerous] Send Android/iOS back navigation to the Appium session.
| Name | Required | Description | Default |
|---|---|---|---|
| serverUrl | No | ||
| sessionId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It does disclose safety-relevant traits via '[approval required][device mutation][risk:dangerous]', which is valuable, but it doesn't explain what state changes occur (e.g., whether it can exit the app, lose unsaved work, or fail without a back stack). Partial disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, compact sentence with risk tags front-loaded. There is no fluff, and the essential warning is prominent. It could include more context, but for what it says, it is efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations and no output schema, the description leaves significant gaps: no return value, no failure modes, no prerequisites, and no guidance on when navigation is appropriate. It is a minimal statement of action and risk, insufficient for confident autonomous invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It mentions neither serverUrl nor sessionId, leaving their purposes undocumented. The parameter names are somewhat self-explanatory, but the description adds no meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific action (send back navigation) on a specific resource (Android/iOS Appium session), making it clearly distinct from sibling tools like appium.tap_by_text or appium.swipe. It doesn't explicitly name alternatives, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus the many other navigation or verification tools, no mention of prerequisites like having an active session, and no exclusions. Usage is only implied by the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
appium.observe_screenC
Capture screenshot and page source for the current Appium session, optionally waiting for app UI readiness.
| Name | Required | Description | Default |
|---|---|---|---|
| prefix | No | ||
| stableMs | No | ||
| minWaitMs | No | ||
| serverUrl | No | ||
| sessionId | Yes | ||
| timeoutMs | No | ||
| waitForAnyText | No | ||
| waitForPackageIdle | No |
TDQS
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 mentions 'optionally waiting for app UI readiness' but does not explain what that entails, how long it might block, or any side effects. It also fails to mention that the tool may take significant time due to waiting, or what 'readiness' means in terms of parameters like stableMs or waitForAnyText.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, which is concise and front-loaded with the core action. However, it is so brief that it omits essential details about parameters and behavior, making it under-specified rather than efficiently concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 8 undocumented parameters and no output schema, the description is grossly incomplete. It does not explain what the screenshot and page source return, how the waiting behavior is controlled, or any of the parameter semantics. An agent cannot reliably use this tool based on the given information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage, so the description must compensate by explaining parameter meanings. It does not mention any of the 8 parameters (prefix, stableMs, minWaitMs, serverUrl, timeoutMs, waitForAnyText, waitForPackageIdle) at all. Agents have no way to know what these parameters control, making correct invocation impossible.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool captures a screenshot and page source for the current Appium session, and optionally waits for UI readiness. This is a specific verb+resource combination. However, it does not explicitly differentiate itself from siblings like appium.get_page_source or device.capture_screenshot, though the combination and the waiting aspect make it distinct.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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. There is no mention of when to prefer this over calling appium.get_page_source and device.capture_screenshot separately, or when the waiting feature is necessary. The description implies usage but gives no explicit context or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
appium.swipeC
[approval required][device mutation][risk:dangerous] Perform a touch swipe by coordinates.
| Name | Required | Description | Default |
|---|---|---|---|
| endX | Yes | ||
| endY | Yes | ||
| startX | Yes | ||
| startY | Yes | ||
| serverUrl | No | ||
| sessionId | Yes | ||
| durationMs | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the full burden. It includes explicit tags '[approval required][device mutation][risk:dangerous]', which disclose safety and mutation traits. However, it does not explain side effects like screen state changes, reversibility, or session requirements, so it only partially covers behavioral transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise and front-loaded with risk tags, but it is under-specified rather than efficiently sized. It contains no wasted words but lacks critical content, so it does not earn a higher score.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 7 parameters, zero schema coverage, no annotations, and no output schema, the description is severely incomplete. An agent would not know the coordinate system, required session setup, optional duration semantics, or expected effect, making correct invocation highly uncertain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description fails to explain any of the 7 parameters. It merely says 'by coordinates', leaving startX/startY/endX/endY units and coordinate space unspecified, and durationMs, serverUrl, and sessionId entirely unexplained. The description adds almost no meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('swipe') and resource ('touch by coordinates'), clearly identifying the action. However, it does not differentiate from sibling tools like appium.tap_coordinates, so it misses the explicit sibling contrast that would make it a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 such as tap_coordinates or other gestures. The sole sentence implies usage ('swipe') but gives no context on prerequisites, scenarios, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
appium.tap_by_accessibility_idC
[approval required][device mutation][risk:dangerous] Tap by accessibility id.
| Name | Required | Description | Default |
|---|---|---|---|
| serverUrl | No | ||
| sessionId | Yes | ||
| accessibilityId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are absent, so the description must carry the burden. It does disclose 'approval required', 'device mutation', and 'risk:dangerous', which are important behavioral warnings. However, it does not describe error handling, session requirements, or side effects beyond the mutation, leaving a significant portion of behavior undisclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, consisting of a single sentence plus risk tags. It wastes no words and is front-loaded with the risk warnings. However, it may be too minimal to convey necessary nuance, though it earns a high score for efficiency.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with several sibling tap methods, the description is incomplete. It does not explain when to prefer this over tap_by_text or tap_by_resource_id, nor does it mention that an active session is required (though the schema indicates it). Error behavior and post-conditions are absent, making it insufficient for an agent to confidently select and invoke the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description adds no parameter-specific meaning. It does not explain that sessionId is required, what serverUrl is for, or what format accessibilityId should be. The parameter names are somewhat self-explanatory, but the description does not compensate for the missing schema documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'tap' and the resource 'accessibility id', so the purpose is unambiguous. However, it does not differentiate from sibling tools like tap_by_text or tap_by_resource_id, which weakens its clarity in context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool over alternatives. It does not mention that it should be chosen when an accessibility ID is available, nor does it exclude cases where text or resource ID would be more appropriate. The description gives no context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
appium.tap_by_resource_idC
[approval required][device mutation][risk:dangerous] Tap by Android resource id or Appium id locator.
| Name | Required | Description | Default |
|---|---|---|---|
| serverUrl | No | ||
| sessionId | Yes | ||
| resourceId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The bracketed tags '[approval required][device mutation][risk:dangerous]' are likely part of the description but act as annotations. However, the description adds little beyond these tags: no details on side effects, permissions, or error conditions. With no annotations present, the description fails to disclose behavioral traits beyond the mutation risk.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, concise and gets to the point. It includes the necessary context for the resource id parameter. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with dangerous risk, the description lacks guidance on preconditions (e.g., app must be launched), error scenarios, or behavioral details. It also doesn't explain the 'serverUrl' parameter or how session is used. Incomplete for safe and correct usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It only explains 'resourceId' (Android resource id or Appium id locator), but leaves 'serverUrl' and 'sessionId' entirely undocumented. The description adds minimal value for the parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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 (by Android resource id or Appium id locator). It distinguishes from sibling tools like appium.tap_by_text and appium.tap_coordinates by specifying the locator type.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for Android UI automation, but does not explicitly state when to use this tool versus alternatives like tap_by_accessibility_id or tap_by_text. No exclusions or alternative routing provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
appium.tap_by_textA
[approval required][device mutation][risk:dangerous] Tap a visible element by text with exact-first matching before contains fallback.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | ||
| matchMode | No | ||
| serverUrl | No | ||
| sessionId | Yes | ||
| timeoutMs | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Although no annotations are provided, the description includes safety tags '[approval required][device mutation][risk:dangerous]' and discloses the matching fallback strategy. This provides meaningful behavioral context beyond what a schema would show, though it omits details like failure behavior and waiting.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with the most critical safety information front-loaded in tags. It is concise, non-redundant, and earns its place without verbosity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with 5 parameters and no output schema, the description covers the core purpose and matching logic, but leaves out details about timeout behavior, matchMode values, and what happens if no element is found. This is adequate but not complete for a dangerous operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must explain parameters. It only explains 'text' implicitly and hints at matching behavior, but does not clarify 'matchMode', 'timeoutMs', 'serverUrl', or 'sessionId'. The description adds minimal value for the other three optional parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the verb 'Tap', the resource 'visible element by text', and the behavior 'exact-first matching before contains fallback'. This clearly differentiates it from sibling tools like tap_by_accessibility_id and tap_by_resource_id, which use different locators.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this tool is for tapping elements identified by text, but it does not explicitly mention when to prefer it over alternatives or when not to use it. Sibling tools exist for different locators, but no guidance is given on selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
appium.tap_coordinatesA
[approval required][device mutation][risk:dangerous] Tap screen coordinates. Use only when semantic locators are unavailable.
| Name | Required | Description | Default |
|---|---|---|---|
| x | Yes | ||
| y | Yes | ||
| serverUrl | No | ||
| sessionId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description includes inline tags '[approval required][device mutation][risk:dangerous]' which disclose that this is a dangerous, mutating operation requiring approval. However, these tags are not formal annotations, and the description does not explain what 'dangerous' means in practice (e.g., could tap unintended UI elements, cause navigation, or trigger irreversible actions). It also doesn't mention that coordinates are relative to the device screen and may vary by resolution. The tags add some transparency, but the description could go further.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence plus a short constraint, which is concise and front-loaded. The inline tags add useful context without bloating the text. It loses one point because the parameter semantics gap means the description is too short to be fully self-sufficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a dangerous mutation tool with no annotations, no output schema, and 0% schema coverage, the description is incomplete. An agent needs to know the coordinate system, units, and potential side effects to use this safely. The sibling list shows many semantic alternatives, and the description correctly routes away from them, but it doesn't provide enough operational detail for a tool that could cause harmful taps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for the schema's lack of parameter documentation. The description only mentions 'screen coordinates' but does not explain that x and y are pixel coordinates, what coordinate system is used (e.g., top-left origin), or what serverUrl and sessionId are for. With 4 parameters and zero schema coverage, this is a significant gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Tap screen coordinates') and adds a clear constraint ('Use only when semantic locators are unavailable'). It distinguishes this from sibling tools like appium.tap_by_text, appium.tap_by_accessibility_id, and appium.tap_by_resource_id, which are semantic locator-based alternatives. It could be slightly clearer that this is a raw coordinate tap on the Appium session, but the core purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Use only when semantic locators are unavailable,' which is a direct usage guideline. It implies that semantic locator tools (tap_by_text, tap_by_accessibility_id, tap_by_resource_id) should be preferred, and this tool is a fallback. This is strong guidance for an agent deciding between siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
appium.type_textC
[approval required][device mutation][risk:dangerous] Type text into an element located by accessibility id, id, xpath, text, or native selector.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | ||
| text | Yes | ||
| locator | Yes | ||
| serverUrl | No | ||
| sessionId | Yes | ||
| clearFirst | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It does include the pre-tags '[approval required][device mutation][risk:dangerous]' which add context, but it does not explain the device mutation effect, whether it clears the field first by default, whether text is appended or replaced, or what happens on failure. For a mutation tool with zero annotation coverage, this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one sentence with useful pre-tags, but it is not front-loaded with the most decision-relevant info and spends precious space listing locator strategies that are already in the schema. It is adequately short but omits important behavioral details that could have been added without much length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool mutates a device and has six parameters with no schema descriptions and no output schema. The description does not cover return behavior, preconditions like an active Appium session or visible element, or the effect of `clearFirst`. Given the tool's complexity and risk level, the description is not complete enough for an agent to invoke it safely and correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage across 6 parameters, so the description must compensate heavily, but it only mentions locator strategies and 'text' implicitly. It does not explain the `mode`, `clearFirst`, `serverUrl`, or `sessionId` parameters, nor does it clarify the structure of the `locator` object beyond listing strategies. The description adds almost no meaning beyond the parameter names and enum values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Type text into an element') and specifies the supported locator strategies, which helps distinguish it from tap-focused siblings like appium.tap_by_text and appium.tap_by_accessibility_id. However, it doesn't explicitly name a sibling or contrast itself with alternative tools, so it falls short of full differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives such as tap_by_text or tap_coordinates, nor any mention of prerequisites like needing an active session or a visible element. The usage context is implied by the verb 'type', but the description does not help an agent decide between this and other input methods.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
appium.wait_for_visibleC
Wait until a locator becomes visible.
| Name | Required | Description | Default |
|---|---|---|---|
| locator | Yes | ||
| serverUrl | No | ||
| sessionId | Yes | ||
| timeoutMs | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description must carry behavioral transparency. It only says 'wait until visible' but doesn't disclose timeout behavior, polling interval, what happens on timeout (throws exception?), or whether it returns anything. This is insufficient 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single short sentence, which is concise and front-loaded. However, it's so brief that it sacrifices necessary detail. It earns high marks for conciseness but at the cost of completeness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 4 parameters and no output schema, this description is incomplete. An agent doesn't know what happens if the element never becomes visible, how long to wait by default, or what the return value indicates. The sibling tools suggest a testing context, but the description doesn't provide sufficient context for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 0% description coverage, so the description must explain parameters. It doesn't mention timeoutMs, serverUrl, or the locator structure. The agent only gets the schema enum for strategy, but no semantics for timeout. The description adds no parameter meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: waiting for a locator to become visible. It uses a specific verb 'wait' and identifies the resource (locator visibility). It distinguishes from siblings like appium.assert_visible which likely check visibility immediately, but doesn't explicitly contrast them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. It doesn't mention that this is for waiting before actions, or that assert_visible is for immediate checks. The agent must infer usage from the name and siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
build.build_debug_apkA
[approval required][workspace write][network][risk:dangerous] Build a debug APK and return discovered APK artifact paths.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does disclose important behavioral traits through inline tags: '[approval required][workspace write][network][risk:dangerous]'. It also states the return behavior (returns artifact paths), which goes beyond what the name alone conveys. However, it does not elaborate on what the write entails or why it is dangerous, so it is not a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, front-loaded with risk and permission tags, and efficiently states the action and return value. It is appropriately sized for a simple build tool, though it omits important usage and parameter details that would warrant a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has one optional parameter, no output schema, and no annotations, the description adequately covers the primary purpose and return type. However, it lacks context about prerequisites (e.g., needing a project set up), the meaning of the 'kind' parameter, and any error or fallback behavior when no APK is found, so it is not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has one optional parameter 'kind' with enum values (flutter, react-native, android) and 0% schema description coverage. The description does not add any meaning about this parameter – it does not explain what each value does, whether the parameter is needed, or what happens if omitted. Since schema coverage is 0%, the description must compensate but fails to do so, leaving the parameter underspecified.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Build') and resource ('debug APK') and explicitly says it returns discovered APK artifact paths. This clearly distinguishes it from sibling tools like build.build_release_candidate, which builds a release candidate, and ios.build_app, which builds iOS apps.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 such as build.build_release_candidate or build.detect_project. It does not mention preconditions like needing a detected project or when choosing between debug and release builds. The use context is only implied by the tool name and the sibling set, not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
build.build_release_candidateB
[approval required][workspace write][network][risk:dangerous] Build a release candidate APK. Release signing requirements are delegated to the target project.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no structured annotations, the description carries the full burden of behavioral disclosure. It includes bracketed tags [approval required][workspace write][network][risk:dangerous] that clearly signal side effects, privilege, and danger. It also states that release signing is delegated to the target project, which is important context. It does not detail what gets overwritten or the final artifact location, but the risk profile is well communicated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is exceptionally concise: one sentence with risk/approval tags front-loaded, followed by a clear statement of the core function and a note about signing delegation. No filler words or redundant details. Every part earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with one optional enum parameter and no output schema, the description covers the high-risk side effects and signing delegation. However, it omits what the tool returns (e.g., APK path) and does not explain how 'kind' influences behavior. Given the tool's build context and the presence of sibling build tools, this is a moderate gap that prevents full autonomous invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description does not mention the 'kind' parameter at all. Although the schema itself enumerates allowed values (flutter, react-native, android), the description provides no additional meaning about how kind affects the build or which value to select. Since coverage is low and the description fails to compensate, parameter semantics are minimal.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Build a release candidate APK') with a specific resource type. It distinguishes itself from sibling tools like build.build_debug_apk by naming 'release candidate' and mentions delegation of release signing. This gives an unambiguous purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 alternatives such as build_debug_apk or flow.run_script. The tags imply approval and risk, but there is no statement of conditions or exclusions. The agent must infer usage from the name and generic build context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
build.collect_build_logsB
List build log artifacts emitted by this MCP server.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. The verb 'List' implies a non-destructive read, but the description doesn't disclose return shape, whether logs persist after listing, ordering, or any side effects. For a tool with zero annotation coverage, this is a meaningful gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single efficient sentence with no wasted words; every element (verb, resource, scope qualifier) earns its place. It is front-loaded and scannable, though it could add a brief usage note without becoming verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool with no output schema, the description is mostly adequate: it states the resource and scope. However, it doesn't clarify what the returned log artifacts contain, when logs are available, or how this differs from the similarly named sibling collectors, leaving some ambiguity for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and schema description coverage is 100%, so the baseline is 4. There are no parameter semantics to document, and the description's 'emitted by this MCP server' qualifier adds useful scoping meaning beyond the empty schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('List') and a specific resource ('build log artifacts emitted by this MCP server'). The qualifier 'emitted by this MCP server' helps distinguish it from sibling log-collection tools like device.pull_logs and ios.collect_logs, though it doesn't explicitly name them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus similar siblings such as ci.collect_artifact_manifest, device.pull_logs, or verify.collect_evidence. Usage context is only implied by the tool name and minimal description, with no exclusions or alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
build.detect_projectB
Detect Flutter, React Native, or native Android project type.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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 doesn't disclose how detection works (e.g., filesystem inspection, config file parsing), what the output format is, or whether it can fail/return unknown. The description is too thin to give an agent confidence about the tool's behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short sentence that is front-loaded with the verb and lists the three project types. It is concise and scannable, though it could add a bit more context without becoming bloated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool, the description is minimal but the lack of output schema and behavioral detail leaves gaps. An agent doesn't know what the return value looks like (e.g., a string enum, a structured object) or how to handle an unrecognized project type. Given the tool's role in a build pipeline, this is a meaningful gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and schema coverage is 100%, so there is nothing for the description to add. Baseline 4 for zero-param tools is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Detect') and resource ('Flutter, React Native, or native Android project type'), making the tool's purpose clear. It doesn't explicitly distinguish from siblings, but the sibling list contains no other detection tool, so the purpose is unambiguous enough.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is used to determine project type before build/install steps, but it doesn't state when to use it versus alternatives or what to do with the result. No explicit exclusions or alternative routing are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
build.install_dependenciesA
[approval required][workspace write][network][risk:dangerous] Install dependencies for the detected or specified mobile project type.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the embedded flags approval required, workspace write, network, and risk dangerous carry the behavioral disclosure burden, and they clearly warn that this is a side-effecting operation that needs approval and network access. The description does not detail which files are modified, but the workspace-write and dangerous flags convey the essential risk profile. No contradiction with annotations exists because there are no annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one compact sentence with high-signal risk flags in front, followed by a clear purpose. There is no redundant explanation or filler; every part earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with one optional parameter and no output schema, the description covers purpose and safety but leaves workflow details unstated, such as what happens if no project is detected or how this integrates with build.detect_project. The core calling decision is mostly supported by the schema enum, but the operational context around detection and side effects is incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for the undocumented kind parameter. The phrase specified mobile project type hints at how to influence the parameter and detected suggests behavior when it is omitted, but it never names kind or lists the enum values. The schema enum supplies the valid values, but the description adds only partial semantic context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear action and object: install dependencies for a mobile project type. It does not explicitly name sibling tools, but the dependency-installation purpose is distinct from ios.install_app and build.run_lint. The phrase detected or specified adds some scope without listing the supported project types.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this tool is used after a project type is detected or when the caller specifies one, which gives a weak usage condition. It does not name when to prefer this over sibling build tools or state exclusions, so the guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
build.run_lintA
[approval required][workspace write][network][risk:dangerous] Run lint/static analysis for Flutter, React Native, or Android.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. The prefix '[approval required][workspace write][network][risk:dangerous]' explicitly discloses side effects, permissions, and risk beyond the minimal action statement. It stops short of explaining failure behavior, but this is strong transparency for a simple run command.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single clause with compact risk tags and no filler. It is front-loaded with behavioral warnings and states the action and scope immediately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter tool with no output schema, the description covers the action, target platforms, and side-effect profile. It remains incomplete because it provides no usage heuristics, no guidance about omitted 'kind', and no indication of what the command returns or how lint failures are signaled.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter, 'kind', has an enum but no schema description. The description's phrase 'for Flutter, React Native, or Android' mirrors the enum values and clarifies that kind maps to target framework, adding some meaning, but it does not explain default behavior when the optional parameter is omitted.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear action ('Run lint/static analysis') with an explicit resource scope ('for Flutter, React Native, or Android'). This distinguishes it from siblings like build.run_unit_tests and build.build_debug_apk without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to prefer run_lint over sibling build tools, nor any when-not-to-use guidance. The platform list is useful scope information, but the agent is left to infer when linting is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
build.run_unit_testsA
[approval required][workspace write][network][risk:dangerous] Run unit tests for Flutter, React Native, or Android.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral disclosure burden. It opens with '[approval required][workspace write][network][risk:dangerous]', which clearly signals side effects, permission requirements, and risk. It does not detail which workspace files may change, but the explicit danger and network flags provide substantial transparency beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one compact sentence, with the risk and approval flags front-loaded. Every part contributes directly to safe invocation and understanding, with no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers purpose, supported platforms, and risk profile, which is a strong baseline for a simple one-parameter tool. However, it omits the default behavior when `kind` is not provided and gives no indication of command output or return value, which matters because there is no output schema to fill that gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has one parameter with 0% description coverage, so the description must compensate. It lists the supported frameworks, which mirrors the enum values in the schema, but it never names the `kind` parameter, explains that it is optional, or describes what happens when it is omitted (e.g., auto-detection). The description adds little semantic value beyond restating the enum.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Run unit tests') and enumerates the supported project types ('Flutter, React Native, or Android'), which clearly distinguishes it from sibling build commands like build.run_lint and build.build_debug_apk. The scope is immediately understandable and not a tautology of the tool name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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. The description implies it is for unit testing on the listed platforms, but it does not mention conditions, prerequisites, or exclusions such as 'use build.run_lint for static analysis' or 'run after install_dependencies.' The usage context is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ci.collect_artifact_manifestA
Create a JSON manifest of files under the MCP artifacts directory.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must carry the behavioral disclosure burden. It clearly states the core behavior and scope, but it does not disclose whether the manifest is returned to the caller, written to disk, or merely logged. The word 'Create' implies a side effect, yet no detail is given about mutation, output destination, or failure behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, focused sentence with no filler. It front-loads the action and immediately states the scope. Every word contributes to the meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple zero-parameter tool this is mostly complete, but there is no output schema and the description does not clarify where the manifest is produced. An agent knows the tool creates a JSON manifest of the artifacts directory, but not whether it gets the manifest in the response or must read it from somewhere afterward.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and an empty schema, so there is nothing for the description to clarify. The baseline of 4 for a zero-parameter tool is appropriate because no parameter semantics are needed and the description does not introduce confusion.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Create'), names the concrete output ('a JSON manifest'), and scopes it precisely ('of files under the MCP artifacts directory'). It clearly states what the tool does and is distinguishable from all sibling tools by its unique output and directory scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no indication of when to use this tool versus alternatives, such as after a build or before evidence collection. It does not mention any preconditions, intended CI stages, or what makes this tool preferable to other artifact-related tools like verify.collect_evidence or ci.write_github_step_summary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ci.comment_prA
[approval required][workspace write][network][risk:dangerous] Create a GitHub PR comment through gh. Uses current PR when prNumber is omitted.
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | ||
| bodyPath | No | ||
| prNumber | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does well by declaring '[approval required][workspace write][network][risk:dangerous]'. It also discloses the underlying gh mechanism and the current-PR fallback behavior. It stops short of describing failure modes or side effects, but the explicit risk and permission tags are valuable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loads the most important risk and permission context before the action. Every clause earns its place, and the current-PR fallback is stated without unnecessary wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a dangerous network/write tool with no annotations and no output schema, the description is too thin. It does not explain how body vs bodyPath should be supplied, what happens on failure, or what the agent should check before calling; the risk tags alone do not make the tool safe to invoke.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, but it only clarifies prNumber via 'Uses current PR when prNumber is omitted.' The body and bodyPath parameters are left entirely unexplained, including whether they are mutually exclusive or whether one is required.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource: 'Create a GitHub PR comment through gh.' The tool name ci.comment_pr matches the described action, and the resource is distinct from siblings like code.open_pr and ci.create_github_annotations, so an agent can tell what this tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'Uses current PR when prNumber is omitted' gives practical operational guidance for the common case. However, there is no explicit comparison to alternatives or conditions for when not to use this tool; the usage context is only implied by the action itself.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ci.create_github_annotationsA
[workspace write][risk:write] Emit GitHub Actions warning/error annotations from findings.
| Name | Required | Description | Default |
|---|---|---|---|
| level | No | ||
| title | No | ||
| findings | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral disclosure burden. The embedded '[workspace write][risk:write]' prefix openly signals that the tool performs a write and carries risk, which is meaningful transparency. It does not go into undo-ability or CI environment prerequisites, but for a simple annotation-emission tool the side-effect disclosure is solid.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single efficient sentence with the risk/context prefix front-loaded. There is no filler or redundancy; every token contributes.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 3 parameters, 0% schema coverage, no output schema, and no annotations, the description is too thin. It omits parameter semantics, prerequisites like running inside a GitHub Actions environment, and the relationship between 'level', 'title', and 'findings'. An agent needs more context to invoke this reliably.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for the undocumented parameters. It only hints at the 'findings' array via 'from findings', and gives no meaning for 'level' or 'title'. With three parameters and one required, this is insufficient to let an agent construct a correct call without guessing.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Emit'), a specific resource ('GitHub Actions warning/error annotations'), and an input source ('findings'). This clearly differentiates it from sibling CI tools like ci.write_github_step_summary and ci.comment_pr, which target different GitHub surfaces.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage in a GitHub Actions CI context where findings need to surface as annotations, but it gives no explicit when-to-use or when-not-to-use guidance. It does not mention alternatives or conditions that would select ci.write_github_step_summary or ci.comment_pr instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ci.write_github_step_summaryB
[workspace write][risk:write] Append Markdown to GitHub Actions step summary or a workspace fallback file.
| Name | Required | Description | Default |
|---|---|---|---|
| markdown | No | ||
| sourcePath | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It does include inline tags '[workspace write]' and '[risk:write]' and the verb 'Append', signaling it's a non-destructive write operation with workspace side effects. However, it omits details about the fallback file's path, environment detection, or error conditions, so transparency is only partial.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, front-loaded with behavioral risk tags, followed by a clear action and target. There is no fluff, and every word contributes to the core meaning. It is concise without sacrificing essential scope.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a write tool with two optional parameters, no annotations, and no output schema, this description is incomplete. It does not explain the purpose of sourcePath, when the fallback file is used, or how the agent should parameterize the call. The lack of parameter details and behavioral edge cases leaves too many gaps for safe invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It implies 'markdown' is the content to append, but 'sourcePath' is only vaguely tied to the workspace fallback file, with no explicit mapping or usage guidance. The description fails to explain either parameter clearly, leaving the agent to infer too much.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Append' and names a concrete resource: 'GitHub Actions step summary or a workspace fallback file.' This clearly distinguishes it from sibling tools like ci.comment_pr and ci.create_github_annotations, which target different outputs. The purpose is immediately apparent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description offers no explicit guidance on when to use this tool versus alternatives. It does not mention CI environments, prerequisites, or when to prefer this over, say, ci.comment_pr. The fallback file is mentioned but not as a decision criterion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
code.apply_patchA
[approval required][workspace write][risk:dangerous] Apply a unified diff after validating all touched paths stay inside workspaceRoot and are not forbidden.
| Name | Required | Description | Default |
|---|---|---|---|
| patch | Yes |
TDQS
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 it does so well: it discloses approval requirement, workspace-write mutation, dangerous risk, and the path-validation rule before touching any files. It falls just short of full transparency because it doesn't describe what happens on validation failure, partial application, or how to revert the change.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single compact sentence with the safety badges front-loaded before the operative verb. Every phrase carries operational value and there is no repeated schema information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter tool, the description covers the core operation, input type, and safety constraints. It is less complete because there is no output schema and the description does not indicate what the tool returns on success or error, nor does it specify the patch format beyond 'unified diff'; an agent may still have to discover those details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must add meaning. It adds that the patch must be a unified diff and that touched paths are restricted, but it gives no formatting details, path-root conventions, or example of the expected patch syntax. For a single required string, this is adequate but leaves room for ambiguity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific operation (Apply a unified diff) and a distinct resource/scope (workspace files after path validation), which clearly separates it from sibling read/search/diff/commit tools. This is more than a tautology and lets an agent select it immediately.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The verb 'Apply' plus 'unified diff' makes the use case inferable: use this when you have a patch to apply to code in the workspace. However, it never states when not to use it or names alternatives such as code.commit_changes for committing, so the guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
code.commit_changesA
[approval required][workspace write][risk:dangerous] Commit changes only while on an allowed feature/ai branch. Optionally stage specific non-secret paths.
| Name | Required | Description | Default |
|---|---|---|---|
| paths | No | ||
| message | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure显得. The [approval required][workspace write][risk:dangerous] tags convey safety-critical traits, and the branch restriction adds important context. However, it does not disclose whether the commit is local-only or pushed, how all changes are staged when paths is omitted, or what the return value looks like.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two compact sentences with no redundant wording. Safety markers are front-loaded, followed by the core action, a precondition, and the optional parameter, making it easy to scan and process.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the essential purpose, the branch precondition, and the risk profile, which is adequate for a simple commit operation. However, it leaves important behavioral details implicit, such as what happens when paths is not provided, whether the commit pushes to a remote, and how 'allowed' branches are determined. These gaps matter for a workspace-write tool with no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does explain the paths parameter as 'non-secret paths' to stage, adding meaning beyond the raw array type. However, it does not clarify path format or the default when paths is omitted, and the required message parameter receives no semantic explanation beyond its obvious purpose.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action 'Commit changes' and distinguishes it from sibling tools like code.apply_patch, code.create_branch, and code.open_pr. The branch constraint and optional staging clarify exactly what the tool does and its scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'only while on an allowed feature/ai branch' provides an explicit precondition and implies that the tool should not be used on main or other disallowed branches. It does not explicitly name alternative tools, but for a commit operation the usage context is sufficiently clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
code.create_branchA
[approval required][workspace write][risk:dangerous] Create and checkout a guarded feature branch. Branch must match allowedBranchPattern.
| Name | Required | Description | Default |
|---|---|---|---|
| branchName | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no structured annotations, the description carries the behavioral burden and does so via inline risk tags: approval required, workspace write, and risk dangerous. It also discloses a side effect beyond the schema: the branch is checked out, not merely created. It adds meaningful behavioral context, though it does not describe failure behavior if the pattern is not matched.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
All content is packed into one front-loaded sentence plus one constraint sentence; there is no filler. The inline tags immediately communicate approval and risk before the action. It could only improve by defining the pattern, not by adding length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter mutation, the description covers the action, approval requirement, workspace write risk, danger level, and naming constraint. The main omissions are the concrete allowedBranchPattern value and the approval/error workflow. Since there is no output schema and no structured annotations, the description is close to complete but not fully self-sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is one parameter, branchName, and the input schema provides only its type, so schema description coverage is 0%. The description partially compensates by tying branch creation to allowedBranchPattern, giving the parameter policy meaning. However, it never defines what allowedBranchPattern actually is or what name formats are valid, leaving a significant gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a concrete action ('create and checkout') and a specific resource ('guarded feature branch'), and adds a hard constraint ('must match allowedBranchPattern'). It is distinct from sibling code tools like git_diff, apply_patch, and commit_changes, though it never explicitly names an alternative. The terms 'guarded' and 'allowedBranchPattern' are left unexplained, so clarity is strong but not maximal.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides useful context by restricting creation to feature branches and warning that approval is required and the branch name must match allowedBranchPattern. However, it does not explicitly say when to prefer this tool over another or give a when-not-to-use case. Selection guidance is mostly implied rather than directly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
code.git_diffC
Return git diff for workspaceRoot.
| Name | Required | Description | Default |
|---|---|---|---|
| staged | No |
TDQS
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, but it only says 'Return git diff.' It does not explain whether it includes unstaged changes, untracked files, or the exact semantics of the staged parameter, nor does it clarify side effects or output behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no wasted words. It is concise, though it sacrifices useful detail that could have been included without much length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no annotations, no output schema, and an undocumented parameter, the description is too thin. An agent cannot reliably determine what the staged flag does, whether the diff is limited to the working tree, or what the returned output looks like.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has one optional boolean parameter ('staged') with 0% schema description coverage, and the tool description does not mention it at all. The name 'staged' hints at semantics, but the description adds no meaning about what true or false produces.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb ('Return') and resource ('git diff') with a specific scope ('workspaceRoot'). It is unambiguous about what the tool does, though it does not explicitly differentiate itself from sibling code tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance about when to use this tool versus alternatives like code.apply_patch or code.commit_changes. The intended context is only implied by the tool name and description; no prerequisites, exclusions, or decision criteria are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
code.open_prB
[approval required][workspace write][risk:dangerous] Open a pull request with GitHub CLI from the current allowed feature branch.
| Name | Required | Description | Default |
|---|---|---|---|
| base | No | ||
| body | Yes | ||
| draft | No | ||
| title | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does disclose important behavioral traits: approval required, workspace write, and dangerous risk. This goes beyond the schema and helps the agent understand side effects, though it could say more about what changes on the remote.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded with critical risk and approval markers. The single sentence is efficient, though 'current allowed feature branch' is slightly jargon-heavy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-parameter tool with no annotations and no output schema, the description leaves substantial gaps: parameter meanings, branch push behavior, failure modes, and expected result are not addressed. The risk markers help but do not make the definition complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must explain meaning for title, body, base, and draft. It mentions none of them. The agent gets no help understanding parameter semantics beyond bare property names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Open a pull request with GitHub CLI from the current allowed feature branch.' This unambiguously separates it from siblings like code.create_branch, code.commit_changes, and ci.comment_pr. The scope ('current allowed feature branch') adds useful precision.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool by requiring 'approval' and being from the 'current allowed feature branch,' but it never explicitly states when not to use it or names alternatives. Context is present, but exclusionary guidance is absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
code.read_fileA
Read a non-secret file inside workspaceRoot.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| maxBytes | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full behavioral burden. It discloses that only non-secret files within workspaceRoot are readable, implying read-only behavior and a scope restriction. However, it does not disclose return format, error handling (e.g., missing files, exceeding maxBytes), or permission requirements, leaving gaps for an agent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, compact sentence with no filler. It front-loads the core action and scope, and every word adds value. This is appropriately concise for a simple read tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, no annotations, and 0% schema coverage, the description must provide complete context for the agent. It omits key details such as how maxBytes behaves, what happens for missing or oversized files, and the return value format. While the tool is simple, the description leaves several operational unknowns.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It gives minimal context for 'path' (inside workspaceRoot) but says nothing about 'maxBytes' or its meaning. The description adds very little value beyond the schema's type and required fields, failing to explain key parameter behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Read' and the resource 'non-secret file inside workspaceRoot', clearly distinguishing this from sibling tools like code.search_code (search) and code.apply_patch (modify). The qualifier 'non-secret' adds an important scope boundary, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when you need to read a file, but it does not explicitly state when to use this tool versus alternatives (e.g., search_code for searching, apply_patch for modifications). The 'non-secret' qualifier provides a minor exclusion (don't use for secret files), but no clear context or naming of alternatives is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
code.search_codeB
Search workspaceRoot. Uses ripgrep when available and falls back to a built-in scanner.
| Name | Required | Description | Default |
|---|---|---|---|
| glob | No | ||
| query | Yes | ||
| maxResults | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses a meaningful behavioral trait: it uses ripgrep when available and falls back to a built-in scanner. This is useful context beyond the schema. However, with no annotations provided, the description carries the full burden and doesn't disclose other behaviors like case sensitivity, regex support, or whether results are limited by maxResults.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that front-loads the primary action and scope. It earns its place by adding the ripgrep fallback detail, though it could be slightly more informative about parameters.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a search tool with 3 parameters, no output schema, and no annotations, the description is too sparse. It doesn't explain what the search returns, how glob filtering works, what maxResults does, or any limitations. An agent would need to guess at the behavior of the built-in scanner and the meaning of the parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for the undocumented parameters. It only mentions 'query' implicitly through 'Search workspaceRoot' and doesn't explain 'glob' or 'maxResults' semantics. The description adds minimal value beyond the schema's bare parameter names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Search') and resource ('workspaceRoot'), which clearly identifies the tool as a code search function. It doesn't explicitly differentiate from siblings like code.read_file, but the search intent is clear enough to distinguish it from read/apply/commit operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context by mentioning the search scope (workspaceRoot) and the fallback mechanism, but it doesn't explicitly state when to use this tool versus alternatives like code.read_file or security.scan_source. No exclusions or alternative routing are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
device.capture_screenshotC
Capture a PNG screenshot from an Android device into artifacts.
| Name | Required | Description | Default |
|---|---|---|---|
| prefix | No | ||
| serial | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It reveals the outcome (a PNG artifact) but does not explain device selection behavior, behavior with multiple connected devices, error conditions, whether it requires an Appium session, or how artifact naming works.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words. It is appropriately brief for a straightforward capture tool, though it sacrifices explanatory detail that other dimensions needed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations, no output schema, and 0% parameter description coverage, the tool leaves important context unstated: optional parameters, device selection defaults, and operational requirements. It is callable with zero arguments, but an agent choosing between Android and iOS capture tools gets no explicit routing or follow-up context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not explain the meaning of the optional 'prefix' or 'serial' parameters. An agent is left to guess what 'prefix' affects and how 'serial' selects a device, so the description adds no semantic value beyond the raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: it captures a PNG screenshot from an Android device into artifacts. It clearly distinguishes itself from ios.capture_screenshot and other device/appium tools by naming the Android platform and the output destination.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus ios.capture_screenshot or other screenshot-related tools, nor any mention of prerequisites like an active ADB connection or booted emulator. The platform mention implies Android-only usage, but no alternatives or exclusion conditions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
device.clear_app_dataB
[approval required][device mutation][risk:dangerous] Clear app data for an Android package.
| Name | Required | Description | Default |
|---|---|---|---|
| serial | No | ||
| packageName | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral disclosure burden. It does disclose that this is a device mutation requiring approval and that it is dangerous, which is valuable. However, it does not explain that the operation is destructive and irreversible, what specific data is removed, or what happens to the app after clearing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded with risk and mutation tags before the action. It contains no wasted words. However, its brevity comes at the cost of important usage and consequence details, so it is concise but not fully informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a destructive device tool with no annotations and no output schema, so the description needs to explain the safety profile and invocation context thoroughly. The tags 'approval required', 'device mutation', and 'risk:dangerous' help, but the description does not state preconditions, irreversibility, or parameter semantics, leaving an agent under-informed for a high-risk action.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for the parameters. It only loosely maps to packageName by saying 'for an Android package' and gives no meaning for the optional serial parameter or expectations around package naming/format. This is minimal compensation for an otherwise undocumented schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb and resource: 'Clear app data for an Android package.' This distinguishes it from nearby siblings like device.uninstall_app and device.install_app, since clearing app data is a distinct reset operation rather than removing or installing the app.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to choose this tool over alternatives, when not to use it, or what preconditions must hold, such as the package being installed or the device being online. The risk tags indicate approval and mutation, but they do not explain usage context or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
device.grant_permissionsB
[approval required][device mutation][risk:dangerous] Grant one or more Android runtime permissions to a package.
| Name | Required | Description | Default |
|---|---|---|---|
| serial | No | ||
| packageName | Yes | ||
| permissions | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are entirely absent, so the description must carry the burden. The brackets '[approval required][device mutation][risk:dangerous]' add critical behavioral context: the operation mutates the device and is dangerous, requiring explicit approval. This is valuable beyond what the schema provides. However, it does not disclose what happens on failure (e.g., if permission already granted, invalid permission name, permission not requestable), nor whether the grant is permanent or session-limited, nor if re-granting is idempotent. This is a partial disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that front-loads the risk markers before the action. It is efficient with no filler. The only minor flaw is that the risk markers could be seen as redundant with the action itself, but they still add value. The description earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has no output schema, no annotations, and zero schema description coverage, so the description must fully specify behavior. It falls short: it does not explain what the success/failure response looks like (e.g., whether a JSON with granted permissions is returned), whether the operation is idempotent, on which Android versions this works, what permission format is expected (full string vs shorthand), or how 'serial' is used. For a dangerous device mutation with no annotations, this is a significant gap that could lead an agent to call it incorrectly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, meaning the description must compensate for undocumented parameters. The description states 'one or more Android runtime permissions' which clarifies that 'permissions' is an array of runtime permission strings (e.g., android.permission.CAMERA), and 'packageName' is the target package. However, it does not explain 'serial' at all – whether it optionally targets a specific device or is required for multi-device setups. As a result, description partially compensates but leaves a gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (grant), the resource (Android runtime permissions to a package), and the required target package. It is distinct from sibling device mutation tools like install/uninstall/clear_app_data, so purpose is clear. The description does not name alternatives but the verb+resource is specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description includes brackets indicating approval is required and that it is a device mutation with dangerous risk, which implicitly tells the agent to use caution and presumably ask for approval. However, it does not say when to use this tool versus alternatives or when NOT to use it (e.g., when a permission is already granted, or for non-runtime permissions). Context is implied but not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
device.install_appA
[approval required][device mutation][risk:dangerous] Install or replace an APK on an Android device.
| Name | Required | Description | Default |
|---|---|---|---|
| serial | No | ||
| apkPath | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden of behavioral disclosure. It openly marks the operation as 'device mutation' and 'risk:dangerous' and says it may 'replace' an APK, implying overwriting behavior. This is valuable safety-relevant information beyond the schema. It does not detail data-loss nuances or interaction with an existing installation, but it covers the essential risk profile.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one compact sentence with useful risk tags front-loaded, and every phrase contributes meaning. It is not bloated. It loses a point only because the brevity contributes to missing parameter and usage details, though those are penalized elsewhere; structurally it is efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations and no output schema, the tool description should provide enough context to call the tool correctly. It does not explain the meaning or optionality of serial, the expected format or location of apkPath, prerequisites, or what happens upon successful installation. For a mutation tool labeled 'dangerous', this is insufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must define the parameters, but it only mentions 'APK' generically and never explains 'apkPath' or 'serial'. It is unclear whether apkPath is host-local or on-device, whether serial is optional or required, or how the tool selects a device when serial is omitted. The description adds almost no semantic value beyond the parameter names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb-resource pair: 'Install or replace an APK on an Android device.' It explicitly targets Android, which separates it from sibling ios.install_app, and 'replace' distinguishes it from device.uninstall_app and other device-related tools. This is specific enough for an agent to understand exactly what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is only implied: the mention of 'Android device' and the sibling ios.install_app suggest when this tool should be used versus the iOS equivalent. However, the description does not state exclusions, prerequisites (e.g., APK path source, device connectivity, whether serial is required), or when to prefer a sibling like device.uninstall_app first. It is minimally adequate but lacks explicit guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
device.list_devicesA
List Android devices via adb devices -l.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the full burden of disclosing behavior. 'List' and the `adb devices -l` reference make it clear this is a read-only enumeration, but the description does not mention output format, failure states, or that it only shows currently connected devices.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single direct sentence that says exactly what the tool does and how. There is no redundant wording or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter listing tool, the description is nearly complete. It identifies the target platform and the exact command, though it stops short of describing the expected output shape or edge cases like unauthorized or offline devices.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there is nothing for the description to clarify. The schema already fully documents the empty parameter set, and the description does not need to compensate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('List') and the resource ('Android devices'), and names the underlying command (`adb devices -l`). This makes it immediately distinguishable from sibling tools like ios.list_simulators or device.start_emulator.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for enumerating connected Android devices, but it does not explicitly state when to prefer it over alternatives or mention any prerequisites. The use case is fairly obvious from the name, but there is no explicit when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
device.pull_logsB
Pull Android logcat into artifacts. Optionally filter by package pid when available.
| Name | Required | Description | Default |
|---|---|---|---|
| serial | No | ||
| clearAfter | No | ||
| outputPath | No | ||
| packageName | No |
TDQS
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 does not mention side effects (e.g., whether clearAfter clears the log buffer), prerequisites such as a connected device or adb access, or what 'into artifacts' means for the caller. The vague 'when available' clause adds little concrete behavioral information.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short, front-loaded with the main action, and has no filler. The second sentence is somewhat awkward ('package pid', 'when available') and could be clearer, but it does not bloat the definition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with four undocumented optional parameters, no annotations, and no output schema, two sentences are insufficient. The agent is left to guess which optional parameters matter, whether a serial is needed, what the artifact output looks like, and what constraints apply to logcat collection.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description only vaguely touches one parameter via 'filter by package pid when available'. serial, clearAfter, and outputPath are left entirely unexplained, so an agent cannot determine their meaning, defaults, or how they interact.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Pull'), a specific resource ('Android logcat'), and a concrete outcome ('into artifacts'), which separates it from iOS- or build-log tools such as ios.collect_logs or build.collect_build_logs. The optional filter sentence adds scope without obscuring the primary action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'Android logcat' implies the tool is for Android device logs, which gives some selection context relative to iOS/build log siblings. However, there is no explicit when-to-use guidance, no mention of alternatives, and no exclusions or prerequisites, so the agent must infer usage from the tool name and domain.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
device.start_emulatorA
[approval required][device mutation][risk:dangerous] Start an Android emulator by AVD name. Returns after launching or optional boot wait.
| Name | Required | Description | Default |
|---|---|---|---|
| avdName | Yes | ||
| timeoutMs | No | ||
| waitForBoot | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite no annotations being provided, the description front-loads important behavioral flags: 'approval required,' 'device mutation,' and 'risk:dangerous.' It also discloses completion behavior ('Returns after launching or optional boot wait'), which is meaningful for a mutation tool. However, it does not describe failure modes, side effects, or state changes beyond starting an emulator.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and efficient. The risk flags appear first, followed by a clear one-sentence specification of the action and return behavior. No filler words are present.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no annotations, no output schema, and three parameters, the description is thin. It fails to explain timeoutMs, mention how to obtain valid AVD names, describe what happens if the emulator is already running, or provide any error/failure semantics. The description does not fully equip an agent to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explains avdName ('by AVD name') and partially covers waitForBoot ('optional boot wait'), but timeoutMs is never described. The meaning, units, and behavior of timeoutMs are left entirely unspecified, leaving a significant gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Start an Android emulator by AVD name.' This clearly identifies the tool's function and distinguishes it from siblings like device.stop_emulator and ios.boot_simulator. The scope is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage through its name and wording, but there is no explicit guidance on when to use it versus alternatives, no preconditions such as listing available AVDs first, and no exclusion such as 'for iOS, use ios.boot_simulator.' Usage context is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
device.stop_emulatorA
[approval required][device mutation][risk:dangerous] Stop an Android emulator through adb emu kill.
| Name | Required | Description | Default |
|---|---|---|---|
| serial | No |
TDQS
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 includes tags 'approval required', 'device mutation', and 'risk:dangerous' which disclose that this is a destructive, risky operation requiring approval. This provides useful behavioral context, though it does not elaborate on side effects or reversibility. Given the absence of annotations, this is a reasonable disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: a single sentence with front-loaded warnings followed by the core action. Every part is informative, and there is no wasted text. It efficiently communicates the tool's purpose and risk.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity, the description is still incomplete: it fails to explain the 'serial' parameter, and does not describe any preconditions, output, or post-conditions. The warnings cover safety, but the parameter gap and lack of usage context leave the agent without enough information to invoke the tool reliably.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has one parameter 'serial' with no description, and schema description coverage is 0%. The tool description does not mention 'serial' at all, leaving its meaning, format, and how to obtain it entirely unexplained. The agent has no guidance on what to provide for this parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Stop'), a clear resource ('Android emulator'), and the method ('adb emu kill'). This clearly distinguishes it from siblings like device.start_emulator or device.list_devices, so an agent can identify its purpose without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not explicitly state when to use this tool versus alternatives, nor does it mention any prerequisites or exclusions. However, the purpose is self-evident from the action, and the presence of sibling tools like device.start_emulator makes the usage context clear by contrast, but no explicit guidance is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
device.uninstall_appB
[approval required][device mutation][risk:dangerous] Uninstall an Android package from a device.
| Name | Required | Description | Default |
|---|---|---|---|
| serial | No | ||
| packageName | Yes |
TDQS
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 includes tags for 'approval required', 'device mutation', and 'risk:dangerous', which disclose that this is a destructive, permission-sensitive operation. However, it does not explain what happens to app data, whether it affects other users, or any recovery options. The disclosure is minimal but present.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise line with safety tags front-loaded. Every word adds value and there is no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity of the operation, the description is adequate but not complete. It lacks details on the return value (e.g., success/failure), any prerequisites (like device being online), and the effect of the optional serial parameter. With no output schema and no parameter explanations, an agent may still need to infer details. The risk tag covers some context but not all.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not mention either parameter (serial or packageName). The description adds no meaning beyond what the schema already shows, and it fails to compensate for the low coverage. The parameter names are self-explanatory, but the description should at least note that packageName is required or how serial affects the target device.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (uninstall) and the resource (an Android package from a device), which distinguishes it from siblings like install_app or clear_app_data. The verb and object are specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no explicit when-to-use or when-not-to-use guidance. While the purpose makes it obvious this is for removing an app, it does not mention alternatives (e.g., clear_app_data for resetting) or conditions like device requirements. The context is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
env.compatibility_matrixB
Return supported host/platform requirements for this MCP package.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the burden of behavioral disclosure. 'Return' implies a read-only operationcase, but the description does not explicitly state that it is side-effect-free, whether it requires network access, or whether it queries local metadata.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, precisely worded sentence conveys the entire purpose with no filler. The key noun phrase 'supported host/platform requirements' is front-loaded and unambiguous enough for agent selection.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, low-complexity query, the description is minimally adequate. However, it provides no hint of the return format, whether the result is a list or a structured object, or how this might feed into preflight checks, so an agent must call the tool to learn more.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and schema description coverage is 100%, so the schema is complete. The description adds relevant meaning about what the returned information represents, keeping this at the baseline 4 for parameterless tools.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Return') and the resource ('supported host/platform requirements for this MCP package'). It is distinguishable from sibling environment tools like env.preflight and env.ensure_appium, though it does not explicitly name them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives such as env.preflight or build.detect_project. The description only says what it returns, not under what circumstances an agent should call it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
env.ensure_appiumA
[approval required][workspace write][network][risk:network] Check Appium readiness, optionally install a driver and start a detached Appium server.
| Name | Required | Description | Default |
|---|---|---|---|
| port | No | ||
| useNpx | No | ||
| address | No | ||
| serverUrl | No | ||
| timeoutMs | No | ||
| appiumHome | No | ||
| driverName | No | ||
| startServer | No | ||
| appiumCommand | No | ||
| installDriver | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations supplied, the description carries the behavioral burden. It discloses that the tool can write to the workspace, use the network, require approval, and that a server it starts is detached. It does not detail idempotency or handling of an already-running server, but the included risk tags and 'detached' are substantive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. The risk tags lead and the core action plus optional behaviors follow immediately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 10 optional parameters, no output schema, and no annotations; the description gives only an overview. An agent still lacks guidance about expected return value/readiness signal, meaningful defaults beyond detached server start, and which parameter combinations are common or required for a successful setup.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the description names none of the 10 parameters. It only alludes to driver installation and server startup at a high level, leaving port, address, appiumHome, timeoutMs, useNpx, and others unexplained. Description does not compensate for the schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific action ('Check Appium readiness') with explicit optional behaviors ('install a driver', 'start a detached Appium server'). This clearly distinguishes it from sibling tools like appium.create_session or env.preflight, which cover different lifecycle stages.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The wording implies this is a setup/preflight tool to run before Appium sessions, and the optional install/start flags hint at the intended use. However, there is no explicit guidance on when to choose this over env.preflight or appium.create_session, and no alternatives are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
env.preflightB
Check host/project readiness for Android, iOS, Flutter, React Native, CI, or all environments.
| Name | Required | Description | Default |
|---|---|---|---|
| target | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the full behavioral burden. It only says 'check', implying a read-only operation, but does not disclose whether it modifies anything, what it returns, or any side effects. It also omits operational details like network access or installed tooling requirements. This is a significant gap for a tool that likely performs environment inspection.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that is front-loaded with the primary verb and object. It wastes no words and is easily parsed. However, it is so brief that it omits crucial detail, which is a structure vs. completeness trade-off, but for conciseness alone it earns a 4.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one optional parameter, no output schema, no annotations), the description still lacks essential information: what 'readiness' actually checks (e.g., SDK versions, environment variables), the format of the result, and the acceptable values for 'target'. An agent would struggle to use this tool correctly without additional context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has one optional parameter 'target' with zero description (0% coverage). The description hints that 'target' selects an environment (Android, iOS, etc.) but does not specify valid values, the default behavior when omitted, or whether it accepts comma-separated lists. The agent cannot reliably construct the correct input without guessing.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: checking host/project readiness across specific environments (Android, iOS, Flutter, React Native, CI) or all. This is a specific verb-resource pair and distinguishes it from siblings like env.ensure_appium (which ensures Appium) and env.compatibility_matrix (which builds a matrix).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is used to assess readiness before proceeding, but it does not explicitly state when to use it instead of alternatives, nor does it mention any exclusions or prerequisites. The environment list gives context, but there is no direct guidance on selection criteria compared to related tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
flow.analyze_from_codeC
Infer mobile screens, routes, transitions, and visible text candidates from source code.
| Name | Required | Description | Default |
|---|---|---|---|
| maxFiles | No | ||
| includeTests | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It implies a read-only analysis operation ('infer...from source code') but does not state whether it modifies files, what inputs it requires beyond the optional parameters, what side effects it might have (e.g., heavy computation), or how results are returned. This is a minimal hint of behavior, not enough for safe invocation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that states the core purpose without unnecessary words. It earns its place by conveying the operation and expected outputs efficiently. However, it is so brief that it omits essential contextual and parameter information, slightly reducing structural quality.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (2 optional parameters, no output schema, no annotations), the description is insufficiently complete. It does not explain what the tool returns, how the source code is identified, what the parameters do, or any conditions for successful execution. An agent would be guessing about critical invocation details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not mention maxFiles or includeTests at all. The agent cannot determine the meaning, effect, or appropriate values of these parameters from the description. Since the schema only provides names and types, the description must compensate but fails to do so.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('infer') with a concrete resource ('mobile screens, routes, transitions, and visible text candidates') and a clear source ('source code'). This clearly distinguishes it from sibling tools like code.search_code or code.read_file, which do not infer UI structure, and from flow.generate_test_scenarios, which generates scenarios rather than analyzing code.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives. The description does not mention prerequisites, such as needing a mobile project context, nor does it contrast with similar analysis tools. An agent has to infer the intended use case solely from the tool name and one-line description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
flow.clear_memoryB
[approval required][workspace write][risk:dangerous] Clear flow memory under artifactsDir. This does not modify app source code.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | Yes |
TDQS
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 includes useful inline tags: [approval required], [workspace write], and [risk:dangerous]. It also explicitly discloses that source code is untouched. It stops short of describing irreversibility or what specifically is deleted from flow memory, but the core side effects are surfaced.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences plus compact risk tags. It front-loads the action and safety classification and every sentence adds information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a dangerous, approval-required destructive tool with no output schema, the description is incomplete. It omits when this tool should be used, what clearing memory entails for active flows/checkpoints, and how the confirm parameter should be satisfied. The risk tag and artifactsDir scope are useful but do not make the definition callable without further inference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description never explains the required confirm parameter. An agent cannot tell from the description what value confirm should hold, how it relates to the approval requirement, or any required confirmation string. The tool description adds no parameter-level meaning beyond the bare name 'confirm'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Clear flow memory under artifactsDir.' It clearly states what is affected and adds an important scoping statement that app source code is not modified. However, it does not explicitly differentiate from flow.read_memory or related flow lifecycle tools beyond the verb itself.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to call clear_memory versus alternatives like flow.read_memory or flow.record_checkpoint. The 'does not modify app source code' note is a safety clarification, not a usage condition, so an agent is left to infer when this destructive reset is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
flow.generate_test_scenariosC
Generate candidate mobile E2E scenarios from static source-flow analysis for an AI agent to execute/refine.
| Name | Required | Description | Default |
|---|---|---|---|
| goal | No | ||
| maxFiles | No | ||
| includeTests | No | ||
| maxScenarios | No | ||
| includeNegativeCases | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It says 'generate' and 'from static source-flow analysis,' which hints at a read-only analysis, but it does not state whether the tool has side effects, requires prior code analysis, returns a formatted list, or interacts with external systems. This is a significant gap for a tool that produces candidate scenarios.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, tight sentence with no redundant words. The core action is front-loaded ('Generate candidate mobile E2E scenarios') and the rest adds necessary context about the source and consumer. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has five optional parameters, no output schema, and no annotations, yet the description provides no information about parameter semantics, return format, prerequisites, or how the generated scenarios are delivered. For a tool an agent must invoke correctly, this is severely under-specified and leaves critical operational details to guesswork.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% — none of the five parameters (goal, maxFiles, includeTests, maxScenarios, includeNegativeCases) have descriptions in the schema. The tool description does not mention any of these parameters or their meaning, so an agent cannot determine what values to pass. With zero coverage, the description must compensate, but it does not.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Generate'), a specific resource ('candidate mobile E2E scenarios'), and a distinctive source ('static source-flow analysis'). It clearly differentiates from siblings like flow.analyze_from_code and security.generate_test_plan by naming exactly what is produced and for whom. The phrase 'for an AI agent to execute/refine' further clarifies the output's role.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance is given on when to use this tool versus alternatives. It does not reference any sibling tool or exclusion criteria (e.g., 'use this when you have completed flow analysis' or 'for security-focused plans, use security.generate_test_plan'). The phrase 'from static source-flow analysis' implies a precondition but provides no decision rule for choosing this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
flow.plan_replayC
Match the current screen against recorded checkpoints and return Appium actions needed to reach a target checkpoint.
| Name | Required | Description | Default |
|---|---|---|---|
| source | No | ||
| testName | No | ||
| serverUrl | No | ||
| sessionId | No | ||
| sourcePath | No | ||
| minimumScore | No | ||
| targetCheckpointId | No |
TDQS
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 implies a read-only planning behavior by saying it 'returns' actions but does not disclose whether any state is mutated, whether prior recorded checkpoints must exist, what happens on no match, or how matching works. Key behavioral gaps remain for a tool with no annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence, front-loaded with the main action and expected output. There is no filler or redundancy, and it is easy for an agent to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the high complexity (7 parameters, 0% schema coverage, no output schema, no annotations), the description is too sparse. An agent cannot determine what inputs are required, what the returned Appium actions look like, or how this tool relates to flow.replay_to_checkpoint. It serves as a high-level summary but not a usable invocation guide.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not explain any of the 7 parameters. 'target checkpoint' loosely maps to targetCheckpointId, but source, sourcePath, serverUrl, sessionId, testName, and minimumScore remain entirely undocumented. The description does not compensate for the absent schema documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action: compare the current screen to recorded checkpoints and return Appium actions needed for a target checkpoint. It is specific about the verb and resource, but it does not explicitly differentiate from the sibling flow.replay_to_checkpoint, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus alternatives like flow.replay_to_checkpoint or flow.record_checkpoint. There are no exclusions, preconditions, or selection criteria. The intended usage is only implied by the wording, not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
flow.read_memoryB
Read recorded flow checkpoints, runs, and code-flow analyses.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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 communicates a read operation, but it does not disclose what the tool returns, whether it reads all recorded memory or only the latest state, whether it has side effects, or any ordering/filtering behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with no filler. The core action and resource are front-loaded, and every word contributes to the tool's meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read tool, the description is minimally viable, but it lacks return-format details and any guidance on how to interpret or consume the read results. The low complexity keeps this from being lower, but the missing behavioral context prevents a higher score.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema is empty and parameter coverage is effectively 100%, so there are no parameter semantics for the description to clarify. The zero-parameter design makes this dimension straightforward.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Read') and identifies a clear resource ('recorded flow checkpoints, runs, and code-flow analyses'). This distinguishes it from the flow.record_* and flow.replay_* siblings, though it does not explicitly name an alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 versus alternatives such as flow.plan_replay, flow.replay_to_checkpoint, or loop.read_iterations. It implies a retrieval use case but does not state exclusions or prefer conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
flow.record_checkpointC
[workspace write][risk:write] Record a runtime screen checkpoint from Appium source/session and optional action needed to reach the next checkpoint.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| order | No | ||
| prefix | No | ||
| source | No | ||
| testName | Yes | ||
| serverUrl | No | ||
| sessionId | No | ||
| sourcePath | No | ||
| actionToNext | No | ||
| checkpointId | No | ||
| screenshotPath | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The inline '[workspace write][risk:write]' prefix is useful and the description indicates it records from an Appium source/session. However, with no formal annotations, the description does not disclose what files or state are persisted, whether an active Appium session is required, or how the optional actionToNext is stored and later used.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one front-loaded sentence and wastes no words. The 'source/session' phrasing is slightly ambiguous but the length and structure are appropriate for the high-level idea.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A tool with 11 parameters, no parameter descriptions, no annotations, and no output schema needs a much richer description. This one provides only the high-level action and leaves the agent unable to determine how to construct a valid invocation beyond guessing the required names.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and all 11 parameters are undocumented. The description vaguely maps to source/sessionId and actionToNext but does not explain required params testName/name or the meaning of order, prefix, serverUrl, sourcePath, checkpointId, and screenshotPath.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Record') and resource ('runtime screen checkpoint from Appium source/session') and adds the optional action-to-next concept. It is clearly a checkpoint-recording tool rather than a replay or verification tool, though it does not explicitly name the sibling it complements.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use or when-not-to-use guidance is given. There is no mention of flow.replay_to_checkpoint, flow.record_test_run, or verify.assert_* as alternatives, so the agent must infer placement in a workflow from the tool name and context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
flow.record_test_runA
[workspace write][risk:write] Record the ordered checkpoint ids for a test run. The latest passed run becomes the default replay path.
| Name | Required | Description | Default |
|---|---|---|---|
| runId | No | ||
| status | Yes | ||
| testName | Yes | ||
| artifacts | No | ||
| startedAt | No | ||
| finishedAt | No | ||
| checkpointIds | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no structured annotations, so the description carries the transparency burden. It explicitly declares '[workspace write][risk:write]', which tells the agent this is a mutating operation with risk, and it discloses the key side effect: the latest passed run becomes the default replay path. It stops short of describing overwrite/append behavior or idempotence, but the most important behavioral traits are present.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single compact sentence with risk tags front-loaded and no filler. Every part contributes either to identifying the operation or to explaining its consequence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a write tool with no annotations, no output schema, and seven undocumented parameters, the description gives a good high-level picture but is not fully complete. An agent would benefit from more detail about required status values, optional fields like runId, and how this compares with the related flow.record_checkpoint/replay tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description must compensate. It adds meaning by clarifying that checkpointIds are ordered and that a 'passed' status makes the run become the default replay path. However, it leaves runId, artifacts, startedAt, finishedAt, and the exact status vocabulary to be inferred from parameter names alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Record') and a precise resource ('ordered checkpoint ids for a test run'), and it explains the downstream purpose ('The latest passed run becomes the default replay path'). This makes it distinguishable from sibling tools like flow.record_checkpoint, which is about a single checkpoint rather than a whole test run.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies it is used when persisting a test run's checkpoint sequence, especially to influence later replay. However, it does not explicitly state when to prefer this over flow.record_checkpoint, flow.plan_replay, or flow.replay_to_checkpoint, nor does it mention any alternative conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
flow.replay_to_checkpointB
[approval required][device mutation][risk:dangerous] Auto-advance an Appium session from a previously seen screen to the latest or requested checkpoint.
| Name | Required | Description | Default |
|---|---|---|---|
| dryRun | No | ||
| delayMs | No | ||
| testName | No | ||
| serverUrl | No | ||
| sessionId | Yes | ||
| minimumScore | No | ||
| targetCheckpointId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no structured annotations, the description carries the behavioral disclosure burden. It does include [approval required], [device mutation], and [risk:dangerous] tags, which flag danger and side effects. Still, it does not detail what auto-advancing actually does to the device, whether it can be reversed, or what side effects might occur beyond the broad mutation warning.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single efficient sentence with the risk and mutation warnings front-loaded. It contains no filler, but it is so brief that it sacrifices substantial parameter and behavior detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a dangerous mutation tool with seven parameters and no output schema, yet the description provides almost no operational context. It does not explain what the tool returns, how dryRun alters behavior, what delayMs/minimumScore control, or what failure modes exist. The description is too thin for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for the seven undocumented parameters. It only maps 'requested checkpoint' to a likely parameter (targetCheckpointId) and implicitly maps 'session' to sessionId. No meaning is added for dryRun, delayMs, testName, serverUrl, minimumScore, or targetCheckpointId beyond raw names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Auto-advance'), a specific resource ('an Appium session'), and a precise trigger condition ('from a previously seen screen to the latest or requested checkpoint'). This clearly distinguishes it from siblings like flow.record_checkpoint and flow.plan_replay.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'from a previously seen screen' implies the tool should be used after a checkpoint has been recorded, and 'latest or requested checkpoint' suggests replay scenarios. However, it never explicitly states when to use this tool versus alternatives like flow.plan_replay or manual Appium navigation steps, and offers no exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
flow.run_scriptB
[approval required][device mutation][risk:dangerous] Run a high-level JSON flow DSL over an Appium session: waitText, tapText, type, assertText, observe, collectEvidence, back, swipe, checkpoint.
| Name | Required | Description | Default |
|---|---|---|---|
| steps | Yes | ||
| prefix | No | ||
| delayMs | No | ||
| testName | No | ||
| serverUrl | No | ||
| sessionId | Yes | ||
| stopOnFailure | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description includes important behavioral flags in brackets: '[approval required][device mutation][risk:dangerous]'. These go beyond the absent annotations and warn the agent about side effects and risk. However, it doesn't disclose what 'approval required' means in practice, what exactly gets mutated on the device, or whether steps run sequentially with rollback. The risk flag is useful but the description could add more context about failure behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single dense sentence that front-loads the risk flags and lists the DSL verbs. It is compact and informative, though the long list of DSL operations makes it slightly run-on. No wasted words, but the structure could be improved by separating the risk flags from the functional description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex tool with 7 parameters, 0% schema coverage, no output schema, and no annotations, the description is insufficient. It explains the DSL concept and lists operations, but an agent cannot correctly construct a call without knowing the format of 'steps', the meaning of 'prefix', 'delayMs', 'testName', 'serverUrl', and 'stopOnFailure', or what the tool returns. The risk flags help, but the operational details are missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for 7 parameters. It only explains the 'steps' parameter implicitly by listing DSL operations, and mentions nothing about sessionId, prefix, delayMs, testName, serverUrl, or stopOnFailure. The description adds some meaning for 'steps' but leaves the other 6 parameters entirely unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('Run') and resource ('a high-level JSON flow DSL over an Appium session') and lists the DSL operations (waitText, tapText, type, assertText, etc.). It distinguishes itself from lower-level Appium tools by being a high-level flow runner, though it doesn't explicitly name a sibling alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for orchestrating multi-step Appium interactions via a JSON DSL, and the sibling list shows many granular appium.* tools, suggesting this is the higher-level alternative. However, it doesn't explicitly state when to use this vs. composing individual appium.tap_by_text, appium.type_text, etc., nor does it mention prerequisites like an active session.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ios.boot_simulatorA
[approval required][device mutation][risk:dangerous] Boot an iOS simulator and optionally wait until boot completes.
| Name | Required | Description | Default |
|---|---|---|---|
| device | Yes | ||
| timeoutMs | No | ||
| waitForBoot | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description bears the full burden and does well by explicitly flagging approval requirement, device mutation, and dangerous risk. It also discloses the optional wait-for-boot behavior)Skip. It does not mention behavior if the simulator is already booted, but the key side-effect profile is clear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The definition is a single front-loaded sentence with no filler. The tag prefix communicates risk at a glance, and the remaining text concisely states the action and optional behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with three parameters, no annotations, and no output schema, this description is too thin for reliable invocation. It does not explain what the device parameter should contain, how timeoutMs affects behavior, or whether a pre-existing simulator is required. The core action is clear, but the agent is left guessing important invocation details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides no descriptions, so the description must explain the parameters. It only covers waitForBoot via 'optionally wait until boot completes'; device and timeoutMs remain unexplained beyond their names and types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Boot an iOS simulator', which clearly separates it from iOS shutdown and Android-oriented device tools. The optional wait-for-boot behavior is also stated. This is not a tautology and carries concrete meaning.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The use case is implied: call this when a booted iOS simulator is needed, likely before installation or launch steps. However, there is no explicit when-to-use/when-not-to-use guidance, no mention of checking available simulators first, and no direct comparison to sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ios.build_appC
[device mutation][risk:device] Build an iOS simulator app with xcodebuild into MCP artifacts.
| Name | Required | Description | Default |
|---|---|---|---|
| sdk | No | ||
| scheme | Yes | ||
| project | No | ||
| workspace | No | ||
| destination | No | ||
| buildSettings | No | ||
| configuration | No | ||
| xcodebuildArgs | No | ||
| derivedDataPath | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It includes a '[device mutation][risk:device]' tag that flags risk potential, which is useful, but it does not explain what mutation might occur, whether it requires a booted simulator, or if it overwrites previous artifacts. The tag is a partial disclosure, not a complete one.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with the risk tag front-loaded. It is concise and free of fluff, but the extreme brevity leaves out critical information that could be added without losing conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex tool with 9 parameters, no output schema, and no annotations, this one-line description is severely incomplete. It does not explain what the MCP artifact contains, how the build result is returned, or what the device mutation risk concretely entails. An agent would have to guess most details about invocation and side effects.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 9 parameters, including a nested buildSettings object. The description merely mentions xcodebuild, giving no semantic context for scheme, project, workspace, destination, configuration, or xcodebuildArgs. It fails entirely to compensate for the missing schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb (Build), a specific resource (iOS simulator app), and the method (xcodebuild), which distinguishes it from Android build tools and iOS install/launch tools. It does not explicitly name a sibling to differentiate from, but the platform and simulator scope are evident.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when an iOS simulator build is needed, but provides no explicit guidance on when to use it vs alternatives like ios.install_app or build.build_debug_apk, and no prerequisites are mentioned. This is implied usage rather than clear direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ios.capture_screenshotB
Capture an iOS simulator screenshot into artifacts.
| Name | Required | Description | Default |
|---|---|---|---|
| device | No | ||
| prefix | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of disclosing behavior. It states the core action and output destination, but it does not mention return value, failure conditions, side effects, or how the artifact is stored/named. This is minimally adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one efficient sentence with no filler. It front-loads the action and destination, which is ideal for conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple capture tool the core operation is clear, but the definition lacks parameter explanations, prerequisites, and return/artifact details. Since there are no annotations and no output schema, the description is not complete enough for an agent to invoke it correctly with the optional parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description adds no meaning to either 'device' or 'prefix'. The agent cannot infer from the description what values these parameters expect, what a prefix affects, or whether 'device' refers to a simulator UDID, name, or something else.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Capture'), a clear resource ('an iOS simulator screenshot'), and a final destination ('into artifacts'). It also differentiates from the sibling device.capture_screenshot by explicitly targeting the iOS simulator, so an agent can tell them apart.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance is provided. The description does not mention prerequisites such as a booted simulator, nor does it distinguish when to use this tool over appium.observe_screen, verify.collect_evidence, or device.capture_screenshot. Usage context is only implied by the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ios.collect_logsC
Collect recent simulator logs into artifacts.
| Name | Required | Description | Default |
|---|---|---|---|
| last | No | ||
| device | No | ||
| prefix | No | ||
| predicate | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It only states that logs are collected into artifacts, without saying whether the operation is read-only, whether a simulator must be booted, whether existing artifacts are overwritten, or what 'recent' means.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single compact sentence that starts with the action, so it is not verbose. However, it is under-specified rather than deliberately structured; it lacks any separate guidance, parameter hints, or prerequisites.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With four undocumented optional parameters, no annotations, and no output schema, the description leaves critical invocation details unknown. An agent cannot reliably determine how to select a device, filter logs, set a time range, or understand what artifacts will be produced.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All four parameters (last, device, prefix, predicate) have no schema descriptions and 0% schema coverage. The description does not explain or even mention any of these parameters, leaving the agent without the information needed to set filters, targets, or limits.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('collect') and resource ('recent simulator logs'), so an agent can tell this is an iOS simulator log-collection tool. It does not explicitly differentiate from siblings like device.pull_logs or build.collect_build_logs, but the 'simulator' scope is reasonably clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives such as device.pull_logs, verify.collect_evidence, or build.collect_build_logs. No preconditions, exclusions, or selection criteria are stated, so an agent must guess when this is the right tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ios.install_appB
[approval required][device mutation][risk:dangerous] Install an .app bundle on an iOS simulator.
| Name | Required | Description | Default |
|---|---|---|---|
| device | No | ||
| appPath | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description embeds tags [approval required][device mutation][risk:dangerous] that disclose the mutative and risky nature of the operation, and the need for approval. Since no annotations are provided, this disclosure is essential and earns credit. However, it does not elaborate on side effects like overwriting an existing app, or whether the operation requires a specific simulator state. The disclosure is useful but not comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence with risk tags front-loaded. It wastes no words and gets to the point immediately. However, it is so brief that it leaves out crucial usage and parameter details, but that is more a completeness issue than a structure issue.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool that mutates a device and requires approval, the description lacks critical context: it does not mention the need for the simulator to be booted, any installation prerequisites, or what happens on failure. It also does not explain the 'device' parameter or offer alternative tools. Given the tool's simplicity, a bit more guidance would make it complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must clarify the parameters. The phrase 'an .app bundle' implicitly explains appPath, but the description does not mention the 'device' parameter at all. The agent is left to guess that 'device' refers to a simulator identifier. This partial clarification is insufficient for a two-parameter tool with no schema documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action: install an .app bundle on an iOS simulator. This distinguishes it from the generic device.install_app sibling by specifying the platform and simulator context. The verb 'install' and resource 'iOS simulator' are specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 ios.launch_app or device.install_app. It does not mention prerequisites such as the simulator needing to be booted, nor does it state whether this tool should be preferred over other installation methods. The agent is left to infer usage context from the sibling list alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ios.launch_appA
[approval required][device mutation][risk:dangerous] Launch an installed iOS simulator app by bundle id.
| Name | Required | Description | Default |
|---|---|---|---|
| device | No | ||
| bundleId | Yes | ||
| terminateRunning | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden. It discloses approval requirements, device mutation, and danger via tags, which are important behavioral traits. It does not detail failure modes or side effects beyond those tags, but the explicit risk markers are valuable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with front-loaded tags, which is efficient and direct. Every word contributes to the core purpose, though it is minimal and could include more detail without becoming verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with three parameters, no output schema, and no annotations, the description is insufficient. It does not explain device selection, terminateRunning behavior, or what happens on launch (e.g., success/failure semantics). An agent would need to infer these from the schema alone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must explain parameters. It only clarifies that bundleId is used for launching ('by bundle id') but provides no guidance on the device parameter or terminateRunning. This leaves two of three parameters unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb (Launch), the resource (installed iOS simulator app), and the method (by bundle id). It distinguishes from sibling tools like ios.install_app (installing) and ios.boot_simulator (booting) by focusing on launching an already-installed app.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'installed' implies a prerequisite—that the app must be installed first, hinting at using ios.install_app before this. It does not explicitly name alternatives or exclusions, but the context is clear for a launch operation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ios.list_simulatorsA
List available iOS simulators via xcrun simctl.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. The word 'List' and the mention of 'xcrun simctl' imply a non-destructive read-only operation and give implementation context. However, it does not disclose potential environment requirements (e.g., Xcode/macOS), output format, or whether only booted simulators are included. The behavior is mostly obvious, but not fully detailed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that front-loads the operation ('List available iOS simulators') and adds a useful implementation detail ('via xcrun simctl'). Every word adds value, and there is no unnecessary expansion.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter listing tool, the description is largely sufficient: the agent knows what the tool does and how it does it. It does not specify the exact return structure, but this is not necessary for a list operation and there is no output schema to contradict or clarify. Minor missing detail about environment prerequisites keeps it from a 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool accepts zero parameters and the schema is an empty object with 100% coverage. Per the 0-parameter baseline, this score is appropriate; the description does not need to explain parameter semantics because there are none.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('List') and the resource ('available iOS simulators'), and adds the implementation detail 'via xcrun simctl'. This distinguishes it from siblings like device.list_devices, ios.boot_simulator, and ios.shutdown_simulator by indicating a non-mutating enumeration of iOS simulator instances.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage: choose this tool when you need to enumerate available iOS simulators. However, it does not explicitly state when to prefer it over related tools like device.list_devices, nor does it mention any exclusions. The context is clear from the resource naming, but direct alternative guidance is absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ios.shutdown_simulatorB
[approval required][device mutation][risk:dangerous] Shutdown an iOS simulator.
| Name | Required | Description | Default |
|---|---|---|---|
| device | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Although no annotations are provided, the description includes inline tags '[approval required][device mutation][risk:dangerous]' which disclose that this is a mutation, dangerous, and requires approval. This covers the key behavioral aspects beyond the simple 'shutdown' action, making it more transparent than many tools without annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: '[approval required][device mutation][risk:dangerous] Shutdown an iOS simulator.' The critical risk tags are front-loaded, followed by a clear action. Every word contributes, with no filler or redundant phrasing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple, but the description lacks essential context for correct invocation. It does not explain how to specify the device parameter, what happens to running apps or unsaved state, or how to discover valid device identifiers (e.g., via ios.list_simulators). Given the single parameter and no output schema, the description is incomplete for an agent to call it reliably.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has one required parameter 'device' with no description, and schema description coverage is 0%. The description does not explain what 'device' should be (e.g., UDID, name, or identifier), nor does it reference any source for obtaining it. The description adds zero semantic value for parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Shutdown an iOS simulator.' It clearly distinguishes from sibling tools like ios.boot_simulator and device.stop_emulator by explicitly targeting iOS simulators, 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives, no mention of prerequisites (e.g., obtaining a device identifier via ios.list_simulators), and no exclusions or preferred contexts. The description provides no usage direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
loop.generate_reportC
[workspace write][risk:write] Generate a Markdown report from recorded iterations.
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | ||
| summary | No | ||
| finalStatus | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are not provided, so the description must disclose behavior. The prefix '[workspace write][risk:write]' hints at side effects, but the description doesn't explain whether the report is written to disk, what the risk entails, or if it requires specific permissions. It also doesn't clarify if it modifies the loop state.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and to the point, but it lacks necessary detail. The purpose is stated upfront, but the absence of parameter and usage information makes it under-specified rather than concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 3 parameters with zero schema coverage and no output schema, the description is inadequate. It does not explain how to construct a report, what the parameters mean, or what the output looks like, making it difficult for an agent to call correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not mention any parameters. All three parameters (title, summary, finalStatus) are undocumented in both schema and description, leaving the agent without any guidance on their syntax or purpose.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Generate') and resource ('Markdown report from recorded iterations'). However, it lacks detail on what the report contains and how it relates to sibling tools like 'flow.record_test_run' or 'ci.write_github_step_summary', making differentiation unclear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 versus alternatives. While it mentions 'recorded iterations', it doesn't specify prerequisites (e.g., must call loop.record_iteration first) or any alternatives for reporting.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
loop.read_iterationsB
Read recorded loop iterations.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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, but it only contains the verb 'Read.' It does not explain whether the operation is side-effect-free, what exactly an 'iteration' is, what format the recorded data takes, or what the tool returns.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence with no wasted words and immediately communicates the core action. It is appropriately sized, although its brevity comes at the cost of informative context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
While invocation is trivial with no parameters, the absence of an output schema and annotations means an agent must infer what 'recorded loop iterations' contains and how it relates to loop.record_iteration. The description is too thin to be fully contextual in the presence of related loop and flow tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the input schema already documents this completely with an empty properties object. Since there are no parameters, the description does not need to provide additional parameter-level detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb-resource pair: 'Read recorded loop iterations.' It is specific enough to avoid tautology and distinguishes the read operation from write-oriented sibling tools like loop.record_iteration, though it does not explicitly differentiate itself from loop.generate_report.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 such as loop.record_iteration, loop.generate_report, or flow.read_memory. The verb 'Read' implies retrieval, but the description does not state the conditions that should lead an agent to select this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
loop.record_iterationB
[workspace write][risk:write] Append one build-test-verify loop iteration as JSONL evidence.
| Name | Required | Description | Default |
|---|---|---|---|
| fix | No | ||
| goal | Yes | ||
| build | No | ||
| device | No | ||
| retest | No | ||
| failure | No | ||
| artifacts | No | ||
| iteration | Yes | ||
| root_cause | No | ||
| test_result | Yes |
TDQS
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 does disclose the side effect with '[workspace write][risk:write]' and the append semantics via 'Append ... as JSONL evidence'. However, it does not explain what happens on repeated calls, where the evidence is written, or whether prior iterations are preserved.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence that wastes no words. The risk and workspace tags appear first, and the core action is stated immediately. No filler or redundant schema repetition is present.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a write tool with 10 parameters, 3 required parameters, no annotations, no output schema, and zero schema description coverage, this one-line description is far from complete. An agent cannot tell what values to supply, what the file path is, what a valid iteration looks like, or what the tool returns.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 10 parameters, and the description provides no field-level semantics. The phrase 'build-test-verify loop iteration' gives a conceptual hint about goal, build, and test_result, but it does not compensate for the complete lack of parameter documentation in either the schema or the description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Append'), a specific resource ('one build-test-verify loop iteration'), and the output format ('JSONL evidence'). It is clear about what the tool does, but it does not explicitly distinguish it from related siblings such as loop.read_iterations, loop.generate_report, or flow.record_test_run.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'build-test-verify loop iteration' implies this is meant to be called during a build-test-verify loop to log evidence, but there is no explicit guidance on when to use it versus alternatives like flow.record_checkpoint or verify.collect_evidence. No exclusions or routing conditions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
orchestrator.run_android_validation_loopC
[approval required][device mutation][risk:dangerous] Run build -> install -> Appium scripted test -> verification -> evidence -> loop record for Android.
| Name | Required | Description | Default |
|---|---|---|---|
| goal | Yes | ||
| kind | No | ||
| serial | No | ||
| apkPath | No | ||
| avdName | No | ||
| runLint | No | ||
| apiChecks | No | ||
| appiumSteps | No | ||
| packageName | No | ||
| clearAppData | No | ||
| runUnitTests | No | ||
| buildDebugApk | No | ||
| expectedTexts | No | ||
| collectEvidence | No | ||
| iterationOffset | No | ||
| maxTestIterations | No | ||
| appiumCapabilities | No | ||
| flowReplayTestName | No | ||
| installDependencies | No | ||
| flowReplayBeforeSteps | No | ||
| flowReplayMinimumScore | No | ||
| flowReplayTargetCheckpointId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the full behavioral burden. It does include useful safety signals: [approval required], [device mutation], and [risk:dangerous], plus the overall sequence of actions. However, it does not disclose side effects like app data clearing, repeated iterations, APK building, or evidence collection implications beyond the terse pipeline.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with critical safety tags, and the arrow-separated pipeline communicates the high-level flow efficiently. It earns its place, though it sacrifices some useful explanatory detail for brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite the tool's high complexity (22 parameters, nested objects, no output schema, no annotations), the description is only one line. It does not explain loop semantics, iteration limits, prerequisites like emulator or Appium session setup, or how the many optional parameters alter behavior. This is far from sufficient for an agent to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description adds no parameter-level meaning. With 22 parameters including arrays, objects, booleans, and numbers, the agent gets no help understanding how goal, appiumSteps, apiChecks, maxTestIterations, flowReplay*, and the other options relate to the described pipeline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific orchestrated pipeline: build -> install -> Appium scripted test -> verification -> evidence -> loop record, and scopes it to Android. This clearly separates it from the sibling orchestrator.run_ios_validation_loop and from the granular component tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to call this orchestrator versus using the individual build, device, appium, verify, and loop tools directly. The pipeline implies a full validation loop, but there is no explicit when-to-use, when-not-to-use, or alternative selection advice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
orchestrator.run_ios_validation_loopC
[approval required][device mutation][risk:dangerous] Run iOS simulator build -> install/launch -> Appium XCUITest scripted test -> verification -> evidence -> loop record.
| Name | Required | Description | Default |
|---|---|---|---|
| sdk | No | ||
| goal | Yes | ||
| kind | No | ||
| device | No | ||
| scheme | No | ||
| appPath | No | ||
| project | No | ||
| runLint | No | ||
| bundleId | No | ||
| launchApp | No | ||
| workspace | No | ||
| installApp | No | ||
| appiumSteps | No | ||
| buildIosApp | No | ||
| destination | No | ||
| runUnitTests | No | ||
| bootSimulator | No | ||
| buildSettings | No | ||
| configuration | No | ||
| expectedTexts | No | ||
| xcodebuildArgs | No | ||
| collectEvidence | No | ||
| derivedDataPath | No | ||
| iterationOffset | No | ||
| simulatorDevice | No | ||
| simulatorLogLast | No | ||
| evidenceTimeoutMs | No | ||
| maxTestIterations | No | ||
| appiumCapabilities | No | ||
| flowReplayTestName | No | ||
| installDependencies | No | ||
| collectSimulatorLogs | No | ||
| flowReplayBeforeSteps | No | ||
| simulatorLogPredicate | No | ||
| flowReplayMinimumScore | No | ||
| captureSimulatorScreenshot | No | ||
| flowReplayTargetCheckpointId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral disclosure burden. It does include useful tags ('approval required', 'device mutation', 'risk:dangerous') and shows the build/test/evidence pipeline, which signals side effects and risk. However, it omits specifics about what mutations occur, reversibility, cleanup, or implications of repeated loop iterations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, compact sentence with risk tags front-loaded. It avoids fluff and conveys the overall workflow efficiently. It is slightly under-specified for the tool's complexity, but as a structural matter, every element earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 37 parameters, no output schema, no annotations, and 0% schema description coverage. A one-line pipeline overview is wholly insufficient for an agent to know how to set parameters, what the tool returns, or how loop recording behaves. This is a high-complexity tool that demands detailed operational context, which is absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 37 parameters, and the description provides no parameter-level explanation. It only loosely maps to parameter groups via pipeline stages (e.g., build, launch, evidence), but gives no details about expected values, defaults, or relationships among parameters like appiumSteps, flowReplayBeforeSteps, maxTestIterations, or buildSettings.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a concrete action ('Run') and a specific resource (iOS simulator validation loop) and enumerates the pipeline stages: build, install/launch, Appium XCUITest, verification, evidence, loop record. This clearly distinguishes it from the Android sibling and the many granular ios.* and appium.* tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this orchestrator versus composing the individual ios.build_app, ios.launch_app, appium.*, verify.*, and loop.* tools. The description implies a full-loop purpose, but does not state exclusions, prerequisites, or conditions that should route an agent to an alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
policy.list_toolsC
List effective tool policy metadata for MCP clients and approval gates.
| Name | Required | Description | Default |
|---|---|---|---|
| toolName | No | ||
| riskLevel | No | ||
| requiresApproval | No | ||
| includeDescriptions | No |
TDQS
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 only states the basic action and does not mention whether the operation is read-only, any required authentication, potential side effects, or the format of the returned policy metadata. 'Effective' is left undefined, and the impact of filtering parameters is not addressed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence with no redundancy, and it front-loads the action and resource. It is concise and well-structured for a simple statement, though it may be too terse given the parameter complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with four optional parameters, no output schema, and no annotations, the description is inadequate. It does not explain what 'effective tool policy metadata' means, what the return structure looks like, or how to use the filters. An agent would have to guess or explore other sources to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero descriptions for its four parameters, and the description adds nothing about them. There is no explanation of how toolName, riskLevel, requiresApproval, or includeDescriptions affect the output. With 0% schema coverage, the description must compensate but fails entirely.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb ('List') and resource ('effective tool policy metadata'), and clarifies the purpose for 'MCP clients and approval gates.' It is distinct from sibling tools which focus on device operations, builds, and verification, so an agent can easily differentiate it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives. The description does not mention any preconditions, when not to use it, or how it relates to other policy-related tools (if any). An agent must infer the appropriate context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
security.compare_scansB
Re-run the deterministic source scan and compare it with a baseline report after fixes.
| Name | Required | Description | Default |
|---|---|---|---|
| paths | No | ||
| maxFiles | No | ||
| baselinePath | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the behavioral disclosure burden. It adds useful context by calling the scan 'deterministic' and framing the operation as a re-run-and-compare, but it does not disclose side effects, persistence, permissions, or what the comparison result looks like.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one short, front-loaded sentence with no filler. The core action and timing are immediately visible.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations, no output schema, and no parameter descriptions, the tool needs the description to tie inputs to the workflow and clarify what the comparison produces. It does not, leaving an agent uncertain about required inputs and expected output semantics.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, but it never names paths, maxFiles, or baselinePath. 'Baseline report' hints at baselinePath and 'source scan' hints at paths, but the parameters' exact meanings and constraints are largely unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear action ('Re-run the deterministic source scan') and a clear object ('compare it with a baseline report'), so an agent can tell this tool is about scan comparison after fixes. It does not explicitly name or contrast a sibling like security.scan_source, so differentiation remains implicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'after fixes' gives meaningful context for when this tool is appropriate. However, the description does not explain when to prefer it over alternatives such as security.scan_source or security.release_gate, and it gives no exclusions or workflow placement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
security.generate_test_planA
Generate a deterministic mobile security test plan from a source-scan report for an AI or engineer to execute.
| Name | Required | Description | Default |
|---|---|---|---|
| reportPath | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It adds meaningful behavioral context by stating the output is 'deterministic' and intended for execution, which goes beyond the tool name. However, it does not disclose return format, whether the plan is returned as text or written to a file, side effects, or prerequisites, leaving notable gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. It states the core function, input, and output audience efficiently, and every phrase adds information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with one parameter, no output schema, and no annotations, the description is adequate but incomplete. It does not explain what the generated test plan looks like, how it is delivered to the caller, or how it relates to sibling tools like security.scan_source. An agent would need additional inference to know the return contract or necessary prior steps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It links reportPath to 'a source-scan report', which gives the parameter some semantic grounding beyond a bare string. But it does not describe the expected path format, file type, or whether the report must be a specific scan output, so compensation is only partial.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('generate') and resource ('a deterministic mobile security test plan'), and clearly identifies the input ('from a source-scan report') and audience ('for an AI or engineer to execute'). It is unambiguous about what the tool does, but it does not explicitly contrast with sibling tools like flow.generate_test_scenarios, so it stops short of full sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool: when you have a source-scan report and want a test plan. However, it provides no explicit guidance on when not to use it, no alternatives, and no mention of prerequisites such as running security.scan_source first. The usage context is inferable but not spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
security.release_gateB
Evaluate a source-scan report against a severity threshold before release or merge.
| Name | Required | Description | Default |
|---|---|---|---|
| reportPath | Yes | ||
| failAtOrAbove | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations and no output schema, the description must carry the full burden of behavioral disclosure. It does not state whether the tool is read-only, what it returns, whether it raises on failure, or what side effects (if any) it has. 'Evaluate' implies a decision but leaves the actual behavior unspecified.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one concise sentence with no filler or redundant information. The core action, object, and timing context are all front-loaded and clearly expressed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 omits important execution context: what happens when the threshold is met or exceeded, what the return value is, and whether the gate merely reports a result or actively blocks. For an agent to reliably use this tool, it needs more than the current one-line description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for undefined parameters. It maps the general concept of a 'severity threshold' to failAtOrAbove, but it does not explain what reportPath should point to, accepted report formats, or how the enum values relate to behavior. The schema provides names and enum values, but no semantic depth.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Evaluate') and identifies the resource ('source-scan report') and the condition ('against a severity threshold'). It is clearly distinct from siblings like security.scan_source (which generates a report) and security.compare_scans (which compares reports), though it does not name them explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'before release or merge' provides clear usage context for when this gate should be invoked. It does not explicitly state when not to use it or name alternatives, 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.
security.scan_sourceA
Scan mobile source and platform configuration for deterministic security signals without running target code.
| Name | Required | Description | Default |
|---|---|---|---|
| paths | No | ||
| maxFiles | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations available, the description carries the full burden. It discloses a key behavioral trait: the tool does not execute target code and produces deterministic signals. However, it does not mention side effects, permissions, output format, or what 'signals' concretely are.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The entire description is one sentence with no filler. It front-loads the action and resource, then adds the essential 'without running target code' qualifier. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has no annotations, no output schema, and no parameter descriptions, so the description must compensate. It does not explain what inputs should be provided, what 'platform configuration' includes, what the scan returns, or how results might feed into sibling tools like security.compare_scans or security.release_gate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description provides no information about 'paths' or 'maxFiles'. The agent is left to infer the meaning of both parameters entirely from their names, with no guidance on expected formats, constraints, or semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific action ('scan'), a concrete resource ('mobile source and platform configuration'), and a distinguishing qualifier ('without running target code'). This clearly differentiates it from dynamic runtime and verification siblings like appium.assert_visible or device.pull_logs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'without running target code' implies this is for static analysis and not for runtime behavior, but the description never explicitly says when to use it versus alternatives like security.compare_scans or security.release_gate. Usage context is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify.assert_accessibility_labelsC
Assert clickable or input-like nodes have a text, label, name, content-desc, or resource-id.
| Name | Required | Description | Default |
|---|---|---|---|
| serverUrl | No | ||
| sessionId | No | ||
| sourcePath | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full responsibility for disclosing behavior. It states the core assertion condition but fails to mention side effects, failure behavior (e.g., throws exception vs. returns boolean), whether it's read-only, or how it determines 'clickable or input-like nodes'. This lack of transparency prevents an agent from anticipating the tool's runtime impact.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no fluff. It efficiently conveys the core purpose, using the verb 'Assert' immediately. Its brevity is a strength, though it sacrifices detail needed for other dimensions.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with three parameters, no output schema, and no annotations, this description is inadequate for correct invocation. The agent needs to know the format and purpose of each parameter, the return value (or failure mode), and whether an Appium session is required. The tool is non-trivial (requires server, session, and source pointers), yet the description provides no integration context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, but it provides zero information about serverUrl, sessionId, or sourcePath. The parameter names alone give minimal hints, but the meaning of sourcePath and the relationship between these parameters and the assertion logic are entirely unaddressed. The description adds no value beyond the schema's bare field names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool's purpose: asserting that clickable or input-like nodes have an accessibility attribute (text, label, name, content-desc, or resource-id). It uses a specific verb and resource, and it's distinguishable from sibling verify tools (e.g., assert_screen_contains_text, assert_sqlite_query) without needing to inspect schemas. However, it doesn't explicitly name alternatives or contrast scopes, so it stops just short of a perfect score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description offers no guidance on when to use this tool versus other verification tools, nor does it mention prerequisites such as an active Appium session, how sourcePath is obtained, or what type of source (layout dump, accessibility tree) is expected. An agent must rely on the tool name and sibling context to infer usage, which is insufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify.assert_api_responseA
[network][risk:network] Call an API and assert status and optional body substrings.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| body | No | ||
| method | No | ||
| headers | No | ||
| timeoutMs | No | ||
| bodyContains | No | ||
| expectedStatus | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the burden of behavioral disclosure. It includes a [network][risk:network] warning and states it calls an API, but it does not explain possible side effects of non-GET methods, authentication needs, or failure behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single focused sentence with a useful risk tag front-loaded. Every word earns its place and no unnecessary detail is included.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a network-capable tool with 7 parameters, no annotations, and no output schema, yet the description does not explain return values, default method, request body semantics, or potential side effects. The context is too thin for safe autonomous invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but most parameter names are self-explanatory. The description adds meaning for expectedStatus and bodyContains via 'assert status and optional body substrings', but leaves body, method, headers, and timeoutMs semantics to inference.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: call an API and assert its status and optional body substrings. It clearly distinguishes this from UI/SQLite/screenshot assertion tools in the sibling list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this tool is for verifying backend HTTP/API responses rather than UI state, but it gives no explicit when-to-use guidance, no exclusions, and no reference to alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify.assert_appium_session_healthyB
Assert the Appium session and page source are reachable, distinguishing automation failures from app crashes.
| Name | Required | Description | Default |
|---|---|---|---|
| serverUrl | No | ||
| sessionId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits fully. It mentions that it asserts reachability and distinguishes failure types, but does not specify what happens on failure (e.g., throws an error, returns a boolean), what it does with the page source, or any side effects. The absence of output schema adds to the need for more disclose, which is not met.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that is concise and front-loads the action ('Assert') and the resource. It includes the key purpose (distinguishing failures) without fluff. It earns its place, though it could be slightly more structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low schema coverage and lack of output schema, the description does not provide enough context for an agent to know what to expect as a result (e.g., assertion result, exception behavior) or why serverUrl is needed. It should mention typical failure outcomes or how it complements other verification steps, but it does not.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does not explain the purpose of serverUrl or sessionId beyond what the schema names imply. Since only sessionId is required, the description could clarify that serverUrl is optional and likely defaults to a known server, but that is absent. This is a gap, so a 3 is generous but not entirely unhelpful.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Assert') and a clear resource ('Appium session and page source'), and adds the purpose of distinguishing automation failures from app crashes. It is clear and distinct from siblings like appium.get_page_source or verify.assert_no_crash_in_logcat, though it doesn't explicitly name them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage in a verification context (checking session health) but does not explicitly state when to use it versus alternatives like appium.get_page_source or verify.assert_no_crash_in_logcat. It provides a hint at its role but lacks explicit when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify.assert_no_crash_in_logcatC
Assert logcat or a saved log file has no crash signatures.
| Name | Required | Description | Default |
|---|---|---|---|
| serial | No | ||
| logPath | No | ||
| packageName | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden, but it only states the assertion intent. It does not disclose what happens when a crash signature is found, whether it reads live logcat automatically, or any side effects, making behavior largely opaque.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words. It is concise, though it may be too sparse to compensate for the absence of parameter documentation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given three undocumented parameters, no annotations, and no output schema, the description is not complete enough for an agent to reliably call the tool. Key questions about parameter roles, required inputs, and failure behavior remain unanswered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the description only loosely hints at 'logcat' versus 'saved log file', which likely maps to serial and logPath. The packageName parameter is entirely unexplained, and no parameter format, defaults, or required combinations are provided.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('assert') and resource ('logcat or a saved log file') with the outcome of having no crash signatures. It is clearly distinct from sibling verify.assert_* tools, though it does not explicitly differentiate itself from them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus alternatives, and does not mention conditions such as needing a device serial, a saved log path, or a package filter. Usage context is only implied by the tool name and category.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify.assert_screen_contains_textC
Assert current Appium page source contains expected text.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | ||
| serverUrl | No | ||
| sessionId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden of behavioral disclosure. It states the assertion but does not explain what happens on failure (e.g., does it throw an error or return a boolean?), whether it waits for the text, or the role of the sessionId parameter. It lacks details on response format or 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, which is concise, but it is under-specified. It is efficient in length but lacks substantive information, so it does not earn a higher score for structure since conciseness without content is not valuable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter tool with no annotations and no output schema, the description is incomplete. It does not explain the return value, failure behavior, or when to use this tool versus similar assertions. An agent would need to infer too much to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the description does not mention any parameters. The schema defines text, sessionId, and serverUrl, but the description provides no clarification on what serverUrl is for or how sessionId is used. It adds zero semantic value beyond the raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('assert') and resource ('current Appium page source') with a condition ('contains expected text'). It distinguishes from siblings like appium.get_page_source (which returns source) and other assert tools (assert_visible checks visibility, not source presence).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for verifying text presence in page source, but it does not explicitly mention when to use it over alternatives like appium.assert_visible (which checks visibility) or appium.get_page_source (which retrieves source). No exclusions or conditions are provided, leaving selection to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify.assert_screenshot_diffC
Compare two PNG screenshots and assert the pixel diff ratio is at or below maxDiffRatio.
| Name | Required | Description | Default |
|---|---|---|---|
| threshold | No | ||
| actualPath | Yes | ||
| baselinePath | Yes | ||
| maxDiffRatio | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of explaining behavior. It does communicate the core assertion behavior and the pass condition, but it does not explain what happens on failure, whether any files are written, or how the diff ratio is computed. Basic behavior is clear, but richer context is missing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single focused sentence with no wasted words. It front-loads the tool's purpose and the key assertion criterion. However, it is slightly too terse given the undocumented parameters.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 0% schema description coverage, this description is too sparse. It does not explain the relationship between 'threshold' and 'maxDiffRatio', when this assertion should be used, or what the tool returns or throws on failure. The agent would need to guess at important invocation details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for all four parameters. It only meaningfully explains maxDiffRatio, and even then it introduces ambiguity because the schema also contains an undocumented 'threshold' parameter. baselinePath and actualPath are inferable from the description, but 'threshold' is left completely unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: compare two PNG screenshots and assert the pixel diff ratio is within a limit. The verb 'assert' and resource 'screenshot diff' make the operation specific. It does not differentiate itself from sibling verify.assert_* tools, but the screenshot-diff focus is distinct enough.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives, when it is appropriate to run, or what prerequisites are needed. The description simply states what it does, leaving the agent to infer usage from the tool name and sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify.assert_sqlite_queryB
Run a read-only sqlite query and assert exact output or expected substring.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| databasePath | Yes | ||
| expectedOutput | No | ||
| outputContains | No |
TDQS
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 explicitly states 'read-only', which is crucial, and indicates two assertion modes. However, it does not describe failure behavior, return format, or how the two assertion modes interact (e.g., precedence or exclusivity). This is a partial disclosure but leaves gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that is front-loaded with the most important constraint ('read-only') and immediately communicates the dual assertion capability. Every word earns its place, with no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with four parameters, no output schema, and no annotations, this description is too sparse. It omits parameter semantics, failure behavior, and usage context such as typical scenarios or prerequisite checks. An agent would need to infer a lot about how to correctly invoke this tool, especially regarding the two optional assertion parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It implicitly maps 'exact output' to expectedOutput and 'expected substring' to outputContains, but it does not explain databasePath or query, nor clarify the relationship between the two optional parameters (e.g., whether they are mutually exclusive). The description adds minimal meaning beyond parameter names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb (run), resource (sqlite query), and the assertion behavior (exact output or substring). It distinguishes itself from sibling assert tools by naming the specific resource type, so an agent knows this is for SQLite queries and not API responses or screen content.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 alternatives. The resource type (SQLite) is implied by the name and description, but there is no mention of when to prefer this over other assert tools or any preconditions such as database availability or read-only access.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify.collect_evidenceC
Collect screenshot, page source, and logcat evidence where available.
| Name | Required | Description | Default |
|---|---|---|---|
| prefix | No | ||
| serial | No | ||
| serverUrl | No | ||
| sessionId | No | ||
| packageName | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full behavioral burden. It mentions 'where available,' hinting at graceful degradation, but does not disclose what happens when evidence types are missing, how failures are reported, or whether it creates files or returns data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single efficient sentence with no filler, and the key scope ('collect evidence') is front-loaded. It loses a point because it is so terse that it omits essential context, but its brevity is not wasteful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with five unannotated parameters and no output schema, the description should explain what inputs the tool needs and what the agent gets back. It covers the general intent but is incomplete for safe invocation; an agent could not reliably choose parameter values.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description names none of the five parameters (prefix, serial, serverUrl, sessionId, packageName). An agent cannot infer what these parameters mean, which are needed for which evidence type, or how they combine.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('collect') and resource ('evidence'), enumerating screenshot, page source, and logcat. However, it does not distinguish itself from siblings like device.capture_screenshot, appium.get_page_source, or device.pull_logs, which overlap in function.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus sibling evidence-collection tools. The description implies a batch evidence-gathering role, but it never states prerequisites (e.g., active Appium session, connected device), fallback ordering, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify.hash_artifactB
Compute SHA-256 for a workspace artifact or evidence file.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavior on its own. It states the algorithm and input but does not mention output format, path resolution, whether the file must already exist, failure behavior, or the read-only nature of the operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One clear sentence with zero filler. The verb, algorithm, and input scope are all front-loaded, and every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple, but with no output schema and no parameter docs, key invocation details are missing: expected return format, path semantics, and edge-case behavior. An agent can guess the tool's purpose from its name, but not all call requirements are grounded.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for the undocumented 'path' parameter. It adds that the path refers to an artifact or evidence file, but it does not clarify whether the path is workspace-relative, absolute, or evidence-store-relative, nor what file types are accepted.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
'Compute SHA-256' is a specific verb plus resource, and 'for a workspace artifact or evidence file' narrows the object type. It is immediately distinguishable from sibling verify.* tools, which are assertions/inspections rather than hashing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is used when an agent needs a SHA-256 digest of a file, but it gives no explicit when-to-use guidance, prerequisites, or alternatives. Since no sibling tool hashes files, the lack of exclusions is less harmful, yet the guidance still relies on inference.
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.
82 tool updates
v0.1.0-alpha.14- First observed
appium.assert_not_visible - First observed
appium.assert_visible - First observed
appium.create_session - First observed
appium.delete_session - First observed
appium.get_accessibility_tree - First observed
appium.get_page_source - First observed
appium.go_back - First observed
appium.observe_screen - First observed
appium.swipe - First observed
appium.tap_by_accessibility_id - First observed
appium.tap_by_resource_id - First observed
appium.tap_by_text - First observed
appium.tap_coordinates - First observed
appium.type_text - First observed
appium.wait_for_visible - First observed
build.build_debug_apk - First observed
build.build_release_candidate - First observed
build.collect_build_logs - First observed
build.detect_project - First observed
build.install_dependencies - First observed
build.run_lint - First observed
build.run_unit_tests - First observed
ci.collect_artifact_manifest - First observed
ci.comment_pr - First observed
ci.create_github_annotations - First observed
ci.write_github_step_summary - First observed
code.apply_patch - First observed
code.commit_changes - First observed
code.create_branch - First observed
code.git_diff - First observed
code.open_pr - First observed
code.read_file - First observed
code.search_code - First observed
device.capture_screenshot - First observed
device.clear_app_data - First observed
device.grant_permissions - First observed
device.install_app - First observed
device.list_devices - First observed
device.pull_logs - First observed
device.start_emulator - First observed
device.stop_emulator - First observed
device.uninstall_app - First observed
env.compatibility_matrix - First observed
env.ensure_appium - First observed
env.preflight - First observed
flow.analyze_from_code - First observed
flow.clear_memory - First observed
flow.generate_test_scenarios - First observed
flow.plan_replay - First observed
flow.read_memory - First observed
flow.record_checkpoint - First observed
flow.record_test_run - First observed
flow.replay_to_checkpoint - First observed
flow.run_script - First observed
ios.boot_simulator - First observed
ios.build_app - First observed
ios.capture_screenshot - First observed
ios.collect_logs - First observed
ios.install_app - First observed
ios.launch_app - First observed
ios.list_simulators - First observed
ios.shutdown_simulator - First observed
loop.generate_report - First observed
loop.read_iterations - First observed
loop.record_iteration - First observed
orchestrator.run_android_validation_loop - First observed
orchestrator.run_ios_validation_loop - First observed
policy.list_tools - First observed
security.compare_scans - First observed
security.generate_test_plan - First observed
security.release_gate - First observed
security.scan_source - First observed
verify.assert_accessibility_labels - First observed
verify.assert_api_response - First observed
verify.assert_appium_session_healthy - First observed
verify.assert_navigation_reached - First observed
verify.assert_no_crash_in_logcat - First observed
verify.assert_screen_contains_text - First observed
verify.assert_screenshot_diff - First observed
verify.assert_sqlite_query - First observed
verify.collect_evidence - First observed
verify.hash_artifact
TDQS
Scored across 82 tools
Multiple tools have overlapping boundaries, especially around verification and evidence collection: verify.assert_screen_contains_text and verify.assert_navigation_reached both assert page-source text, while appium.observe_screen, verify.collect_evidence, and device.capture_screenshot all capture screen/evidence data. The many tap variants and several record/report/generate tools also make misselection likely without very careful description reading.
Tool names largely follow a consistent snake_case verb-first pattern with namespace prefixes, such as list_devices, build_debug_apk, and assert_visible. Minor deviations like code.git_diff and env.compatibility_matrix are noun-phrase names, and verbs like write/create/run are used somewhat interchangeably, but the overall convention is recognizable.
At 82 tools, the surface is extremely overgrown regardless of the server's broad mobile validation scope. Even accounting for Android, iOS, Appium, build, verification, flow memory, security, and CI, the count far exceeds what an agent can navigate efficiently. Many tools could be consolidated or exposed as parameterized subcommands.
The tool set covers the core mobile validation lifecycle well: build, install, launch, automate via Appium, verify, collect evidence, record flows, run security gates, and report to CI. Minor gaps exist, such as no direct Android app launch/stop utility, no iOS uninstall or clear-data operation, and limited Appium gesture coverage beyond coordinate swipes.
Maintenance
Related MCP Connectors
Drive real devices from your AI Coding tool. Embed a client SDK (Unity, Godot, Flutter, iOS/macOS, Android, React Native, Web) in your app, then capture screenshots, traverse the UI tree, inject taps and key events, and run automated test tasks on the physical device over a secure relay.
Set up & manage mobile CI/CD on Bitrise: build, test, distribute iOS, Android, Flutter, RN apps.
- LimrunOAuthcom.limrun
Cloud iOS simulators and Android emulators your agent can create, drive, and throw away.
Control real Android and iOS devices with LLM agents — tap, swipe, type, automate flows.
Related MCP Servers
- AlicenseBqualityDmaintenanceTransforms AI assistants into mobile development powerhouses with 36 tools for Flutter, Android, and iOS development, including intelligent device management, automated builds, testing, and deployment workflows.3129 npm7MIT
- FlicenseNot gradedqualityNot gradedmaintenanceEnables AI-powered mobile app testing and automation through Appium, using Azure OpenAI to intelligently navigate mobile applications and generate test cases.-
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to automate Android mobile device testing through Appium, with automatic device detection, screen element inspection, and natural language test scenario execution.3MIT

MCP Appiumofficial
AlicenseBqualityAmaintenanceEnables AI assistants to automate mobile app testing and development for iOS and Android through natural language interactions. Supports intelligent element identification, session management, automated test generation, and comprehensive device interactions including clicks, swipes, screenshots, and app management.317,223 npm481Apache 2.0