MCP server wrapping the ZenMoney personal finance API.
Exposes tools (sync, read, search, write, bulk) via the Model Context Protocol over stdio, allowing LLM assistants to interact with your ZenMoney data.
Caution: Using MCP always carries a certain risk to your data, especially in the early stages of adoption. You or other users who decide to try MCP with ZenMoney may want to make backups (including daily backups to Telegram) and restore them to test accounts. See zentable.ru/backup and zentable.ru/backup/restore.
Important: When creating a test account, do it from a different phone or a cloned app. Otherwise, your bank synchronizations may break when you switch back to your main account.
cargo install zenmoney-mcpTo use this server, you need a ZenMoney API access token. You can obtain one by creating an application at ZenMoney API and following the OAuth2 flow, or by extracting the token from the ZenMoney web app (see the ZenMoney API documentation for details).
ZENMONEY_TOKEN=<your-token> zenmoney-mcpThe server performs an initial sync on startup, then serves MCP tools over stdio.
Add the following to your Claude Desktop config file:
| OS | Config path |
|---|---|
| macOS | ~/Library/Application Support/Claude/claude_desktop_config.json |
| Windows | %APPDATA%\Claude\claude_desktop_config.json |
| Linux | ~/.config/Claude/claude_desktop_config.json |
{
"mcpServers": {
"zenmoney": {
"command": "zenmoney-mcp",
"env": {
"ZENMONEY_TOKEN": "your-token-here"
}
}
}
}Replace your-token-here with your ZenMoney API token, then restart Claude Desktop.
sync— incremental sync with ZenMoney serverfull_sync— full re-download of all data
list_accounts— list financial accounts (filter by active)list_transactions— list transactions with filters (date, account, tag, payee, amount, type, uncategorized, sort)list_tags— list category tagslist_merchants— list merchantslist_budgets— list monthly budgetslist_reminders— list recurring reminderslist_instruments— list currency instruments
find_account— find account by titlefind_tag— find tag by titlesuggest_category— suggest category for a transaction (no confidence scores)get_instrument— get instrument by ID
create_transaction— create a transaction (expense/income/transfer with auto-resolved currency)create_tag— create a category tag (idempotent by title, case-insensitive)create_category— alias ofcreate_tagwith identical behaviorupdate_transaction— update an existing transaction by IDdelete_transaction— delete a transaction (returns details of what was deleted)prepare_bulk_operations— validate and preview batch create/update/delete (returnspreparation_id)execute_bulk_operations— execute a prepared bulk operation bypreparation_id
Find and remove duplicate transactions by searching for matching payee, amount, and date:
list_transactionswith date range + payee/amount filters to find potential duplicates- Review the results and identify true duplicates
delete_transactionto remove duplicates — the response shows full details of the deleted transaction for confirmation
Find uncategorized transactions and assign categories:
list_transactions(uncategorized: true)to find all transactions without tags- For each:
suggest_category(payee: "...")to get ZenMoney's suggestion update_transaction(id: "...", tag_ids: ["..."])to apply the category- Or use
prepare_bulk_operationsto preview categorizing many transactions, review the preview, thenexecute_bulk_operationsto commit
Generate a summary of income, expenses, and budgets for a month:
list_transactions(date_from: "2025-02-01", date_to: "2025-02-28", transaction_type: "expense", sort: "desc")for all expenseslist_transactions(date_from: "2025-02-01", date_to: "2025-02-28", transaction_type: "income")for all incomelist_budgets(month: "2025-02")for budget targetslist_accounts(active_only: true)for current account balances
MIT OR Apache-2.0