Model Context Protocol for Actual Budget API
- ✓Open-source license (MIT)
- ✓Actively maintained (<30d)
- ✓Healthy fork ratio
- ✓Clear description
- ✓Mature repo (>1y old)
- ✓Documented (README)
claude mcp add actual-mcp -- npx -y version{
"mcpServers": {
"actual-mcp": {
"command": "npx",
"args": ["-y", "version"],
"env": {
"ACTUAL_SERVER_URL": "<actual_server_url>",
"ACTUAL_PASSWORD": "<actual_password>",
"ACTUAL_BUDGET_ENCRYPTION_PASSWORD": "<actual_budget_encryption_password>",
"BEARER_TOKEN": "<bearer_token>"
}
}
}
}ACTUAL_SERVER_URLACTUAL_PASSWORDACTUAL_BUDGET_ENCRYPTION_PASSWORDBEARER_TOKENResumen de MCP Servers
# 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](https://actualbudget.com/) 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
- **`budget-vs-actual`** - Compare budgeted amounts against actual spending per category
- **`net-worth`** - Track assets, liabilities, and net worth across all accounts over time
- **`category-trends`** - See how spending in each category moves month over month, with trend direction
- **`spending-by-payee`** - Rank payees by how much was spent with (or received from) each one
- **`cash-flow`** - Report income, expenses, and net cash flow per month or week
> The 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 `amountsIn` field describing the sign conventions it uses.
#### Custom Reports & Dashboards
- **`get-custom-reports`** - Retrieve every saved custom report from the Reports section
- **`create-custom-report`** - Create a saved custom report
- **`update-custom-report`** - Update fields on a saved custom report, leaving the rest unchanged
- **`delete-custom-report`** - Delete a saved custom report
- **`get-dashboards`** - Retrieve every dashboard page and the widgets laid out on it
- **`add-dashboard-widget`** - Add a widget to a dashboard page
- **`update-dashboard-widget`** - Update a widget's configuration, position, or size
- **`remove-dashboard-widget`** - Remove a widget from its page
- **`organize-dashboard`** - Reposition and resize several widgets at once
- **`create-dashboard-page`** / **`rename-dashboard-page`** / **`delete-dashboard-page`** - Manage dashboard pages
#### 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
- [Node.js](https://nodejs.org/) (v16 or higher)
- [Actual Budget](https://actualbudget.com/) installed and configured
- [Claude Desktop](https://claude.ai/download) or another MCP-compatible client
- [Docker Desktop](https://www.docker.com/products/docker-desktop) (optional)
### 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
```
2. Install dependencies:
```bash
npm install
```
3. Build the server:
```bash
npm run build
```
4. Build the local docker image (optional):
```bash
docker build -t <local-image-name> .
```
5. 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"
# How long downloaded data stays fresh before the server re-syncs, in ms
# (default: 60000). Use 0 to sync before every call, or -1 to never sync.
export ACTUAL_SYNC_TTL_MS="60000"
```
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?"
- "Which categories am I overspending on this month?"
- "How has my net worth changed over the past year?"
- "Which payees do I spend the most with?"
- "Is my grocery spending trending up or down?"
- "Analyze my budget and suggest areas to improve"
- "What custom reports do I have?"
- "Add a net worth widget to my Spending Plan dashboard"
- "Rearrange my dashboard so the cash flow card is full width at the top"
## 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](https://github.com/modelcontextprotocol/inspector):
```bash
npx @modelcontextprotocol/inspector node build/index.js
```
### E2E validation gate
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-plLo que la gente pregunta sobre actual-mcp
¿Qué es s-stefanov/actual-mcp?
+
s-stefanov/actual-mcp es mcp servers para el ecosistema de Claude AI. Model Context Protocol for Actual Budget API Tiene 230 estrellas en GitHub y su última actualización registrada es del 2026-09-13.
¿Cómo se instala actual-mcp?
+
Puedes instalar actual-mcp clonando el repositorio (https://github.com/s-stefanov/actual-mcp) o siguiendo las instrucciones del README en GitHub. ClaudeWave también te ofrece bloques de instalación rápida en esta misma página.
¿Es seguro usar s-stefanov/actual-mcp?
+
Nuestro agente de seguridad ha analizado s-stefanov/actual-mcp y le ha asignado un Trust Score de 100/100 (tier: Verified). Revisa el desglose completo de comprobaciones superadas y flags en esta página.
¿Quién mantiene s-stefanov/actual-mcp?
+
s-stefanov/actual-mcp es mantenido por s-stefanov. La última actividad registrada en GitHub es del 2026-09-13, con 45 issues abiertos.
¿Hay alternativas a actual-mcp?
+
Sí. En ClaudeWave puedes explorar mcp servers similares en /categories/mcp, ordenados por popularidad o actividad reciente.
Despliega actual-mcp en tu cloud
Lleva este repo a producción en minutos. Cada plataforma genera su propio entorno con variables de entorno editables.
¿Mantienes este repo? Añade un badge a tu README
Pega el badge en tu README de GitHub para mostrar que está auditado por ClaudeWave. Cada badge enlaza de vuelta a esta página y muestra el Trust Score actual.
[](https://claudewave.com/repo/s-stefanov-actual-mcp)<a href="https://claudewave.com/repo/s-stefanov-actual-mcp"><img src="https://claudewave.com/api/badge/s-stefanov-actual-mcp" alt="Featured on ClaudeWave: s-stefanov/actual-mcp" width="320" height="64" /></a>Más MCP Servers
Fair-code workflow automation platform with native AI capabilities. Combine visual building with custom code, self-host or cloud, 400+ integrations.
User-friendly AI Interface (Supports Ollama, OpenAI API, ...)
An open-source AI agent that brings the power of Gemini directly into your terminal.
Real-time global intelligence dashboard. AI-powered news aggregation, geopolitical monitoring, and infrastructure tracking in a unified situational awareness interface
🕷️ An adaptive Web Scraping framework that handles everything from a single request to a full-scale crawl!
The fastest path to AI-powered full stack observability, even for lean teams.