Actual Budget logo

Actual Budget

Community
s-stefanov

Model Context Protocol for Actual Budget API

Publishers-stefanov
Repositoryactual-mcp
LanguageTypeScript
Forks
56
Stars
141
Available tools
0
Transport typestdio
Categories
LicenseMIT
Links
  • Connect tools to AI workflows

    Actual Budget exposes MCP capabilities that can be used by compatible AI clients and agents.

  • 0 available tools

    Browse the callable actions below, including names and descriptions when provided by the server.

  • Ready-to-copy setup

    Use the installation snippets to configure this server in your preferred MCP client.

  • Open source signals

    141 stars and 56 forks from the linked repository.

Actual Budget MCP Server

MCP server for integrating Actual Budget with Claude and other LLM assistants.

Overview

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).

Features

Resources

  • Account Listings - Browse all your accounts with their balances
  • Account Details - View detailed information about specific accounts
  • Transaction History - Access transaction data with complete details

Tools

Transaction & Account Management

  • get-transactions - Retrieve and filter transactions by account, date, amount, category, or payee
  • create-transaction - Create a new transaction in an account with optional category, payee, and notes
  • update-transaction - Update an existing transaction with new category, payee, notes, or amount
  • get-accounts - Retrieve a list of all accounts with their current balance and ID
  • balance-history - View account balance changes over time

Reporting & Analytics

  • spending-by-category - Generate spending breakdowns categorized by type
  • monthly-summary - Get monthly income, expenses, and savings metrics

Categories

  • get-grouped-categories - Retrieve a list of all category groups with their categories
  • create-category - Create a new category within a category group
  • update-category - Update an existing category's name or group
  • delete-category - Delete a category
  • create-category-group - Create a new category group
  • update-category-group - Update a category group's name
  • delete-category-group - Delete a category group

Payees

  • get-payees - Retrieve a list of all payees with their details
  • create-payee - Create a new payee
  • update-payee - Update an existing payee's details
  • delete-payee - Delete a payee

Rules

  • get-rules - Retrieve a list of all transaction rules
  • create-rule - Create a new transaction rule with conditions and actions
  • update-rule - Update an existing transaction rule
  • delete-rule - Delete a transaction rule

Prompts

  • financial-insights - Generate insights and recommendations based on your financial data
  • budget-review - Analyze your budget compliance and suggest adjustments

Installation

Prerequisites

Remote access

Pull the latest docker image:

docker pull sstefanov/actual-mcp:latest

Local setup

  1. Clone the repository:
bash
git clone https://github.com/s-stefanov/actual-mcp.git
cd actual-mcp
  1. Install dependencies:
bash
npm install
  1. Build the server:
bash
npm run build
  1. Build the local docker image (optional):
bash
docker build -t <local-image-name> .
  1. Configure environment variables (optional):
bash
# Path to your Actual Budget data directory (default: ~/.actual)
export ACTUAL_DATA_DIR="/path/to/your/actual/data"

# If using a remote Actual server
export ACTUAL_SERVER_URL="https://your-actual-server.com"
export ACTUAL_PASSWORD="your-password"

# Specific budget to use (optional)
export ACTUAL_BUDGET_SYNC_ID="your-budget-id"

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.

bash
# If server auth and encryption/unlock use different passwords
export ACTUAL_BUDGET_ENCRYPTION_PASSWORD="your-encryption-password"

Usage with Claude Desktop

To use this server with Claude Desktop, add it to your Claude configuration:

On MacOS:

bash
code ~/Library/Application\ Support/Claude/claude_desktop_config.json

On Windows:

bash
code %APPDATA%\Claude\claude_desktop_config.json

Add the following to your configuration...

a. Using Node.js (npx version):

json
{
  "mcpServers": {
    "actualBudget": {
      "command": "npx",
      "args": ["-y", "actual-mcp", "--enable-write"],
      "env": {
        "ACTUAL_DATA_DIR": "path/to/your/data",
        "ACTUAL_PASSWORD": "your-password",
        "ACTUAL_SERVER_URL": "http://your-actual-server.com",
        "ACTUAL_BUDGET_SYNC_ID": "your-budget-id"
      }
    }
  }
}

### a. Using Node.js (local only):

