A remote MCP server for tracking and managing expenses with SQLite backend
ExpenseTracker has 3 well-named tools with clear action verbs (add_, list_, summarize). All tools have basic descriptions (51-82 chars) meeting the 10-1024 char baseline. All parameters have type definitions (string, number) and descriptions. However, descriptions are generic and lack context about WHEN to use each tool or what to do with results. Output schemas are completely undocumented, no guidance on expected response structure, fields, or error recovery paths. Parameters lack constraints (no date format specification, no amount range validation). Error handling returns plain status/message objects but provides no recovery guidance. Date parameters lack format specification (ISO 8601 assumed but not stated). The summarize tool's 'category' parameter defaults to null but is marked optional, this is ambiguous. Overall, tools are functional but fall short of production quality due to missing schema documentation and insufficient constraint specification.
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 completely undocumented. No specification of response structure, field types, or pagination. Tools return JSON objects but LLM has no guidance on extracting data or chaining calls.
Date parameters lack format specification. Descriptions say 'Date of the expense entry' and 'Start date for the range' but do not specify ISO 8601, YYYY-MM-DD, or any other format. LLM must guess.
No validation constraints on numeric 'amount' parameter. Baseline rubric requires min/max for numeric inputs (e.g. amount > 0). Unbounded values could produce nonsensical results or database errors.
Error handling provides no recovery guidance. Errors return {status: error, message: ...} with raw exception strings. No indication of whether the error is retryable, user-fixable, or fatal. Pattern:recovery-guide requires actionable next steps.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 49 | 2026-07-28+ | v2 |
| 2026-03-09 | D | 50 | - | v1 |
list_expenses lacks pagination. No limit, offset, page, or cursor parameters. Large date ranges could return hundreds of expenses, blooming context window. Baseline requires pagination for list tools.
summarize has ambiguous 'category' parameter: marked optional with default=null, but description says 'Optional category filter'. If null means 'no filter' vs undefined means 'all categories', this is unclear to the LLM.
Descriptions do not include dependency hints or WHEN to use each tool. No guidance on whether to call list_expenses vs summarize for a given task. Generic descriptions like 'Add a new expense entry' do not help LLM decide.