MCP server for querying and analyzing MoneyWiz financial data from SQLite database exports
MoneyWiz MCP has good structure with 10 tools clearly registered in server.go. All tools have descriptions (194-char average is above the 34-char p10 baseline), proper JSON Schema registration with typed properties, and consistent naming using action verbs (list_, get_, analyze_, calculate_). However, several critical gaps prevent a higher score: (1) output schemas are completely undocumented, the code shows tool registration but no return type documentation in either the schema definitions or function signatures visible in the excerpt; (2) most tools lack parameter descriptions in the schema itself (e.g., list_accounts and list_categories have empty Properties maps in their InputSchema); (3) no evidence of error handling patterns or recovery guidance in the visible code; (4) tool descriptions do not explain WHEN to use each tool versus similar ones (e.g., analyze_spending_trends vs get_financial_stats distinction is unclear); (5) security and audit patterns are not visible (no evidence of logging, permission checks, or input validation). The tools themselves are well-named and clearly focused on financial analysis, with good domain separation. List and analysis tools appropriately note multi-currency handling and omit currency conversion. However, without visible output schema documentation and parameter validation guidance, agents will struggle to chain these tools effectively.
Analyze raw MoneyWiz income by full category path and time period. When transactions span multiple currencies, the caller is responsible for applying exchange rates and computing unified totals. The tool intentionally does not perform currency conversion.
Analyze raw MoneyWiz spending by full category path and time period. When transactions span multiple currencies, the caller is responsible for applying exchange rates and computing unified totals. The tool intentionally does not perform currency conversion.
Calculate raw MoneyWiz net worth by currency. When transactions span multiple currencies, the caller is responsible for applying exchange rates and computing unified totals. The tool intentionally does not perform currency conversion.
Get the balance for a specific account by ID
Get raw MoneyWiz financial statistics with explicit per-currency breakdowns. When transactions span multiple currencies, the caller is responsible for applying exchange rates and computing unified totals. The tool intentionally does not perform currency conversion.
Output schemas are completely undocumented. Handler functions (handleVersion, handleListAccounts, etc.) exist in server.go but no return type definitions are visible. LLMs cannot plan downstream tool calls or extract chaining IDs without knowing what fields to expect.
Parameter descriptions missing from JSON Schema. Tools like list_accounts and list_categories register empty Properties maps; tools with parameters (e.g., analyze_spending_trends) register enums and defaults but no parameter-level descriptions in the schema. The schema object should have a 'description' field for each property.
Inferred effective spec: 2025-06-18+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 52 | 2025-06-18+ | v2 |
| 2026-03-09 | F | 0 | - | v1 |
Returns income, spending, and savings recommendations from MoneyWiz data, broken down per currency. When transactions span multiple currencies, the caller is responsible for applying exchange rates and computing unified totals. The tool intentionally does not perform currency conversion.
List all MoneyWiz accounts with balances and explicit account currencies
List all MoneyWiz categories with parent IDs/names, full category paths, category type when available, and root markers
List recent transactions with account name, currency, category leaf name, full category path, and movement type; transfer-like rows are labeled explicitly
Return the MoneyWiz MCP server version and response metadata shape.
No pagination support documented. list_transactions accepts a 'limit' parameter (default 50) but no offset, cursor, or total_count guidance. Returning fixed-size chunks without pagination metadata risks LLMs requesting all data or getting incomplete results.
Tool descriptions do not explain WHEN to use each tool. analyze_spending_trends and analyze_income_trends are described identically except for 'spending' vs 'income'. No guidance on when to choose analyze_spending_trends vs get_financial_stats, or get_savings_recommendations vs calculate_net_worth. LLMs will guess or call all of them.
No error handling or recovery guidance visible. Code shows tool registration but no error pattern, no retryable vs fatal error classification, no actionable error messages. An LLM facing a database error has no guidance on how to proceed.
Parameter constraints not documented in descriptions. Tools accept date ranges (from_date, to_date as YYYY-MM-DD strings), integers (account_id, category_id, limit, months), and enums (group_by). The descriptions mention formats in passing (e.g. 'YYYY-MM-DD format') but parameter-level validation rules, min/max bounds, and error guidance are missing.
No evidence of tool annotations (readOnlyHint, destructiveHint, idempotentHint). All tools are read-only by design, but the schema registration does not include explicit hint metadata. Modern MCP spec (2026-07-28) encourages tool annotations for agent planning.