actual-mcp-server MCP Server

Most Actual Budget MCP implementations are simple stdio bridges designed for single-user, local use with Claude Desktop. This project goes further:

Local serverstdioMIT

What is the actual-mcp-server MCP Server?

actual-mcp-server is an MCP project maintained in the agigante80/actual-mcp-server repository. The maintainer describes its purpose as “Most Actual Budget MCP implementations are simple stdio bridges designed for single-user, local use with Claude Desktop. This project goes further”. Read the project documentation for the complete scope.

Installation

The documented npm package is actual-mcp-server. The configuration below comes from the maintainer’s example; adapt its paths and account values to your environment.

Configuration values

The example declares ACTUAL_SERVER_URL, ACTUAL_PASSWORD, ACTUAL_BUDGET_SYNC_ID, MCP_BRIDGE_DATA_DIR. Secret-looking values have been replaced with placeholders. Required and optional labels are shown only when the documentation states them.

Source

Project documentation · Repository · Discovery listing. This profile records the public documentation checked on 2026-10-08.

Recorded tools

Check the linked publisher documentation and your connected client's tool list. Names and availability can vary with the server version and account permissions.

ToolWhat it does
actual_accounts_listList all accounts
actual_accounts_createCreate new account
actual_accounts_updateUpdate account details. An id that does not exist is refused rather than creating a partial record
actual_accounts_deletePermanently delete account
actual_accounts_closeClose account. An account with NO transactions is REMOVED by Actual, not closed
actual_accounts_reopenReopen closed account. An id that is not an account is refused rather than creating one
actual_accounts_get_balanceGet account balance at a date
actual_account_flow_summaryExplain the exact balance change across a set of accounts over a date range: external income, expense outflow, credits, uncategorized inflows, and transfers…
actual_account_groups_listList the custom account groups used to organise accounts in the sidebar (Actual 26.9.0+)
actual_account_groups_createCreate an account group. Assigning accounts to it is a separate actual_accounts_update call
actual_account_groups_updateRename an account group or change its sidebar position. A group that does not exist is refused, writing nothing
actual_account_groups_deleteDelete an account group. Its accounts are NOT deleted, they become ungrouped
actual_transactions_getGet transactions for an account
actual_transactions_filterFilter with advanced criteria
actual_transactions_createCreate new transaction(s), including splits (pass a subtransactions array)
actual_transactions_importImport and reconcile transactions
actual_transactions_updateUpdate a transaction, split a plain one in place, or edit the children of an existing split via subtransactions
actual_transactions_deleteDelete a transaction
actual_transactions_uncategorizedSummary of uncategorized transactions (totalCount, totalAmount, per-account breakdown); pass includeTransactions:true for paginated rows
actual_transactions_update_batchApply many transaction updates in ONE call (updates: [{ id, fields }]); returns per-item success and failure counts
actual_transactions_aggregateDeterministic integer-cent totals grouped by month, category, category group, payee, or account; transfers excluded via transfer_id and split children…
actual_transactions_search_by_monthSearch by month using $month transform
actual_transactions_search_by_amountFind by amount range
actual_transactions_search_by_categorySearch by category name
actual_transactions_search_by_payeeFind by payee/vendor
actual_transactions_summary_by_categorySpending summary grouped by category
actual_transactions_summary_by_payeeTop vendors with totals and counts
actual_recurring_expenses_summaryDetect recurring charges (subscriptions, bills) from posted history: cadence (with date-drift and month-end tolerance), latest amount, price changes…
actual_transfers_createCreate a paired transfer between two accounts (debit + credit linked by transfer_id, identical to UI "Make Transfer")
actual_tags_listList all tags (id, tag word, optional color and description)
actual_tags_createCreate or upsert a tag by name; returns the tag UUID
actual_tags_updateUpdate tag name, color, or description by UUID
actual_tags_deleteSoft-delete a tag by UUID
actual_notes_getGet the note for any entity (account/category/category-group/payee UUID, or budget-YYYY-MM)
actual_notes_updateSet or clear the note for any entity; validates entity exists or matches budget-YYYY-MM pattern
actual_preferences_getRead the budget's synced display preferences (number format, date format, currency, first day of week). Display only: all amounts stay integer cents
actual_budgets_list_availableList all configured budget files
actual_budgets_switchSwitch active budget (multi-budget)
actual_budgets_get_allList available budget files
actual_budgets_getMonthsList budget months
actual_budgets_getMonthGet budget for a specific month
actual_budgets_setAmountSet category budget amount. The month must be one the budget has (see actual_budgets_getMonths)
actual_budgets_transferTransfer amount between categories
actual_budgets_setCarryoverEnable/disable carryover
actual_budgets_holdForNextMonthHold funds for next month. Actual clamps the hold to what is left to budget, so the response reports the amount actually held
actual_budgets_resetHoldReset hold status
actual_budgets_exportExport the active budget as a .zip into ACTUAL_EXPORT_DIR; returns path, byte size and sha256, never the file contents
actual_budgets_importRestore a budget from an Actual .zip or a YNAB4/YNAB5 export. Destructive: the budget id comes from the archive, so re-importing an export replaces that…
actual_rules_create_or_updateIdempotent upsert: create a rule, or update the existing one that matches the same conditions, in a single call. Use this instead of get-then-create when…
actual_schedules_getList scheduled transactions, with their next occurrence date
actual_schedules_createCreate a schedule (one-off or recurring); recurrence is a typed config, see src/lib/schemas/recur.ts
actual_schedules_updateUpdate an existing schedule's amount, payee, account, or recurrence
actual_schedules_deleteDelete a schedule
actual_query_runExecute custom ActualQL query
actual_bank_syncTrigger bank sync (GoCardless/SimpleFIN)
actual_server_infoServer status, version, build info
actual_server_get_versionActual Budget server version
actual_get_contextRetrieve open accounts, category groups with nested categories, and payees (name-sorted, capped by payeeLimit) in a single call
actual_get_id_by_nameResolve an exact name → UUID for accounts, categories, payees
actual_entities_searchFind accounts/categories/payees by a name pattern (contains/startsWith/endsWith/exact/fuzzy). Fixes "payee not found" from a partial or mistyped name

How to install the actual-mcp-server MCP Server

{
  "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-sync-id-here",
        "MCP_BRIDGE_DATA_DIR": "/absolute/path/to/data-dir"
      }
    }
  }
}

From the project documentation. Replace placeholders and example paths before connecting.

Configuration

VariableDescriptionRequired
ACTUAL_SERVER_URLDeclared in the maintainer’s client configuration.Yes
ACTUAL_PASSWORDDeclared in the maintainer’s client configuration.Yes
ACTUAL_BUDGET_SYNC_IDDeclared in the maintainer’s client configuration.Yes
MCP_BRIDGE_DATA_DIRDeclared in the maintainer’s client configuration.Optional