finance-agent
# finance-agent
Conversational personal finance for Cursor:
- **Bank data** → [Plaid CLI](https://plaid.com/docs/resources/cli/) (`plaid link`, balances, transactions, …)
- **Planning memory** → this MCP + local SQLite (goals, monthly notes, category rules, nicknames)
No dashboard. Link accounts with the CLI, then plan in chat.
Requires Node.js 22+ and the Plaid CLI (`brew install plaid/plaid-cli/plaid`).
## Setup
```bash
# Plaid Trial / Production (one-time)
plaid login
plaid link --products transactions,liabilities,investments
# This MCP
cp .env.example .env
npm install
npm run build
```
Trial plans support up to 10 linked Items.
## Add to Cursor MCP
```json
{
"mcpServers": {
"finance-agent": {
"command": "node",
"args": ["/ABSOLUTE/PATH/TO/finance-agent/dist/index.js"],
"env": {
"DATABASE_PATH": "/ABSOLUTE/PATH/TO/finance-agent/data/planning.db"
}
}
}
}
```
The MCP shells out to `plaid … -j`, so the CLI must be on `PATH` for the Cursor process.
## Tools
| Tool | Source | Purpose |
|---|---|---|
| `list_linked_items` | CLI | Linked institutions |
| `get_balances` | CLI | Live balances |
| `get_transactions` | CLI | Transactions by date |
| `get_liabilities` | CLI | Cards/loans detail |
| `get_investments` | CLI | Holdings |
| `summarize_cashflow` | CLI + local rules | Monthly planning summary |
| `list_goals` / `upsert_goal` | SQLite | Persistent goals |
| `list_plan_notes` / `add_plan_note` | SQLite | Month-to-month notes |
| `add_category_rule` | SQLite | Merchant → category |
| `upsert_account_nickname` | SQLite | Friendly account names |
## Link more accounts
```bash
plaid link --products transactions,liabilities,investments
plaid item list
```
TDQS
Scored across 15 tools
Each tool targets a distinct resource and action: fetching data, summarizing cashflow, and managing goals, notes, rules, and nicknames are all clearly separated. No two tools appear to overlap in purpose, and the list/add/upsert/get pairs are well delineated.
All tool names follow a consistent snake_case verb_noun pattern (e.g., list_goals, add_plan_note, get_balances). The verbs vary (list, get, add, upsert, summarize, setup) but the pattern is uniform and predictable, with no mixed casing or style deviations.
With 15 tools, the server is well-scoped for a finance planning assistant. Each tool contributes to either data retrieval or memory management, and no redundant or unnecessary tools are present. The count falls comfortably within the ideal 3-15 range.
The set covers reading live financial data, summarizing cashflow, and managing goals, notes, rules, and nicknames, but lacks any delete/remove operations for these mutable resources. Users can add or update but not delete plan notes, category rules, or goals, creating potential dead ends and making the lifecycle incomplete.