Skip to main content
Glama

🍲 KitchenSync

An Alexa+ MCP server that turns voice into dinner. KitchenSync gives an AI agent a complete, live model of one household kitchen — pantry inventory with expiry tracking, a recipe book with ingredient-level matching, a shopping list, and the meal plan — exposed through 14 MCP tools over Streamable HTTP (spec 2025-11-25).

Your fridge is a database you've never been able to query. KitchenSync fixes that: "Alexa, what can I cook tonight?" now has a real answer, backed by tool calls.

KitchenSync chat experience

▶️ Watch the 2:14 narrated demo: docs/demo-video/kitchensync-demo.mp4 (subtitles burned in — an .srt sits next to it)

Hackathon tracks: Primary Alexa+ (self-hosted MCP server, Streamable HTTP, spec 2025-11-25) · Mini challenge Open Source (MIT). The Fire TV–style Cook Mode view connects the living room to the same MCP server.


Why

Every household runs a tiny supply chain — buy food, store it, cook it, throw out what spoils — and it's all tracked in nobody's head. Generic assistants guess. An agent with tools doesn't have to:

You say

The agent does (real MCP tool calls)

"What can I cook tonight?"

pantry_list_items → recipes_match_by_ingredients → "Cacio e Pepe, 100%, 15 min…"

"What's expiring soon?"

pantry_expiring_soon → recipes_match_by_ingredients → "spinach in 2 days — a frittata would use it up"

"Let's have the chicken tinga tacos tonight"

mealplan_set → "you're missing tortillas and limes — want them on the list?"

"Add tortillas and limes to the shopping list"

shopping_add_items ✓

"I'm back from the store!"

shopping_mark_purchased → the pantry auto-restocks, and the tacos now match at 100%

"Start cook mode"

recipes_get → the recipe lands on the TV screen, D-pad step-by-step

The shopping loop closes: plan → buy → restock → cook → use — every step a tool call an agent can chain.

Related MCP server: PantryPilot MCP

Architecture

        you (voice)                       any MCP client
            │                        (Inspector, agents, …)
            ▼                                   │ JSON-RPC
 ┌─────────────────────────┐                    ▼ POST /mcp
 │  simulated Alexa+ web   │   plain fetch   ┌──────────────────────────┐
 │  experience (public/)   │ ───────────────▶│  KitchenSync MCP server  │
 │  rule-based planner or  │  Streamable     │  (src/, TypeScript)      │
 │  any OpenAI-compatible  │  HTTP           │  14 tools · 3 resources  │
 │  LLM w/ tool-calling    │                 │  2 prompts · stateless   │
 └─────────────────────────┘                 └───────────┬──────────────┘
                                                         │ JSON state
        ┌────────────────────────┐                       ▼
        │  Fire TV Cook Mode     │   same MCP endpoint   src/data/state.json
        │  (public/tv.html)      │ ◀──────────────────── (auto-seeded)
        └────────────────────────┘

One process serves everything: the MCP endpoint, the simulated Alexa+ experience, and the TV view — so localhost demos "just work" with zero configuration.

Quickstart

npm install
npm start

URL

What

http://localhost:3000/

Simulated Alexa+ experience (chat)

http://localhost:3000/tv

Fire TV-style Cook Mode

http://localhost:3000/health

Health + counts

POST http://localhost:3000/mcp

The MCP endpoint (Streamable HTTP)

Requires Node 20+ (24 recommended). The pantry auto-seeds with a realistic 42-item kitchen (incl. items about to expire, so the demo always has something to say). npm run reset gives you a fresh one.

Try it from any MCP client — the endpoint is stateless, so a single POST is a complete conversation turn:

curl -X POST http://localhost:3000/mcp \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"pantry_expiring_soon","arguments":{"days":3}}}'

Works with MCP Inspector too: npx @modelcontextprotocol/inspector, transport = Streamable HTTP, URL = http://localhost:3000/mcp.

The MCP API

Tools (14)

Tool

What it does

pantry_list_items

Full inventory: quantities, storage location, days-to-expiry

pantry_add_item

Add/restock an item (merges by name)

pantry_use_item

Mark as used while cooking; auto-removes at zero

pantry_remove_item

Remove an item

pantry_expiring_soon

Waste-reduction lens: items inside an N-day window

recipes_search

By keyword / max minutes / cuisine / diet

recipes_match_by_ingredients

⭐ Ranks recipes by % of required ingredients you have; reports exact missing items (staples like salt/oil ignored)

recipes_get

Full recipe: ingredients with quantities + numbered steps

shopping_list_items

Read the list

shopping_add_items

Add items (typically the missing ones from matching)

shopping_remove_items

Remove items

shopping_mark_purchased

✅ Check off after a store run — purchased items restock the pantry automatically

mealplan_set

Plan a meal (fuzzy names OK: "the pad thai")

mealplan_get

What's for dinner (default: today)

Every tool returns structured JSON in content[0].text, designed for agent chaining. The server also ships instructions in its initialize response describing the intended flows.

Resources (3)

pantry://inventory · shopping://list · mealplan://today

