LunchMoney MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| LUNCHMONEY_API_TOKEN | Yes | Your LunchMoney API token from LunchMoney Developer Settings |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| prompts | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_userA | Get details on the current user |
| get_all_categoriesA | Get a list of all categories associated with the user's account. Returns categories in alphabetical order. |
| get_single_categoryA | Get details on a single category or category group, including the list of children categories for category groups. |
| create_categoryA | 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). |
| update_categoryA | 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. |
| delete_categoryA | Delete a single category or category group. By default fails (HTTP 422) if dependencies exist, returning a structured |
| get_all_tagsA | Get a list of all tags associated with the user's account. |
| get_single_tagA | Get details of a single tag by ID. |
| create_tagA | Create a new tag. |
| update_tagC | Update properties for an existing tag. |
| delete_tagA | Delete a tag. By default fails (HTTP 422) with a structured |
| get_transactionsA | Retrieve transactions, optionally filtered by date range, account, category, tag, recurring item, status, and more. Returns at most |
| get_single_transactionA | 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. |
| create_transactionsA | Insert one or more transactions (1-500 per call). Returns inserted transactions plus any skipped duplicates. |
| update_transactionA | Update an existing transaction. Provide any subset of writable fields directly (the v2 API no longer wraps the body in a |
| delete_transactionA | Delete a single transaction. Fails for split/group transactions and their parents — unsplit/ungroup first. Irreversible. |
| update_transactions_bulkA | Update multiple transactions in a single call (1-500). Each entry must include |
| delete_transactions_bulkA | 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. |
| create_transaction_groupA | Create a transaction group from 2-500 existing transactions. Source transactions are hidden from get_transactions and accessible via the new group's |
| delete_transaction_groupA | Delete (ungroup) a transaction group. The original child transactions remain and revert to normal ungrouped transactions. |
| split_transactionA | 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 |
| unsplit_transactionA | 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. |
| attach_file_to_transactionA | 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 that directory can be attached. |
| get_transaction_attachment_urlA | Get a short-lived signed download URL for a transaction file attachment. The response includes the URL and an |
| delete_transaction_attachmentA | Delete a transaction file attachment. Irreversible. |
| get_recurring_itemsA | Retrieve a list of recurring items expected for a specified date range. The |
| get_single_recurring_itemA | Retrieve a single recurring item by ID. Optional date range populates the |
| get_budget_summaryA | 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_budget_settingsA | 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). |
| upsert_budgetA | 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). |
| remove_budgetA | Remove the budget for a specific category and period. The request is idempotent — succeeds even if no budget exists for the period. |
| get_all_manual_accountsA | Get a list of all manually-managed accounts associated with the user. (Formerly known as |
| get_single_manual_accountA | Get details of a single manual account by ID. |
| create_manual_accountB | Create a new manually-managed account. (Formerly |
| update_manual_accountB | Update an existing manually-managed account. (Formerly |
| delete_manual_accountA | Delete a manually-managed account. Optionally also delete its transactions/rules/recurring items, and/or its balance history. Both deletion options are irreversible. |
| get_all_plaid_accountsA | Get a list of all Plaid (synced) accounts associated with the user. |
| get_single_plaid_accountA | Get details of a single Plaid (synced) account by ID. |
| trigger_plaid_fetchA | 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. |
| get_supported_cryptocurrenciesA | Get the list of cryptocurrencies supported for manual tracking. The |
| add_supported_cryptocurrencyA | 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. |
| get_all_manual_cryptoA | Get all manually-managed crypto balances associated with the user. |
| get_single_manual_cryptoA | Get a single manually-managed crypto balance by ID. Call get_all_manual_crypto first to discover ids. |
| create_manual_cryptoA | Create a manually-managed crypto asset. The symbol must match one returned by get_supported_cryptocurrencies. |
| update_manual_cryptoA | 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. |
| delete_manual_cryptoA | 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. |
| get_all_synced_cryptoA | 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_single_synced_cryptoA | Get a single synced crypto account and all its nested balances by ID. |
| get_synced_crypto_balanceA | Get a single balance held inside a synced crypto account, looked up by its cryptocurrency symbol. |
| refresh_synced_cryptoA | Trigger a balance refresh for a synced crypto account and return the refreshed account. Reaches out to the external crypto provider. |
| get_balance_historyA | 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 |
| get_account_balance_historyA | 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. |
| upsert_account_balance_historyA | 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. |
| delete_account_balance_historyA | 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. |
| get_crypto_synced_balance_historyA | 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. |
| upsert_crypto_synced_balance_historyA | Create or update monthly balance history entries for a synced crypto holding. Every month must be a past calendar month. If an entry sets |
| delete_crypto_synced_balance_historyA | Delete ALL historical balance entries for a synced crypto holding. This is irreversible and affects the Net Worth views. |
| delete_balance_history_entryA | 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 |
| update_deleted_account_detailsA | 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. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| monthly_spending_breakdown | Analyze spending by category for a given month, combining transaction data with budget targets |
| subscription_audit | Review recurring items for a given month to audit subscriptions and recurring costs |
| net_worth_snapshot | Calculate total net worth by combining manual assets, Plaid accounts, and crypto holdings |
| uncategorized_cleanup | Find uncategorized transactions in a date range and suggest categories for them |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/akutishevsky/lunchmoney-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server