mcp-server-zenmoney
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| TZ | No | Process time zone (e.g. Asia/Almaty) if the agent host runs in a different zone | |
| MCP_HTTP_HOST | No | HTTP bind address | 127.0.0.1 |
| MCP_HTTP_PORT | No | HTTP port | 3000 |
| MCP_TRANSPORT | No | http serves Streamable HTTP | stdio |
| MCP_HTTP_TOKEN | No | Bearer token HTTP clients must send; required for non-loopback binds | |
| ZENMONEY_CACHE | No | 0/false/no/off keeps data in memory only | on |
| ZENMONEY_TOKEN | No | ZenMoney API token from https://zerro.app/token | |
| ZENMONEY_API_URL | No | Pin a single API origin (fallback https://api.zenmoney.app) | https://api.zenmoney.ru |
| ZENMONEY_SYNC_TTL | No | Seconds before data is re-synced on the next tool call | 30 |
| ZENMONEY_CACHE_DIR | No | Snapshot cache directory (default: $XDG_CACHE_HOME/mcp-server-zenmoney, else ~/.cache/mcp-server-zenmoney) | |
| ZENMONEY_READ_ONLY | No | 1/true/yes/on registers only read tools | false |
| ZENMONEY_TOKEN_FILE | No | File containing the token (used when ZENMONEY_TOKEN is empty; ~ expanded) |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| prompts | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_overviewA | Start here. Returns today's date, the user's main currency, net worth, active account balances, this month's income/expenses with top categories, upcoming planned operations and data freshness. |
| list_accountsA | Accounts with balances, currency, credit limit, bank and flags. balance_main is the balance converted to the main currency. Totals cover in-balance accounts. Debt bookkeeping is in list_debts. |
| list_categoriesA | Category tree (ZenMoney "tags"; one nesting level) with ids, kind (expense/income/both) and number of uses in the last 12 months. Use names, "Parent / Child" paths or ids elsewhere. |
| list_payeesA | Known payees/merchants ranked by number of transactions, with last date and the category usually used for them. Useful for consistent categorization and payee spelling. |
| list_transactionsA | Find transactions with filters (dates/period, type, accounts, categories incl. subcategories, payee, free text, amount, currency). Newest first by default, paginated. Also returns income/expense totals of all matches in the main currency (in-balance accounts only, like ZenMoney reports), so "how much did I spend on X" needs only this call (or summarize_transactions for breakdowns). |
| summarize_transactionsA | Aggregate expenses and/or income by category, parent category, payee, account or time (day/week/month/year) with totals, counts and shares. measure=both gives income, expense and net per group (cash flow). Transfers and debts are excluded; amounts are converted with current rates. By default only in-balance accounts count, like ZenMoney reports. |
| get_budgetB | ZenMoney budget for a month: per category budget, actual, remaining, % used and still-planned operations, with subcategories and totals, in the main currency. Uses the profile's month start day. Rollover between months is not modelled. |
| list_plannedA | Scheduled / recurring operations (ZenMoney reminders) that are still planned in a date range, with recurrence, overdue and forecast flags, plus expected expense/income totals. |
| list_debtsA | Who owes whom: per-person debt balances from debt operations (positive = they owe you, negative = you owe them), per currency and in the main currency. Pass person to also get their debt transactions. |
| suggest_categoryA | Category and merchant suggestions for payee names, from ZenMoney's suggestion service and from this user's own history. |
| syncA | Pull the latest changes from ZenMoney now (tools already auto-sync when data is older than the configured TTL). full=true re-downloads everything. |
| create_transactionsA | Record one or more transactions (expense, income, transfer between own accounts, debt_out / debt_in with a person). Amounts are positive in the account currency. Without a category, one is picked from this payee's history or ZenMoney suggestions (auto_categorize). Returns the created transactions, updated balances and possible-duplicate warnings. |
| update_transactionsA | Change one or more existing transactions: amount, account, main category (null = uncategorized), payee, comment, date, original currency amount; transfers also to_account / to_amount. The type cannot change (delete and re-create instead). Use list_transactions to find ids. |
| delete_transactionsA | Delete transactions by id (soft delete; restore_transactions brings them back). |
| restore_transactionsA | Bring back deleted transactions (find them with list_transactions include_deleted=true). ZenMoney cannot undelete in place, so each comes back as a copy with a new id; already-restored ones are skipped. |
| create_categoryA | Create a category, optionally as a subcategory of a top-level category (ZenMoney allows one nesting level). |
| update_categoryB | Rename, move (parent null = top level), change kind, budget inclusion, mandatory flag or archive a category. |
| delete_categoryA | Delete a category. Its transactions and planned operations are moved to move_to (merge categories) or, with uncategorize=true, left without this category. Subcategories must be moved or deleted first. |
| set_budgetsA | Set exact monthly budget amounts (main currency) per category, for "total" (overall monthly budget) or "uncategorized". 0 removes that budget. Batch-friendly: e.g. copy last month's budgets to next month. |
| create_accountB | Create a cash, card, checking or e-money account. Bank-synced accounts are created by ZenMoney itself. |
| update_accountA | Rename, archive/unarchive, include in or exclude from balance, mark as savings, or change the credit limit. To fix a balance use adjust_account_balance. |
| adjust_account_balanceA | Make an account balance match reality by recording the difference as an income or expense correction transaction (computed against freshly synced data). |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| monthly_review | Income, spending by category vs. the previous month, budget status, upcoming payments and anomalies |
| categorize_transactions | Find transactions without a category and propose categories from payee history and ZenMoney suggestions |
| plan_budget | Propose monthly category budgets from the last three months of spending and current budgets |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 22 tools
Most tools target clearly distinct resources and actions, and descriptions explicitly disambiguate overlaps (e.g., list_transactions vs. summarize_transactions). However, several tools provide overlapping aggregate views (get_overview, list_transactions totals, get_budget, summarize_transactions) that an agent could confuse for a given reporting question.
The set follows a consistent snake_case verb_noun pattern (list_accounts, create_transactions, update_category, delete_transactions, etc.). The lone bare verb 'sync' is a minor deviation, but the convention is otherwise predictable and readable.
22 tools is on the heavy side for the 3-15 sweet spot, but each tool maps to a distinct finance operation (accounts, categories, transactions, budgets, planned, debts, analytics) and the domain genuinely supports this breadth. It is slightly over-scoped rather than bloated.
Coverage is strong: full CRUD for transactions (including restore), categories, and accounts, plus budgeting, debt, and analytics views. Gaps remain for planned/recurring operation creation and editing (only list_planned exists) and payee management (only list/suggest), which agents must work around.