- Python 92%
- Go Template 4.8%
- Makefile 1.6%
- Dockerfile 1.6%
| .agents/skills/repo-lunch-money-k8s | ||
| .claude | ||
| .forgejo/workflows | ||
| .ward | ||
| chart/templates | ||
| docs | ||
| lunch_money_mcp | ||
| scripts | ||
| tests | ||
| .dockerignore | ||
| .gitignore | ||
| .pre-commit-config.yaml | ||
| AGENTS.md | ||
| CLAUDE.md | ||
| Dockerfile | ||
| LICENSE | ||
| Makefile | ||
| pyproject.toml | ||
| README.md | ||
| rules.example.yaml | ||
| uv.lock | ||
lunch-money-k8s 🍱☸️
An MCP server for the Lunch Money personal-finance API, packaged as a container image and served over streamable HTTP. 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 shared MCP endpoint than learn each 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.yamlformat, 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 filterlist_categories/create_category- read and create categoriescategorize_transaction- assign a category to a transactionspending_summary- total spend per categorylist_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.
Fleet deploy
The Kubernetes deploy bundle now lives in coilyco-bridge/deploy/services/lunch-money-mcp/.
It owns the manifest, secret wiring, ingress, and rollout details. This repo keeps the app
source and Docker image build only.
The server speaks streamable HTTP at /mcp on port 8080. Deployment notes are in
docs/deploy.md.
License
AGPL-3.0. See LICENSE.
See also
- docs/FEATURES.md - inventory of what ships today.
- docs/deploy.md - fleet deploy pointer.
- AGENTS.md - agent instructions.
- .ward/ward.yaml - allowlisted dev commands (
ward exec <verb>). - MarkusPfundstein/mcp-obsidian - the other half of the loop. This server writes digests into a vault inbox, that MCP lets an agent read and edit vault notes through Obsidian's local REST API.
Cross-reference convention from coilysiren/agentic-os#59.