Finmap MCP server — accounts, operations, invoices, categories
Server has 22 tools with consistent naming (verb_noun pattern) and reasonable descriptions (avg ~80 chars). All tools have input schemas with types and descriptions. However, output schemas are undocumented (responses are text-formatted, not structured JSON), error handling is minimal (generic try-catch with errorResult), and parameter descriptions lack actionable constraints (e.g., date formats, enum values not always explained). No tool annotations (readOnlyHint/destructiveHint) despite clear risk levels. Missing pagination guidance in list tool descriptions. Composition is sound, tools are single-purpose and chainable via IDs.
List all Finmap accounts with balances (bank accounts, cash, cards, etc.)
Call any Finmap API endpoint directly (advanced)
List all expense categories
List all income categories
List all supported currencies
Create an expense operation
Create an income operation
Output schemas undocumented. All tools return textResult() with markdown-formatted strings instead of structured JSON. LLMs cannot parse field types or plan downstream tool calls. Responses should be structured objects with typed fields.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Tools are marked with Risk levels in metadata but not exposed to LLM via MCP annotations. Agents cannot distinguish safe reads from destructive writes without reading descriptions.
Error handling is generic. All errors caught with try-catch and passed to errorResult(). No actionable recovery guidance (e.g., 'User not found. Try search_users() first'). LLMs receive raw error messages with no next-step hints.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 60 | 2026-07-28+ | v2 |
List invoice companies (your company profiles)
Create a new invoice
Delete an invoice by ID (careful!)
Get invoice details by ID or external ID
List available goods/services for invoices
List/filter invoices
Delete an operation by ID (careful!)
Get operation details by ID or external ID
Search and filter operations (income/expense/transfer). Returns paginated list.
Create a new project
List all Finmap projects
List all suppliers/counterparties
Create a new tag
List all Finmap tags
Create a transfer between accounts
Reference/lookup tools (finmap_accounts, finmap_categories_*, finmap_suppliers) lack descriptions explaining when to call them. Should state 'Call this first to discover available options before creating operations.' Agents may not know these are discovery tools.
Destructive tools (finmap_invoice_delete, finmap_operation_delete) lack confirmation/dry-run support. No pattern to prevent accidental deletion. Descriptions say '(careful!)' but offer no mechanism to verify intent before executing.