MCP.Market

Lunch Money MCP server

by akutishevsky·io.github.akutishevsky/lunchmoney-mcp·v3.0.0·107 stars

MCP server for managing LunchMoney personal finances: transactions, budgets, categories, and more.

B78/100grade B
What users say
No reviews yet
Be the first
Safety scan
B78/100

full report

Adoption
Growing

107 stars

Reviews

Write one

Nobody has reviewed Lunch Money yet.

If you have run it, two minutes of your experience saves the next person an afternoon.

Lunch Money tools (59, 28 write)

write = sends, deletes, buys or posts

Read from the package source without running it. The installed server may list more.

  • add_supported_cryptocurrency

    Add a new cryptocurrency to the supported manual-crypto list by submitting its CoinGecko coin-page URL. Only needed when get_supported_cryptocurrencies does not already list the symbol you want to track.

  • attach_file_to_transaction

    Attach a local image or PDF receipt (max 10MB) to a transaction. Allowed types: image/jpeg, image/png, image/heic, image/heif, application/pdf. The file is read from the local filesystem of the host running this MCP server, and its type is determined from its actual contents — files that are not a real image or PDF are rejected. If LUNCHMONEY_ATTACHMENTS_DIR is set on the host, only files inside t

  • create_categorywrite action

    Create a new category or a category group. Set is_group=true to create a category group; supply children as an array of existing category IDs and/or strings (names of new sub-categories to create).

  • create_manual_accountwrite action

    Create a new manually-managed account. (Formerly `create_asset`.)

  • create_manual_cryptowrite action

    Create a manually-managed crypto asset. The symbol must match one returned by get_supported_cryptocurrencies.

  • create_tagwrite action

    Create a new tag.

  • create_transaction_groupwrite action

    Create a transaction group from 2-500 existing transactions. Source transactions are hidden from get_transactions and accessible via the new group's `children` (set include_children=true on get_single_transaction). Cannot include split or recurring transactions.

  • create_transactionswrite action

    Insert one or more transactions (1-500 per call). Returns inserted transactions plus any skipped duplicates.

  • delete_account_balance_historywrite action

    Delete ALL historical balance entries for a single account. This is irreversible and affects the Net Worth views. To remove a single month, use delete_balance_history_entry instead.

  • delete_balance_history_entrywrite action

    Delete a single historical balance entry by its id. The id must come from an entry with type=historical in a balance history response; ephemeral `current` entries have no id and cannot be deleted.

  • delete_categorywrite action

    Delete a single category or category group. By default fails (HTTP 422) if dependencies exist, returning a structured `dependents` payload. Set force=true to delete and disassociate from all related budgets, transactions, recurring items, etc. Force delete is irreversible.

  • delete_crypto_synced_balance_historywrite action

    Delete ALL historical balance entries for a synced crypto holding. This is irreversible and affects the Net Worth views.

  • delete_manual_accountwrite action

    Delete a manually-managed account. Optionally also delete its transactions/rules/recurring items, and/or its balance history. Both deletion options are irreversible.

  • delete_manual_cryptowrite action

    Delete a manually-managed crypto asset. If the asset has balance history, keep_history must be set explicitly or the API rejects the request. Irreversible.

  • delete_tagwrite action

    Delete a tag. By default fails (HTTP 422) with a structured `dependents` payload if the tag is in use by transactions or rules. Set force=true to delete and disassociate from those records.

  • delete_transactionwrite action

    Delete a single transaction. Fails for split/group transactions and their parents — unsplit/ungroup first. Irreversible.

  • delete_transaction_attachmentwrite action

    Delete a transaction file attachment. Irreversible.

  • delete_transaction_groupwrite action

    Delete (ungroup) a transaction group. The original child transactions remain and revert to normal ungrouped transactions.

  • delete_transactions_bulkwrite action

    Bulk-delete transactions by ID (1-500). Fails if any ID is a split or group parent, or part of a split/group; unsplit or ungroup those first. Irreversible.

  • get_account_balance_history

    Get monthly balance history for a single account. Call get_all_manual_accounts, get_all_plaid_accounts, or get_all_manual_crypto first to discover ids. For synced crypto holdings use get_crypto_synced_balance_history instead.

  • get_all_categories

    Get a list of all categories associated with the user's account. Returns categories in alphabetical order.

  • get_all_manual_accounts

    Get a list of all manually-managed accounts associated with the user. (Formerly known as `assets` in the v1 API.)

  • get_all_manual_crypto

    Get all manually-managed crypto balances associated with the user.

  • get_all_plaid_accounts

    Get a list of all Plaid (synced) accounts associated with the user.

  • get_all_synced_crypto

    Get all synced crypto accounts (Coinbase, Kraken, Ethereum wallets) and their nested per-symbol balances. Synced accounts are connected in the Lunch Money web app and cannot be created or edited through the API.

  • get_all_tags

    Get a list of all tags associated with the user's account.

  • get_balance_history

    Get monthly account balance history across all accounts — the data behind the Net Worth views in the LunchMoney app. History is monthly. With no month range, returns all available history plus an ephemeral `current` entry for the current month, which is calculated on demand and may change between requests. Only months with data are included.

  • get_budget_settings

    Get budget period and display settings for the account (granularity, period length, anchor date, hide-no-activity preference, income option, rollover-left-to-budget setting).

  • get_budget_summary

    Get a summary of the user's budget for a specified date range. Returns per-category totals (other_activity, recurring_activity, budgeted, available, recurring_remaining, recurring_expected). Set include_occurrences=true for a per-period breakdown matching the account's budget periodicity. (Backed by the v2 GET /summary endpoint.)

  • get_crypto_synced_balance_history

    Get monthly balance history for a synced crypto holding, identified by its account id and ticker symbol. Synced crypto is scoped per symbol, so it is not available through get_account_balance_history.

  • get_recurring_items

    Retrieve a list of recurring items expected for a specified date range. The `matches` object on each item is populated based on the requested range.

  • get_single_category

    Get details on a single category or category group, including the list of children categories for category groups.

  • get_single_manual_account

    Get details of a single manual account by ID.

  • get_single_manual_crypto

    Get a single manually-managed crypto balance by ID. Call get_all_manual_crypto first to discover ids.

  • get_single_plaid_account

    Get details of a single Plaid (synced) account by ID.

  • get_single_recurring_item

    Retrieve a single recurring item by ID. Optional date range populates the `matches` object.

  • get_single_synced_crypto

    Get a single synced crypto account and all its nested balances by ID.

  • get_single_tag

    Get details of a single tag by ID.

  • get_single_transaction

    Get details of a specific transaction. The response always includes plaid_metadata, custom_metadata, files, and (for split or group parents) the children array — none of which are returned by default in get_transactions.

  • get_supported_cryptocurrencies

    Get the list of cryptocurrencies supported for manual tracking. The `symbol` of an entry here is what must be passed to create_manual_crypto.

  • get_synced_crypto_balance

    Get a single balance held inside a synced crypto account, looked up by its cryptocurrency symbol.

  • get_transaction_attachment_url

    Get a short-lived signed download URL for a transaction file attachment. The response includes the URL and an `expires_at` timestamp.

  • get_transactions

    Retrieve transactions, optionally filtered by date range, account, category, tag, recurring item, status, and more. Returns at most `limit` transactions (default 1000, max 2000); `has_more` is set on the response when more match the filters. Pending and split-parent / group-child transactions are excluded by default.

  • get_user

    Get details on the current user

  • refresh_synced_crypto

    Trigger a balance refresh for a synced crypto account and return the refreshed account. Reaches out to the external crypto provider.

  • remove_budgetwrite action

    Remove the budget for a specific category and period. The request is idempotent — succeeds even if no budget exists for the period.

  • split_transaction

    Split an existing transaction into 2-500 child transactions. The sum of child amounts must equal the parent's amount. After splitting, the parent is hidden from get_transactions and accessible via get_single_transaction (returns the parent with `children`).

  • trigger_plaid_fetch

    Trigger a fetch of latest data from Plaid. Optionally scope the fetch to a date range and/or a specific Plaid account ID. Note: Plaid enforces a minimum 60-second delay between fetch requests; fetching may take up to 5 minutes.

  • unsplit_transaction

    Unsplit a previously split transaction by deleting its children and restoring the parent. Pass the parent (split_parent_id) — not a child — as the path id.

  • update_categorywrite action

    Update properties for an existing category or category group. For category groups, supplying children replaces the group's full child list. Cannot be used to convert between category and category group.

  • update_deleted_account_detailswrite action

    Update the display details shown for a deleted account in the Net Worth views. Applies to all historical entries for that deleted source. At least one field must be provided; pass null to clear a field.

  • update_manual_accountwrite action

    Update an existing manually-managed account. (Formerly `update_asset`.)

  • update_manual_cryptowrite action

    Update a manually-managed crypto balance. At least one of name, display_name, institution_name, or balance must be supplied. The symbol of an existing balance cannot be changed.

  • update_tagwrite action

    Update properties for an existing tag.

  • update_transactionwrite action

    Update an existing transaction. Provide any subset of writable fields directly (the v2 API no longer wraps the body in a `transaction` envelope). Cannot modify split or grouped transactions; use the corresponding split/group tools instead.

  • update_transactions_bulkwrite action

    Update multiple transactions in a single call (1-500). Each entry must include `id` plus at least one writable field. Cannot be used to modify split or grouped transactions.

  • upsert_account_balance_historywrite action

    Create or update monthly balance history entries for a single account. Every month must be a past calendar month — the current month is calculated on demand and cannot be written. The request is all-or-nothing: if any entry fails validation, none are applied. The response contains only the entries submitted, not the account's full history.

  • upsert_budgetwrite action

    Create or update a budget for a category and budget period. The start_date must be a valid budget period start for the account (see get_budget_settings).

  • upsert_crypto_synced_balance_historywrite action

    Create or update monthly balance history entries for a synced crypto holding. Every month must be a past calendar month. If an entry sets `symbol`, it must match the symbol argument. The request is all-or-nothing.

