[2.0.0] - 2026-04-15
Breaking change. Migrates the entire MCP server from LunchMoney's v1 API (https://dev.lunchmoney.app/v1) to the v2 API (https://api.lunchmoney.dev/v2, currently in alpha). v2 is not backwards-compatible with v1, and this release is not backwards-compatible with v1.x of this server. Tool count grows from 29 to 41.
Breaking
- Base URL changed to
https://api.lunchmoney.dev/v2. ExistingLUNCHMONEY_API_TOKENworks unchanged. assetsrenamed tomanual_accountseverywhere.get_all_assets/create_asset/update_assetare nowget_all_manual_accounts/create_manual_account/update_manual_account. Field renames in request bodies:type_name→type,subtype_name→subtype,exclude_transactions→exclude_from_transactions.- Transaction field renames affecting both filters and bodies:
asset_id→manual_account_id,tags(array of{id, name}) →tag_ids(array of integers),is_groupfilter →is_group_parent. User response:user_id/user_name/user_email→id/name/email. debit_as_negativeis gone. v2 always uses signed amounts (positive = debit, negative = credit) on every transaction endpoint.update_transactionbody is no longer wrapped in{ transaction: { ... } }. The newupdate_transactiontool takes the partial update under anupdatefield and exposesupdate_balance(boolean query param, default true) instead of v1'sskip_balance_update.- Transaction status enum changed from
cleared/uncleared/pendingtoreviewed/unreviewed/delete_pending(and writeable values are limited toreviewed/unreviewed). - Categories consolidated. Dropped
create_category_group,add_to_category_group,force_delete_category.create_categoryandupdate_categorynow handle category groups viais_groupandchildrenfields.delete_categoryaccepts aforceboolean to override the dependency check. - Crypto endpoints removed in v2.
get_all_cryptoandupdate_manual_cryptoare preserved as tool names but rewritten as thin wrappers over/manual_accounts(filtering / updating accounts wheretype === "cryptocurrency"). - Budget summary moved.
get_budget_summarynow callsGET /summaryinstead ofGET /budgets. Response shape is different and supports new include flags (include_occurrences,include_totals,include_rollover_pool, etc). - Dropped
unsplit_transactions(POST) andget_transaction_group(GET) v1 tools — see the new tools below.
Added
- Tags CRUD:
get_single_tag,create_tag,update_tag,delete_tag(withforceflag). - Manual accounts CRUD:
get_single_manual_account,delete_manual_account(withdelete_itemsanddelete_balance_historyflags). - Plaid accounts:
get_single_plaid_account.trigger_plaid_fetchnow accepts optionalstart_date,end_date, andidto scope the fetch. - Recurring items:
get_single_recurring_item.get_recurring_itemsaddsinclude_suggested. - Budgets:
get_budget_settings(GET/budgets/settings).upsert_budgetadds optionalnotes. - Transactions — many new filters on
get_transactions:created_since,updated_since,manual_account_id,plaid_account_id,is_pending,include_pending,include_metadata,include_split_parents,include_group_children,include_children,include_files. Limit max raised from 500 to 2000. - Transactions — new tools:
delete_transaction,update_transactions_bulk,delete_transactions_bulk(each capped at 500),split_transaction,unsplit_transaction,attach_file_to_transaction(multipart upload from a local file path),get_transaction_attachment_url,delete_transaction_attachment. update_transactionexposes the newadditional_tag_idsfield for additive (vs. replacement) tag semantics.api.upload(path, formData)helper added insrc/api.tsfor multipart uploads, with the same auth and retry behavior as the JSON helpers.api.delete(path, body?)accepts an optional JSON body to supportDELETE /transactions.
Changed
- All list-style tools now pass through the v2 envelope (e.g.
{ tags: [...] },{ manual_accounts: [...] },{ transactions: [...], has_more }) instead of unwrapping to a bare array. - Response handling for 204 No Content is explicit on every DELETE-style tool.