actual_accounts_listLABSCO SUMMARY
The query-engine tools are what keep a year of transactions from filling the context window.
Six of the tools run through Actual's native query engine and return aggregates — spend by category for a month, transactions above an amount — instead of handing the model thousands of rows to add up itself. That is the difference between asking where the money went and waiting while a chat client chokes. Multi-budget switching is handled properly on both transports: over HTTP the active budget is tied to the MCP session, and on stdio each process gets its own, so a switch does not leak between clients. Your data stays on your own Actual server throughout.
What it is
A TypeScript server with 74 tools over the Actual Budget API, running either as a local process for a desktop client or as a real remote server for a shared chat front end.
What you get
- Accounts: actual_accounts_list, create, update, close, reopen, delete and actual_accounts_get_balance
- Transactions: create, update, delete, batch update, import, plus actual_transactions_filter and actual_transactions_uncategorized for triage
- Six tools built on Actual's own query engine — search by month, amount, category or payee, and actual_transactions_summary_by_category — returning aggregates rather than dumping raw rows into the context
- Categories, category groups, payees with merge, tags and notes, each with full create, update and delete
- Rules through actual_rules_create, update, delete and create_or_update, and schedules alongside them
- Budget files: actual_budgets_list_available, actual_budgets_switch to change mid-conversation, transfer, import and export
- actual_bank_sync, actual_query_run for a raw query, actual_entities_search and actual_server_info
- actual_get_id_by_name, so you can name a category or payee instead of looking up its ID
- OIDC with JWKS-validated tokens and per-user budget access lists, for a multi-user deployment
Requirements
A self-hosted Actual Budget instance and its details: ACTUAL_SERVER_URL, ACTUAL_PASSWORD and ACTUAL_BUDGET_SYNC_ID, with ACTUAL_BUDGET_PASSWORD if the file is encrypted. Node 22.0.0 or newer, from npm or the published Docker image; an Unraid Community Apps entry exists too. Local clients use stdio with no HTTP server or container needed; the HTTP transport is for remote, multi-user setups.
Setup effort
One command plus credentials — npx -y actual-mcp-server --stdio, then supply credentials
USE CASES
Asking where the money actually went last month
Aggregated spend by category comes back as a summary, not as a wall of transactions to add up.
Recording a purchase without opening the budget app
Create the transaction against the right account and payee while you still remember the details.
Clearing the uncategorised pile
Pull everything without a category, decide in one pass, and write the changes back as a batch.
Making a categorisation stick for next time
Create the rule so the same payee lands in the right category automatically from now on.
Working across household and business budgets
Switch budget files mid-conversation instead of restarting with a different configuration.
Checking an account balance before you commit to something
Ask for the balance directly rather than opening the UI to look.
74 tools
Listed in project docs. Your client may show a different list.
actual_accounts_createactual_accounts_updateactual_accounts_deleteactual_accounts_closeactual_accounts_reopenactual_accounts_get_balanceactual_transactions_getactual_transactions_filteractual_transactions_createactual_transactions_importactual_transactions_updateactual_transactions_deleteactual_transactions_uncategorizedactual_transactions_update_batchactual_transactions_search_by_monthactual_transactions_search_by_amountactual_transactions_search_by_categoryactual_transactions_search_by_payeeactual_transactions_summary_by_categoryactual_transactions_summary_by_payeeactual_transfers_createactual_categories_getactual_categories_createactual_categories_updateactual_categories_deleteactual_category_groups_getactual_category_groups_createactual_category_groups_updateactual_category_groups_deleteactual_payees_getactual_payees_common_listactual_payees_createactual_payees_updateactual_payees_deleteactual_payees_mergeactual_payee_rules_getactual_tags_listactual_tags_createactual_tags_updateactual_tags_deleteactual_notes_getactual_notes_updateactual_preferences_getactual_budgets_list_availableactual_budgets_switchactual_budgets_get_allactual_budgets_getMonthsactual_budgets_getMonthactual_budgets_setAmountactual_budgets_transferactual_budgets_setCarryoveractual_budgets_holdForNextMonthactual_budgets_resetHoldactual_budgets_exportactual_budgets_importactual_rules_getactual_rules_createactual_rules_updateactual_rules_deleteactual_rules_create_or_updateactual_schedules_getactual_schedules_createactual_schedules_updateactual_schedules_deleteactual_query_runactual_bank_syncactual_budget_updates_batchactual_server_infoactual_server_get_versionactual_get_id_by_nameactual_entities_searchactual_session_listactual_session_closeBEFORE YOU INSTALL
What to know first
Tools you get
74 tools named in the project's documentation.
Requires
- npx on PATH
- Node.js 22+
- ACTUAL_PASSWORD in your environment
- ACTUAL_BUDGET_SYNC_ID in your environment
Where it runs
All 5 documented clients run the server on your machine.
INSTALLATION
Connect your client
Server setup
npx -y actual-mcp-server --stdioMCP Clients
Claude Desktop, Cursor, Gemini CLI
{
"mcpServers": {
"actual-budget": {
"command": "npx",
"args": [
"-y",
"actual-mcp-server",
"--stdio"
],
"env": {
"ACTUAL_SERVER_URL": "http://localhost:5006",
"ACTUAL_PASSWORD": "<YOUR_ACTUAL_PASSWORD>",
"ACTUAL_BUDGET_SYNC_ID": "<YOUR_ACTUAL_BUDGET_SYNC_ID>"
}
}
}
}Claude Code
claude mcp add actual-budget --env ACTUAL_SERVER_URL=http://localhost:5006 --env ACTUAL_PASSWORD=<YOUR_ACTUAL_PASSWORD> --env ACTUAL_BUDGET_SYNC_ID=<YOUR_ACTUAL_BUDGET_SYNC_ID> -- npx actual-mcp-server@latest --stdioVS Code
{
"servers": {
"actual-budget": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"actual-mcp-server",
"--stdio"
],
"env": {
"ACTUAL_SERVER_URL": "http://localhost:5006",
"ACTUAL_PASSWORD": "<YOUR_ACTUAL_PASSWORD>",
"ACTUAL_BUDGET_SYNC_ID": "<YOUR_ACTUAL_BUDGET_SYNC_ID>"
}
}
}
}