FastMCP remote server experiment for tracking and managing expenses with SQLite database backend.
ExpenseTracker has 3 tools with basic schemas and descriptions. All tools have input schemas with typed parameters and descriptions present. However, descriptions are minimal (10-60 chars), falling below the 50-200 char baseline for LLM-optimized tools. Output schemas are not documented, callers cannot predict response structure. Error handling returns generic error dicts without recovery guidance. No parameter constraints (enums, ranges) despite categorical inputs like 'category'. Tool names follow verb_noun convention (add_expense, list_expenses, summarize) but 'summarize' is vague, does it aggregate, filter, or report? No tool annotations (readOnlyHint, destructiveHint) despite clear READ/WRITE semantics. Missing pagination on list_expenses despite potential for large result sets.
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.
Descriptions are too short (10-60 chars vs 50-200 baseline). 'Add a new expense entry to the database.' lacks context on when to use vs other tools, what fields are required, and what the response contains.
Output schemas not documented. Callers cannot predict response structure (e.g., does list_expenses return {status, data} or [{id, date, ...}]?). LLMs must infer from examples.
No parameter constraints. 'category' accepts free-form strings; should be an enum of valid categories (Food & Dining, Transportation, etc.) from the categories resource.
list_expenses lacks pagination. No limit, offset, or page parameters. Large result sets will blow context windows. Should cap results at 50 and offer cursor-based pagination.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 50 | 2026-07-28+ | v2 |
Error handling returns generic dicts without recovery guidance. 'Database error: ...' tells LLM nothing actionable. Should categorize as retryable vs user-fixable and suggest next steps.