The full upstream README, mirrored here for reference. Install config, tool schemas, adoption signals, and an original overview live on the Actual Budget MCP Server listing page.
MCP server for integrating Actual Budget with Claude and other LLM assistants.
The Actual Budget MCP Server allows you to interact with your personal financial data from Actual Budget using natural language through LLMs. It exposes your accounts, transactions, and financial metrics through the Model Context Protocol (MCP).
get-transactions - Retrieve and filter transactions by account, date, amount, category, or payeecreate-transaction - Create a new transaction in an account with optional category, payee, and notesupdate-transaction - Update an existing transaction with new category, payee, notes, or amountget-accounts - Retrieve a list of all accounts with their current balance and IDbalance-history - View account balance changes over timespending-by-category - Generate spending breakdowns categorized by typemonthly-summary - Get monthly income, expenses, and savings metricsbudget-vs-actual - Compare budgeted amounts against actual spending per categorynet-worth - Track assets, liabilities, and net worth across all accounts over timecategory-trends - See how spending in each category moves month over month, with trend directionspending-by-payee - Rank payees by how much was spent with (or received from) each onecash-flow - Report income, expenses, and net cash flow per month or weekThe five tools above return JSON rather than markdown, so amounts stay machine-readable. Every amount is an integer number of cents, and each response carries an
amountsInfield describing the sign conventions it uses.
get-custom-reports - Retrieve every saved custom report from the Reports sectioncreate-custom-report - Create a saved custom reportupdate-custom-report - Update fields on a saved custom report, leaving the rest unchangeddelete-custom-report - Delete a saved custom reportget-dashboards - Retrieve every dashboard page and the widgets laid out on itadd-dashboard-widget - Add a widget to a dashboard pageupdate-dashboard-widget - Update a widget's configuration, position, or sizeremove-dashboard-widget - Remove a widget from its pageorganize-dashboard - Reposition and resize several widgets at oncecreate-dashboard-page / rename-dashboard-page / delete-dashboard-page - Manage dashboard pagesget-grouped-categories - Retrieve a list of all category groups with their categoriescreate-category - Create a new category within a category groupupdate-category - Update an existing category's name or groupdelete-category - Delete a categorycreate-category-group - Create a new category groupupdate-category-group - Update a category group's namedelete-category-group - Delete a category groupget-payees - Retrieve a list of all payees with their detailscreate-payee - Create a new payeeupdate-payee - Update an existing payee's detailsdelete-payee - Delete a payeeget-rules - Retrieve a list of all transaction rulescreate-rule - Create a new transaction rule with conditions and actionsupdate-rule - Update an existing transaction ruledelete-rule - Delete a transaction rulefinancial-insights - Generate insights and recommendations based on your financial databudget-review - Analyze your budget compliance and suggest adjustmentsPull the latest docker image:
Optional: separate encryption budget password
If your Actual setup requires a different password to unlock the local/encrypted budget data than the server authentication password, you can set ACTUAL_BUDGET_ENCRYPTION_PASSWORD in addition to ACTUAL_PASSWORD.
The server keeps one shared Actual connection for its entire lifetime and serializes budget operations through it. Downloaded data is re-synced when it exceeds the ACTUAL_SYNC_TTL_MS freshness window. In both stdio and HTTP modes, SIGINT and SIGTERM drain in-flight work before the server shuts down. Actual is no longer initialized and shut down for each tool call.
To use this server with Claude Desktop, add it to your Claude configuration:
On MacOS:
On Windows:
Add the following to your configuration...
After saving the configuration, restart Claude Desktop.
💡
ACTUAL_DATA_DIRis optional if you're usingACTUAL_SERVER_URL.
💡 Use
--enable-writeto enable write-access tools.
To expose the server over a port using Docker:
⚠️ Important: When using --enable-bearer, the BEARER_TOKEN environment variable must be set.
🔒 This is highly recommended if you're exposing your server via a public URL.
Once connected, you can ask Claude questions like:
Example Codex configuration:
In ~/.codex/config.toml:
Point Codex at the same port you pass to npm start -- --sse --port <PORT>.
For development with auto-rebuild:
To verify the server can connect to your Actual Budget data:
Since MCP servers communicate over stdio, debugging can be challenging. You can use the MCP Inspector:
The end-to-end test suite (vitest.e2e.config.ts) spins up a real Actual Budget server in a Docker container (via Testcontainers), seeds a budget, and drives it through a real MCP client over stdio to verify accounts, transactions, categories, payees, rules, and imports actually persist. It requires Docker to be running locally.
In CI, the e2e-test job in .github/workflows/pr-validation.yml only runs on release-please PRs (branch prefix release-please--) or when a PR is given the run-e2e label — it does not run on every PR by default, since it needs Docker and takes longer than the standard checks.
To run it locally:
Docker must be installed and running; the test suite pulls and starts the Actual server image automatically.
index.ts - Main server implementationtypes.ts - Type definitions for API responses and parametersprompts.ts - Prompt templates for LLM interactionsutils.ts - Helper functions for date formatting and moreactual-mcp is published to the official MCP Registry
as io.github.s-stefanov/actual-mcp. Registry metadata lives in
server.json and is published automatically on each release
(see .github/workflows/release-please.yml).
It advertises two transports on the npm package — stdio (default) and
streamable-http (via the --sse flag). (A Docker image is also published,
but is not yet listed as a registry package.)
Post-release directory listings are tracked in
docs/mcp-registry-checklist.md.
MIT
Contributions are welcome! Please feel free to submit a Pull Request.