No description
  • Python 90%
  • Go Template 5.2%
  • Makefile 2.5%
  • Dockerfile 1.7%
  • Shell 0.6%
Find a file
Kai Siren 9d5e343382
Some checks failed
ci / python (push) Has been cancelled
ci / helm (push) Has been cancelled
docker / build (push) Has been cancelled
chore(pre-commit): adopt context-load-points hooks (v0.11.1)
Part of the agentic-os-kai#505 load-point framework rollout.

closes coilysiren/lunch-money-k8s#13

Audit-log: coily://1780119233/AGPHOX7C - coily git commit
2026-05-30 00:44:14 -07:00
.claude ci: bump agentic-os pre-commit block to v0.3.0 2026-05-28 02:49:00 -07:00
.coily feat(precommit): adopt baseline agentic-os hook block (v0.2.7) 2026-05-24 23:49:00 -07:00
.github/workflows feat: publish container image to Docker Hub instead of GHCR 2026-05-25 20:39:14 -07:00
chart feat: publish container image to Docker Hub instead of GHCR 2026-05-25 20:39:14 -07:00
docs feat: publish container image to Docker Hub instead of GHCR 2026-05-25 20:39:14 -07:00
examples feat: publish container image to Docker Hub instead of GHCR 2026-05-25 20:39:14 -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 chore(pre-commit): adopt context-load-points hooks (v0.11.1) 2026-05-30 00:44:14 -07:00
AGENTS.md feat: publish container image to Docker Hub instead of GHCR 2026-05-25 20:39:14 -07:00
CLAUDE.md chore(pre-commit): adopt context-load-points hooks (v0.11.1) 2026-05-30 00:44:14 -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 feat: publish container image to Docker Hub instead of GHCR 2026-05-25 20:39:14 -07:00
pyproject.toml Bootstrap the containerized, Helm-deployable MCP server 2026-05-22 02:09:19 -07:00
README.md docs: document required git clone in Run on Kubernetes 2026-05-25 18:43:44 -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, deployable to Kubernetes as a Helm chart. Point Claude or any MCP client at it and ask about your spending in plain language.

Who this is for

  • Homelab folks running k3s who want Claude on their phone to answer "what did I spend on groceries this week" without keeping a laptop awake.
  • People who want one MCP endpoint shared across desktop, mobile, and scheduled jobs, instead of stdio-per-device.
  • Anyone who'd rather deploy a Helm chart than learn each MCP server's bespoke install path.

Why you might try this one

For read/write API coverage, this is feature parity with the other Lunch Money MCP servers. Reach for it when you want the deployment shape - three things stdio-on-a-laptop can't do:

  • Mobile access - dictation-based shorthand queries from the phone. "What did I spend on groceries this week" against a Tailscale-reachable MCP works the same on the train as at the desk, no laptop awake required.
  • Scheduled dumps and analysis - k3s is the homelab's general-purpose scheduler, and anything in k3s inherits tailnet reach. A daily routine pulls the trailing 7 days, flags the credit-card balance, enriches opaque payees, feeds uncategorized transactions back into an opinionated rules.yaml format, and writes the digest into an Obsidian vault inbox.
  • Credential isolation - the Lunch Money API token lives in a k8s Secret materialized from AWS SSM via ExternalSecrets. The pod gets it as an env var, the MCP exposes tool calls, and the LLM never sees the underlying key. Access control sits at the tailnet boundary.

The daily pulls compound through the vault. Each digest becomes context for the next day's question, so today's note is what next March's "what was that big charge again" finds - an LLM-readable second brain built up over time.

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.

Run on Kubernetes

The chart isn't published to a registry yet (#7), so clone first:

git clone https://github.com/coilysiren/lunch-money-k8s.git
cd lunch-money-k8s
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, the categorization-rules ConfigMap, API-version overrides, and a real-world homelab values file are covered in docs/deploy.md.

License

AGPL-3.0. See LICENSE.

See also

Cross-reference convention from coilysiren/agentic-os#59.