Home › Finance › Actual Budget

Actual Budget

Actual Budget, carefully: deletes preview first, and new transactions check for duplicates.

TypeScript Local macOSWindowsLinux
★ 20 stars Last pushed 2026-11-11 License: MIT

Topics: Finance & Fintech

Connect

Review any command before running it. Package names and URLs come from the server's own registry entry.

Package (npm 0.12.0)

npx -y [email protected]

Or add to your MCP client config:

{
  "mcpServers": {
    "actual-budget-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "[email protected]"
      ],
      "env": {
        "ACTUAL_SERVER_URL": "<YOUR_VALUE>",
        "ACTUAL_PASSWORD": "<YOUR_VALUE>",
        "ACTUAL_SESSION_TOKEN": "<YOUR_VALUE>",
        "ACTUAL_BUDGET_ID": "<YOUR_VALUE>",
        "ACTUAL_ENCRYPTION_PASSWORD": "<YOUR_VALUE>",
        "ACTUAL_ENCRYPTION_PASSWORDS": "<YOUR_VALUE>",
        "ACTUAL_HTTP_TOKEN": "<YOUR_VALUE>",
        "ACTUAL_HTTP_WRITE_TOKEN": "<YOUR_VALUE>"
      }
    }
  }
}
  • ACTUAL_SERVER_URL required — URL of your Actual Budget server, for example http://localhost:5006
  • ACTUAL_PASSWORD secret — Password for your Actual Budget server. Not needed if you set ACTUAL_SESSION_TOKEN
  • ACTUAL_SESSION_TOKEN secret — Session token for servers behind OIDC, which have no password. Use instead of ACTUAL_PASSWORD; if both are set, the token wins
  • ACTUAL_BUDGET_ID required — Your budget's Sync ID, found under Settings > Show advanced settings
  • ACTUAL_ENCRYPTION_PASSWORD secret — Only needed if your budget file is end-to-end encrypted
  • ACTUAL_BUDGET_IDS — Every budget this server serves, comma separated, when it is more than one. Each tool then takes a budget_id, and each budget is opened in a process of its own
  • ACTUAL_ENCRYPTION_PASSWORDS secret — A JSON object of budget sync id to encryption password, for when more than one of the budgets is encrypted. Each worker is given its own and never the map
  • ACTUAL_BUDGET_WORKERS — How many budgets stay open at once. Defaults to 3. A fourth budget closes the one that went longest without a call
  • ACTUAL_WORKER_IDLE_MINUTES — How long an open budget with nothing to do stays open. Defaults to 15
  • ACTUAL_WORKER_READY_SECONDS — How long a call waits for a budget that is still opening before it answers that it is still opening. Defaults to 45
  • ACTUAL_READ_ONLY — Set to 1 to hide every write tool from the model, exposing only reads and analysis
  • ACTUAL_TOOLSET — Set to chat to offer the 18 everyday tools instead of all 44, which is 17.4 KiB of tool descriptions instead of 39.7 KiB on every connection. Defaults to full
  • ACTUAL_DATA_DIR — Directory for the local budget cache
  • ACTUAL_HTTP_TIMEOUT_MS — How long to wait for your server to start replying, in milliseconds. Defaults to 60000; raise it if a GoCardless bank sync is being cut off
  • ACTUAL_HTTP_PORT — Serve MCP over HTTP on this port instead of stdio. Only for a server you run yourself and point clients at: a client that starts this package itself speaks stdio and cannot reach it once this is set
  • ACTUAL_HTTP_TOKEN secret — The credential for the read path, /mcp. Required once ACTUAL_HTTP_PORT is set, and at least 32 characters
  • ACTUAL_HTTP_WRITE_TOKEN secret — A second credential, for the write path, /mcp-write. Without it the server serves no write path at all
  • ACTUAL_HTTP_HOST — What to bind to. Defaults to 127.0.0.1; inside a container that is unreachable, so 0.0.0.0 together with ACTUAL_HTTP_ALLOW_REMOTE
  • ACTUAL_HTTP_ALLOW_REMOTE — Set to 1 to bind somewhere other than loopback. Nothing here terminates TLS, so put something in front of it that does
  • ACTUAL_HTTP_ALLOWED_HOSTS — Hostnames to accept in the Host header, comma separated and without ports, for a server that is not on loopback. Anything else is answered 403

Package (oci)

