recipe-creation — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited recipe-creation (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Create well-structured recipes in Mealie using the MCP server tools, following the family's dietary guidelines and the Mealie v3 data format.
Every recipe creation follows the same two-phase flow:
mcp__plugin_mealie_mealie__create_recipe with all fields in one pass (the tool handles the create-then-patch sequence internally)Apply the family's defaults automatically unless the user specifies otherwise:
Collect the following, asking the user only for what they haven't already provided:
| Field | Parameter | Notes |
|---|---|---|
| Name | name | Required |
| Description | description | One-sentence summary |
| Servings | servings | Numeric; default 6 |
| Yield text | recipe_yield | e.g., "6 servings", "1 loaf", "15–18 rolls" |
| Total time | total_time | e.g., "1 hour 30 minutes" |
| Prep time | prep_time | e.g., "20 minutes" |
| Cook time | perform_time | e.g., "1 hour 10 minutes" |
| Categories | categories | List of category names (e.g., "Main Courses") |
| Tags | tags | List of tag names (e.g., "beef", "winter") |
Pass ingredients as a list of dicts to the ingredients parameter. Two kinds of items are supported:
Group ingredients visually. Use a dict with only a "section" key:
{"section": "The Aromatics"}Section names should be descriptive and meaningful: "The Protein", "The Liquid Base", "The Vegetables", "For the Dough", "For the Filling", "Seasoning Blend".
Each ingredient is a dict with these optional keys:
| Key | Type | Description |
|---|---|---|
quantity | float | Numeric amount (e.g., 2, 0.5, 300) |
unit | string | Unit name or abbreviation (e.g., "cup", "g", "tbsp", "lb") |
food | string | Ingredient name (e.g., "bread flour", "avocado oil", "beef chuck") |
comment | string | Preparation note displayed alongside (e.g., "softened", "roughly chopped", "about 1¾ tsp") |
[
{"section": "The Protein"},
{"quantity": 2, "unit": "lb", "food": "beef chuck", "comment": "cut into 1½-inch cubes"},
{"quantity": 1, "unit": "tsp", "food": "kosher salt"},
{"section": "The Aromatics"},
{"quantity": 1, "food": "onion", "comment": "diced"},
{"quantity": 4, "food": "garlic cloves", "comment": "minced"}
]Important: Omit keys that don't apply — don't pass null or empty strings. The food lookup auto-creates missing foods in Mealie's database.
Pass instructions as a list to the instructions parameter. Each item can be a plain string or an enhanced dict:
"Brown the beef in batches over high heat. Do not crowd the pan."{
"title": "Sear the Beef",
"summary": "Develop fond and flavor with high-heat browning",
"text": "Pat the beef cubes dry with paper towels — moisture is the enemy of browning. Heat 2 tbsp avocado oil in a Dutch oven over high heat until shimmering. Working in batches of 6–8 pieces, sear each cube undisturbed for 90 seconds per side. The goal is deep mahogany crust on at least two faces. Transfer to a plate and repeat, adding oil as needed. Do not skip this step — the fond left in the pot is where the flavor lives."
}| Key | Purpose |
|---|---|
title | Step heading shown in Cook Mode |
summary | One-liner takeaway for step-navigation |
text | Full instruction body — include the "why" |
Use enhanced dicts for any recipe with more than 5 steps. Plain strings are fine for quick/simple recipes where the user just wants to save something fast.
Pass notes as a list of dicts to the notes parameter. Each note has a title and body:
[
{
"title": "Make-Ahead",
"text": "This stew is better the next day. Make it through step 5, cool completely, refrigerate overnight. Reheat gently and finish with the herb garnish fresh."
},
{
"title": "Substitutions",
"text": "Beef chuck is ideal but short ribs or oxtail also work beautifully. Increase braising time to 3–4 hours for oxtail. For a richer result, use tallow instead of avocado oil for the sear."
}
]Use notes for: make-ahead instructions, storage, substitutions, troubleshooting, serving suggestions, scaling notes.
Before calling create_recipe, run a mental compliance check:
If the recipe as described contains violations, flag them and suggest compliant alternatives before saving. The PreToolUse hook will also catch violations, but catching them before the tool call is better UX.
Assemble the full call:
{
"name": "Braised Beef Stew",
"description": "A rich, slow-braised beef stew built on fond and aromatic vegetables",
"servings": 6,
"recipe_yield": "6 generous servings",
"total_time": "3 hours",
"prep_time": "30 minutes",
"perform_time": "2 hours 30 minutes",
"ingredients": [...],
"instructions": [...],
"categories": ["Main Courses"],
"tags": ["beef", "winter", "braised"],
"notes": [...]
}After creation, call mcp__plugin_mealie_mealie__get_recipe with the returned slug to confirm everything saved correctly, then show the user the formatted result.
For Foundation recipes (educational "why behind the how" recipes), add:
"extras": {"isFoundation": "1"}Note: Mealie stores this as the string "1", not boolean true. See the foundations skill for full Foundation recipe authoring guidance.
Standard category names in use:
Standard tag patterns:
"beef", "chicken", "lamb", "fish", "turkey", "vegetarian""winter", "summer", "fall", "spring""braised", "roasted", "baked", "grilled", "fermented""quick", "make-ahead", "kid-favorite", "batch-cook"create_recipe(
name="...",
description="...",
servings=6,
recipe_yield="...",
total_time="...", prep_time="...", perform_time="...",
ingredients=[
{"section": "Group Name"},
{"quantity": N, "unit": "...", "food": "...", "comment": "..."},
...
],
instructions=[
{"title": "...", "summary": "...", "text": "..."},
...
],
categories=["..."],
tags=["..."],
notes=[{"title": "...", "text": "..."}, ...],
extras={"isFoundation": "1"} # only for Foundation recipes
)~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.