原始内容
Guardian Engine — API & MCP Integration Guide
A deterministic oracle inside your agent's generate→verify loop. Your LLM authors the recipe; Guardian judges it. Guardian Engine catches hallucinated temperatures, missing techniques, wrong ingredients, and impossible cooking steps before they reach the pan — and returns machine-actionable patches so your agent can fix exactly what's wrong. Recipes are the first vertical — the same deterministic approach generalises to any procedural domain where correctness matters.
Why an oracle instead of another LLM critique? An LLM critique is a sample — it misses differently on every run. Guardian's symbolic engine makes guarantees a generative model structurally cannot:
- Exhaustive checking — every rule is evaluated on every call, not a sample of them.
- Certified negatives — "no EU Annex II allergen source detected" is an absence claim an LLM cannot make.
- Replayable verdicts — same input + same spec + same knowledge-base version → byte-identical output. Every response pins
kb_version_hashandmaster_hashso any verdict is reproducible as an audit record. - Machine-actionable repair — findings come with structured
patches(andfix_recipecan apply them deterministically); your agent authors the rest and re-verifies. - Bring your own spec — verify against your house recipe or SOP via
master_json, not just the bundled catalog.
Endpoint: https://api.kaimeilabs.dev/mcp
Transport: Streamable HTTP (MCP)
Auth: None — free during early access (fair use applies)
⚠️ Safety & Liability Notice
Guardian Engine is an automated, informational recipe-verification tool. It is not a food-safety, medical, nutritional, or regulatory-compliance authority, and its output is not professional advice.
- Allergens are not guaranteed. Allergen warnings (including
check_safety,check_allergens, and theallergensfield of every verification response) come from an automated knowledge base that may be incomplete or wrong. APASSEDverdict or an empty allergen list is NOT a guarantee that a recipe is free of any allergen or safe for any individual. Never rely on Guardian to decide whether a food is safe for someone with a food allergy or intolerance — always verify against the actual ingredient/product labelling and consult a qualified professional.- Dietary and religious claims are not certifications.
verify_dietary_claimresults (vegan, vegetarian, gluten-free, dairy-free, nut-free, halal, kosher) are automated ingredient-level checks — they are not a substitute for certification by a recognised dietary or religious authority.- Repaired recipes are not certified safe.
fix_recipeoutput must be reviewed by a human before being cooked, served, or published; allergen findings are never auto-fixed and a repaired recipe may still fail verification.- Cooking-safety findings are informational and must not replace certified guidance (e.g. USDA, EU FIC, or your local food-safety authority).
- No warranty. The Service is provided "AS IS", without warranty of any kind. To the maximum extent permitted by law, Kaimei Labs accepts no liability for any loss, injury, or damage arising from use of, or reliance on, Guardian output.
Use of the API constitutes acceptance of the full Terms of Service (warranty disclaimer, limitation of liability, indemnification).
Connect Your Agent
Guardian is a hosted MCP server. No install, no API key, no Docker. Pick your client and paste the config.
Claude Desktop
Add to your claude_desktop_config.json:
{
"mcpServers": {
"guardian": {
"url": "https://api.kaimeilabs.dev/mcp",
"transport": "streamable-http"
}
}
}
Restart Claude Desktop. Ask: "List the available dishes in Guardian Engine" to confirm.
Cursor
Open Settings → MCP Servers → Add new MCP server, then paste:
{
"guardian": {
"url": "https://api.kaimeilabs.dev/mcp",
"transport": "streamable-http"
}
}
VS Code (GitHub Copilot)
Add to your .vscode/mcp.json (or user settings.json under "mcp"):
{
"servers": {
"guardian": {
"type": "http",
"url": "https://api.kaimeilabs.dev/mcp"
}
}
}
Windsurf
Add to your Windsurf MCP config:
{
"mcpServers": {
"guardian": {
"serverUrl": "https://api.kaimeilabs.dev/mcp"
}
}
}
Smithery (One-Click)
— auto-configures Claude Desktop, Cursor, and more.
[!WARNING] Smithery Proxy Limitation: The default Smithery proxy URL (
guardian-engine--kaimeilabs.run.tools) does not support Streaming HTTP and will silently fail. You MUST edit your MCP config after installation to use the direct endpoint:https://api.kaimeilabs.dev/mcp.
Glama.ai
Guardian Engine is also listed on Glama.ai — discover and connect to MCP servers from the Glama directory.
Any MCP Client (Python SDK)
import asyncio
from mcp.client.session import ClientSession
from mcp.client.streamable_http import streamable_http_client
from httpx import AsyncClient
async def main():
async with AsyncClient(timeout=30.0) as http:
async with streamable_http_client("https://api.kaimeilabs.dev/mcp", http_client=http) as streams:
read_stream, write_stream, _ = streams
async with ClientSession(read_stream, write_stream) as session:
await session.initialize()
result = await session.call_tool("list_dishes", arguments={"cuisine_filter": "french"})
print(result)
asyncio.run(main())
pip install mcp>=1.2.1 httpx>=0.27.0
Tools
The MCP server exposes seven tools. verify_recipe is the core loop; the rest support the compare → verify → repair cycle and master-independent safety checks.
verify_recipe
Verify a candidate recipe against a Guardian master spec. Returns a structured report with a strict PASSED/FAILED verdict (no scores) and detailed findings, each citing the rule it violated. The verdict is policy-driven: any CRITICAL finding fails the recipe; more than 5 WARNINGs also fail.
| Parameter | Type | Required | Description |
|---|---|---|---|
dish_name |
string | Yes* | Name or alias of the dish (e.g. "carbonara", "rendang", "kung-pao", "bourguignon"). dish is accepted as a backward-compatible alias. *Optional when master_json is supplied |
candidate_json |
string | object | Yes | Full recipe as JSON — see schema.md. Max 500 KB |
master_json |
string | object | No | Bring your own master — your house recipe/SOP to verify against, using the same schema as catalog masters. Bypasses the bundled catalog; the response pins your spec via master_hash (sha256) and master_source: "user" |
original_prompt |
string | No | The user's original request that generated the recipe |
response_format |
string | No | "text" (default) or "json". Use "json" for machine-actionable patches in agentic self-correction loops |
session_id |
string | No | Track an agent's improvement loop across multiple attempts |
operator_id |
string | No | Audit identifier tagged into the verification log and compliance record (letters, digits, hyphens; max 64 chars) |
Tip — include the original prompt for personalised feedback: When you include original_prompt (e.g. "Make a spicy vegan rendang"), Guardian matches findings to the user's stated dietary needs and flavour preferences, and activates audience-sensitive safety checks (e.g. flagging honey in recipes for infants, raw egg for pregnant users). Without it, Guardian still returns the full verdict and all findings.
Unknown dish? If the dish isn't in the catalog, the UNKNOWN_DISH error carries a safety_fallback verdict — the master-independent safety layer (poultry temperature + allergen scan) still runs, so your agent always leaves with deterministic value.
Field audience: issue is a machine-readable code for programmatic handling — don't show it to end users. Use title and suggested_correction as the user-facing fields.
fix_recipe
Deterministically repair a candidate recipe against a master spec. Verifies, applies every machine-actionable patch the symbolic engine produced (missing ingredients, quantities, temperatures, durations, cooking media, substitutions), then re-verifies. No LLM is involved — the repair is a deterministic function of the candidate and the ruleset.
| Parameter | Type | Required | Description |
|---|---|---|---|
dish_name |
string | Yes* | Dish to repair against (dish alias accepted). *Optional when master_json is supplied |
candidate_json |
string | object | Yes | Same schema as verify_recipe |
master_json |
string | object | No | BYO master to repair against; patches (including suggested_step templates) are built from your spec |
original_prompt |
string | No | Used only for safety-context awareness during verification |
response_format |
string | No | "text" (default) or "json" — use "json" to receive the full fixed_recipe object |
The response reports verdict_before → verdict_after, fully_fixed, patches_applied, patches_skipped, unresolved_findings, and the fixed_recipe. Changes that need recipe-authoring judgement (adding a whole cooking phase, rewriting instructions, ratio rebalancing) are not auto-applied — they're returned under patches_skipped, with add_step patches carrying a suggested_step template from the master for your agent to author in the recipe's own voice and re-verify. Allergen findings are never auto-fixed. Do not assume a fixed recipe will pass — check verdict_after.
list_dishes
List all master recipes Guardian can verify against, with rich metadata (slug, title, cuisine, region, aliases, complexity).
| Parameter | Type | Required | Description |
|---|---|---|---|
cuisine_filter |
string | No | Case-insensitive cuisine filter (e.g. "french", "chinese", "thai") |
get_master
Return the canonical master recipe for a dish — a pure knowledge-base lookup, no LLM. Enables compare-then-verify loops: fetch the master, diff it against your recipe, then call verify_recipe instead of verifying blind. Master content is transparent by default: exact temperatures, timings, and EU FIC 1169/2011 allergen codes are returned verbatim. Also the live reference for the master_json schema when bringing your own master.
| Parameter | Type | Required | Description |
|---|---|---|---|
dish_name |
string | Yes | Name or alias of the dish |
response_format |
string | No | "json" (default) or "text" |
check_safety
Master-independent safety checks for any recipe — no dish resolution or master spec required. Checks poultry internal-temperature safety (≥ 74 °C) and scans all ingredients against the 14 EU FIC 1169/2011 Annex II allergen groups. Use it when verify_recipe has no matching master.
| Parameter | Type | Required | Description |
|---|---|---|---|
candidate_json |
string | Yes | Full candidate recipe as a JSON string |
check_allergens
Check an ingredient list for EU FIC 1169/2011 allergen presence, with a detailed audit trace mapping each ingredient to its Annex II allergen group (entry numbers and labels included).
| Parameter | Type | Required | Description |
|---|---|---|---|
ingredients |
list[string] | Yes | Ingredient names, freeform or canonical (e.g. ["butter", "wheat_flour", "peanut_butter"]) |
restrictions |
list[string] | No | Allergen group IDs to check against user restrictions: gluten, crustaceans, eggs, fish, peanuts, soy, dairy, tree_nuts, celery, mustard, sesame, sulphites, lupin, molluscs |
dish_name |
string | No | Reporting context |
check_all_eu_allergens |
boolean | No | true scans for all 14 Annex II groups regardless of restrictions — use for labelling-style "declare everything detected" checks |
response_format |
string | No | "text" (default) or "json" |
verify_dietary_claim
Verify that a recipe satisfies a dietary claim, returning a structured verdict with the specific offending ingredients — never a vague paraphrase.
| Parameter | Type | Required | Description |
|---|---|---|---|
candidate_json |
string | Yes | Recipe JSON (only the ingredient list is required) |
claim |
string | Yes | One of: vegan, vegetarian, gluten_free, dairy_free, nut_free, halal, kosher |
response_format |
string | No | "text" (default) or "json" |
Bring Your Own Master (master_json)
The bundled catalog is a reference library — the primary production pattern is verifying against your own spec: a house recipe, a franchise SOP, a test kitchen's canonical version. Pass master_json to verify_recipe or fix_recipe (same schema as catalog masters — call get_master for a live example: title, serves, ingredients[], required_ingredients[] with substitute tiers, steps[] with technique/temperature/duration/medium).
- When
master_jsonis supplied,dish_namemay be omitted and the catalog is bypassed entirely — the candidate is checked against your spec. - The response pins the spec:
master_source: "user"andmaster_hash(sha256 over the canonical master). Together withkb_version_hash, this makes every verdict replayable: anyone holding the same candidate, spec, and KB version reproduces the byte-identical result. - Malformed masters return a structured
INVALID_MASTERerror, not a server error. Max 500 KB.
Available Recipes (161 dishes, 5 regions)
| Region | Dishes |
|---|---|
| Europe | Basque Cheesecake · Beef Bourguignon · Beef Wellington · Butternut Squash Soup · Cacio e Pepe · Caprese Salad · Cassoulet · Cheese Soufflé · Chicken Cacciatore · Chicken Marsala · Chicken Piccata · Chocolate Soufflé · Confit de Canard · Coq au Riesling · Coq au Vin · Crème Brûlée · Crêpes · Fettuccine Alfredo · Fish & Chips · Florentine Biscuits · Focaccia Barese · French Omelette · French Onion Soup · Frittata · Gazpacho · Gnocchi di Patate · Goulash · Greek Salad · Köttbullar · Mille-Feuille · Minestrone · Niçoise Salad · Osso Buco · Pasta alla Norma · Pasta Carbonara · Pasta Pomodoro · Patatas Bravas · Penne alla Vodka · Pesto alla Genovese · Pierogi · Pissaladière · Potato-Leek Soup · Ratatouille · Risotto alla Milanese · Roast Chicken · Sauerbraten · Shepherd's Pie · Spanakopita · Spaghetti Aglio e Olio · Spaghetti all'Amatriciana · Spaghetti Bolognese · Spanish Paella · Steak Frites · Stollen · Tarte Tatin · Tiramisu · Tomato Soup · Tortilla Española |
| Asia & Southeast Asia | Banh Mi · Beef Rendang · Biryani · Bulgogi · Butter Chicken · Cantonese Steamed Fish · Char Kway Teow · Chicken Tikka Masala · Chow Mein · Dan Dan Noodles · Jianbing · Khao Soi · Kimchi Fried Rice · Kung Pao Chicken · Laksa · Lo Mein · Massaman Curry · Nasi Goreng · Nasi Lemak · Okonomiyaki · Pad See Ew · Pad Thai · Palak Paneer · Rogan Josh · Som Tum · Sushi Rice · Sweet & Sour Chicken · Teriyaki Chicken · Thai Green Curry · Tonkatsu · Tonkotsu Ramen · Yakisoba |
| Middle East & North Africa | Falafel · Hummus · Koshary · Lentil Soup · Moroccan Lamb Tagine · Mutabal · Pita Bread · Shakshuka · Shish Taouk · Tabbouleh |
| Americas | Angel Food Cake · Baked Potato · Baked Salmon · Baked Ziti · Banana Bread · BBQ Ribs · Biscuits & Gravy · Buttermilk Pancakes · Caesar Salad · Carnitas · Ceviche · Cheese Quesadilla · Chicken Fajitas · Chicken Noodle Soup · Chicken Parmesan · Chili con Carne · Chocolate Chip Cookies · Classic Chocolate Cake · Cobb Salad · Crab Cakes · Creamed Spinach · Eggs Benedict · Fish Tacos · French Dip Sandwich · French Toast · Fudge Brownies · Garlic Butter Shrimp · Ground Beef Tacos · Italian-American Meatballs · Jerk Chicken · Key Lime Pie · Lobster Roll · Lomo Saltado · Macaroni & Cheese · Mashed Potatoes · Mole Poblano · Pan-Seared Pork Chops · Pan-Seared Scallops · Pão de Queijo · Pastel de Choclo · Pecan Pie · Philly Cheesesteak · Pot Roast · Pozole · Pulled Pork · Roasted Brussels Sprouts · Roasted Cauliflower · Sautéed Mushrooms · Shrimp Scampi · Southern Fried Chicken · Tamales · Texas Smoked Brisket · Turkey Meatballs · Vanilla Cupcakes · Vegetable Fried Rice · Waldorf Salad |
| Africa | Bunny Chow · Efo Riro · Melktert · Muamba de Galinha · Suya |
All recipes accept multiple aliases (e.g. "rendang", "tikka-masala", "risotto", "bourguignon", "carbonara"). Use list_dishes for the full live catalog.
Missing a Dish?
The catalog is regularly expanding. If your agent requires verification for a dish not currently supported, please open an issue on GitHub to request it. We prioritize additions based on developer demand.
Example Verification Output
What does a Guardian verification report actually look like? Here's the (abridged) response_format: "json" structure when an agent submits a carbonara made with bacon, cream, and an overheated pan:
{
"api_version": "0.7.1",
"schema_version": "1.0",
"response_format_version": "v3",
"kb_version_hash": "7dda40a3b646",
"verdict": "FAILED",
"matched_against": "Pasta alla Carbonara (Master)",
"master_source": "catalog",
"master_hash": "3357e0929021c0003fea0b79015e2c53cf9ef50d70f0d507605788ad9741fd29",
"coverage_percentage": 100.0,
"summary": {"CRITICAL": 4, "WARNING": 0, "INFO": 3},
"findings": [
{
"step_index": 2,
"issue": "TEMPERATURE_MISMATCH",
"severity": "critical",
"justification": "Temperature is significantly outside the required range.",
"title": "rendering",
"details": {"expected": "100.0-130.0", "observed": "180"},
"dimension": "temperature"
},
{
"step_index": null,
"issue": "INGREDIENT_SUBSTITUTED",
"severity": "critical",
"justification": "'bacon' is in the same group ('cured_pork') as 'guanciale' but is not the canonical ingredient for this recipe.",
"title": "You used bacon, expected guanciale",
"details": {"expected": "guanciale", "observed": "bacon"},
"dimension": "ingredients"
}
],
"allergens": [
"Allergen detected: Pork-derived ingredients (halal/kosher compliance)",
"Allergen detected: Milk and products thereof (including lactose)",
"Allergen detected: Cereals containing gluten (wheat, rye, barley, oats, spelt, kamut)"
],
"patches": [
{"action": "set_temperature", "step_index": 2, "value": "100.0-130.0"},
{"action": "replace_ingredient", "remove": "bacon", "add": "guanciale"}
]
}
Each finding carries a severity, a justification grounded in culinary science, and machine-readable details — and the patches array tells your agent exactly what change would resolve each fixable finding, so it repairs only what's wrong instead of regenerating and guessing. kb_version_hash + master_hash pin the exact knowledge-base and spec versions the verdict was computed against, making the result replayable as an audit record.
Patch actions: add_ingredient, replace_ingredient, set_quantity, adjust_quantity, set_temperature, set_duration, set_medium, and add_step (which includes a suggested_step template for your agent to author, then re-verify).
Files in This Repository
| File | Purpose |
|---|---|
schema.md |
Complete candidate_json structure required by verify_recipe |
client.py |
Python example: submit a recipe for verification |
test_integration.py |
Live connectivity test against the public API |
smithery.yaml |
Smithery MCP registry configuration |
glama.json |
Glama.ai MCP server claim configuration |
Data & Privacy
- No PII collected — we do not store user names, emails, or API keys. Underlying cloud infrastructure may temporarily process IP addresses for routing.
- Data for Compute Exchange — the free service is provided in exchange for usage data. Submitted recipes are used to improve verification accuracy and create anonymized derived datasets. See our Terms of Service.
- Do not include PII in recipe payloads.
- Fair use quotas enforced via compute limits.
[!CAUTION] Not a Substitute for Food Safety Knowledge
While Guardian Engine catches explicitly dangerous AI hallucinations (like serving poultry below safe temperatures), it cannot guarantee a recipe is 100% safe to consume. Pathogen destruction relies on variables (time, mass, equipment) that text-based AI models cannot perfectly control. Verification results are informational and must always be paired with human common sense and standard kitchen safety practices.
Support & Contact
Building an AI cooking assistant, smart kitchen platform, or agentic food-tech product? We'd love to hear from you.
- Email: partners@kaimeilabs.dev
- Website: kaimeilabs.dev
- GitHub: github.com/kaimeilabs
License
Client code in this repository (client.py, test_integration.py) is released under the MIT License. The Guardian Engine verification logic and master recipe datasets are proprietary.