Zenmoney MCP
MCP server wrapping the ZenMoney personal finance API
Ask AI about Zenmoney MCP
Powered by Claude Β· Grounded in docs
I know everything about Zenmoney MCP. Ask me about installation, configuration, usage, or troubleshooting.
0/500
Reviews
Documentation
zenmoney-mcp
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.
Installation
cargo install zenmoney-mcp
Getting a Token
To 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).
Usage
ZENMONEY_TOKEN=<your-token> zenmoney-mcp
The server performs an initial sync on startup, then serves MCP tools over stdio.
Claude Desktop Integration
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.
Tools
Sync
syncβ incremental sync with ZenMoney serverfull_syncβ full re-download of all data
Read
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
Search
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
Write
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
Usage Scenarios
Deduplication of Transactions
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
Setting Up Correct Categories
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
Monthly Financial Report
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
License
MIT OR Apache-2.0
