kitchenowl-mcp
Enables AI assistants to manage shopping lists, recipes, meal plans, and shared expenses with a KitchenOwl instance via its REST API.
README
kitchenowl-mcp
An MCP server for KitchenOwl, built with FastMCP. It lets AI assistants (Claude, or any MCP client) manage your shopping lists, recipes, meal plan, and shared expenses over KitchenOwl's REST API.
It runs as a standalone service with streamable HTTP transport — typically as a Docker container next to your KitchenOwl instance. It is independent of KitchenOwl's built-in /api/mcp endpoint and also works with older KitchenOwl servers.
Quick start (Docker Compose)
cp .env.example .env # fill in KITCHENOWL_TOKEN (and JWT_SECRET_KEY for the bundled KitchenOwl)
docker compose up -d
The MCP endpoint is then available at http://localhost:8000/mcp.
If you already run KitchenOwl elsewhere, only build/run the kitchenowl-mcp service and point KITCHENOWL_URL at your instance.
Configuration
| Env var | Required | Default | Description |
|---|---|---|---|
KITCHENOWL_URL |
yes | — | Base URL of your KitchenOwl instance (no trailing /api) |
KITCHENOWL_TOKEN |
yes | — | Long-lived token of the KitchenOwl user to act as |
KITCHENOWL_HOUSEHOLD_ID |
no | auto | Default household; auto-picked when the user has exactly one |
MCP_HOST / MCP_PORT / MCP_PATH |
no | 0.0.0.0 / 8000 / /mcp |
Where the MCP HTTP endpoint listens |
MCP_SERVER_TOKEN |
no | unset | If set, MCP clients must send Authorization: Bearer <token> |
Getting a long-lived token
In the KitchenOwl app: Profile → Sessions → create a long-lived token, or via the API:
# 1. Log in (returns a short-lived access_token)
curl -X POST "$KITCHENOWL_URL/api/auth" -H 'Content-Type: application/json' \
-d '{"username":"you","password":"your-password"}'
# 2. Mint a long-lived token with it
curl -X POST "$KITCHENOWL_URL/api/auth/llt" \
-H "Authorization: Bearer <access_token>" \
-H 'Content-Type: application/json' -d '{"device":"kitchenowl-mcp"}'
Connecting a client
- Claude Code:
claude mcp add --transport http kitchenowl http://localhost:8000/mcp - Claude Desktop / claude.ai custom connector: add a remote MCP server with the URL
https://<your-host>/mcp(must be HTTPS-reachable; put a reverse proxy in front) - MCP Inspector:
npx @modelcontextprotocol/inspector, connect tohttp://localhost:8000/mcp(streamable HTTP)
If MCP_SERVER_TOKEN is set, configure the client to send it as a bearer token.
Tools
All household-scoped tools take an optional household_id; with a single household (or KITCHENOWL_HOUSEHOLD_ID set) it can be omitted.
Households — list_households, get_household (includes member ids for expenses)
Shopping lists — list_shopping_lists, create_shopping_list, rename_shopping_list, delete_shopping_list, get_shopping_list_items, add_shopping_list_item, update_shopping_list_item, remove_shopping_list_items (batch), get_recent_items, get_suggested_items, add_recipe_items_to_shopping_list, search_items, update_item
KitchenOwl has no check/uncheck state: removing an item means it was purchased and feeds the purchase history and suggestions.
Recipes — list_recipes, search_recipes, get_recipe, create_recipe, update_recipe, delete_recipe, import_recipe_from_url (scrapes a recipe website; returns a draft unless save=true)
Meal planner — get_meal_plan, add_recipe_to_plan, remove_recipe_from_plan, get_recipe_suggestions
Expenses — list_expenses, add_expense, update_expense, delete_expense, get_expense_categories, create_expense_category, get_expense_overview
Security
By default the MCP endpoint is unauthenticated — anyone who can reach it acts as the configured KitchenOwl user. Options, in increasing order of robustness:
- Keep the port on a trusted network (Docker-internal, LAN, VPN).
- Set
MCP_SERVER_TOKENto require a bearer token (static token — fine for personal use, not a full auth system). - Put a reverse proxy (Caddy/Traefik/nginx) with TLS in front — required anyway for claude.ai remote connectors.
Development
uv sync # install deps (Python >= 3.11)
uv run pytest # run the test suite (mocked KitchenOwl API)
uv run ruff check . # lint
KITCHENOWL_URL=... KITCHENOWL_TOKEN=... uv run kitchenowl-mcp # run locally
The tests use FastMCP's in-memory client with a respx-mocked KitchenOwl API, so no running KitchenOwl instance is needed.
Limitations / roadmap
- No item-catalog create/delete tools (
add_shopping_list_itemcreates catalog items implicitly). - No household create/delete or member management.
- Recipe
update_recipewithitems/tagsreplaces the full list (KitchenOwl API semantics). - KitchenOwl's own experimental MCP endpoint (
/api/mcp, recent versions) is an alternative if you don't need a separately deployable server.
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.