Public scan report

scanner v0.1.9 · 2026-09-24 · same rubric, same numbers if you re-run it

no findings
  • Code scan39 source files scanned25/25
  • –Live reliabilityno gateway calls yet and no remote to proben/a
  • –Tool poisoningtools not inspected (local package is not executed); not countedn/a
  • Auth qualitystatic API keys via environment variables6/15
  • Maintenancelast push 52 days ago12/15
  • Maintainer identityregistry namespace matches repository owner; GitHub account older than a year8/10
Overall 78/100. Components that don't apply are left out of the denominator. Any critical finding is an F.RubricAppeal a findingJSON

How Lunch Money compares

Against every graded MCP server, from our own scans and uptime checks. Updated after each scan run.

Safety score
78/100
higher than 57% of 48,255 servers
Tools
59
the typical server has 7
Tools that change things
47%
typical: 0%. Fewer write tools means less an agent can break
GitHub stars
107
more than 95% of 28,688 servers

What its tools let an agent do: 29 read · 7 create · 10 change · 12 delete · 1 run or deploy

Install Lunch Money in Claude Code, Cursor or VS Code

Runs npx -y @akutishevsky/lunchmoney-mcp on your machine. Read the scan report first; the gateway never runs local packages.

claude mcp add lunchmoney-mcp -- npx -y @akutishevsky/lunchmoney-mcp
Add to Cursor

