Hosted MCP server · #161 most used on Smithery

Guardian

kaimeilabs/guardian-engine

Deterministic recipe verification for AI agents. Catches hallucinated temperatures, missing techniques, wrong ingredients, and impossible cooking steps — then suggests one-click fixes. Covers 161+ dishes across 5 cuisines. Also checks EU allergen compliance (all 14 Annex II groups), verifies dietary claims (vegan, halal, kosher, gluten-free), and flags safety issues. Verify against Guardian's built-in master specs or your own house recipe. Same input → same verdict, every time. No API key required.

Uses
3.2k
Tools
7
Runs
Hosted
Prompts
1
Listed
8mo ago

Get started

Add it to your agent

npx -y @smithery/cli@latest install kaimeilabs/guardian-engine --client claude

Swap --client claude for cursor, vscode, windsurf or another client. The CLI asks for any required settings.

What it can do

7 tools

verify_recipe8 paramsVerify a candidate recipe against a Guardian master recipe. Uses deterministic graph-based verification to check technique, temperature, …

Verify a candidate recipe against a Guardian master recipe. Uses deterministic graph-based verification to check technique, temperature, timing, cooking medium, and required ingredients. **Verdict**: `verdict` is strictly PASSED or FAILED and is policy-driven — any CRITICAL finding fails the recipe; more than 5 WARNINGs also fail. There is no score in the response (ADR-013): gate on `verdict` and explain failures from `findings`. **Field audience**: `issue` is a machine-readable code for program

