Voice-first shared household ledger, exposed to Alexa+ as an MCP server
Tally MCP has clear, action-oriented tool names (start_household, record_expense, settle_up) and reasonable descriptions (avg ~80 chars). All 8 tools have descriptions and input schemas with typed parameters. However, parameter descriptions are sparse or missing context (e.g., 'split_between' lacks guidance on behavior when omitted). Output schemas are not documented, callers cannot predict response structure. Error handling exists but lacks recovery guidance. No tool annotations (readOnlyHint/destructiveHint) despite clear risk levels. Composition is sound: tools are single-purpose and chainable. Security: no secrets in params, but no audit logging visible.
Add a member to the household
Show recent expenses and transfers
Record an expense paid by one member for others
Record a payment from one member to another
Show who owes what and the settlement plan
Create a new household with a name, currency, and the founder's name
Reverse the most recent entry
Output schemas not documented. Tools return LedgerView, BalanceRow, SettlementRow objects but LLMs cannot predict structure. Callers must infer response fields, risking parsing errors and wasted tokens.
Parameter descriptions lack context. 'split_between' says 'optional; defaults to whole household' but does not explain what happens if a name in the array is invalid or not a member. 'limit' in recent_activity has no bounds (min/max).
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Tools are marked with Risk levels (WRITE, READ_ONLY, REVERSIBLE) in comments but not exposed to the MCP protocol. LLMs cannot distinguish safe from destructive calls.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 62 | 2025-06-18+ | v2 |
Show what the caller owes to a specific person
Error handling lacks recovery guidance. ToolError messages like 'You don't have a household yet' are user-friendly but do not tell the LLM what to do next (e.g., 'Call start_household to create one').
No pagination or result limits documented. recent_activity accepts a 'limit' parameter but no max is enforced or stated. show_balances and settle_up return unbounded lists; large households could exhaust context.