lunchmoney-mcp-v2
# 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
TDQS
Scored across 14 tools
Each tool targets a distinct resource or operation. Read (list/get), write (manage), batch (bulk_update), and structural operations (split/group) are clearly separated, minimizing the chance of misselection.
The naming follows a verb_noun convention with intuitive prefixes like get_/list_, manage_, bulk_update_, split_, and group_. The only minor inconsistency is mixing get_ and list_ for read operations (e.g., get_accounts vs list_transactions), but the pattern is still predictable.
With 14 tools, the server covers user info, transactions, categories, tags, accounts, recurring items, and budget summaries—each earning its place. This is within the ideal 3-15 range and feels well-scoped.
The tool set provides solid coverage for core CRUD on transactions, categories, tags, and accounts, plus advanced transaction operations (split/group/bulk update). Minor gaps exist, such as recurring items being read-only and no bulk delete, but agents can work around these.