MCP server for Ledgr financial management application, providing tools for reading and writing financial data including transactions, accounts, budgets, categories, and investment holdings
Ledgr exposes 6 read-only financial tools with consistent naming (verb_noun pattern: get*, search*) and basic descriptions. All tools have input schemas with type definitions and parameter descriptions. However, descriptions are terse (avg 45 chars, well below the 194-char baseline), lack context on WHEN to use each tool, and omit dependency hints. Output schemas are not documented, LLMs cannot plan downstream calls or extract structured data reliably. No error handling guidance. Parameter constraints are minimal (only getMonthlyTrends and getUpcomingBills have min/max bounds). The tools are well-composed (single responsibility, read-only), but descriptions need expansion to meet LLM-optimization standards.
Get current balances for all accounts
Get budget vs actual spending for current month
Get month-over-month spending totals
Get spending breakdown by category for a date range
Get upcoming recurring bills
Search transactions by description, date range, or category
Descriptions are too brief (avg 45 chars vs 194-char baseline). 'Get spending breakdown by category for a date range' lacks context on when to call this vs searchTransactions, what the output structure is, or how to use results downstream.
Output schemas are not documented. LLMs cannot infer what fields each tool returns (e.g., does getSpendingByCategory return {category, amount, percentage}? Is it an array or object?). This forces agents to guess and risks parsing errors.
No error handling guidance. If a date range is invalid, a transaction search returns no results, or an account is locked, the LLM receives no recovery hint. Descriptions should include 'If no results, try expanding the date range' or similar.
Inferred effective spec: 2025-06-18+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 53 | 2025-06-18+ | v2 |
Parameter constraints are sparse. searchTransactions accepts optional query, startDate, endDate, category but provides no guidance on format (e.g., is query case-sensitive? Does category accept partial matches?). getAccountBalances has no parameters but no description of what 'all accounts' means.
No tool-chaining hints. If an LLM calls getSpendingByCategory and wants to drill into a specific category, there is no guidance to call searchTransactions next. Descriptions should hint at common workflows.