```json
{
  "mcpServers": {
    "actualBudget": {
      "command": "node",
      "args": ["/path/to/your/clone/build/index.js", "--enable-write"],
      "env": {
        "ACTUAL_DATA_DIR": "path/to/your/data",
        "ACTUAL_PASSWORD": "your-password",
        "ACTUAL_SERVER_URL": "http://your-actual-server.com",
        "ACTUAL_BUDGET_SYNC_ID": "your-budget-id"
      }
    }
  }
}

b. Using Docker (local or remote images):

json
{
  "mcpServers": {
    "actualBudget": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "-v",
        "/path/to/your/data:/data",
        "-e",
        "ACTUAL_PASSWORD=your-password",
        "-e",
        "ACTUAL_SERVER_URL=https://your-actual-server.com",
        "-e",
        "ACTUAL_BUDGET_SYNC_ID=your-budget-id",
        "sstefanov/actual-mcp:latest",
        "--enable-write"
      ]
    }
  }
}

After saving the configuration, restart Claude Desktop.

💡 ACTUAL_DATA_DIR is optional if you're using ACTUAL_SERVER_URL.

💡 Use --enable-write to enable write-access tools.

Running an SSE Server

To expose the server over a port using Docker:

bash
docker run -i --rm \
  -p 3000:3000 \
  -v "/path/to/your/data:/data" \
  -e ACTUAL_PASSWORD="your-password" \
  -e ACTUAL_SERVER_URL="http://your-actual-server.com" \
  -e ACTUAL_BUDGET_SYNC_ID="your-budget-id" \
  -e BEARER_TOKEN="your-bearer-token" \
  sstefanov/actual-mcp:latest \
  --sse --enable-write --enable-bearer

⚠️ 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.

Example Queries

Once connected, you can ask Claude questions like:

  • "What's my current account balance?"
  • "Show me my spending by category last month"
  • "How much did I spend on groceries in January?"
  • "What's my savings rate over the past 3 months?"
  • "Analyze my budget and suggest areas to improve"

Usage with Codex CLI

Example Codex configuration:

In ~/.codex/config.toml:

toml
[mcp_servers.actual-budget]
url = "http://localhost:3000"

Point Codex at the same port you pass to npm start -- --sse --port <PORT>.

Development

For development with auto-rebuild:

bash
npm run watch

Testing the connection to Actual

To verify the server can connect to your Actual Budget data:

bash
node build/index.js --test-resources

Debugging

Since MCP servers communicate over stdio, debugging can be challenging. You can use the MCP Inspector:

bash
npx @modelcontextprotocol/inspector node build/index.js

Project Structure

  • index.ts - Main server implementation
  • types.ts - Type definitions for API responses and parameters
  • prompts.ts - Prompt templates for LLM interactions
  • utils.ts - Helper functions for date formatting and more

License

MIT

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

Installation

TypingMind
Prerequisites:

Node.js 18+

{
  "mcpServers": {
    "actualBudget": {
      "command": "npx",
      "args": [
        "-y",
        "actual-mcp"
      ],
      "env": {
        "ACTUAL_DATA_DIR": "/path/to/your/actual/data",
        "ACTUAL_PASSWORD": "your-password",
        "ACTUAL_SERVER_URL": "https://your-actual-server.com",
        "ACTUAL_BUDGET_SYNC_ID": "your-budget-id"
      }
    }
  }
}

Use Actual Budget MCP with multiple AI models

TypingMind connects MCP tools at the workspace level, so once Actual Budget is connected, you can use it with different AI models in TypingMind instead of setting it up separately for each model. This MCP runs locally through the TypingMind MCP connector on your device.

Setup guide to use the local connector

Use this when the MCP server needs access to local files, apps, or private resources on your computer.

1

Open the MCP settings

In TypingMind, go to Settings, Advanced Settings, then Model Context Protocol and choose Setup Connector.

  1. Open TypingMind in your browser.
  2. Click the Settings icon.
  3. Go to Advanced Settings.
  4. Open the Model Context Protocol section.
  5. Click Setup Connector and choose This Device.
TypingMind MCP connector setup screen with This Device selected
2

Run the connector command

Choose This Device, copy the command from TypingMind, and run it in Terminal. Keep the process running while you use MCP.

  1. Copy the setup command shown by TypingMind.
  2. Open Terminal on macOS or Windows Terminal on Windows.
  3. Paste and run the command.
  4. Approve the package install if Terminal asks you to proceed.
  5. Keep the Terminal window running while using MCP tools.
3

Add Actual Budget as a server

When the connector status is Ready, click Edit Servers and paste the MCP server configuration.

  1. Wait until the connector status shows Ready.
  2. Click Edit Servers.
  3. Paste the Actual Budget MCP server configuration.
  4. Save the server list.
  5. Refresh if you want to confirm the connector is still ready.
TypingMind MCP settings showing active server and Edit Servers button
{
  "mcpServers": {
    "actual-budget": {
      "command": "npx",
      "args": [
        "-y",
        "actual-mcp"
      ]
    }
  }
}
4

Use it across models

Save the server list, open Plugins, enable the Actual Budget MCP tools, then select any supported AI model in TypingMind and use the tools in chat or assign them to an AI agent.

  1. Open the Plugins page in TypingMind.
  2. Enable the Actual Budget MCP tools.
  3. Start a chat and choose the AI model you want to use.
  4. Use the MCP tools in chat or assign them to an AI agent.
  5. Switch to another AI model whenever needed without reconnecting MCP.
TypingMind chat using enabled MCP tools with a selected AI model
Can you use Actual Budget to help me with this task?
Actual Budget
Sure. I read it.
Here is what I found using Actual Budget.

Frequently asked questions

What is the Actual Budget MCP server used for?

Actual Budget is an MCP server that lets compatible AI clients connect to external tools and context. In TypingMind, you can add this MCP server once and make its tools available in your AI workspace.

Can I use Actual Budget MCP with multiple AI models in TypingMind?

Yes. TypingMind connects MCP tools at the workspace level, so you can use Actual Budget with different AI models such as Claude, ChatGPT, Gemini, or other models you have configured in TypingMind without setting up the MCP server separately for each model.

Why use Actual Budget MCP with TypingMind?

TypingMind is one of the best frontends for LLM chat because it brings multiple AI models, prompts, plugins, AI agents, API keys, and MCP tools into one workspace. With Actual Budget connected, you can use its MCP tools across your preferred models while keeping your chat workflow organized in TypingMind.

How do I connect Actual Budget MCP to TypingMind?

Actual Budget runs through the TypingMind local MCP connector. This is best when the MCP server needs access to local files, desktop apps, command-line tools, or private resources on your computer.

What tools does Actual Budget MCP provide in TypingMind?

Actual Budget exposes MCP capabilities that can be enabled from the TypingMind Plugins page and used in chat or assigned to AI agents.

Do I need to share my API keys with TypingMind to use Actual Budget MCP?

No. TypingMind is local-first and lets you keep your model providers, API keys, prompts, and MCP configuration under your control. If Actual Budget requires authentication, add the required headers, OAuth settings, or local configuration for that MCP server when you create the connection.

Related MCP Servers

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