Skip to main content

AimoAssist

What this is​

AimoAssist is an MCP interface for Valio Aimo: tedious kitchen ordering done in seconds. No clicks. No friction.

You describe what you need in everyday words, or send a voice note or a photo. It builds a cart from the real catalog, checks delivery risk and carbon, respects the kitchen’s diet and spend limits, and only bothers a person when those limits say so. It learns from feedback, but it cannot quietly raise a budget or drop an allergen rule.

Prices come back signed. Permissions and approvals are signed. Every important step lands in an audit trail both sides can check.

Try the live siteaimoassist.com · open in a new tab

The challenge​

Valio Aimo supplies 20,000+ kitchens. More ordering will be done by software. The brief asks: how can that software look up products, lock a price, and get the right human approval, without exposing Valio’s real systems or forcing every kitchen onto one closed platform?

Example from the brief: “I need 1,000 litres of lactose-free milk by Monday.”

What we built​

NeedAnswer
Find products and pricesSearch and signed quotes (web API and open connector)
Path from ask to orderOffer → rules check → approval if needed → signed confirmation
Stay within kitchen limitsPermission slip + fifteen rules (order alone, ask someone, or stop)
Delivery & sustainabilityOn-time risk and carbon on every line; “greenest” mode
When something goes wrongSubstitutes, earlier dates, splits; stock-out watch; school allergen rules
Order from the floorWebsite, Telegram, voice, photo (same checks)
Show it works30/30 demo orders · 29/29 attack tests · 52/52 product matches

We listened to your pain points​

Kitchens, Valio Aimo, and the challenge each named what hurts. We built AimoAssist to solve all of it.

More detail: Pain points we solved.

How an order works​

Kitchen sideowned by the kitchen: its agent, its knowledge base, its keysValio Aimo sideowned by Valio Aimo: the interface, offers, order book, audittrust boundary · OpenAPI + MCPHuman clientkitchen personGemini + decision modelgoogle-genai · text and typed answersCatalogcatalog.db · FTS5 · 17,546 productsClient appNext.jsEnginethe kitchen's agentAimoGuard gatewayagent interfaceValio Aimo APImock · price, availabilityApprover keysclient server routesKnowledge baseone SQLite file per kitchenOrder book + auditgateway.db · hash chainStatic data filescatalog, reliability, carbonorder confirmedmemory update
12/12Learn. The kitchen's decisions update product memory and quantity factors, with one-tap undo. Diet rules, budgets and the policy never change on their own.
  1. Someone in the kitchen asks (website or Telegram).
  2. AimoAssist turns that into quantities and products.
  3. AimoAssist gets signed prices and stock from Valio.
  4. Rules decide: order alone, ask a person, or stop.
  5. If needed, the human client signs → confirmed order + audit entry.

A real example​

Ask: “120 guests for dinner tomorrow, 20 vegan” (Hotel Aurora).

engine/pipeline.pya fixed chain of typed steps, not a free-roaming agent loop01UnderstandGeminiDinner, Tue 17 Nov, 120 guests (20 vegan), hard dea…✓02Quantifycode20 ingredient needs in KG, L or PCS, maths on each …✓03Match + packsdecision modelmemory, then curated, then search; p ≥ 0.8; sized t…✓04Quotegatewaysigned offers for the date (+ up to 2 earlier dates)✓05Scorecodepick + good / better / best, 3 order variants✓06Exceptionscodestock-out gets a substitute; risky line tries earli…✓07Validatecodeevery check passes (max 2 retry rounds per line)✓08Policycode + gateway17 auto, 3 need approval, order over €500✓09CartGemini€561.84, explanation uses only cart numbers✓10DonecartId sent; the client opens the cart✓SSE · GET /requests/req_91c2/eventstext/event-stream, resumable with Last-Event-IDid: 7 {"step":"quote","status":"started"}id: 8 {"step":"quote","status":"finished"}id: 9 {"step":"score","status":"started"}id: 10 {"step":"score","status":"finished"}id: 11 {"step":"exceptions","status":"started"}id: 12 {"step":"exceptions","status":"finished"}id: 13 {"step":"validate","status":"started"}id: 14 {"step":"validate","status":"finished"}id: 15 {"step":"policy","status":"started"}id: 16 {"step":"policy","status":"finished"}id: 17 {"step":"cart","status":"started"}id: 18 {"step":"cart","status":"finished"}id: 19 {"step":"done","data":{"cartId":"cart_7f3a"}}
11/11Done. cartId sent; the client opens the cart.
What happened
LinesAbout 20
TotalAbout €562 (usual week ~€557)
Ordered alone17 lines
Needed a person3 lines + the order went over the €500 auto limit
TimeAbout 10 seconds live · about 1 second when replayed

The human client approves once → signed confirmation → Verify chain on the audit log.

Numbers that matter​

~10 sfrom ask to full cart
~1 ssame cart when replayed
17 / 20lines need no person
15shared kitchen rules
30 / 30scripted orders behave as expected
29 / 29attack cases refused

Over time it remembers preferred products and portion sizes. Diet rules and budget ceilings only change when a human signs a new permission slip.

Future work​

What we would build next: Postgres and vectors, Langfuse-style quality loops, real keys and wallets, Valio selling offers, trained delivery risk, CI gates, and more.

Full list: Future work.

Open aimoassist.comFull demo · kitchens · Valio console