Server definition
- Hash
- sha256:fa30b9cfd1caf23e9cff8a0665f980145250ebca3ef4ef485471697be09d2573
- What it is
- What a remote MCP server returned when asked what it offers: 7 tools
The blob, as servednamed by its sha256
{
"instructions": "Guardian Engine is a deterministic recipe verification service. It validates AI-generated recipes against physics-constrained master SOPs using graph-based logic.\n\nGuardian always returns a clear Verdict (PASSED/FAILED) and a list of Findings with severity levels. Output is transparent: findings carry exact ingredient names, temperatures, and durations. verify_recipe and fix_recipe return machine-actionable JSON by default; pass response_format='text' for a human-readable report.\n\nOPTIONAL — INCLUDE original_prompt: For safety-aware and personalised feedback, include the user's original cooking request in the original_prompt parameter. Copy the user's exact message — do not paraphrase. Example: if the user said 'make me a spicy vegan rendang', pass that exact string.\n\nWHY THIS HELPS:\n- WITHOUT original_prompt: Guardian returns actionable findings with ingredient names and technique hints.\n- WITH original_prompt: Guardian additionally checks for safety context (e.g., recipes for infants, pregnant users) and matches findings to dietary needs and flavour preferences.",
"tools": [
{
"description": "Check ingredients for EU FIC 1169/2011 allergen compliance.\n\nReturns a detailed audit trace mapping each ingredient to its EU Annex II\nallergen group with entry numbers and labels. The safety verdict is\ndeterministic — no LLM involvement in the decision — and is pinned by the\nreturned ``kb_version_hash``.\n\nUse check_all_eu_allergens=True for food labelling (detect all allergens).\nUse restrictions=['dairy', 'gluten'] to check for specific user allergies.\nSupplying neither runs the full 14-group Annex II scan and sets\n``defaulted_to_full_scan`` — the tool never reports \"safe\" without checking.\n\n``is_safe`` answers \"was a supplied restriction violated?\"; ``declared_allergens``\nanswers \"what is actually present?\". Read both.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"check_all_eu_allergens": {
"default": false,
"description": "If True, scans for all 14 EU Annex II allergens regardless of restrictions list. Use this for food labelling (declare all allergens present).",
"type": "boolean"
},
"dish_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional dish name for reporting context."
},
"ingredients": {
"description": "List of ingredient names (freeform or canonical IDs). Examples: ['butter', 'wheat_flour', 'eggs', 'peanut_butter']",
"items": {
"type": "string"
},
"type": "array"
},
"operator_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional audit identifier for the calling operator (letters, digits, hyphens; max 64 chars). Tags the check in the telemetry log. Defaults to 'anonymous'."
},
"response_format": {
"default": "json",
"description": "Response format: 'json' (default) for the machine-actionable payload, or 'text' for a human-readable report.",
"type": "string"
},
"restrictions": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Allergen 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 check_all_eu_allergens=True, reports all detected allergens."
},
"session_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional session identifier so repeated checks are stitched into one trajectory."
}
},
"required": [
"ingredients"
],
"type": "object"
},
"name": "check_allergens",
"outputSchema": {
"properties": {
"result": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "string"
}
]
}
},
"required": [
"result"
],
"type": "object",
"x-fastmcp-wrap-result": true
}
},
{
"description": "Run master-independent safety checks on a candidate recipe.\n\nWorks for ANY recipe — no dish resolution, no master SOP required. Checks\npoultry internal-temperature safety and scans all ingredients for the 14\nEU FIC 1169/2011 Annex II allergen groups. The verdict is a deterministic\nfunction of (candidate, kb_version_hash) — no LLM involvement.\n\nUse this when verify_recipe has no matching master for the dish: the\nsafety layer still applies to every recipe.\n\nReturns:\n Safety envelope: verdict (PASSED/FAILED per the zero-critical policy\n gate), safe flag, issues found, and the pinned kb_version_hash.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"candidate_json": {
"description": "The full candidate recipe as a JSON string. Checked for poultry internal temperature safety (≥74°C) and EU FIC 1169 allergen presence.",
"type": "string"
}
},
"required": [
"candidate_json"
],
"type": "object"
},
"name": "check_safety",
"outputSchema": {
"additionalProperties": true,
"type": "object"
}
},
{
"description": "Deterministically repair a candidate recipe against a Guardian master.\n\nVerifies the candidate, applies every machine-actionable correction the\nsymbolic engine produced (missing ingredients, quantities, temperatures,\ndurations, cooking media, ingredient substitutions), then re-verifies the\nresult. No LLM is used — the repair is a deterministic function of the\ncandidate recipe and the master ruleset.\n\nFindings that need recipe-authoring judgement — adding a whole cooking\nphase, rewriting step instructions, ingredient-ratio rebalancing — are not\nauto-applied; they are returned under `patches_skipped`. Allergen findings\nare never auto-fixed. The response reports the verdict before and after so\nthe caller can see exactly what was resolved.\n\nNote: `verdict_after` may still be FAILED when structural changes (e.g.\nadding a cooking step, rebalancing ingredient ratios) are needed. These\nrequire recipe-authoring judgement and are returned under `patches_skipped`.\nCallers should NOT assume a fixed recipe will pass verification.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"candidate_json": {
"anyOf": [
{
"type": "string"
},
{
"additionalProperties": true,
"type": "object"
}
],
"default": "",
"description": "The full candidate recipe as a JSON string or object — same schema as verify_recipe's candidate_json (title, cuisine, ingredients[], steps[])."
},
"dish": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Alias for dish_name — for backward compatibility with production clients."
},
"dish_name": {
"default": "",
"description": "Name of the dish to repair against (e.g. 'carbonara', 'rendang', 'roast-chicken'). Use list_dishes() to see all available recipes and their aliases.",
"type": "string"
},
"master_json": {
"anyOf": [
{
"type": "string"
},
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional 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 suggested_step templates) are built from THIS spec."
},
"original_prompt": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional. The user's original cooking request, used only for safety-context awareness during verification. Does not change which fixes are applied."
},
"response_format": {
"default": "json",
"description": "Response format: 'json' (default — includes the full fixed_recipe object) or 'text' (human-readable report).",
"type": "string"
}
},
"type": "object"
},
"name": "fix_recipe",
"outputSchema": {
"properties": {
"result": {
"type": "string"
}
},
"required": [
"result"
],
"type": "object",
"x-fastmcp-wrap-result": true
}
},
{
"description": "Return the canonical master recipe for a dish (read-only, no LLM).\n\nEnables compare-then-verify agentic loops: fetch the master, diff it against the\nuser's recipe, then call verify_recipe — instead of verifying blind. Pure knowledge-base\nlookup, no LLM in the hot path.\n\nMaster content is transparent by default (ADR-009 / ADR-010): exact temperatures, timings,\nand EU FIC 1169/2011 allergen codes are returned verbatim, never obfuscated. No score is\nincluded (ADR-013) — this is reference data, not a verdict.\n\nReturns ingredients, steps (technique/temperature/timing/medium), and the EU FIC allergens\nderived from the required ingredients. Unknown dishes return a structured UNKNOWN_DISH error.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"dish_name": {
"default": "",
"description": "Name 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() to browse.",
"type": "string"
},
"response_format": {
"default": "json",
"description": "Response format: 'json' (default, structured) or 'text' (human-readable summary).",
"type": "string"
}
},
"type": "object"
},
"name": "get_master",
"outputSchema": {
"properties": {
"result": {
"type": "string"
}
},
"required": [
"result"
],
"type": "object",
"x-fastmcp-wrap-result": true
}
},
{
"description": "List all available master dishes with rich metadata.\n\nThis is a browse/discovery step, not the verification itself — after picking\na dish, call verify_recipe(dish_name=<slug>, candidate_json=<your recipe>) to\nactually check a candidate against it (or fix_recipe to auto-repair it).\n\nReturns:\n Dictionary with `schema_version`, a `dishes` list (slug, title, cuisine,\n region, aliases, complexity per dish), and a `next_step` hint describing\n how to proceed to verification.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"cuisine_filter": {
"default": "",
"description": "Optional 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 | malaysian | korean | mexican | american | moroccan | turkish | levantine. Leave empty to return all available dishes.",
"type": "string"
}
},
"type": "object"
},
"name": "list_dishes",
"outputSchema": {
"additionalProperties": true,
"type": "object"
}
},
{
"description": "Verify that a recipe satisfies a dietary claim (vegan, halal, gluten-free, ...).\n\nReuses the existing allergen-detection logic plus a curated forbidden-ingredient\nmap (apps/guardian/knowledge/dietary_claims.yaml). Returns a structured verdict\nwith the specific offending ingredients and a short justification — never a\nvague paraphrase.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"candidate_json": {
"default": "",
"description": "Recipe JSON string (CandidateRecipe schema). Expected shape: {\"title\": \"...\", \"ingredients\": [{\"name\": \"...\"}, ...], \"steps\": [...]}. Only the ingredient list is required for dietary verification.",
"type": "string"
},
"claim": {
"default": "",
"description": "Dietary claim to verify: vegan | vegetarian | gluten_free | dairy_free | nut_free | halal | kosher.",
"type": "string"
},
"response_format": {
"default": "text",
"description": "Response format: 'text' (default, human-readable) or 'json' (machine-actionable).",
"type": "string"
}
},
"type": "object"
},
"name": "verify_dietary_claim",
"outputSchema": {
"properties": {
"result": {
"type": "string"
}
},
"required": [
"result"
],
"type": "object",
"x-fastmcp-wrap-result": true
}
},
{
"description": "Verify a candidate recipe against a Guardian master recipe.\n\nUses deterministic graph-based verification to check technique, temperature,\ntiming, cooking medium, and required ingredients.\n\n**Verdict**: `verdict` is strictly PASSED or FAILED and is policy-driven — any CRITICAL\nfinding fails the recipe; more than 5 WARNINGs also fail. There is no score in the\nresponse (ADR-013): gate on `verdict` and explain failures from `findings`.\n\n**Field audience**: `issue` is a machine-readable code for programmatic handling — never\nshow it to end users. Use `title` and `suggested_correction` as the user-facing fields.\n\nReturns structured JSON by default (machine-actionable findings and patches);\nresponse_format=\"text\" renders a human-readable report. Both formats are\ntransparent (ADR-009 / ADR-018): exact values and ingredient names included.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"candidate_json": {
"anyOf": [
{
"type": "string"
},
{
"additionalProperties": true,
"type": "object"
}
],
"default": "",
"description": "The full candidate recipe as a JSON string or object. Expected schema: {\"title\": \"<string>\", \"cuisine\": \"<string>\", \"serves\": <int>, \"ingredients\": [{\"name\": \"<string>\", \"quantity\": \"<string>\"}], \"steps\": [{\"step_number\": <int>, \"title\": \"<string>\", \"instruction_english\": \"<string>\", \"technique\": \"<string>\", \"estimated_temperature_c\": <number or [min, max]>, \"duration_minutes\": <number or [min, max]>, \"cooking_medium\": \"<string>\"}]}"
},
"dish": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Alias for dish_name — for backward compatibility with production clients."
},
"dish_name": {
"default": "",
"description": "Name 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 see all available recipes and their aliases.",
"type": "string"
},
"master_json": {
"anyOf": [
{
"type": "string"
},
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional 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_master() for a live example). When provided, the bundled catalog is bypassed — the candidate is checked against YOUR spec — and dish_name may be omitted. The response pins the spec via master_hash (sha256) and master_source='user' so the verdict is replayable."
},
"operator_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional 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'."
},
"original_prompt": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "RECOMMENDED 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 carbonara, but healthier'). WITHOUT this parameter: Guardian returns actionable findings with specific ingredient names and technique details — enough to fix most recipes. WITH this parameter: Guardian additionally activates safety context awareness (e.g., flagging honey for infants, raw egg for pregnant users) and personalised feedback matched to dietary needs and flavour preferences. Include it when the user's context matters for safety or personalisation."
},
"response_format": {
"default": "json",
"description": "Response format: 'json' (default — machine-actionable verdict, findings, and patches) or 'text' (human-readable report).",
"type": "string"
},
"session_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional session ID to track an agent's improvement loop across multiple attempts."
}
},
"type": "object"
},
"name": "verify_recipe",
"outputSchema": {
"properties": {
"result": {
"type": "string"
}
},
"required": [
"result"
],
"type": "object",
"x-fastmcp-wrap-result": true
}
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:fa30b9cfd1caf23e9cff8a0665f980145250ebca3ef4ef485471697be09d2573 | sha256sum