Self-hosted cookbook for the people you cook with: a web app for you, MCP for your AI agent.
589

A self-hosted cookbook for the people you cook with. Everyone keeps their own recipes, a Kitchen lets you cook from each other's, and your AI agent can do everything you can.
Kamosu keeps your recipes, every change ever made to them, each time someone cooked one and how it went, and the shopping list for the dishes you picked this week. Each person writes in their own Cookbook. Put the people you cook with in a Kitchen, your household, your parents, a group of friends, and each of you can open, cook and record how it went for everyone else's recipes, while only the person who wrote a recipe can change it.
Everything you can do in the web app, an agent can do over MCP (the Model Context Protocol), because both are built from the same list of operations. Kamosu runs on a machine you own, in one container with one folder and one port, and it sends your data nowhere.
![]() | ![]() |
| Home: shelves worked out from what you cook | A recipe, with its whole history behind it |
![]() | ![]() |
| Cooking mode: one step and what it uses | Shopping, added up from the recipes you chose |
/mcp.Kamosu suits a person, a household or a group of people who want to keep their recipes on their own server, cook from a phone, and let an agent add, fix or translate recipes for them.
It is not a hosted service, a meal planner, a nutrition tracker or a public recipe site. Every account starts from an invite, and nothing is visible to strangers unless you share a link.
latest and <version>: images for Dockerpodman-latest and podman-<version>: images for PodmanEvery tag is built for amd64 and arm64. The image is distroless and rootless: it has no shell and runs as the unprivileged user 65532.
Everything Kamosu keeps goes in one folder. Create it and give it to the user Kamosu runs as:
mkdir -p kamosu-data && sudo chown 65532:65532 kamosu-data
With rootless Podman, use podman unshare chown 65532:65532 kamosu-data instead.
Create docker-compose.yml beside that folder:
services:
kamosu:
image: battermanz/kamosu:latest
container_name: kamosu
ports:
- "5266:5266"
volumes:
- ./kamosu-data:/data
restart: unless-stopped
healthcheck:
test: ["CMD", "/app/kamosu", "health-check"]
interval: 30s
timeout: 5s
retries: 3
start_period: 10s
Start it:
docker compose up -d
Open Kamosu on port 5266 and create the first account. The first person to open it becomes the Operator, the account that runs the instance and invites everyone else. Do this straight after the first start.
Kamosu serves plain HTTP and never handles a certificate. Put your own reverse proxy (Caddy, Traefik, nginx) in front of it. Without HTTPS you cannot stay signed in from another device, and offline cooking does not work. To try it on the machine that runs it, http://localhost:5266 is enough.
In Kamosu, open Settings, then Account, and create an Access Key. Tick Read-only if the agent only needs to look things up. Point any MCP client at https://your-kamosu/mcp with the key as a bearer token. The GitHub README has the exact configuration for Claude Code, Codex and Hermes.
Everything Kamosu owns lives in the one folder mounted at /data: the database, the photographs, the Backups, and the search model if you turn Meaning Search on.
/data/backups, one replaced every day, one every week and one every month. It never sends a Backup anywhere, so copy that folder off the machine.No environment variable is required.
| Variable | Default | Purpose |
|---|---|---|
KAMOSU_ADDRESS | 0.0.0.0 | Address to listen on. |
KAMOSU_PORT | 5266 | Port to listen on. |
KAMOSU_DATA_DIR | /data | The folder that holds everything. Leave it alone and change the mount instead. |
KAMOSU_LOG | info | Log level, such as debug. |
The GitHub README covers Meaning Search, troubleshooting and security.
AGPL-3.0-only
Content type
Image
Digest
sha256:9b1fc6aa4…
Size
46.3 MB
Last updated
5 days ago
docker pull battermanz/kamosu