Actual Budget MCP Server

io.github.agigante80由 GitHub 帳號 agigante80 發布v0.27.1更新於 Nov 4, 2026

Manage Actual Budget accounts, transactions, budgets, rules and reports from an AI assistant.

已驗證STDIO僅桌面效率與工作流金融

概覽

AI 產生的概覽

讓 AI 助理讀取並管理自架 Actual Budget 的 MCP 伺服器,涵蓋帳戶、交易、預算、規則、排程交易與報表。

可以做什麼
  • 查詢帳戶、收款對象、分類、標籤與伺服器環境資訊
  • 建立、更新、刪除、匯入交易並處理轉帳
  • 彙總支出、統計與餘額
  • 設定預算月份金額、在分類間調撥資金並批次更新預算
  • 建立與管理規則、收款對象規則及排程交易
  • 執行唯讀 SELECT 查詢,並處理預算切換、匯入匯出與銀行同步
適用情境
適合把財務資料放在自架 Actual Budget 伺服器的使用者,希望助理直接回答支出問題或修改預算與交易。可用於透過 stdio 連線的單一本機用戶端,也可透過 HTTP 供多人共用的聊天介面使用。
執行需求
需要執行中的 Actual Budget 伺服器(25.0.0 或更新版本)及其位址、伺服器登入密碼與預算 Sync ID。npx/stdio 方式需 Node.js 22 或更新版本,HTTP 方式需 Docker。HTTP 模式需在 MCP_SSE_AUTHORIZATION 設定 Bearer 權杖,用戶端透過 Authorization 標頭送出;端對端加密的預算另需加密密碼。
安裝前請注意
伺服器會保存你的 Actual 伺服器登入密碼,若使用時也保存預算加密密碼,需妥善保管。具寫入能力的工具可建立、更新、刪除、匯入與合併交易並修改預算;MCP_READ_ONLY 可隱藏這些工具。工具回傳的預算資料會傳送給 AI 用戶端所用的模型供應商。HTTP 模式應以 Bearer 權杖或 OIDC 保護。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Actual Budget MCP Server,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

[Actual MCP Server icon]

Actual MCP Server

[GitHub Actions CI] [npm version] [Docker Pulls] [License: MIT] [Node.js Version] [TypeScript]

A Model Context Protocol server that lets an AI assistant (Claude, LibreChat, LobeChat, Cursor and others) read and manage your self-hosted Actual Budget.

What you can ask it: "How much did I spend on groceries last month, by payee?", "Add a $47.50 grocery transaction at Whole Foods to my checking account.", "Move $200 from Dining Out to Emergency Fund for this month."

85 tools across accounts, transactions, budgets, rules, schedules and more, over stdio or HTTP, with Bearer token or OIDC auth, per-user budget access, up to 15 concurrent sessions, and automatic retry of transient Actual errors (3 attempts, exponential backoff; deletes and merges are never retried).

Pick your path

  • Claude Desktop, Claude Code, Cursor, VS Code or another local client: run it over stdio with npx, no server to keep running. Follow your client's page in docs/guides/clients/, for example Claude Desktop or Claude Code.
  • A chat UI such as LibreChat or LobeChat, or several users: run it over HTTP in Docker with the quick start below, then follow LibreChat or LobeChat.
  • A client that installs from the official MCP Registry: it is listed as io.github.agigante80/actual-mcp-server, with the npm package (stdio) and the Docker image (HTTP); the client asks for the same settings as the pages above.
  • Unraid: install it from Community Applications; see Unraid.

Quick start (Docker, HTTP)

You need an Actual Budget server and Docker. 1. Create .env with a generated token. In an empty directory:

bash
[ -f .env ] || install -m 600 /dev/null .env[ -z "$(tail -c 1 .env)" ] || printf '\n' >> .envfor key in ACTUAL_SERVER_URL=http://YOUR-ACTUAL-HOST:5006 ACTUAL_PASSWORD= ACTUAL_BUDGET_SYNC_ID=; do  grep -q "^${key%%=*}=" .env || printf '%s\n' "$key" >> .envdonechmod 600 .envif [ "$(grep -c '^MCP_SSE_AUTHORIZATION=' .env)" != 1 ] || ! grep -Eq '^MCP_SSE_AUTHORIZATION=[^[:space:]]{32,}$' .env; then  ( umask 077; install -m 600 /dev/null .env.new; { grep -v '^MCP_SSE_AUTHORIZATION=' .env; printf 'MCP_SSE_AUTHORIZATION=%s\n' "$(openssl rand -hex 32)"; } > .env.new ) && mv .env.new .envfigrep '^MCP_SSE_AUTHORIZATION=' .env

The last line prints the Bearer token your client sends. It never overwrites a value you set, except a token that is missing, duplicated or shorter than 32 characters, so it is safe to run again.

2. Fill in .env: ACTUAL_PASSWORD, ACTUAL_BUDGET_SYNC_ID (Actual: Settings, Show advanced settings, Sync ID) and ACTUAL_SERVER_URL. The URL is read inside the container, where localhost is the container itself: use your Actual server's LAN address or domain, or http://host.docker.internal:5006 when Actual runs on the Docker host.

3. Start the server from the same directory:

bash
docker run -d \  --name actual-mcp-server-backend \  -p 3600:3600 \  --add-host=host.docker.internal:host-gateway \  --env-file .env \  -v actual-mcp-data:/app/data \  -v actual-mcp-logs:/app/logs \  ghcr.io/agigante80/actual-mcp-server:latest