ParameterTypeDescription
dishAlias for dish_name — for backward compatibility with production clients.
dish_namestringName of the dish to verify against (e.g. 'carbonara', 'rendang', 'roast-chicken', 'confit', 'cheesecake', 'kung-pao', 'fried-chicken', 'brisket', 'wellington', 'cheese-souffle'). Use list_dishes() to
session_idOptional session ID to track an agent's improvement loop across multiple attempts.
master_jsonOptional user-supplied master SOP to verify against (BYO master, ADR-018), as a JSON string or object using the same schema as catalog masters (dish_name, steps[], required_ingredients[]; see get_mast
operator_idOptional audit identifier for the calling operator (letters, digits, hyphens; max 64 chars). Tags the verification in the tamper-evident log and compliance record. Defaults to 'anonymous'.
candidate_jsonThe full candidate recipe as a JSON string or object. Expected schema: {"title": "<string>", "cuisine": "<string>", "serves": <int>, "ingredients": [{"name": "<string>", "quantity": "<string>"}], "ste
original_promptRECOMMENDED for best results. Include the user's original cooking request. Copy the user's exact message that triggered this recipe (e.g., 'Make me a spicy vegan rendang' or 'Generate a traditional ca
response_formatstringResponse format: 'json' (default — machine-actionable verdict, findings, and patches) or 'text' (human-readable report).
fix_recipe6 paramsDeterministically repair a candidate recipe against a Guardian master. Verifies the candidate, applies every machine-actionable correctio…

Deterministically repair a candidate recipe against a Guardian master. Verifies the candidate, applies every machine-actionable correction the symbolic engine produced (missing ingredients, quantities, temperatures, durations, cooking media, ingredient substitutions), then re-verifies the result. No LLM is used — the repair is a deterministic function of the candidate recipe and the master ruleset. Findings that need recipe-authoring judgement — adding a whole cooking phase, rewriting step instr

ParameterTypeDescription
dishAlias for dish_name — for backward compatibility with production clients.
dish_namestringName of the dish to repair against (e.g. 'carbonara', 'rendang', 'roast-chicken'). Use list_dishes() to see all available recipes and their aliases.
master_jsonOptional user-supplied master SOP to repair against (BYO master, ADR-018), same schema as catalog masters. When provided, the catalog is bypassed and dish_name may be omitted; patches (including sugge
candidate_jsonThe full candidate recipe as a JSON string or object — same schema as verify_recipe's candidate_json (title, cuisine, ingredients[], steps[]).
original_promptOptional. The user's original cooking request, used only for safety-context awareness during verification. Does not change which fixes are applied.
response_formatstringResponse format: 'json' (default — includes the full fixed_recipe object) or 'text' (human-readable report).
list_dishes1 paramList all available master dishes with rich metadata. Returns: Dictionary with `schema_version` and a `dishes` list. Each dish includes sl…

List all available master dishes with rich metadata. Returns: Dictionary with `schema_version` and a `dishes` list. Each dish includes slug, title, cuisine, region, aliases, and complexity.

ParameterTypeDescription
cuisine_filterstringOptional cuisine to filter by. Case-insensitive exact match against the dish's cuisine field. Valid values: italian | french | spanish | british | thai | chinese | indian | indonesian | japanese | mal
get_master2 paramsReturn the canonical master recipe for a dish (read-only, no LLM). Enables compare-then-verify agentic loops: fetch the master, diff it a…

Return the canonical master recipe for a dish (read-only, no LLM). Enables compare-then-verify agentic loops: fetch the master, diff it against the user's recipe, then call verify_recipe — instead of verifying blind. Pure knowledge-base lookup, no LLM in the hot path. Master content is transparent by default (ADR-009 / ADR-010): exact temperatures, timings, and EU FIC 1169/2011 allergen codes are returned verbatim, never obfuscated. No score is included (ADR-013) — this is reference data, not a

ParameterTypeDescription
dish_namestringName or alias of the dish to fetch the canonical master recipe for (e.g. 'carbonara', 'spaghetti bolognese', 'angel food cake'). Alias resolution and slug normalisation are applied. Use list_dishes()
response_formatstringResponse format: 'json' (default, structured) or 'text' (human-readable summary).
check_safety1 paramRun master-independent safety checks on a candidate recipe. Works for ANY recipe — no dish resolution, no master SOP required. Checks pou…

Run master-independent safety checks on a candidate recipe. Works for ANY recipe — no dish resolution, no master SOP required. Checks poultry internal-temperature safety and scans all ingredients for the 14 EU FIC 1169/2011 Annex II allergen groups. The verdict is a deterministic function of (candidate, kb_version_hash) — no LLM involvement. Use this when verify_recipe has no matching master for the dish: the safety layer still applies to every recipe. Returns: Safety envelope: verdict (PASSED/F

ParameterTypeDescription
candidate_jsonstringThe full candidate recipe as a JSON string. Checked for poultry internal temperature safety (≥74°C) and EU FIC 1169 allergen presence.
check_allergens5 paramsCheck ingredients for EU FIC 1169/2011 allergen compliance. Returns a detailed audit trace mapping each ingredient to its EU Annex II all…

Check ingredients for EU FIC 1169/2011 allergen compliance. Returns a detailed audit trace mapping each ingredient to its EU Annex II allergen group with entry numbers and labels. The safety verdict is deterministic — no LLM involvement in the decision. Use check_all_eu_allergens=True for food labelling (detect all allergens). Use restrictions=['dairy', 'gluten'] to check for specific user allergies.

ParameterTypeDescription
dish_nameOptional dish name for reporting context.
ingredientsarrayList of ingredient names (freeform or canonical IDs). Examples: ['butter', 'wheat_flour', 'eggs', 'peanut_butter']
restrictionsAllergen group IDs to check against user restrictions. Valid IDs: gluten, crustaceans, eggs, fish, peanuts, soy, dairy, tree_nuts, celery, mustard, sesame, sulphites, lupin, molluscs. If None and chec
response_formatstringResponse format: 'text' (default) or 'json'. Use 'json' for machine-actionable output.
check_all_eu_allergensbooleanIf True, scans for all 14 EU Annex II allergens regardless of restrictions list. Use this for food labelling (declare all allergens present).
verify_dietary_claim3 paramsVerify that a recipe satisfies a dietary claim (vegan, halal, gluten-free, ...). Reuses the existing allergen-detection logic plus a cura…

Verify that a recipe satisfies a dietary claim (vegan, halal, gluten-free, ...). Reuses the existing allergen-detection logic plus a curated forbidden-ingredient map (apps/guardian/knowledge/dietary_claims.yaml). Returns a structured verdict with the specific offending ingredients and a short justification — never a vague paraphrase.

ParameterTypeDescription
claimstringDietary claim to verify: vegan | vegetarian | gluten_free | dairy_free | nut_free | halal | kosher.
candidate_jsonstringRecipe JSON string (CandidateRecipe schema). Expected shape: {"title": "...", "ingredients": [{"name": "..."}, ...], "steps": [...]}. Only the ingredient list is required for dietary verification.
response_formatstringResponse format: 'text' (default, human-readable) or 'json' (machine-actionable).

Ready-made

Prompts

  • verify_recipe_promptProvides instructions and a template for an AI agent to verify a recipe. Args: dish: The name of the dish to verify (e.g. 'carbonara', 'rendang').