MCP server for financial data tools providing banking, investment, and cryptocurrency data access and operations through Plaid and Robinhood integrations
FinAgent MCP server demonstrates solid foundational quality with well-defined tool schemas and consistent descriptions. All 7 tools have explicit JSON Schema definitions with typed parameters and descriptions. Tool naming follows verb_noun patterns (list_accounts, get_holdings, place_crypto_order). However, several critical gaps prevent a higher score: (1) Output schemas are not documented, the server defines inputs but provides no visible response schema definitions for any tool, which prevents LLMs from planning downstream calls. (2) Error handling is undocumented, no guidance on recovery strategies, error classification, or actionable messages. (3) Tool descriptions, while present, are functional but not optimized for LLM reasoning, they average ~100 chars and lack WHEN/WHY context. (4) Parameters like 'includeBalances' and 'groupBy' lack constraint documentation in descriptions. (5) One write operation (place_crypto_order) has dry_run defaulting to true, which is safe, but lacks explicit confirmation/dry-run pattern guidance. The code is well-structured with Zod schemas, TypeScript typing, and proper middleware (validation, error handling, rate limiting), but the MCP interface itself is incomplete for production agent deployment.
Returns user cryptocurrency positions with optional filtering by symbol, sorting by value, quantity, symbol, P&L, or P&L percentage
Returns user investment holdings with optional filtering by account and security type, sortable by value, quantity, symbol, or unrealized P&L
Returns user investment transactions with filtering by date range, account, symbol, and transaction type
Returns user accounts with optional balance information and filtering by account types
Returns user transactions with filtering by date range, merchant, category, and account IDs
Places a cryptocurrency buy or sell order with support for market and limit orders, dry-run mode, and time-in-force options
Output schemas are completely undocumented. No visible response structure definitions exist for any of the 7 tools, preventing LLMs from understanding what data to expect and how to chain tools together.
Error handling guidance is missing. No documented error classification, recovery strategies, or actionable error messages. The server has errorHandler middleware but tools provide no hint about when errors are retryable or user-fixable.
Tool descriptions lack LLM-optimized guidance. Descriptions average ~80 - 100 chars and do not explain WHEN to use each tool, prerequisites, or how to choose between overlapping tools (e.g., why call spending_summary vs list_transactions?).
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 51 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 44 | - | v1 |
Returns spending summary aggregated by category, merchant, month, or week with optional income inclusion and filtering
Parameter constraint descriptions are incomplete. Parameters like 'window' (enum: 7d, 30d, 90d, 1y), 'groupBy', and 'sortBy' lack natural-language guidance on valid values in their descriptions, LLMs must parse enum definitions from JSON Schema rather than readable text.
place_crypto_order lacks explicit confirmation/dry-run documentation. The tool has dry_run=true by default (safe), but the description does not clearly explain that dry-run is the default and how to toggle it for real orders. This invites accidental test calls or confusion about whether orders are live.
Pagination is not documented for list_* tools. list_accounts and list_transactions accept a 'limit' parameter (max 1000 and 500 respectively) but provide no offset/cursor or total count guidance, making pagination discovery unclear for LLMs.
Natural identifiers are not mentioned. Tools accept 'accountIds' and 'symbols' but do not indicate whether human-friendly names (e.g., 'Checking', 'Bitcoin') are also accepted alongside IDs, forcing agents to potentially make extra lookup calls.