A remote MCP server for tracking and managing expenses with persistent SQLite storage
ExpenseTracker provides two tools with basic definitions and schemas. Both tools have descriptions and explicit input schemas visible in the source code. However, the descriptions are terse (19-47 chars), parameter descriptions lack detail about format and constraints, output schemas are undocumented, and error handling is absent. The tool names follow action-verb convention (add_*, list_*), which is correct. No tool annotations (readOnlyHint, destructiveHint, idempotentHint) are present despite add_expense being clearly destructive. The server demonstrates basic competence but falls well short of production-grade quality, typical for a community project.
Add a new expense to the database
List all expenses within a date range
Tool descriptions are too brief (19 - 47 characters). Rubric baseline is 194 chars average, p90=392. These descriptions lack WHAT the tool does, WHEN to use it, and any prerequisites.
Parameter descriptions are missing or extremely generic. 'Date of the expense' for 'date' is not actionable, no format specified (ISO 8601? YYYY-MM-DD?), no range, no validation rules. LLMs cannot infer format from name alone and will guess wrong, producing invalid input.
Output schemas are undocumented. add_expense returns {"status": "ok", "id": ...} and list_expenses returns an array of dicts, but nowhere in the MCP definition or tool description is this structure documented. LLMs cannot plan follow-up actions without knowing what fields to expect.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 48 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 47 | - | v1 |
No error handling or recovery guidance. If date parsing fails, or if the database is locked, what happens? No error responses shown.
add_expense is a destructive tool (WRITE risk) but has no tool annotation (destructiveHint) and no confirmation step.
Date parameter format is ambiguous. Is it 'YYYY-MM-DD', 'MM/DD/YYYY', ISO 8601, or epoch? The description says 'Date of the expense' with no constraint. Rubric: 'When a parameter has a regex pattern, length limit, or character restriction, state it in the description.' This will cause agent input errors.
No pagination support on list_expenses. If the database grows to thousands of entries, returning all of them will exhaust the context window and degrade LLM reasoning. Rubric: 'Tools returning lists should accept page/offset and limit parameters and return a total count or next_cursor.'
Parameter 'amount' is numeric but has no constraints. No min/max documented. LLMs can pass negative amounts, zero, or absurdly large numbers. Rubric: 'Specify minimum and maximum for numeric parameters (e.g. page_size 1 - 100, days 1 - 365).'
Category and subcategory have no enum constraint or valid-value list. How does an LLM know what categories exist? It will hallucinate. Rubric: 'When a parameter accepts one of a known set of values, declare it as an enum.'