LunchMoney MCP Server

Read and edit your Lunch Money budget: transactions, categories, budgets, accounts and net worth history

By Anton Kutishevskyi (individual) TypeScript Local · stdio Finance and payments

49 popularity score ★ 113 ↓ 409/wk

Connect your client

Local (npm)

Add in one click

Opens the app, which asks before it adds the server. Then replace each <NAME> in its settings with your value.

Or add it by command or config

It needs LUNCHMONEY_API_TOKEN. Replace each <NAME> with your value.

Claude CodeTerminal
claude mcp add lunchmoney -e LUNCHMONEY_API_TOKEN=<LUNCHMONEY_API_TOKEN> -- npx -y @akutishevsky/lunchmoney-mcp
Claude Desktopclaude_desktop_config.json
{
  "mcpServers": {
    "lunchmoney": {
      "command": "npx",
      "args": [
        "-y",
        "@akutishevsky/lunchmoney-mcp"
      ],
      "env": {
        "LUNCHMONEY_API_TOKEN": "<LUNCHMONEY_API_TOKEN>"
      }
    }
  }
}
Cursor~/.cursor/mcp.json
{
  "mcpServers": {
    "lunchmoney": {
      "command": "npx",
      "args": [
        "-y",
        "@akutishevsky/lunchmoney-mcp"
      ],
      "env": {
        "LUNCHMONEY_API_TOKEN": "<LUNCHMONEY_API_TOKEN>"
      }
    }
  }
}
VS Code.vscode/mcp.json
{
  "servers": {
    "lunchmoney": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "@akutishevsky/lunchmoney-mcp"
      ],
      "env": {
        "LUNCHMONEY_API_TOKEN": "<LUNCHMONEY_API_TOKEN>"
      }
    }
  }
}
Codex~/.codex/config.toml
[mcp_servers.lunchmoney]
command = "npx"
args = ["-y", "@akutishevsky/lunchmoney-mcp"]

[mcp_servers.lunchmoney.env]
LUNCHMONEY_API_TOKEN = "<LUNCHMONEY_API_TOKEN>"
Gemini CLITerminal
gemini mcp add --scope user -e LUNCHMONEY_API_TOKEN=<LUNCHMONEY_API_TOKEN> lunchmoney npx -- -y @akutishevsky/lunchmoney-mcp

Settings 3

LUNCHMONEY_API_TOKEN Required: Personal API token from Lunch Money's developer settings; the server exits without it.
LUNCHMONEY_ATTACHMENTS_DIR Optional: Directory that attach_file_to_transaction may read from; unset, any readable path is allowed.
LUNCHMONEY_DEBUG Optional: Set to true to log API requests and responses to stderr.

What it does

This is a community-built stdio server that connects an MCP client to a Lunch Money personal-finance account through Lunch Money's v2 API (https://api.lunchmoney.dev/v2). It runs on your machine with your personal API token and reaches the whole account: transactions, categories and category groups, tags, recurring items, budgets, manually tracked accounts, Plaid-connected bank accounts, crypto holdings and monthly balance history.

Most of it is full create, read, update and delete. Transactions can be filtered by date, account, category, tag and status, inserted, edited or deleted 500 at a time, split, grouped, and given receipt files from the local disk. Bank syncs and synced-crypto refreshes can be triggered, and past monthly balances behind the Net Worth views can be set or cleared. Responses are encoded as TOON rather than JSON to use fewer tokens.

