Pocket pager for AI agents exposed over MCP. Bridges tool calls from Claude Code/Cursor to a Cardputer device running the cardputer_mcp.py app over Bluetooth Low Energy.
Six tools with complete input schemas and descriptions present. Naming follows verb_noun convention (notify, ask, confirm, usage, sense, await_physical_event). Descriptions range 60-180 chars, meeting the 10-1024 baseline. However, parameter descriptions are minimal (5-20 chars), and output schemas are entirely undocumented. No error handling guidance, no recovery paths, and no indication of which operations are idempotent or destructive. The 'await_physical_event' tool lacks timeout validation constraints. Missing documentation of what fields are returned and how downstream tools should chain results.
Render a question with 1-4 choices on the Cardputer device and wait for keypress selection
Wait for and return the next unsolicited physical sensor event from the Cardputer device (picked up, shaken, tapped, loud, etc.)
Display a confirmation prompt on the Cardputer device requiring a physical Y-hold gesture (3 seconds) to approve or N/ESC to deny
Display a visual banner and speaker chirp on the Cardputer device
Read physical sensor data from the Cardputer device (accelerometer, gyroscope, battery level)
Fetch current cloud API usage statistics (tokens, cost, rate limits) from the device's cached dashboard
Output schemas completely undocumented. No specification of what fields notify, ask, confirm, usage, sense, and await_physical_event return. LLMs cannot plan downstream tool calls or extract required data without knowing response structure.
Parameter descriptions are minimal (5-20 chars). 'choices' in ask tool described as 'List of 1-4 choice strings' lacks guidance on format, length limits, or examples. 'timeout_s' in await_physical_event has no validation range or default behavior documented.
No error handling or recovery guidance. Tools provide no indication of failure modes, retryability, or what the LLM should do if a tool call fails. E.g., what happens if the Cardputer is disconnected during notify or confirm?
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 60 | 2026-07-28+ | v2 |
No idempotency or destructiveness annotations. 'notify' and 'confirm' modify device state; 'ask' and 'await_physical_event' block waiting for user input. LLMs cannot reason about retry safety or side effects without explicit hints.
No tool composition guidance. If 'ask' returns a choice index, does 'notify' accept that index as input? If 'sense' returns battery level, what format? Missing chaining IDs and field mappings force LLMs to guess.