Files

11 KiB

name, description
name description
mealie-recipe-import 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=<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=<Name>) 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).
  • Airfryer-Rezepte immer taggen: Wird das Gericht in der Zubereitung ausdrücklich in einer Heißluftfritteuse/einem Airfryer zubereitet (oder ist eindeutig dafür gedacht), immer einen entsprechenden Tag setzen. Vorher in der bestehenden Tag-Liste nachsehen, ob bereits "Airfryer" oder "Heißluftfritteuse" existiert, und diesen bestehenden Begriff wiederverwenden statt ein Duplikat anzulegen.
  • 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=[<bereinigte Zeilen als Strings>])
mealie_recipes_update_structured_ingredients(slug=<slug>, parsed_ingredients=<Ergebnis>)

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=<slug>,
    name=<bereinigter, ggf. übersetzter Name>,
    description=<bereinigte Beschreibung>,
    ingredients=[<bereinigte Zutatenzeilen>],
    instructions=[<geglättete Schritte>],
    categories=[<gewählte Kategorien>],
    tags=[<gewählte Tags>],
    recipe_yield=<Portionen, falls unsauber>,
    prep_time=<falls sinnvoll normalisierbar>,
    cook_time=<falls sinnvoll normalisierbar>,
)

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. gemusewaffelngemusewaffeln-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=<neuer Name>) 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.

Trigger per Slash-Command

Der Skill triggert auch, wenn direkt /mealie-recipe-import <URL> eingegeben wird (Slash-Command-Aufruf). Das ist gleichbedeutend mit "importier diese URL nach Mealie und bereinige sie" — Ablauf ab Schritt 1 wie oben. Wird /mealie-recipe-import ohne URL aufgerufen, stattdessen nach der URL oder dem zu bereinigenden Rezept fragen.

Kurzbefehl für den Batch-Modus: Wird der Skill als /mealie-recipe-import ohneKategorie aufgerufen (oder mit einem der Synonyme ohneTags, ohneKategorieUndTags), direkt in den Batch-Modus unten springen — ohne Rückfrage, welcher Modus gemeint ist:

  • ohneKategorie → nur Rezepte ohne Kategorie suchen und bearbeiten
  • ohneTags → nur Rezepte ohne Tags suchen und bearbeiten
  • ohneKategorieUndTags → Rezepte, denen Kategorie ODER Tags fehlen

Ein eigenständiger, separat registrierter Slash-Befehl (z.B. /ohneKategorie ohne den Skill-Namen davor) ist technisch nicht möglich — nur der Skill-Name selbst funktioniert als Slash-Trigger. Das Schlüsselwort danach steuert aber zuverlässig den Modus.

Batch-Modus: alle unvollständigen Rezepte durchgehen

Wenn der User will, dass alle Rezepte ohne Kategorie und/oder Tags gesucht und bereinigt werden (z.B. "räum alle Rezepte ohne Kategorie auf", "geh alle unsortierten Rezepte durch"):

  1. Alle Rezepte seitenweise abrufen:
    mealie_recipes_list(page=1, per_page=50)
    
    Solange weiterblättern (page erhöhen), bis alle Seiten (total_pages) abgedeckt sind.
  2. Aus dem Ergebnis die Rezepte herausfiltern, bei denen recipeCategory und/oder tags leer sind (je nachdem, was der User will — nur Kategorie, nur Tags, oder beides fehlt).
  3. Dem User kurz die gefundene Anzahl + Namen nennen und bestätigen lassen, dass alle nacheinander bearbeitet werden sollen (kann je nach Anzahl mehrere Tool-Aufrufe dauern).
  4. Jedes gefundene Rezept einzeln durch Schritt 2-5 aus dem Hauptablauf laufen lassen (Taxonomie abrufen, Kategorien/Tags setzen). Zutaten/Anleitung standardmäßig nicht anfassen, um bestehende, funktionierende Rezepte nicht unnötig zu verändern — außer die strukturierten Felder sind offensichtlich vom Import kaputt. Das ist der Fall, wenn recipeIngredient oder recipeInstructions nur Platzhalter wie "Could not detect ingredients" / "Could not detect instructions" enthalten oder leer sind, während in description erkennbar ein vollständiger Rezepttext (Zutatenliste und/oder Zubereitungsschritte, oft als Instagram-Caption) steht. In diesem Fall die Zutaten und Schritte aus der description extrahieren, normalisieren, ggf. übersetzen und mit setzen — das ist der eigentliche Grund, warum das Rezept "unsortiert" wirkt. Wenn der User das ausdrücklich nur für Kategorien/Tags will, entsprechend nachfragen oder respektieren.
  5. Am Ende eine kurze Zusammenfassung: wie viele Rezepte bearbeitet wurden und welche Kategorien/Tags jeweils gesetzt wurden (kompakte Liste, keine vollständigen Rezeptdaten).

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=<Name>) 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.