Version 3.0.0 registers 59 tools across ten groups. Its server code also registers four prompts the README does not list: monthly_spending_breakdown, subscription_audit, net_worth_snapshot and uncategorized_cleanup, each a ready-made set of steps (for example, comparing a month's spending against budget targets) built from the tools (src/server.ts, src/prompts.ts). The package can also be imported as a library to put behind your own HTTP transport. A Claude Desktop bundle (.mcpb) is offered on the releases page.

What it needs

RuntimeNode.js 16+

Node.js with npx on PATH (the README asks for Node.js 16 or later). A Lunch Money account and a personal API token from my.lunchmoney.app/developers, passed as LUNCHMONEY_API_TOKEN; the server exits at start without it. Bank syncing needs accounts already connected through Plaid in Lunch Money.

Limits

It targets Lunch Money's v2 API, still in alpha per its makers. Version 2.0.0 broke compatibility with 1.x (renamed tools and fields; pin ^1.4.3 for the old ones), and 3.0.0 removed get_all_crypto in favour of get_all_manual_crypto and get_all_synced_crypto (pin ^2.2.0 to keep it). It speaks stdio only: an HTTP endpoint means writing your own wrapper, which ships with no auth, and the token is held in one process-wide setting, so one process serves one user. File attachments are limited to JPEG, PNG, HEIC, HEIF or PDF up to 10 MB. Balance history can only be written for past months. The README's manual config example omits -y from npx; the form given here includes it.

Who it suits

Suits a Lunch Money user who wants to query and tidy their own finances from a desktop assistant: categorise transactions, audit subscriptions, adjust budgets or log manual balances. Because most tools write and several delete in bulk, it suits people willing to review what the assistant changes; there is no read-only mode. It is not made by Lunch Money. Pick something else if you need a hosted endpoint for mobile or claude.ai without running your own wrapper, or a stable API surface, since it follows an alpha API.

Tools 59

get_user
Show the account owner's details
get_all_categories
List categories, optionally only groups or a flat format
get_single_category
Fetch one category or category group
create_category
Make a category or a group with child categories
update_category
Change a category; replaces a group's children
delete_category
Remove a category, forcing past dependents if asked
get_all_tags
List tags
get_single_tag
Fetch one tag by id
create_tag
Add a tag
update_tag
Change a tag
delete_tag
Remove a tag, optionally forcing it
get_transactions
Search transactions by date, account, category, tag, status and more
get_single_transaction
Fetch one transaction with metadata, files and children
create_transactions
Insert between 1 and 500 transactions
update_transaction
Edit fields of one transaction
delete_transaction
Remove one transaction that is not a split or group
update_transactions_bulk
Edit up to 500 transactions at once
delete_transactions_bulk
Remove up to 500 transactions by id
create_transaction_group
Group existing transactions together
delete_transaction_group
Break up a transaction group
split_transaction
Divide a transaction into 2 to 500 parts
unsplit_transaction
Reverse an earlier split
attach_file_to_transaction
Upload a local image or PDF (10 MB max) to a transaction
get_transaction_attachment_url
Get a signed link to download an attachment
delete_transaction_attachment
Remove an attached file
get_recurring_items
List recurring items in a date range, with suggestions if asked
get_single_recurring_item
Fetch one recurring item
get_budget_summary
Per-category budget figures for a period
get_budget_settings
Read the account's budget period and display settings
upsert_budget
Set or change a category's budget for a period
remove_budget
Clear a category's budget for a period
get_all_manual_accounts
List manually tracked accounts
get_single_manual_account
Fetch one manual account
create_manual_account
Add a manual account
update_manual_account
Change a manual account
delete_manual_account
Remove a manual account, optionally with its transactions and history
get_all_plaid_accounts
List bank accounts connected through Plaid
get_single_plaid_account
Fetch one Plaid account
trigger_plaid_fetch
Ask Plaid for fresh data, optionally for a date range or account
get_supported_cryptocurrencies
List coins that can be tracked manually
add_supported_cryptocurrency
Add a coin to that list from its CoinGecko page URL
get_all_manual_crypto
List manually tracked crypto balances
get_single_manual_crypto
Fetch one manual crypto balance
create_manual_crypto
Add a manual crypto holding
update_manual_crypto
Change a manual crypto holding's names or balance
delete_manual_crypto
Permanently remove a manual crypto holding
get_all_synced_crypto
List synced crypto accounts with per-coin balances
get_single_synced_crypto
Fetch one synced crypto account
get_synced_crypto_balance
Read one coin's balance in a synced account
refresh_synced_crypto
Start a balance refresh for a synced crypto account
get_balance_history
Monthly balances across all accounts, optionally for a month range
get_account_balance_history
Monthly balances for one account
upsert_account_balance_history
Set past monthly balances for one account
delete_account_balance_history
Clear all past balances for one account
get_crypto_synced_balance_history
Monthly balances for one synced coin holding
upsert_crypto_synced_balance_history
Set past monthly balances for a synced coin holding
delete_crypto_synced_balance_history
Clear past balances for a synced coin holding
delete_balance_history_entry
Remove a single balance history entry
update_deleted_account_details
Edit the name and details shown for a deleted account's history

Similar servers