Read-only MCP server for reconciling SimpleFIN Bridge against Firefly III.
Server has 19 tools with consistent naming (verb_noun pattern) and basic schemas. All tools have descriptions and input parameters are typed. However, descriptions are often generic (10-30 chars), output schemas are not documented, and error handling lacks recovery guidance. Tool annotations are present but descriptions need expansion to meet LLM optimization standards (50-200 chars baseline). No critical security issues detected, credentials are environment-injected, not exposed as parameters.
Tool descriptions are too short (10-40 chars). LLM optimization baseline is 50-200 chars. Descriptions like 'Find missing transactions' lack context on WHEN to use the tool, WHAT it returns, and HOW it differs from similar tools (e.g., reconcile_run_audit vs reconcile_find_missing_transactions).
Output schemas are not documented. Tool definitions show input schemas but no return type documentation. LLMs cannot plan downstream calls or extract required fields (e.g., does reconcile_run_audit return audit_id for later reference?). This violates the pattern:tool requirement.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 47 | 2025-06-18+ | v2 |
Error handling lacks recovery guidance. Tool-utils.ts defines jsonToolError() but does not provide actionable next steps (e.g., 'Try setup_list_simplefin_accounts() first to verify connection'). Errors should categorize as retryable, user-fixable, or fatal per pattern:recovery-guide.
Date range parameters (start_date, end_date, days) appear in 7 tools with identical schemas but no mutual-exclusivity documentation. LLMs may pass all three, causing ambiguous behavior. Descriptions should state: 'Provide either (start_date + end_date) OR days, not both.'
No pagination support documented. Tools like setup_list_simplefin_accounts, setup_list_firefly_accounts, setup_list_category_rules, and setup_list_ignored_findings lack limit/offset parameters and total_count in output. Large result sets risk context window exhaustion per pattern:paginated-result.