An MCP server for managing expense tracking with SQLite database backend. Provides CRUD operations, filtering, summarization, and statistics for expense entries.
The Trackor server presents 9 tools with reasonable naming (all start with action verbs) and complete input schemas. However, descriptions are minimal and lack LLM-specific context. Parameter descriptions are present but generic. Output schemas are not documented anywhere in the provided code. Error handling is not visible. This is a functional but basic implementation that would benefit from more detailed descriptions and output documentation.
Add a new expense entry to the database. Args: date: Expense date (YYYY-MM-DD format) amount: Expense amount category: Main category (e.g., Food, Transportation) subcategory: Optional subcategory (e.g., Groceries, Restaurants) note: Optional note about the expense
Delete an expense entry by ID.
Delete all expenses within a date range. Args: start_date: Start date (YYYY-MM-DD) end_date: End date (YYYY-MM-DD)
Export expenses in the specified format.
Get a specific expense by ID.
Get overall expense statistics.
Minimal tool descriptions lack LLM context. Tools like 'get_expense' and 'delete_expense' have single-sentence descriptions under 40 characters, which does not meet the 50-200 character baseline for LLM-optimized descriptions. No explanation of when to use each tool or what problem it solves.
Output schemas are completely undocumented. The code defines tool functions but provides no schema documentation for return types. LLMs cannot plan downstream calls or extract structured data without knowing what fields each tool returns. add_expense, get_expense, list_expenses all lack documented response formats.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 55 | 2026-07-28+ | v2 |
| 2026-03-09 | D | 50 | - | v1 |
List expense entries with optional filters. Args: start_date: Start date filter (YYYY-MM-DD) end_date: End date filter (YYYY-MM-DD) category: Filter by category limit: Maximum number of records to return
Summarize expenses within a date range. Args: start_date: Start date (YYYY-MM-DD) end_date: End date (YYYY-MM-DD) category: Optional category filter group_by_subcategory: If True, group by subcategory within category
Update an existing expense entry. Args: expense_id: ID of expense to update date: New date (YYYY-MM-DD) amount: New amount category: New category subcategory: New subcategory note: New note
No error handling guidance visible in code. Tools do not document how to handle failures (e.g., invalid date format, non-existent expense ID, database errors). No recovery hints provided to the LLM on what to do if a call fails.
Destructive operations (delete_expense, delete_expenses_by_date_range) lack confirmation/dry-run support. An LLM could accidentally delete large date ranges or multiple expenses. No pattern prevents catastrophic multi-record deletions.
get_statistics and export_expenses have empty or under-documented input schemas. get_statistics has {} as input but no description of what statistics are returned. export_expenses documents the format enum but not the response structure or whether results are paginated.
list_expenses uses null as default for date filters and category, but default=100 for limit. Baseline best practice is smart defaults: default to common case (e.g., last_7_days, limit=20) so simple invocations work without agent reasoning. Current defaults are vague on range.