MCP server for financial data storage and RAG queries
Server has 4 tools with basic descriptions and schemas, but significant gaps in parameter documentation, error handling, and output structure. Tool names follow verb_noun convention (store_, query_, list_, delete_) which is good. However, descriptions lack actionable context for LLM selection, parameter descriptions are minimal or missing, and error messages do not guide recovery. Output schemas are not formally documented. The delete_transactions tool lacks proper confirmation UX. No input validation or sanitization visible. Schemas present but incomplete, many parameters lack type constraints and validation rules.
Delete transactions from both the JSON ledger and ChromaDB. Args: indices: List of transaction indices (from list_transactions) to delete delete_all: Set to true to delete all transactions confirm: Must be true to actually perform deletion (safety guard) Returns: Status message describing the deletion result
List stored transactions from the JSON ledger with optional pagination and filtering. Args: limit: Maximum number of transactions to return (default 20) offset: Number of transactions to skip from the beginning (default 0) category: Optional category filter (case-insensitive) Returns: Dictionary containing total count, pagination info, and transactions with index field
Search through all stored financial data using semantic search. Args: query: Search query string to find relevant transactions Returns: Formatted summary of matching transactions with totals
Parse and store transaction data from uploaded financial documents. If you receive unstructured financial data (statements, receipts, CSV files, etc.), extract transactions into the format: [{"date": "YYYY-MM-DD", "amount": number, "description": "string", "category": "string"}] Args: transactions: List of transaction dictionaries, each containing: - date: Transaction date (string, format: YYYY-MM-DD) - amount: Transaction amount (number, can be negative for expenses) - description: Transaction description (string) - category: Transaction category (string, optional, e.g. "Food", "Transport", "Bills") Returns: Success message with count of stored transactions
query_financial_history lacks output schema documentation. Returns free-text string instead of structured object. LLM cannot extract transaction IDs, dates, or amounts for downstream tool calls.
Parameter descriptions are minimal or absent. 'query' in query_financial_history has no guidance on format or expected content. 'category' in list_transactions lacks enum constraint or valid values. LLM must guess valid inputs.
No error handling guidance. store_transactions silently extends existing transactions without validation. delete_transactions raises ValueError but does not suggest recovery steps. LLM cannot self-correct on invalid input.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 53 | 2026-07-28+ | v2 |
store_transactions accepts unvalidated transaction objects. No checks for required fields (date format, amount type), missing category handling, or duplicate detection. Malformed input silently corrupts the ledger.
delete_transactions confirmation pattern is weak. 'confirm' boolean is easy to bypass; no audit trail or undo mechanism. Destructive operation should require explicit user approval, not just a flag.