mothermachine

Browse / Invoicing and finance

Expense Budget Tracker

Self-hosted expense and budget tracker on Postgres with an OAuth MCP server and a SQL agent API.

AdaptableOperable ProductWeb app Deterministic TypeScript MCP server License: MIT

A personal finance tracker built for agents: a flat Postgres schema, a hosted MCP server (list_workspaces, get_schema, sql_query, sql_execute) with OAuth scopes, and an API-key SQL endpoint so Claude Code or Codex can parse bank statements and insert transactions. MIT, deployable with Docker Compose or AWS CDK; a free hosted instance exists.

Alternative to YNAB

Use it when
  • I want my coding agent to file my expenses from bank exports with SQL it can inspect
  • I want a budget tracker whose MCP works with any remote MCP client over OAuth
Gotchas
  • Authenticated mode requires AWS Cognito; AUTH_MODE=none is local-only
  • The hosted instance sends chat data to OpenAI and Langfuse; the README says so plainly
  • Real-software signal is thin: 30 stars, all 100 issues filed by the maintainer, no pricing on the hosted edition

Last activity Sep 2, 2026. Fit: adaptable 2, operable 3.

Editions

Self-hosted · Free open source

  • Clonegit clone https://github.com/kirill-markin/expense-budget-tracker

Hosted · Free closed source

For agents: JSON · Markdown

Adaptable: what is yours to change

Make it yours

Config only18 things to edit

Local run is make up with the .env: three Postgres roles, AUTH_MODE none for local or cognito for anything public, OAuth issuer and MCP resource URLs, optional OpenAI and Langfuse for in-app chat. A public deployment follows the AWS CDK guide; server.json describes the MCP server for the registry.

Env vars
DATABASE_URL MIGRATION_DATABASE_URL AUTH_DATABASE_URL AUTH_MODE HOST CORS_ORIGIN AUTH_DOMAIN COOKIE_DOMAIN OAUTH_ISSUER OAUTH_RESOURCE COGNITO_USER_POOL_ID COGNITO_CLIENT_ID SESSION_ENCRYPTION_KEY OPENAI_API_KEY RESEND_API_KEY
Config files
.env server.json infra/aws
Prompt files
none
Accounts you need
AWS account with Cognito for an authenticated self-hostOpenAI (optional chat)Resend (email OTP on self-host)

Source

Operable: what an agent can drive

Interface

OfficialMCP serverpublished by the builderremote or local

How an agent can drive an Operable Listing, in five levels: native (built for the agent as the primary interface), official (the Builder ships an agent interface), wrapped (a third party wraps the software's API), config (an agent can only drive it by editing files), gui (screen control only). An interface is official only when it is published by the same organization that ships the software. GUI-level Listings are allowed and sorted last.

Docs
mcp.expense-budget-tracker.com/mcp

Reach

Partial coverage. 6 of 7 jobs reachable through the stated interface.

JobThrough the interfaceEvidence
Record and query transactionsReachablesql_query and sql_execute on ledger_entries (README curl examples)
Balances and transfers across accountsReachableflat table schema exposed by get_schema; README feature list
Budgets by categoryReachablebudget tables reachable through sql_query; UI built on the same schema
Multi-currency reportingReachableexchange_rates table filled by the worker; queries in SQL
Import bank statements, screenshots and PDFsReachableREADME Agent API step 4: the agent parses files and inserts through the execute endpoint
Workspace managementUndeterminedlist_workspaces and select exist; creating workspaces over MCP not documented
Sign up and issue credentialsReachableGET api.expense-budget-tracker.com/v1/ discovers the email OTP flow for agents

Code stack

Languages
TypeScript
Frameworks
Next.js
Package manager
npm
Database
PostgreSQL
Hosting target
Docker ComposeAWS (CDK, ECS, RDS, Cognito)
Built
Mixed (recorded, never ranked)

Model stack

Providers
OpenAI (optional in-app chat)
Models
none
Keys you need
OPENAI_API_KEY LANGFUSE_PUBLIC_KEY LANGFUSE_SECRET_KEY
Prompts live in
none

Evidence and confidence

FieldWhere it was seenConfidence
formFactorweb UI plus MCP and HTTP SQL API (README)90%
executionModeltracker is deterministic; optional chat feature calls OpenAI85%
operabilityMCP served on the Builder's domain and implemented in apps/sql-api per server.json; MCP Registry name com.expense-budget-tracker/expense-budget-tracker90%
effort.env.example documents local and AWS variables; server.json in repo80%
editionsREADME and site: open source self-host plus hosted app; no pricing page found70%
activeGitHub pushedAt 2026-09-02; Show HN 2026-03-02; 1,052 commits–
reach75%

Open questions

  • Gate 3 is borderline: passes on the Show HN thread and hosted product, but there is no external user evidence in issues; Curator to confirm
  • Whether the hosted edition will stay free

Sources