# lunchmoney-mcp-v2 MCP server for the [Lunch Money](https://lunchmoney.app) API v2. First MCP server built on the v2 API. ## Features - **14 tools** covering read, CRUD, and advanced operations - **Hydrated responses**: category, tag, and account names instead of raw IDs - **Smart caching**: categories, tags, and accounts cached at startup, auto-refreshed after mutations - **Type-safe**: generated from the official OpenAPI spec via `openapi-typescript` ## Setup ### Claude Desktop Add to `~/Library/Application Support/Claude/claude_desktop_config.json`: ```json { "mcpServers": { "lunchmoney": { "command": "npx", "args": ["lunchmoney-mcp-v2"], "env": { "LUNCHMONEY_TOKEN": "your-api-token-here" } } } } ``` ### Claude Code Add to `.mcp.json` in your project or `~/.claude/mcp.json` globally: ```json { "mcpServers": { "lunchmoney": { "command": "npx", "args": ["lunchmoney-mcp-v2"], "env": { "LUNCHMONEY_TOKEN": "your-api-token-here" } } } } ``` Get your API token from [Lunch Money Developer settings](https://my.lunchmoney.app/developers). ## Tools ### Read | Tool | Description | |---|---| | `get_user` | Account info (name, email, currency) | | `list_transactions` | List/search transactions with filters, or look up by ID | | `list_categories` | All categories (nested or flat view) | | `list_tags` | All tags | | `get_accounts` | Manual + synced accounts with balances | | `get_summary` | Budget summary with income/spending/per-category breakdown | | `get_recurring` | Recurring items (subscriptions, bills, income) | ### CRUD | Tool | Actions | Description | |---|---|---| | `manage_transaction` | create, update, delete | Single transaction operations | | `manage_category` | create, update, delete | Category management (force delete with dependency info) | | `manage_tag` | create, update, delete | Tag management (force delete with dependency info) | | `manage_account` | create, update, delete | Manual account management (Plaid accounts are read-only) | ### Advanced | Tool | Actions | Description | |---|---|---| | `bulk_update_transactions` | — | Batch update up to 500 transactions at once | | `split_transaction` | split, unsplit | Split a transaction into parts or restore the original | | `group_transactions` | group, ungroup | Combine transactions into a group or restore originals | ## Example prompts Once connected, just ask your LLM naturally: **Reviewing & organizing** - "Show me all unreviewed transactions from this month" - "Categorize all my Amazon transactions as Shopping" - "What did I spend on groceries last week?" - "Mark these 5 transactions as reviewed" **Budget overview** - "Give me a spending summary for January" - "What are my recurring expenses?" - "How much do I have in each account?" **Managing transactions** - "Add a $45 transaction for dinner at Nobu yesterday" - "Split that $120 Costco transaction into $80 groceries and $40 household" - "Group these three Uber transactions into one" - "Delete the duplicate transaction I just created" **Organizing** - "Create a new category called Side Projects" - "Tag these transactions with travel" - "Show me all my categories with their IDs" - "Rename the Dining Out category to Restaurants" ## Development ```bash npm install npm run build npm start ``` Regenerate types from the OpenAPI spec: ```bash npm run generate:types ``` ## Architecture ``` src/ index.ts Entry point — registers tools, initializes cache client.ts openapi-fetch client + error handling cache.ts In-memory cache for categories, tags, accounts format.ts Text formatters for all response types types.ts Generated from @lunch-money/v2-api-spec tools/ user.ts get_user transactions.ts list_transactions, manage_transaction, bulk_update, split, group categories.ts list_categories, manage_category tags.ts list_tags, manage_tag accounts.ts get_accounts, manage_account summary.ts get_summary recurring.ts get_recurring ``` ## License MIT