Prompts (2)

plan_dinner (plan tonight from the pantry, waste-aware) · reduce_waste (find dishes that use up what's expiring)

The simulated Alexa+ experience

The bundled web app (/) looks and feels like an Echo Show: an animated Alexa orb, typewriter replies, live tool-call cards with expandable JSON-RPC frames, and side panels (pantry / shopping list / tonight's plan) that update as the tools mutate state. The MCP wire log drawer (bottom-right) shows every real JSON-RPC request/response.

Two interchangeable planners drive it:

  1. Rule-based (default) — deterministic intent → tool-call chains, zero config, always works offline. The full demo runs on this.

  2. Real LLM (optional) — click ⚙ and point it at any OpenAI-compatible endpoint (Ollama, LM Studio, vLLM, Bedrock via proxy…). It performs genuine tool-calling against the same MCP server, same wire log.

This is the "simulated Alexa+ experience" path from the track brief — and because the server underneath is a real, spec-compliant MCP server, the same tools are ready for a hosted integration.

📺 Fire TV Cook Mode

/tv is a 10-foot living-room UI — big type, ambient scene, readable from the couch:

  • Shows tonight's plan (set by voice through MCP) with an ingredient checklist: green ✓ = in the pantry, amber ! = missing

  • Cook Mode: Enter starts, ←/→ step through the recipe exactly like a Fire TV remote's D-pad, i flips the ingredient overlay

  • Live-syncs every 15s — set dinner from the chat, watch the TV update

Testing

npm run smoke       # spawns an isolated server on :3999 and drives the full
                    # demo journey over real MCP Streamable HTTP (29 assertions:
                    # handshake, protocol version, all tool flows, edge cases)

npm test aliases are kept minimal on purpose — the smoke suite is the app's contract. It covers: initialize negotiation (2025-11-25), tools/resources/prompts listings, the cook-matching chain, meal planning, shopping → pantry restock loop (with a 100%-match assertion after restock), expiry ordering, fuzzy-name resolution, and error suggestions.

Repo layout

src/
  index.ts        Express: POST /mcp (stateless Streamable HTTP) + static hosting
  server.ts       McpServer factory: 14 tools, 3 resources, 2 prompts
  store.ts        Pantry/shopping/mealplan state (JSON-persisted, seeded)
  recipes.ts      Recipe matching engine (loose ingredient equality, staples)
  util.ts         Name normalization + aliases + date math
  data/recipes.json   26 original recipes, 6 cuisines, diet-tagged
public/
  index.html + app.js + kitchen.js    Simulated Alexa+ experience
  tv.html + tv.js                     Fire TV-style Cook Mode
scripts/
  smoke.mjs       E2E journey test       req-*.json   curl-ready payloads
  screenshot.mjs  UI screenshots (optional, needs `npm i -D puppeteer`)
docs/
  demo-script.md  3-minute demo video storyboard
  screenshots/    Captured by scripts/screenshot.mjs
PRODUCT_FEEDBACK.md   Per-tool feedback + friction log (built during the Amazon
                       Developer Hackathon, Oct 2026 — submission window missed,
                       shared publicly as a portfolio piece)

Feedback & friction

Development feedback on every tool/SDK used — plus a friction log with severity, workarounds, and suggestions — lives in PRODUCT_FEEDBACK.md.

Roadmap

  • Multi-household + auth (API keys per family)

  • Receipt scanning → shopping_mark_purchased (photo of the grocery receipt restocks the pantry)

  • Dietary profiles ("grandma is visiting — gluten-free this week") constraining recipes_match_by_ingredients

  • Real Alexa+ preview integration once available to outside developers

  • Bedrock-native LLM planner option

License

MIT — see LICENSE.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Household-aware kitchen brain for AI agents: manage pantry inventory with freshness tracking, shopping lists, recipe collections with cook notes and per-diner ratings, dietary profiles with allergen safety, and kitchen equipment — all through 27 tools with OAuth 2.1 authentication. Includes a free tool for ingredient-based recipe generation without an account (accounts are free!).
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables agents to manage household pantry inventory, dietary preferences, meal planning, product search, and shopping cart workflows over Streamable HTTP, with optional Bedrock-backed meal generation.
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Gives Alexa+ persistent, structured memory of a household kitchen: tracking purchased groceries, flagging items at risk of spoiling, proposing rescue meals from expiring ingredients, and maintaining shopping lists, receipt ingestion, and waste reports through MCP tool calls. Storage, tool logic, and safety controls (consent gates, two-step deletion, rate limiting) are exposed over Streamable HTTP for any MCP client.
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    An MCP server that enables Alexa+ to autonomously orchestrate multi-step household tasks by decomposing goals into parallel tool calls — cross-session memory and dietary/allergy auditing, culinary planning with wine pairings, Amazon Fresh cart assembly with human-in-the-loop purchase approval, smart-home ambiance and climate control, and calendar scheduling. It pairs AWS Bedrock multi-agent reasoning with Streamable HTTP transport and interactive generative UI cards, carousels, and live IoT sliders.
    MIT