zenfinance
Household finance memory, budgets, transactions, and monthly reviews for AI assistants.
What it can do
- Get User Context: Start here for Zen requests. Returns saved household context (org IDs, categories, accounts, budgets, currencies, invites) plus the advisor skill — your operating guide for Zen's fam
- Create Org: Create a Zen household/personal org when none exists or the user explicitly needs another one. Caller is owner; returns refreshed workspace context.
- Invite Member: Invite a user by email to an org. Caller must be an owner; DB enforces this. Ask invitee to call get_user_context.
What data it sees
Do you need an account
No: the server works without sign-in
Household finance memory, budgets, transactions, and monthly reviews for AI assistants. Give your LLM a financial advisory brain.
How to connect
How to connect zenfinance to Claude
The server address to paste into Claude settings:
https://zenfinance--zenlabs.run.tools
- Open Claude (claude.ai or the desktop app).
- Go to Settings → Connectors.
- Click Add custom connector.
- Paste the server address copied below into Remote MCP server URL and click Add.
- In a chat, click + → Connectors and switch the new connector on.
Custom connectors are available on Free, Pro, Max, Team and Enterprise plans (Free is limited to one). On Team and Enterprise an organization Owner adds the connector first under Organization settings → Connectors.
Authorization
After you click Add, a sign-in window for the service opens. Sign in with your own account and approve access. Claude never sees your password.
How to connect zenfinance to ChatGPT
The server address to paste into ChatGPT settings:
https://zenfinance--zenlabs.run.tools
- Open ChatGPT in a browser (chatgpt.com). A Plus, Pro, Business, Enterprise or Edu plan is required.
- Turn on developer mode once: Settings → Apps → Advanced settings → Developer mode.
- Open Settings → Connectors and click Create.
- Fill in the form: Name (anything), Description (one line about what the service does), MCP server URL (copy it below).
- Under Authentication choose OAuth if the service requires sign-in, otherwise None. Click Create.
- In a new chat open + → Apps/Connectors and enable the connector.
OpenAI has renamed this section before (Connectors → Apps/Plugins). If the label differs, search settings for "developer mode". On Business/Enterprise workspaces an admin must allow custom connectors first.
Authorization
On first use ChatGPT opens the service's sign-in window. Sign in and approve access.
How to connect zenfinance to Cursor
The server address to paste into Cursor settings:
https://zenfinance--zenlabs.run.tools
Fastest: click Open in Cursor below and confirm the prompt.
Manually:
- In Cursor open Settings → Cursor Settings → MCP and click Add new global MCP server.
- Paste the JSON copied below into
~/.cursor/mcp.json(per project:.cursor/mcp.jsonin the repo root). - Save the file. The server appears in the MCP list; authorize it there if asked.
Authorization
If the service needs sign-in, an authorize button appears next to the server in the MCP list.
Server tool list (16)
Raw names from tools/list. Only developers need these.
| get_user_context | Start here for Zen requests. Returns saved household context (org IDs, categories, accounts, budgets, currencies, invites) plus the advisor skill — your operating guide for Zen's family-office mission and how to advise well. |
| create_org | Create a Zen household/personal org when none exists or the user explicitly needs another one. Caller is owner; returns refreshed workspace context. |
| invite_member | Invite a user by email to an org. Caller must be an owner; DB enforces this. Ask invitee to call get_user_context. |
| respond_invitation | Accept or deny a pending invitation from get_user_context.invites. Accept creates a named member with role member. |
| save_transaction | Persist income/expense lines as saved Zen data. Use after reading a user-provided statement, PDF, or described transactions — not to correct existing rows (use edit_transaction for that, or delete + recreate for direction flips). Groups lines under one operation; cashflow is attributed to operation_date month, not today. Send whole statements in one call with expected_count set; the response lists saved and not_saved rows — if ok is false, check not_saved, fix ONLY those rows, and resend ONLY them. Rows in saved are already persisted: never resend them. |
| get_transactions | Read saved Zen transaction lines for one org/date range. Use before analysis and before fixing user-reported wrong data, and to verify an import right after save_transaction (compare the saved month against the source document); results are mapped so far, not complete financial truth. |
| edit_transaction | Edit one or more saved Zen transactions in a single call. Accepts a list of up to 500 edits — each item targets one transaction by ID and specifies date, amount, category (slug or UUID), description, counterparty, and/or tags. Useful after bad imports where many rows need the same correction. Each edit is committed independently (partial success is possible) — the results array states the outcome per item; retry only items with ok=false. For income<->expense direction flip, delete the wrong row and save a new one. tags: null=no change, []=clear all tags, [name,...]=replace all tags. |
| delete_transaction | Delete one or more saved Zen transactions in a single call. Accepts up to 500 transaction IDs. Useful for removing an entire duplicated statement import. Each deletion is committed independently (partial success is possible). Use before recreating when expense/income direction is wrong. |
| create_transaction_category | Create a household-specific transaction category. Check list_transaction_categories first — avoid creating duplicates of existing ones. The slug is normalized to lowercase and permanent; only display metadata can be edited later. Use archive_transaction_category to retire a category, which frees the slug for reuse. |
| edit_transaction_category | Update a category's display label, description, examples, or aliases. Use to localize category names to the household's language or to improve classification guidance. Does not change the stable slug or kind — use create + archive to replace a category with a different kind. |
| archive_transaction_category | Retire a category so it no longer appears in active lists. Use when a category is no longer relevant; existing transactions keep their category link. Prefer over deletion — archiving is reversible at the DB level and preserves history. Do not archive if you intend to reclassify its transactions first. |
| list_transaction_categories | List org-level transaction categories. Use before creating a category to check for duplicates, or when inspecting archived categories before migrating their transactions. Read-only. Prefer get_user_context for active categories during normal workflows — use this tool when you need archived or full category detail. |
| set_budget | Set saved Zen monthly budgets for one or more categories (referenced by slug, e.g. 'groceries'). History is captured automatically; explain the effective month to the user. |
| get_budget_status | MANDATORY for any budget-vs-actual question ('are we over budget', 'how are the budgets doing'). ALWAYS call this tool before discussing budget performance — never answer from chat memory; saved data may have changed. NOT for full month reviews: use get_monthly_summary for those. Use 'mapped so far' language if account/category coverage may be incomplete. |
| report_feedback | File a concise, non-sensitive product observation from this session — bugs, gaps, praise, or feature ideas. Use proactively when you notice a product limitation, tool mismatch, or missing capability; do not wait for the user to ask. Write-only surface: inserts into feedback_reports; no read tool exists today. |
| get_monthly_summary | MANDATORY for any monthly review or summary request ('how did we do', 'monthly review', 'show me May', 'made/spent/saved'). ALWAYS call this tool — NEVER answer monthly-review questions from chat memory or earlier tool results: the family dashboard UI renders ONLY when this tool is actually invoked, and saved data may have changed since the last call. Returns curated Made/Spent/Saved, prior-month comparison, category/budget drivers, bursts, and transactions. Say mapped so far unless coverage is complete. |