No description
  • Python 90.6%
  • Go Template 5.2%
  • Makefile 2.5%
  • Dockerfile 1.7%
Find a file
Kai Siren 8e0d9a9235
Some checks are pending
ci / python (push) Waiting to run
ci / helm (push) Waiting to run
docker / build (push) Waiting to run
feat: categorize verb looks back 90 days
Default the lookback to 90 days (overridable via LUNCH_MONEY_CATEGORIZE_DAYS)
to clear the older uncategorized backlog.

closes #13

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-22 04:22:10 -07:00
.coily Flesh out the Helm chart to a standard production shape 2026-05-22 02:27:03 -07:00
.github/workflows ci: add CI workflows and the pre-commit baseline 2026-05-22 02:29:42 -07:00
chart feat: expand the Helm chart with production niceties 2026-05-22 03:50:57 -07:00
docs feat: add v2 API support and the remaining v1 tools 2026-05-22 03:50:59 -07:00
examples Flesh out the Helm chart to a standard production shape 2026-05-22 02:27:03 -07:00
lunch_money_mcp style: apply ruff formatting to the client 2026-05-22 03:51:37 -07:00
scripts feat: categorize verb looks back 90 days 2026-05-22 04:22:10 -07:00
tests feat: add v2 API support and the remaining v1 tools 2026-05-22 03:50:59 -07:00
.dockerignore Bootstrap the containerized, Helm-deployable MCP server 2026-05-22 02:09:19 -07:00
.gitignore Bootstrap the containerized, Helm-deployable MCP server 2026-05-22 02:09:19 -07:00
.pre-commit-config.yaml ci: add CI workflows and the pre-commit baseline 2026-05-22 02:29:42 -07:00
AGENTS.md ci: add CI workflows and the pre-commit baseline 2026-05-22 02:29:42 -07:00
Dockerfile fix: run the venv console script directly instead of uv run 2026-05-22 03:23:06 -07:00
LICENSE Bootstrap the containerized, Helm-deployable MCP server 2026-05-22 02:09:19 -07:00
Makefile Flesh out the Helm chart to a standard production shape 2026-05-22 02:27:03 -07:00
pyproject.toml Bootstrap the containerized, Helm-deployable MCP server 2026-05-22 02:09:19 -07:00
README.md feat: add v2 API support and the remaining v1 tools 2026-05-22 03:50:59 -07:00
rules.example.yaml Bootstrap the containerized, Helm-deployable MCP server 2026-05-22 02:09:19 -07:00
uv.lock Refresh uv.lock for the renamed project 2026-05-22 02:09:59 -07:00

lunch-money-k8s 🍱☸️

An MCP server for the Lunch Money personal-finance API, served over HTTP and deployable to Kubernetes with a Helm chart. Point Claude or any MCP client at it and ask about your spending in plain language.

Most Lunch Money MCP servers run stdio-only on a laptop. This one runs as a service: containerized, Helm-installable, happy on a homelab cluster.

Tools

  • list_transactions - transactions in a date range, optional uncategorized filter
  • list_categories / create_category - read and create categories
  • categorize_transaction - assign a category to a transaction
  • spending_summary - total spend per category
  • list_budgets - budget detail per category

Quick start (local, stdio)

Grab an API token from the Lunch Money developers page:

export LUNCH_MONEY_TOKEN=...
uv sync
uv run lunch-money-mcp

Then register uv run lunch-money-mcp with your MCP client.

The server talks to the Lunch Money v1 API by default. Set LUNCH_MONEY_API_VERSION=v2 to use the v2 API (Lunch Money's open alpha); LUNCH_MONEY_API_BASE overrides the base URL.

Run on Kubernetes

helm install lunch-money ./chart --set lunchMoney.token=$LUNCH_MONEY_TOKEN

The server speaks streamable HTTP at /mcp on port 8080. Ingress, existing-secret wiring, and the categorization-rules ConfigMap are covered in docs/deploy.md.

Auto-categorization

scripts/categorize.py seeds a category set and assigns transactions by payee-prefix rules. Copy rules.example.yaml to rules.yaml (gitignored, so your real payees never get committed) and edit it for your own spending.

License

AGPL-3.0. See LICENSE.

See also