MCP stdio server exposing MyTruv financial data as tools for AI agent integration
MyTruv MCP server has solid naming conventions (verb_noun pattern) and comprehensive tool descriptions (avg 150 chars). All 10 tools have input schemas with type definitions and parameter descriptions. Tool annotations (readOnlyHint, destructiveHint, idempotentHint) are properly applied. However, output schemas are not documented, LLMs cannot predict response structure. Error handling returns structured dicts but lacks recovery guidance (e.g., 'auth_required' error doesn't suggest calling authenticate()). Parameter constraints are described in text but not formalized as enums (e.g., 'category', 'merchant', 'time_period' for spending_analysis). No pagination support despite tools returning potentially large result sets (transactions, spending_analysis). Missing validation rules for date formats and numeric ranges.
Get current balances for all connected bank accounts. Returns per-account details and aggregated totals grouped by account type. Use balance_history instead if you need trends over time.
Log in to MyTruv by opening the browser for OAuth authentication. Call this when other tools return an 'auth_required' error. Opens the default browser for the user to sign in, then stores credentials locally.
Get historical balance trends showing assets, liabilities, and net worth over time. Args: date_range: How far back — '1M', '3M', '6M', '1Y', or 'ALL'. time_period: Aggregation period — 'day', 'week', or 'month'.
List all connected account links. Returns link IDs, providers, data sources, and connection status.
Get income report from payroll and bank sources. Combines income from payroll providers and bank transaction analysis. Args: days: Number of days to include (1-365). Default: 90.
Output schemas not documented. LLMs cannot predict response structure or plan downstream tool calls. Tools return dicts with unspecified fields (e.g., account_balances returns 'per-account details and aggregated totals' but structure is opaque).
Enum constraints described in text but not formalized in schema. spending_analysis 'group_by' accepts 'category|merchant|time_period' and 'time_period' accepts 'day|week|month', but schema shows type:string with no enum array. LLMs may hallucinate invalid values.
No pagination support. transactions() and spending_analysis() can return large result sets but lack limit/offset/page_size parameters and total_count in response. Large results blow context window.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 63 | <=2025-11-25 | v2 |
Get liabilities across all connected accounts. Includes credit cards and loans with current balances and credit limits.
Log out and clear stored MyTruv credentials. Revokes tokens server-side (best-effort) and removes local credentials. Safe to call when already logged out.
Detect recurring transactions — subscriptions, bills, and recurring income. Identifies recurring inflows and outflows from connected bank accounts.
Analyze spending patterns grouped by category, merchant, or time period. Args: group_by: How to group — 'category', 'merchant', or 'time_period'. time_period: Time bucket — 'day', 'week', or 'month'. start_date: Start date (YYYY-MM-DD). Defaults to 30 days ago. end_date: End date (YYYY-MM-DD). Defaults to today.
List bank transactions within a date range. Args: from_date: Start date in YYYY-MM-DD format. to_date: End date in YYYY-MM-DD format. Defaults to today. categories: Comma-separated category filter. Example: 'Income,Transfer'.
Error handling lacks recovery guidance. 'auth_required' error is returned but description doesn't explicitly state 'call authenticate() to fix this'. Errors return {error, message} but no actionable next steps.
Date format and numeric range constraints not formalized. transactions() requires 'from_date' in YYYY-MM-DD but no regex pattern in schema. income_report() accepts days 1-365 but no minimum/maximum in schema. LLMs may pass invalid values.