Banking data MCP server — give your AI assistant read-only access to bank accounts via pluggable providers
bank-mcp demonstrates solid foundational quality with all 5 tools properly registered, named with action verbs, and accompanied by clear descriptions. Tool naming follows the verb_noun pattern (list_accounts, get_balance, search_transactions, etc.), which is excellent for LLM disambiguation. Descriptions are specific and mention key features like filtering options, date ranges, and grouping parameters. However, output schemas are completely undocumented, the source shows only input schemas via Zod, but no type definitions for what these tools return. This is a critical gap: LLMs cannot plan downstream actions or extract fields when return types are invisible. Parameter descriptions are present and generally actionable (e.g., 'Account UID to list transactions for'), but some lack explicit constraints (e.g., date format is mentioned as YYYY-MM-DD only in one tool, not consistently). Error handling is minimal, no recovery guidance, no categorization of retryable vs. fatal errors. All tools are READ_ONLY (safe retry profile), which is good. Security posture is reasonable given the read-only nature, but no evidence of rate limiting, input validation, or audit logging.
Get current account balance(s). Returns closing booked balance and expected balance when available.
List all bank accounts across configured connections. Returns account UIDs, IBANs, names, and currencies.
List bank transactions with optional filters. Defaults to last 90 days. Supports date range, amount range, and debit/credit type filtering.
Full-text search across transaction descriptions, merchant names, and references. Use for finding specific payments or payees.
Group expenses by merchant or category with totals. Shows where money is being spent. Use groupBy "merchant" for vendor breakdown, "category" for category breakdown.
Output schemas completely undocumented. No return type definitions visible in source code. LLMs cannot determine what fields to extract or plan multi-step chains without knowing the response structure.
No error handling guidance. Tools do not describe recovery steps, categorization of errors (retryable vs. fatal), or actionable error messages. If a tool fails, the agent has no guidance on what to do next.
Pagination not explicitly documented. list_accounts and list_transactions may return large result sets, but descriptions do not mention limit defaults, whether pagination is supported, or how to fetch additional pages.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 55 | 2026-07-28+ | v2 |
| 2026-03-09 | D | 58 | - | v1 |
Date format constraints inconsistently documented. list_transactions and search_transactions mention YYYY-MM-DD, but get_balance and spending_summary do not. Zod schema likely enforces this, but descriptions should be explicit and uniform.
No documentation of response field naming conventions. If list_accounts returns 'account_uid' but list_transactions expects 'accountId', LLM must infer the mapping, forcing unnecessary lookups and increasing error likelihood.
accountId parameter type ambiguous. Descriptions say 'Account UID' but do not specify format (UUID, numeric string, alphanumeric). LLMs may pass incorrectly formatted IDs.