Actual MCP 1.15.0 connects to OpenID-only Actual servers and merges duplicate payees
2 hours ago
Version 1.15.0 of the Actual Budget MCP server lets it connect to Actual servers that require OpenID sign-in. It also adds a tool for merging duplicate payees, lets get-transactions search every account at once, and fixes monthly totals that left out ordinary transactions.
Ask about this presentation
Chapters
Show transcriptHide transcript
Version 1.15.0 of the Actual Budget MCP server lets it connect to Actual servers that require OpenID sign-in. It also adds a tool for merging duplicate payees, lets get-transactions search every account at once, and fixes monthly totals that left out ordinary transactions.
An Actual server can enforce OpenID login, through Google for example. Password login is then disabled, so the password the MCP server signs in with stops working. Version 1.15.0 adds a session token variable instead. You copy the token from a browser that's signed in to Actual, and if both are set, the token wins.
To find it, open DevTools in that browser. Under Application, then IndexedDB, the user-token key holds it. It grants full access to your budgets, so treat it like a password. When it expires, tool calls fail with this message. Sign in again, replace the token, and restart the server.
merge-payees takes the payee to keep and a list of duplicates. Transactions on the duplicates move to the payee you keep, and the duplicates are removed. Rules that named them keep working, because Actual maps the old IDs to the target when it loads rules. It's a write tool, so it appears only when the server runs with the enable write flag.
The tool checks every ID first. Transfer payees are rejected, because Actual's own merge skips them and would still report success. IDs that don't exist are rejected. And the payee you keep is dropped from the duplicate list, since merging a payee into itself would delete it.
In 1.14.0, asking get-transactions for a month without naming an account stopped with an error. Now the account is optional, and leaving it out searches every account, on-budget and off-budget. Results are sorted newest first before the limit applies, so a limit keeps the most recent transactions.
Actual returns ordinary, non-split transactions with an empty list of split parts. The old check read that as a split with nothing in it, so those transactions dropped out, and only the parts of real splits were counted. Now they all count. In the January test case, that's 100 dollars of income, 80 dollars of expenses, and four transactions.
This release has zero breaking changes, but three things will look different. Monthly totals now include ordinary transactions, so they can differ from what 1.14.0 reported. With both a token and a password set, the token is used and a warning is logged. And Actual's API packages move from 26.9.0 to 26.10.0.
To upgrade, pull the 1.15.0 Docker image, or run version 1.15.0 of the actual-mcp package from npm. If you switch to a session token, expect to replace it when your server's token expiration runs out. With 1.15.0, OpenID servers connect, duplicate payees merge, and monthly totals count every transaction.








