Android device automation via Binder IPC — MCP server for AI agents
Binder-mcp provides 14 tools with explicit schemas and descriptions, but quality is inconsistent. Tool names follow verb_noun convention (good), but descriptions vary widely in clarity and actionability. Most tools lack parameter constraints (enums, ranges), error recovery guidance, and output schema documentation. Several tools expose dangerous operations (delete_file, clear_app_data, call_method) without confirmation patterns or permission gates. Descriptions average ~120 chars but many are vague about preconditions and side effects. No pagination support despite tools that could return large results (dump_service, dump_ui_hierarchy). Security concerns: call_method accepts raw transaction codes and hex data with minimal validation.
Generate a bug report archive using 'bugreportz'. The report is saved to a file on the device. This operation can take several minutes.
Call a method on a binder service using raw transaction. Accepts a service name and either a numeric transaction code or a method name (resolved via the AIDL descriptor). Optional hex-encoded parcel data can be provided as input. Returns the reply parcel as hex.
Dismiss a specific notification by its key using 'cmd notification cancel'.
Cancel any ongoing vibration using 'cmd vibrator_manager cancel'.
Take a photo from a device camera and return it as a base64-encoded image. Uses the camera intent or the 'am' command to trigger the camera app. The photo is saved to a temporary file on device.
Check whether the current process can access a binder service. Attempts a ping transaction and reports the result, including any SELinux denial details from enriched errors.
Destructive operations lack confirmation/dry-run patterns. delete_file, clear_app_data, call_method, and bugreport can cause irreversible state changes without user confirmation or rollback capability.
Output schemas not documented. Tools like dump_service and dump_ui_hierarchy return large text/XML but LLM cannot predict structure, field names, or size limits. Agents cannot plan downstream processing.
Parameters lack type constraints and validation rules. 'service' param in call_method accepts arbitrary strings; 'method' accepts decimal or hex but no format validation shown. No enums for known services (activity, power, camera, etc.).
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 58 | <=2025-11-25 | v2 |
Clear all data for an application using 'pm clear'. This removes the app's databases, caches, shared preferences, and files.
Clear the logcat buffer using 'logcat -c'. Useful before running a test to get a clean log.
Find a UI element by text, resource-id, or content-desc, compute the center of its bounds, and tap it. This is a convenience tool that combines find_ui_element + tap. Returns an error if no matching element is found or if multiple elements match (use more specific criteria).
Collapse the notification shade and quick settings panels using 'cmd statusbar collapse'.
Delete a file on the device using 'rm'. Does not delete directories (use 'rm -r' via shell_exec for that).
Drag from one screen position to another using 'input draganddrop'. This simulates a long press, drag, and release gesture.
Dump the state of an Android system service using 'dumpsys'. Returns the full text dump. Common services: activity, window, power, battery, wifi, connectivity, meminfo, cpuinfo, package, notification, alarm, audio, display, input.
Dump the current UI hierarchy as XML using 'uiautomator dump'. Returns the full XML tree of all visible UI elements with their properties (text, resource-id, class, bounds, etc.). This operation can take 2-3 seconds.
Error handling lacks recovery guidance. No indication of which errors are retryable, which require user intervention, or what the LLM should do next. Raw error codes or stack traces provide no actionable path forward.
No permission gates or audit trails. Tools that modify device state (clear_app_data, delete_file, call_method) do not verify caller authority or log who invoked them. Agents can execute destructive operations without accountability.