MCP server and CLI for TogglDev Android App remote access
Server has 6 tools with complete input schemas and descriptions. Naming follows verb_noun convention (discover_, pair_, get_, toggle_, set_). Descriptions are present and contextual (avg ~80 chars), exceeding the 20-char minimum. However, parameter descriptions lack detail on constraints, formats, and valid ranges. Output schemas are not documented. Error handling is basic (generic error messages without recovery guidance). No tool annotations (readOnlyHint/destructiveHint). The server includes helpful instructions but tools themselves could be more self-documenting.
Discover TogglDev devices on the local network.
Get the current developer settings status from the paired device.
Get wireless debugging connection info (IP and Port) from the paired device.
Pair with a TogglDev device using the code from the app.
Set a specific value for a developer setting on the paired device.
Toggle a developer setting on the paired device.
Parameter descriptions lack constraint details. 'key' parameter in toggle_setting and set_setting has no enum, pattern, or valid value list. LLMs will hallucinate invalid setting keys.
Output schemas not documented. Tools return structured data but LLMs cannot see what fields to expect (e.g., discover_devices returns device list structure, pair_device returns success/token, get_status returns settings object). Agents must infer output shape.
No tool annotations. Tools lack readOnlyHint (get_status, discover_devices, get_wireless_debug_info are read-only) and destructiveHint (pair_device, toggle_setting, set_setting modify state). LLMs cannot distinguish safe from risky calls.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 55 | 2026-07-28+ | v2 |
Error handling is generic. Code catches errors and returns e.message but provides no recovery guidance. 'Invalid pairing code' or '401 Unauthorized' tells LLM nothing about next steps (retry, re-pair, check network).
Parameter 'port' in pair_device has default (8734) but is marked required in schema. Schema should either make it optional with default or remove the default note from description.