Skip to main content
Glama
EESHAN-ANAND

expense-tracker-postgres-mcp

by EESHAN-ANAND
README.md
# expense-tracker-postgres-mcp

The persistent, remote version of the expense tracker. Backed by Neon Postgres,
one generic `execute_sql` tool. Add expenses, edit/delete a specific row, and
run analytics (GROUP BY category or date) — all in plain English.

## Table `expense_table`

`id` (auto), `flow` ('gave'/'received'), `date`, `amount`, `category`
(grocery/rent/travel/hygiene/luxury/food/others), `note`.

Created automatically on startup if it doesn't exist. **No seed** — data was
migrated separately.

## Guardrail

- **Allowed:** SELECT, INSERT, UPDATE, DELETE, ALTER
- **Blocked (at all costs):** CREATE, DROP, TRUNCATE, and multi-statement chaining

## Setup

```bash
cd ~/Documents/Claude/expense-tracker-postgres-mcp
uv add fastmcp "psycopg[binary]" python-dotenv
cp .env.example .env        # paste your Neon DATABASE_URL (project with expense_table)
uv run main.py              # ensures the table exists; serves http://127.0.0.1:8000/mcp
```

## Deploy to FastMCP Cloud

1. `uv lock`, then push `main.py`, `pyproject.toml`, `uv.lock` to GitHub.
2. On fastmcp.cloud: entrypoint `main.py`, Requirements `uv.lock`, env var
   `DATABASE_URL = <your Neon connection string>`.
3. Deploy, then add the connector URL in Claude (desktop + mobile).

## Example asks

- "add ₹40 for chai today" → INSERT
- "total spending this month by category" → SELECT ... GROUP BY category
- "delete the misc ₹15 entry" → DELETE ... WHERE id = 30
- "how much on food vs rent in July?" → SELECT ... GROUP BY category