Skip to main content
Glama
slushpupie

actual-mcp

by slushpupie
README.md
# actual-mcp

An MCP (Model Context Protocol) server that bridges AI/LLM applications to [Actual Budget](https://actualbudget.org/). Exposes your budget data as MCP tools for use with any MCP-compatible client.

## Tools

| Tool | Description |
|---|---|
| `list_accounts` | List all accounts (name, type, balance, off-budget/closed flags) |
| `get_transactions` | Get recent transactions for an account (sorted newest-first) |
| `add_transaction` | Create a new transaction and commit it to the server |
| `get_budget_balances` | List budget categories with group and income flag |

## Setup

### Prerequisites

- Python 3.12+
- An [Actual Budget](https://actualbudget.org/) server (self-hosted)
- `uv` (recommended) or `pip`

### Installation

```bash
# Clone the repo
git clone https://github.com/slushpupie/actual-mcp
cd actual-mcp

# Install dependencies
uv sync

# Configure your Actual server credentials
cp .env.example .env
# Edit .env with your server URL, password, and budget ID
```

### Configuration

Set these environment variables (or add them to a `.env` file):

| Variable | Required | Description |
|---|---|---|
| `ACTUAL_SERVER_URL` | Yes | URL of your Actual Budget server (e.g. `http://localhost:5006`) |
| `ACTUAL_PASSWORD` | Yes | Your Actual server password |
| `ACTUAL_BUDGET_ID` | Yes | The budget ID or unique budget name to operate on |

## Usage

### Direct

```bash
uv run python mcp_server.py
```

This starts an MCP server over stdio, ready to connect to an MCP client.

### Docker

```bash
make build
make run
```

Or manually:

```bash
docker run -i --rm \
  -e ACTUAL_SERVER_URL=http://host.docker.internal:5006 \
  -e ACTUAL_PASSWORD=your_password \
  -e ACTUAL_BUDGET_ID=your_budget_id \
  actual-mcp
```

## Development

```bash
# Run tests
uv run python test_mcp_mock.py

# Run with uv
uv run python mcp_server.py
```

TDQS

A3.6/5.0

Scored across 4 tools

Disambiguation5/5

Each tool targets a distinct resource and action: listing accounts, getting transactions, adding transactions, and retrieving budget balances. There is no overlap.

Naming Consistency5/5

All tool names follow a consistent verb_noun snake_case pattern (e.g., list_accounts, get_transactions), making it easy to predict and remember.

Tool Count5/5

With 4 tools, the set is well-scoped for a budgeting MCP server, covering the core operations without being too sparse or overwhelming.

Completeness4/5

The tools cover listing accounts, viewing transactions, adding transactions, and checking budget balances. However, update and delete operations for transactions are missing, which is a minor gap.

Maintenance

ActivityInactive
ResponsivenessNo issues