What the publisher says

From the Lunch Money repository's README, as published. We do not edit it. Read it on GitHub

LunchMoney MCP Server

A Model Context Protocol (MCP) server implementation for LunchMoney, providing programmatic access to personal finance management through LunchMoney's API. Also available as an MCP Bundle (.mcpb) for easy installation in Claude Desktop.

Heads up — v3.0.0 removes getallcrypto. The crypto tools now use LunchMoney's v2 crypto endpoints, which split manual and synced holdings into separate resources and offer no combined equivalent of v1's GET /crypto. Replace getallcrypto with getallmanualcrypto and getallsyncedcrypto, which together return everything it did and more. updatemanualcrypto also drops its currency parameter. Nothing outside the crypto domain changed; if you don't use the crypto tools, upgrading from 2.x needs no action. See CHANGELOG.md. If you depend on getallcrypto, pin @akutishevsky/lunchmoney-mcp@^2.2.0.

Heads up — v2.0.0 is a breaking release. This server now targets LunchMoney's v2 API (https://api.lunchmoney.dev/v2, currently in alpha). It is not backwards-compatible with v1.x of this server: tool names, fields, and endpoint shapes have changed (for example, assets is now manualaccounts, tags arrays are now tagids, transaction assetid is now manualaccountid, the debitas_negative toggle is gone, and the budget summary moved to a new /summary endpoint). See CHANGELOG.md for the full list. If you depend on v1.x, pin @akutishevsky/lunchmoney-mcp@^1.4.3.

Table of Contents

  • Overview
  • Features
  • Usage
  • Installation Options
  • MCP Bundle
  • Claude Code CLI
  • Codex CLI
  • Manual MCP Configuration
  • Standalone Server
  • Remote Deployments
  • Example Prompts
  • Available Tools

Overview

This MCP server enables AI assistants and other MCP clients to interact with LunchMoney data, allowing for automated financial insights, transaction management, budgeting, and more.

Features

Comprehensive Tool Coverage

Shortened. The full README is on GitHub.

Nothing above is checked by us. What we check is on the safety report.

Lunch Money: common questions

Is Lunch Money MCP server safe?
Mostly: it is graded B (78/100). Read the Lunch Money safety report
How do I install Lunch Money?
It runs on your machine. Copy the Claude Code, Cursor, VS Code or Claude Desktop config from the install section.
Does Lunch Money need an API key?
Yes. The registry entry asks for LUNCHMONEY_API_TOKEN.
Is Lunch Money maintained?
The last commit was 93 days ago (2026-08-03). The latest release is v3.0.0.
How does Lunch Money compare with other MCP servers?
safety score 78/100 (higher than 57% of 48,255 servers); tools 59 (the typical server has 7); tools that change things 47% (typical: 0%. Fewer write tools means less an agent can break). Full comparison.

More from akutishevsky →