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 |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| 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