Add mealie-recipe-import skill

This commit is contained in:
2026-08-16 18:20:11 +02:00
commit 57d44597ed
+152
View File
@@ -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=<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).
- 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. `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=<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.
## 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.