Turn your Android phone into an MCP server for AI assistants — control SMS, contacts, flashlight, clipboard, and more via Termux
18 tools with consistent verb_noun naming (send_sms, get_contacts, read_sms). All tools have descriptions (10 - 200 chars, within baseline). Input schemas present with Zod validation and parameter descriptions. However, output schemas are NOT documented, responses are returned as generic text blobs via the text() helper without structured field definitions. No error recovery guidance (e.g., 'If SMS fails, check network'). Missing tool annotations (readOnlyHint, destructiveHint, idempotentHint). Parameter descriptions are adequate but lack format constraints (e.g., phone number regex, duration ranges). No pagination support for list-returning tools (read_sms, get_contacts, get_call_log). Security concern: no permission gates or audit logging visible.
Control the phone flashlight/torch
Get phone battery level, status, and temperature
Get recent call history (incoming, outgoing, missed)
Read the phone's current clipboard content
Get all contacts from the phone. Returns name, number, and email.
Get device information (model, manufacturer, Android version, etc.)
Get current GPS location of the phone
Output schemas not documented. All tools return generic text() responses without structured field definitions. LLMs cannot plan downstream tool calls or extract specific fields (e.g., contact phone numbers, battery percentage). Violates pattern:tool and pattern:response-shaper.
No pagination support for list-returning tools (read_sms, get_contacts, get_call_log). Tools accept 'limit' but do not return total_count, next_cursor, or offset. Large result sets will blow context window. Violates pattern:paginated-result.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). LLMs cannot distinguish safe reads from destructive writes without reading descriptions. send_sms, make_call, take_photo, record_audio are destructive but unmarked. Violates pattern:command-tool.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 66 | 2026-07-28+ | v2 |
Get current volume levels for all audio streams
Get current WiFi connection details (SSID, IP, link speed, etc.)
Initiate a phone call to a number (opens the dialer)
Read recent SMS messages from the phone inbox. Note: RCS messages are NOT accessible — only SMS/MMS.
Record audio from the phone microphone. Returns the file path of the saved recording.
Show a notification on the phone
Send an SMS text message from the phone
Set the phone's clipboard content
Set volume for an audio stream
Take a photo with the phone camera. Returns the file path of the saved photo.
Make the phone vibrate
No error recovery guidance. Errors are returned as plain text (e.g., 'termux command failed: termux-sms-send, ...') without actionable next steps. LLMs cannot self-correct or retry intelligently. Violates pattern:recovery-guide.
Parameter constraints missing. 'to' in send_sms lacks phone number format validation/regex. 'duration_s' in record_audio and 'duration_ms' in vibrate lack min/max bounds. 'volume' in set_volume lacks range (0-15). Violates pattern:constrained-input.