--- 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.