A collection of MCP servers for Android/Termux providing tools for clipboard management, contacts, filesystem access, GitHub integration, media, notifications, sensors, SMS, SQLite, network, scraping, and more.
DroidMCP demonstrates solid fundamentals: all 17 tools have clear verb-noun naming (get_, set_, search_, list_, delete_, move_, copy_), descriptions range 50 - 250 chars (within baseline 34 - 392), and input schemas are properly typed with JSON Schema. However, output schemas are entirely undocumented, no tool declares what fields it returns, forcing LLMs to infer structure. Parameter descriptions are present but often terse (e.g., 'Path to the file relative to root' lacks format/constraint detail). Error handling is minimal; tools do not guide recovery or categorize failures. Security is well-designed (no secrets in params, API key injection via header), but destructive tools (delete_file, clear_clipboard) lack confirmation patterns. Composition is clean, each tool has one responsibility, but pagination is absent from list_directory and search_files, risking context window exhaustion on large results.
Clear the system clipboard and the in-process history. Returns JSON {ok, history_cleared}.
Return the in-process history of clipboard writes (oldest first). Limits configurable via DROIDMCP_CLIPBOARD_HISTORY_ENTRIES / _BYTES.
Copy a file, or recursively copy a directory tree (symlinks are skipped)
Delete a file or directory
Export the address book (optionally filtered by `query`, same matching as search_contacts) as JSON or vCard 3.0. `format` is `json` (default) or `vcard`. JSON returns {format, count, contacts:[…]}; vCard returns {format, count, vcard:"BEGIN:VCARD…"} with the ready-to-save .vcf text.
Read clipboard. Returns JSON {text, bytes_len, base64, is_utf8, truncated}. Binary content is recoverable from base64.
Output schemas completely undocumented. No tool declares return fields, types, or structure. LLMs cannot plan downstream calls or extract required data without trial-and-error.
Destructive tools (delete_file, clear_clipboard) lack confirmation or dry-run patterns. Agents can irreversibly delete data without safeguards.
No pagination support in list_directory and search_files. Large directory listings or glob matches can exhaust context window without limit/offset parameters.
Parameter descriptions lack format/constraint detail. E.g., 'Path to the file relative to root' does not specify allowed characters, max length, or symlink handling. Descriptions should state constraints explicitly.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 64 | 2026-07-28+ | v2 |
Fetch the full record for a specific contact. Provide `name` (exact, case-insensitive) and/or `number` (compared ignoring spaces, dashes and parentheses); at least one is required and, when both are given, both must match. Returns {found, count, contacts:[…]}. Multiple entries may share a name, so an array is always returned.
List contents of a directory as a JSON array of file entries
List contact groups. Termux:API exposes no contact-groups endpoint, so this is a documented stub: it returns {supported:false, groups:[], note} rather than fabricated data. Use search_contacts or export_contacts instead.
Move or rename a file/directory
Read the contents of a file (optionally a byte range via offset/length)
Read a 1-indexed inclusive range of lines from a file
Search the Android address book via termux-contact-list. Matches `query` as a case-insensitive substring of a contact's name or phone number (digits compared ignoring spaces, dashes and parentheses). Returns {count, contacts:[{name, number}, …]}. All filtering is done in memory; the query never touches a command line.
Search for files by glob pattern or regex
Write to clipboard. Provide exactly one of `text` (UTF-8) or `text_base64` (decoded as binary).
Return JSON metadata (size, mode, mtime, owner) for a path. Does not follow symlinks
Write content to a file
Error handling is minimal. Tools do not return actionable error messages or recovery guidance. E.g., 'file not found' should suggest 'Use list_directory() to find available files.'