Moneta is an AI-powered, self-hosted money management app for small businesses and freelancers. Track income and expenses across multiple wallets, manage budgets, and view clear financial reports—without the complexity of traditional accounting software.
Your books, Your server, Your data.
Moneta includes a built-in MCP server, enabling AI agents such as Claude to record transactions, access financial data, and generate reports for you.
docker run -d --name moneta \
-p 8080:8080 \
-v moneta-storage:/app/storage \
ghcr.io/revoltify/moneta:latestOpen http://localhost:8080 and log in with admin@admin.com / 12345678 (change it in Settings → Security).
Prefer Compose? Grab compose.yaml and run docker compose up -d. On shared hosting? See shared hosting. No Docker? See manual installation.
- Dashboard with cash, income, expense, profit and cash-flow at a glance
- Income / expense / transfer / capital entry flows with edit and void
- Wallets with running-balance ledgers and one-click reconcile
- Budgets with alert thresholds
- Recurring transactions with catch-up
- Reports: Income Statement, Balance Sheet, Cash Flow, Category Breakdown, Daily & Monthly Summary
- Multiple companies side by side, each with its own currency and timezone
- AI agent access via MCP (26 tools) — OAuth or API tokens
- Audit log, ⌘K global search, dark mode, 2FA and passkeys
- Integer money storage (no float drift) +
moneta:verify-balancesintegrity check
Everything works with zero configuration. For tweaks, see .env.example — Docker takes the same variables as container environment, everyone else edits .env (the install wizard writes it for you).
No SSH, Composer or Node needed — every release ships a prebuilt zip with vendor and frontend assets included.
- Download
moneta-vX.Y.Z.zipfrom the latest release - Upload and extract it on your host, point your domain's document root at the
public/directory - Open your site — the install wizard walks you through requirements, database setup (SQLite, MySQL, MariaDB, PostgreSQL or SQL Server), and your admin account
Add the scheduler in your hosting panel's cron section:
* * * * * php /path/to/moneta/artisan schedule:run >> /dev/null 2>&1
To upgrade, extract the new release over the old files — your .env, database and storage/ state are never part of the zip.
Requires PHP 8.3+, Composer, Node 20+.
git clone https://github.com/revoltify/moneta.git && cd moneta
composer run setup # deps, .env, keys, database, migrations, frontend build
php artisan moneta:install # admin account + first companyServe public/ with your web server of choice (Laravel Herd, Valet, nginx + FPM, or php artisan serve), and add the scheduler to cron:
* * * * * php /path/to/moneta/artisan schedule:run >> /dev/null 2>&1
Same default login as Docker: admin@admin.com / 12345678, or pass your own:
php artisan moneta:install --name="Jane" --email="jane@example.com" --password="strong-password" --company="Acme"To upgrade a manual install:
git pull && composer run moneta:upgrade # deps, migrations, cache clear, frontend buildMoneta exposes everything at POST /mcp — reports, transactions, wallets, budgets, recurring. Two ways in:
OAuth (claude.ai / Claude Desktop connectors): add your instance URL + /mcp as a connector and approve access in the browser. Discovery and client registration are automatic.
Bearer token (Claude Code, scripts): create a token under Settings → API tokens, then:
claude mcp add --transport http moneta https://your-instance.com/mcp \
--header "Authorization: Bearer <token>"Then just ask: "record a 2,500 office rent expense from the Bank wallet" or "show me this month's income statement".
I forgot my password. There's no email-based reset (no mailer needed). From the server:
php artisan tinker --execute 'App\Models\User::first()->update(["password" => "new-password"]);'Can I try it with demo data? php artisan migrate:fresh --seed creates a populated workspace — log in as demo@example.com / password.
Can multiple people use it? No — Moneta is intentionally single-user. One admin, multiple companies.
Which databases are supported? SQLite (default, zero-config), MySQL, MariaDB, PostgreSQL and SQL Server.
composer run dev # app + hot-reloading frontend
composer test # full gate: pint, phpstan, eslint, tsc, pest
php artisan test --compact --filter=Name # single testIssues and pull requests welcome — composer test must pass.
