A headless personal accounting system designed for AI agents, providing MCP tools for managing financial accounts, transactions, transfers, and generating reports.
Server has 9 tools with consistent naming (verb_noun pattern) and basic descriptions. All tools have input schemas with type definitions and parameter descriptions. However, descriptions are generic and lack LLM-optimized guidance on WHEN to use each tool vs. alternatives. Output schemas are not documented, responses are free-form strings rather than structured objects. Error handling is minimal (generic 'Error: ...' messages). No tool annotations (readOnlyHint, destructiveHint). Missing pagination for list_transactions and get_summary despite potentially large result sets. Parameter constraints (enums for 'type', 'frequency') are documented in descriptions but not formalized in schemas.
Create a new financial account.
Delete a transaction by ID and reverse its effect on the account balance.
Get the current balance of a specific account or all accounts.
Get aggregated income and expense reports.
Query transactions with optional filters.
List all financial accounts and their current balances.
List all categories currently in use in the transaction database.
Output schemas not documented. All tools return free-form strings instead of structured JSON objects. LLMs cannot reliably extract fields for downstream tool chaining (e.g., account_id from add_account response).
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). LLMs cannot distinguish safe reads from destructive writes without explicit hints. delete_transaction especially needs destructiveHint=true.
Enum constraints (type, frequency) documented in descriptions but not formalized in JSON Schema. LLMs cannot parse constraints from text, they need formal enum arrays in the schema.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 58 | 2026-07-28+ | v2 |
Record a new income or expense transaction.
Transfer money between two accounts.
No pagination support for list_accounts, get_transactions, or get_summary. Large result sets will blow context windows. Missing limit, offset/cursor, and total_count fields.
Error handling is generic ('Error: Failed to...'). No recovery guidance, no invalid value echoing, no actionable next steps for LLMs. delete_transaction lacks confirmation/dry-run pattern.