Check it with curl http://localhost:3600/health. The image is also on Docker Hub as agigante80/actual-mcp-server. Production flags, TLS, reverse proxies and the reason for the /app/data volume are in the deployment guide.

Docker Compose (Compose 2.24.0 or later), from a clone of this repository:

bash
[ -f .env ] || install -m 600 .env.example .envchmod 600 .envif [ "$(grep -c '^MCP_SSE_AUTHORIZATION=' .env)" != 1 ] || ! grep -Eq '^MCP_SSE_AUTHORIZATION=[^[:space:]]{32,}$' .env; then  ( umask 077; install -m 600 /dev/null .env.new; { grep -v '^MCP_SSE_AUTHORIZATION=' .env; printf 'MCP_SSE_AUTHORIZATION=%s\n' "$(openssl rand -hex 32)"; } > .env.new ) && mv .env.new .envfigrep '^MCP_SSE_AUTHORIZATION=' .envdocker compose --profile production up -d

On a fresh .env, fill in the three Actual settings, then run the last line again.

npx (Node.js 22 or later, no container), in a directory holding a filled-in .env from step 1, where http://localhost:5006 is right for Actual on the same machine:

bash
npx actual-mcp-server --http

Privacy

Budget data the tools return goes to whichever model provider your AI client uses. The server itself contacts only the configured Actual server and, when OIDC auth is configured, your identity provider (discovery and JWKS). Logs stay on the host you run it on. Details: security and privacy.

Compatibility

Node.js 22 or later, Actual Budget server 25.0.0 or later, and the bundled @actual-app/api (its version is in package.json and reported by the actual_server_info tool). Requirements and upgrade steps: upgrading.

Tools

Every tool, with its description and caveats, is in the tools reference.

Reducing the tool surface

All 85 tools are published by default. Chat clients with a small tool budget (Gemini, LibreChat) do better with fewer. A tool that is not published is also refused if a client calls it by name.

ToolsetToolsContents
context14Orientation, lookups and server information
transactions14Transaction reads, create, update, delete, import and transfers
analysis7Summaries, aggregates and balances
budget10Budget months, amounts, carryover, holds, transfers, batch updates and notes
rules7Rules and payee rules, including actual_rules_create_batch
schedules5Scheduled transactions
structure21Accounts, account groups, categories, category groups, payees and tags
query1actual_query_run (SELECT only)
admin6Budget switching, import, export, bank sync and session management

The chat preset publishes 12 tools: actual_get_context, actual_query_run, actual_transactions_update_batch, actual_budget_updates_batch, actual_rules_create_batch, actual_transactions_create, actual_transactions_update, actual_transactions_delete, actual_rules_create, actual_budgets_transfer, actual_budgets_setAmount and actual_budgets_getMonth.

MCP_READ_ONLY=true hides and refuses 48 write-capable tools and leaves 37 published.

Example: a chat assistant with two extra tools.

bash
MCP_TOOLSETS=chatMCP_TOOLS=actual_accounts_list,actual_payees_get

A configuration that resolves to zero tools refuses to start. See Security and Privacy.

Configuration

VariableRequiredDescription
ACTUAL_SERVER_URLYesURL of your Actual Budget server, as seen from where the MCP server runs. Inside a container localhost is the container itself: use the host's address, the container name on a shared Docker network, or http://host.docker.internal:5006
ACTUAL_PASSWORDYesLogin password for your Actual Budget server (not the budget encryption password)
ACTUAL_BUDGET_SYNC_IDYesBudget Sync ID from Actual (Settings then Sync ID)
ACTUAL_BUDGET_PASSWORDNoEncryption password for an end-to-end encrypted budget
MCP_BRIDGE_PORTNoPort the MCP server listens on
MCP_SSE_AUTHORIZATIONNoStatic Bearer token clients must send (the raw token, not Bearer ...); highly recommended in production
AUTH_PROVIDERNonone (static Bearer) or oidc (JWKS-validated JWT)
MCP_TOOLSETSNoToolset groups and presets to publish; see Reducing the tool surface

Every variable, with its type and default: configuration reference. Several budgets: multiple budgets. Auth modes, per-client tokens and OIDC: authentication.

Documentation

Contributing

Contributions are welcome. See CONTRIBUTING.md for setup, the checks every change must pass and the PR process. Questions and bug reports: SUPPORT.md.

Security

Report a vulnerability privately as described in SECURITY.md, not in a public issue.

Sponsor

I build and maintain this in my own time. It is free, it stays free, and it gets maintained either way. If it saved you some time, you can say thanks at github.com/sponsors/agigante80. Entirely optional.

License

MIT, see LICENSE. Built on Actual Budget and the Model Context Protocol, with thanks to s-stefanov/actual-mcp for the original adapter pattern. An independent project, not affiliated with Actual Budget, provided as-is without warranty: if you connect it to real financial data, you do so at your own risk.


Version: 0.27.1 | Tool Count: 85 (verified LibreChat-compatible)

來源:README.md,提交 2bf0987

工具

0
SourceWeft 曾在隔離沙箱中以無憑證方式啟動該軟體包一次,以列出其工具,但未能完成:伺服器未能啟動。

版本歷史

5
  1. v0.27.1最新Nov 4, 2026
  2. v0.27.0Nov 4, 2026
  3. v0.26.0Nov 3, 2026
  4. v0.25.2Nov 3, 2026
  5. v0.25.1Oct 31, 2026

評分

已滿足適用檢查項的 50%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分

    請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。

  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分