Labsco
MCP SERVER

Actual Budget

by s-stefanov

Ask your Actual Budget file where the money went — by category, by month, by payee — then write the correction back: reclassify a transaction, add a rule, import a statement, or pull the latest from the bank.

Personal Finance & BudgetingVerified
Summary
Budget questions get answered from the ledger instead of from a spreadsheet export.

The analysis tools do the arithmetic for you — spending by category, monthly income against expenses, balance history — which is what makes this usable in conversation rather than as a table dump. The write side is opt-in and complete enough to deserve that: transactions, categories, payees and rules can all be deleted, and a deleted transaction does not come back. Start it without --enable-write while you are getting a feel for it, and reach for the import tool rather than create-transaction for anything arriving in bulk, since it reconciles on imported_id and will show you the result under a dry run first.

What it is

A server over an Actual Budget file, covering transactions, categories, payees, rules and bank sync, with the write half kept behind a launch flag.

What you get
  • Answers rather than rows: spending broken down by category over a date range, monthly income against expenses and savings, and balance history per account
  • Transaction reads filtered by date range, amount range, payee name and category name in the same call
  • A complete write path on transactions — create, delete, and update covering date, amount, payee, category, notes, cleared status and subtransactions
  • Bulk import with reconciliation: a repeated import deduplicates on imported_id rather than doubling up, and a dry run previews the change before anything persists
  • Budget structure as editable objects — categories, category groups, payees and rules each with create, update and delete
  • Bank synchronisation through GoCardless or SimpleFIN for one account, for the on-budget or off-budget group, or across every linked account
Requirements

Node 16 or newer and an Actual Budget you can reach: ACTUAL_SERVER_URL and ACTUAL_PASSWORD for a remote server, ACTUAL_BUDGET_SYNC_ID for the budget file to open, and ACTUAL_DATA_DIR for the local cache, which is optional when a server URL is set. An encrypted budget takes its unlock password separately in ACTUAL_BUDGET_ENCRYPTION_PASSWORD. Every write tool stays hidden until the server is started with --enable-write. Bank sync needs the account already linked in Actual. Amounts are in cents, positive for a deposit and negative for a payment. MIT.

Setup effort

One command plus a key — docker pull sstefanov/actual-mcp:latest, then supply credentials