commit 57d44597ed946f8788a09315956b47592a01d1d6 Author: Oliver Vogt Date: Sun Aug 16 18:20:11 2026 +0200 Add mealie-recipe-import skill diff --git a/Skills/mealie-recipe-import/SKILL.md b/Skills/mealie-recipe-import/SKILL.md new file mode 100644 index 0000000..3388e36 --- /dev/null +++ b/Skills/mealie-recipe-import/SKILL.md @@ -0,0 +1,152 @@ +--- +name: mealie-recipe-import +description: Importiert ein Rezept aus einer URL in Mealie (per MCP) und bereinigt es direkt danach - setzt passende Kategorien und Tags, normalisiert Mengenangaben/Einheiten, bereinigt Zutatennamen und glättet die Zubereitungsschritte sprachlich (auf Deutsch, auch wenn das Original in einer anderen Sprache ist). Nutze diesen Skill immer, wenn der User eine Rezept-URL schickt und sie "in Mealie speichern/importieren/hinzufügen" möchte, wenn er sagt "importier das mal", "füg das Rezept hinzu", "mach das Rezept in Mealie sauber", oder allgemein ein rohes/unsortiertes Mealie-Rezept nachträglich korrigiert haben möchte (auch ohne neue URL, per Slug oder Namen). Trigger auch bei Formulierungen wie "korrigier das Rezept", "setz die Kategorien", "räum die Zutaten auf" im Mealie-Kontext. +--- + +# Mealie Rezept-Import & Korrektur + +Importiert Rezepte aus einer URL nach Mealie und bringt sie danach in einen sauberen, +konsistenten Zustand: richtige Kategorien, richtige Tags, saubere Mengen/Einheiten, +bereinigte Zutatennamen und flüssig lesbare, deutsche Zubereitungsschritte. + +Nutzer-Präferenzen (aus der Einrichtung dieses Skills): +- Sprache: **Deutsch** — fremdsprachige Rezepte werden beim Bereinigen ins Deutsche übersetzt (Zutaten, Schritte, Beschreibung, Name). +- Kategorien/Tags: Bevorzugt bestehende aus Mealie verwenden, bei Bedarf aber **neue anlegen** (kein Nachfragen nötig — `mealie_recipes_update` legt beim Update automatisch neue Kategorie-/Tag-Namen an, falls sie noch nicht existieren). +- Umfang der Korrektur: Kategorien, Tags, Mengen/Einheiten normalisieren, Zutatennamen bereinigen, Zubereitungsschritte glätten. + +## Ablauf + +### 1. Rezept importieren (nur wenn eine neue URL gegeben wurde) + +``` +mealie_recipes_create_from_url(url=, include_tags=false) +``` + +`include_tags=false`, weil die vom Scraper übernommenen Tags/Kategorien meist unpassend +oder inkonsistent mit der bestehenden Mealie-Taxonomie sind — wir setzen sie im nächsten +Schritt bewusst selbst. Das Ergebnis liefert u.a. `slug`, `name`, Rohtext von +Zutaten/Anleitung. + +Wenn der User stattdessen ein bereits vorhandenes Rezept nennt (Name oder Slug), das +Rezept stattdessen über `mealie_recipes_search(query=)` finden und den `slug` +daraus verwenden. + +### 2. Bestehende Taxonomie abrufen + +Vor dem Setzen von Kategorien/Tags immer erst die bestehenden Listen holen, damit +bereits vorhandene Begriffe wiederverwendet werden statt Dubletten anzulegen +(z.B. nicht "Dessert" und "Desserts" parallel): + +``` +mealie_categories_list() +mealie_tags_list() +``` + +Wähle aus dieser Liste passende Kategorien/Tags. Nur wenn wirklich nichts passt, einen +neuen, prägnanten deutschen Begriff vergeben (Titelcase, Singular bei Kategorien wie +"Hauptgericht", "Beilage", "Dessert", "Frühstück"; bei Tags eher granular wie +"vegetarisch", "vegan", "schnell", "Ofengericht", "Meal-Prep", "glutenfrei"). + +Faustregeln für die Zuordnung: +- **Kategorien** = grobe Einordnung (max. 1-3): Gang (Hauptgericht/Vorspeise/Dessert/ + Frühstück/Beilage), ggf. Küche (Italienisch, Asiatisch) wenn eindeutig. +- **Tags** = Eigenschaften/Filter (beliebig viele, aber sparsam): Ernährungsform + (vegetarisch/vegan/glutenfrei/low-carb), Aufwand (schnell, meal-prep), Methode + (Ofengericht, One-Pot, Grillen), Anlass (Sommer, Party, Kinderfreundlich). +- Keine Kategorie/Tag doppelt in leicht anderer Schreibweise anlegen — bei Unsicherheit + lieber den bestehenden, ähnlichsten Begriff aus der Liste nehmen. + +### 3. Zutaten bereinigen und normalisieren + +Rohe Zutatenzeilen (z.B. `"1 Bund glatte Petersilie, fein gehackt"`, +`"200g Mehl Type 405"`) glätten: +- Einheiten auf gängige deutsche Kurzformen normalisieren: g, kg, ml, l, TL, EL, Prise, + Stück, Bund, Dose, Zehe(n) etc. Keine Mischformen wie "gr" oder "Gramm" ausgeschrieben. +- Zutatennamen vereinheitlichen (z.B. immer "Zwiebel" statt mal "Zwiebeln" mal "Zwiebel(n)" + innerhalb desselben Rezepts; Tippfehler korrigieren; Duplikate zusammenführen, wenn eine + Zutat mehrfach mit leicht anderem Namen auftaucht). +- Fremdsprachige Zutaten ins Deutsche übersetzen (z.B. "all-purpose flour" → "Weizenmehl + Type 405", "kosher salt" → "Salz"). + +Für eine wirklich strukturierte Bereinigung (getrennte Felder für Menge/Einheit/Zutat, +nützlich für Einkaufslisten) optional den Mealie-Parser nutzen: + +``` +mealie_parser_ingredients_batch(ingredients=[]) +mealie_recipes_update_structured_ingredients(slug=, parsed_ingredients=) +``` + +Das lohnt sich vor allem, wenn der User Wert auf saubere Einkaufslisten legt. Für die +reine Text-Bereinigung reicht es, die geglätteten Zutatenzeilen direkt in +`mealie_recipes_update(ingredients=[...])` zu schreiben (siehe Schritt 5). + +### 4. Zubereitungsschritte glätten + +- In flüssiges, klar formuliertes Deutsch bringen (kurze, aktive Sätze, ein Arbeitsschritt + pro Listeneintrag). +- Fremdsprachige Anleitungen vollständig übersetzen, nicht nur einzelne Wörter. +- Inhalt dabei nicht verändern — keine Zutaten/Mengen/Reihenfolge erfinden oder weglassen, + nur sprachlich glätten und Redundanzen straffen. +- Falls Schritte vom Scraper unsauber zusammengefasst wurden (z.B. ein Riesenblock Text + statt einzelner Schritte), sinnvoll in einzelne, in sich abgeschlossene Schritte + aufteilen. + +### 5. Alles zusammen in Mealie speichern + +Ein einziger Update-Call mit allen bereinigten Feldern (spart Round-Trips): + +``` +mealie_recipes_update( + slug=, + name=, + description=, + ingredients=[], + instructions=[], + categories=[], + tags=[], + recipe_yield=, + prep_time=, + cook_time=, +) +``` + +Wichtig: `mealie_recipes_update` **ersetzt** Zutaten/Anleitung/Tags/Kategorien komplett — +immer die vollständige, bereinigte Liste mitschicken, nicht nur die Änderungen. + +**Achtung Slug-Falle:** Wird im selben Aufruf auch `name` geändert, ändert Mealie +automatisch den `slug` des Rezepts (z.B. `gemusewaffeln` → `gemusewaffeln-mit-krauterquark`). +Folgeaufrufe mit dem alten Slug schlagen dann mit `404 No Entry Found` fehl. Wenn `name` +mitgeschickt wird: den Aufruf **einzeln** machen (nicht mit weiteren Updates kombinieren, +die noch den alten Slug referenzieren), und danach den neuen Slug per +`mealie_recipes_search(query=)` ermitteln, bevor mit diesem Rezept +weitergearbeitet wird. + +### 6. Kurze Zusammenfassung an den User + +Nach dem Speichern knapp berichten, was gemacht wurde — insbesondere: +- welche Kategorien/Tags gesetzt wurden (und ob welche neu angelegt wurden), +- ob/was übersetzt wurde, +- ob Zutaten zusammengeführt oder korrigiert wurden. + +Keine komplette Rezept-Abschrift im Chat — Mealie zeigt das Ergebnis, ein Link/Slug-Verweis +reicht. + +## Mehrere URLs auf einmal + +Wenn der User mehrere URLs gleichzeitig schickt, jede einzeln importieren +(`mealie_recipes_create_from_url` pro URL oder `mealie_recipes_create_from_urls_bulk` für +den Import-Schritt) und danach **jedes Rezept einzeln** durch Schritt 2-5 laufen lassen — +nicht pauschal dieselben Kategorien/Tags auf alle anwenden, jedes Rezept bekommt seine +eigene, passende Einordnung. + +## Edge Cases + +- **Scraper konnte URL nicht lesen / Import schlägt fehl**: Seite selbst per web_fetch + holen, Rezeptdaten manuell extrahieren und mit `mealie_recipes_create(...)` anlegen + (inkl. bereits bereinigter Felder), statt den fehlgeschlagenen Import zu wiederholen. +- **Rezept existiert schon (Duplikat)**: Vor dem Import kurz mit + `mealie_recipes_search(query=)` prüfen. Bei Treffer nachfragen, ob überschrieben/ + aktualisiert oder als neues Rezept angelegt werden soll — nicht stillschweigend doppelt + anlegen. +- **Sehr lange/unklare Zutatenliste**: Lieber in Batches mit + `mealie_parser_ingredients_batch` arbeiten statt einzeln zu parsen.