docker run -i --rm -e ACTUAL_SERVER_URL=<YOUR_VALUE> -e ACTUAL_PASSWORD=<YOUR_VALUE> -e ACTUAL_SESSION_TOKEN=<YOUR_VALUE> -e ACTUAL_BUDGET_ID=<YOUR_VALUE> -e ACTUAL_ENCRYPTION_PASSWORDS=<YOUR_VALUE> -e ACTUAL_HTTP_TOKEN=<YOUR_VALUE> -e ACTUAL_HTTP_WRITE_TOKEN=<YOUR_VALUE> ghcr.io/henfrydls/actual-budget-mcp:0.12.0

Or add to your MCP client config:

{
  "mcpServers": {
    "actual-budget-mcp": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "-e",
        "ACTUAL_SERVER_URL=<YOUR_VALUE>",
        "-e",
        "ACTUAL_PASSWORD=<YOUR_VALUE>",
        "-e",
        "ACTUAL_SESSION_TOKEN=<YOUR_VALUE>",
        "-e",
        "ACTUAL_BUDGET_ID=<YOUR_VALUE>",
        "-e",
        "ACTUAL_ENCRYPTION_PASSWORDS=<YOUR_VALUE>",
        "-e",
        "ACTUAL_HTTP_TOKEN=<YOUR_VALUE>",
        "-e",
        "ACTUAL_HTTP_WRITE_TOKEN=<YOUR_VALUE>",
        "ghcr.io/henfrydls/actual-budget-mcp:0.12.0"
      ]
    }
  }
}
  • ACTUAL_SERVER_URL required — URL of your Actual Budget server. Inside the container localhost is the container, so use host.docker.internal
  • ACTUAL_PASSWORD secret — Password for your Actual Budget server. Not needed if you set ACTUAL_SESSION_TOKEN
  • ACTUAL_SESSION_TOKEN secret — Session token for servers behind OIDC, which have no password. Use instead of ACTUAL_PASSWORD; if both are set, the token wins
  • ACTUAL_BUDGET_ID required — Your budget's Sync ID, found under Settings > Show advanced settings
  • ACTUAL_BUDGET_IDS — Every budget this server serves, comma separated, when it is more than one. Each tool then takes a budget_id, and each budget is opened in a process of its own
  • ACTUAL_ENCRYPTION_PASSWORDS secret — A JSON object of budget sync id to encryption password, for when more than one of the budgets is encrypted. Each worker is given its own and never the map
  • ACTUAL_BUDGET_WORKERS — How many budgets stay open at once. Defaults to 3. A fourth budget closes the one that went longest without a call
  • ACTUAL_WORKER_IDLE_MINUTES — How long an open budget with nothing to do stays open. Defaults to 15
  • ACTUAL_WORKER_READY_SECONDS — How long a call waits for a budget that is still opening before it answers that it is still opening. Defaults to 45
  • ACTUAL_READ_ONLY — Set to 1 to hide every write tool from the model, exposing only reads and analysis
  • ACTUAL_TOOLSET — Set to chat to offer the 18 everyday tools instead of all 44, which is 17.4 KiB of tool descriptions instead of 39.7 KiB on every connection. Defaults to full
  • ACTUAL_HTTP_TIMEOUT_MS — How long to wait for your server to start replying, in milliseconds. Defaults to 60000; raise it if a GoCardless bank sync is being cut off
  • ACTUAL_HTTP_PORT — Serve MCP over HTTP on this port instead of stdio. Only for a server you run yourself and point clients at: a client that starts this package itself speaks stdio and cannot reach it once this is set
  • ACTUAL_HTTP_TOKEN secret — The credential for the read path, /mcp. Required once ACTUAL_HTTP_PORT is set, and at least 32 characters
  • ACTUAL_HTTP_WRITE_TOKEN secret — A second credential, for the write path, /mcp-write. Without it the server serves no write path at all
  • ACTUAL_HTTP_HOST — What to bind to. Defaults to 127.0.0.1; inside a container that is unreachable, so 0.0.0.0 together with ACTUAL_HTTP_ALLOW_REMOTE
  • ACTUAL_HTTP_ALLOW_REMOTE — Set to 1 to bind somewhere other than loopback. Nothing here terminates TLS, so put something in front of it that does
  • ACTUAL_HTTP_ALLOWED_HOSTS — Hostnames to accept in the Host header, comma separated and without ports, for a server that is not on loopback. Anything else is answered 403

Related servers

Listed in punkpeye/awesome-mcp-servers (MIT)

Data from the Official MCP Registry