Remote MCP server for tracking and managing expenses with SQLite database backend
ExpenseTracker provides three well-named tools with complete input schemas and reasonable descriptions. However, several critical gaps reduce confidence: output schemas are not formally documented, error handling is minimal (returns generic dict objects without actionable recovery guidance), parameters lack detailed format constraints, and there is no pagination support for list results despite the tool's potential to return many records. Tool naming is clear and verb-driven (add_, list_, summarize), and descriptions are concise. Parameter descriptions exist but are minimal (7-20 chars). The server implements proper async handling and basic validation, which is positive, but lacks the robustness expected of production tools.
Add a new expense entry to the database.
List expense entries within an inclusive date range.
Summarize expenses by category within an inclusive date range.
Output schemas not formally documented. list_expenses and summarize return dictionaries without explicit type declarations (fields, types, required properties). LLMs cannot plan downstream operations or extract structured data reliably.
No pagination support. list_expenses lacks limit, offset, or cursor parameters and returns all matching rows unbounded. A year of daily expenses (365 rows) plus multi-row detail fields could exhaust context windows. Large result sets break LLM reasoning.
Error handling does not guide recovery. Errors return generic dicts like {'status': 'error', 'message': '...'} without actionable next steps. 'Database error: ...' tells the LLM nothing about whether to retry, check permissions, or call a diagnostic tool.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 58 | 2026-07-28+ | v2 |
| 2026-03-09 | D | 52 | - | v1 |
Parameter descriptions are too brief. 'Date of the expense' (20 chars) and 'Start date for the range' (23 chars) lack format guidance. No mention of ISO 8601, locale, or what happens if dates are invalid. LLMs may pass ambiguous formats.
add_expense lacks input validation and confirmation. No dry-run, no pre-flight check. Amount could be negative, date could be malformed, category unconstrained. Agents can silently create invalid records.
No enum constraints on category parameter. Agents may hallucinate invalid categories. Either provide a dynamic enum (via a discovery tool) or document valid values explicitly.