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.
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
- 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
- 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
- Clone
git clone https://github.com/kirill-markin/expense-budget-tracker
Hosted · Free closed source
- HostedOpen the hosted app
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_URLMIGRATION_DATABASE_URLAUTH_DATABASE_URLAUTH_MODEHOSTCORS_ORIGINAUTH_DOMAINCOOKIE_DOMAINOAUTH_ISSUEROAUTH_RESOURCECOGNITO_USER_POOL_IDCOGNITO_CLIENT_IDSESSION_ENCRYPTION_KEYOPENAI_API_KEYRESEND_API_KEY- Config files
.envserver.jsoninfra/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
- github.com/kirill-markin/expense-budget-tracker
- MIT license
- Last commit Sep 2, 2026
- 30 stars
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.
Reach
Partial coverage. 6 of 7 jobs reachable through the stated interface.
| Job | Through the interface | Evidence |
|---|---|---|
| Record and query transactions | Reachable | sql_query and sql_execute on ledger_entries (README curl examples) |
| Balances and transfers across accounts | Reachable | flat table schema exposed by get_schema; README feature list |
| Budgets by category | Reachable | budget tables reachable through sql_query; UI built on the same schema |
| Multi-currency reporting | Reachable | exchange_rates table filled by the worker; queries in SQL |
| Import bank statements, screenshots and PDFs | Reachable | README Agent API step 4: the agent parses files and inserts through the execute endpoint |
| Workspace management | Undetermined | list_workspaces and select exist; creating workspaces over MCP not documented |
| Sign up and issue credentials | Reachable | GET 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_KEYLANGFUSE_PUBLIC_KEYLANGFUSE_SECRET_KEY- Prompts live in
- none
Evidence and confidence
| Field | Where it was seen | Confidence |
|---|---|---|
| formFactor | web UI plus MCP and HTTP SQL API (README) | 90% |
| executionModel | tracker is deterministic; optional chat feature calls OpenAI | 85% |
| operability | MCP served on the Builder's domain and implemented in apps/sql-api per server.json; MCP Registry name com.expense-budget-tracker/expense-budget-tracker | 90% |
| effort | .env.example documents local and AWS variables; server.json in repo | 80% |
| editions | README and site: open source self-host plus hosted app; no pricing page found | 70% |
| active | GitHub pushedAt 2026-09-02; Show HN 2026-03-02; 1,052 commits | – |
| reach | 75% |
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
- github.com/kirill-markin/expense-budget-tracker sourcing:invoicing-finance:community
- expense-budget-tracker.com/docs/mcp-connector/ analysis:invoicing-finance
- github.com/kirill-markin/expense-budget-tracker/blob/main/server.json analysis:invoicing-finance