Inspiration

Planning dinner often means three separate chores: deciding what to cook, checking what is already in the pantry, and remembering what to buy. TableReady brings those steps into one quick plan for a busy household.

What it does

TableReady finds vegetarian and vegan recipes by servings and preparation time, then compares each ingredient with pantry stock and the unchecked shopping list. The recipe view shows what is covered and the exact amount still needed. You can add the shortfall to a shopping list, mark items bought, adjust pantry quantities, remove items, set or cancel a prep reminder, and mark dinner cooked to deduct the used ingredients.

Before a saved change, the browser shows the exact preview and asks the person to confirm. Reminders are stored locally and shown in the page when due; this demo does not send notifications.

How we built it

A React and TypeScript browser client connects to a self-hosted Express server using MCP Streamable HTTP, pinned to protocol version 2025-11-25. The browser trace shows the actual initialize, tools/list, and tools/call requests. Demo state is stored in a local JSON file.

The ten typed tools are get_pantry, find_recipes, preview_change, add_to_shopping_list, set_prep_reminder, mark_item_bought, remove_shopping_item, mark_cooked, set_pantry_item, and cancel_prep_reminder. The server also exposes a pantry resource and a dinner-planning prompt.

Challenges and what we learned

Pantry quantities can change between preview and save, so each write uses a short-lived, one-use token bound to the exact action and the server revalidates current state inside its serialized write path. The token binds the preview to its write; it does not prove that a person approved the change. The browser dialog is the human confirmation step. Countable ingredients round up to whole units. Vitest covers recipe math, duplicate shopping adds, malformed state, concurrent writes, and an end-to-end MCP flow.

Scope

TableReady is a local Alexa+ simulation and self-hosted MCP demo. Its typed conversation uses deterministic intent matching, not an AI model. It is not connected to Alexa+, AWS, a grocery service, or push notifications. The full client and server source are in the linked repository.

Built With

Share this project:

Updates

Submission history