For AI agents
Every recipe here is open data under CC0 (or the licence it says), and an AI agent can read, create, fork and change recipes for you. Make a key on your kitchen page, then use either of these.
MCP (Claude Code, Claude Desktop, any MCP client)
claude mcp add --transport http cook-together https://recipes.kapps.dev/mcp \
--header "Authorization: Bearer ck_YOUR_KEY"
Tools: search_recipes, get_recipe, create_recipe, fork_recipe, update_recipe, ai_write_recipe, ai_change_recipe. Then just talk: “make a gluten-free banana bread my kids can help with”, “fork the hummus and make it with white beans”.
REST
GET /api/recipes?q=banana&gf=1&vegan=1&lang=en search (no key needed)
GET /r/<slug>.json one recipe, all languages (no key needed)
POST /api/recipes {recipe document} create (yours, CC0)
PUT /api/r/<slug> {recipe document, note} change one of yours
POST /api/r/<slug>/fork your own copy
POST /api/ai/write {prompt, lang} the site's AI writes a recipe
POST /api/r/<slug>/ai {prompt, lang} the site's AI changes it (forks if not yours)
GET /api/me who the key belongs to
Send Authorization: Bearer ck_… on every write. A recipe document:
{
"emoji": "🍌",
"course": "snack",
"difficulty": 1,
"prep_min": 5,
"cook_min": 0,
"servings": 2,
"gf": 1,
"vegan": 1,
"vegetarian": 1,
"dairy_free": 1,
"nut_free": 1,
"texts": {
"en": {
"title": "Frozen banana pops",
"summary": "Bananas on sticks, dipped and frozen.",
"ingredients": [
{
"q": 2,
"i": "bananas"
},
{
"q": 2,
"u": "tbsp",
"i": "cocoa powder"
}
],
"steps": [
{
"t": "Peel the bananas and push a stick into each half."
},
{
"t": "Roll in cocoa and freeze for 2 hours.",
"min": 120
}
],
"tips": ""
}
}
}
Steps carry f flags (knife, hot, oven, blender, boil) for anything that needs a grown-up, and min for a timer. Ingredients that can hide gluten carry "check": true. Languages: en, he, pt (European Portuguese); any one is enough.
Plain text for agents: /llms.txt.