Pantry Pal
Provides a voice-first kitchen assistant for Alexa+ and uses Amazon Bedrock's Converse API to generate recipe suggestions that prioritize pantry items nearing expiry, with a local fallback when Bedrock is not configured.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Pantry PalWhat vegetarian dinner can I make from what's in my pantry?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Pantry Pal: an Alexa+ MCP server
A voice-first kitchen assistant built as a self-hosted MCP server (Streamable HTTP, spec 2025-11-25+) for Alexa+. Tell Alexa what you bought, ask what's about to expire, and get a dinner idea built from what you already have.
Built for the Build, Ship, Shape: Amazon Developer Hackathon (Alexa+ track, AWS Builder mini challenge).
Why it matters
Most food waste happens at home. UNEP's Food Waste Index Report 2024 estimates 1.05 billion tonnes of food was wasted in 2022, and households were responsible for 60% of it, about 79 kg per person per year (UNEP). USDA puts US food waste at 30 to 40 percent of the food supply, using 2010 data (USDA).
Pantry Pal targets one part of that: losing track of what you have and when it goes off. Voice suits it because that information is needed in the kitchen, often with your hands full. A plain shopping list records what to buy, not what you own or when it expires. Pantry Pal tracks quantity and expiry by voice, tells you what to eat first, turns it into a dinner idea, and keeps a waste score so the habit has feedback.
It is aimed at households who cook at home and want to waste less without maintaining a spreadsheet.
Related MCP server: Pantry Pal
Tools
Tool | Example utterance |
| "I bought six eggs that expire Friday" (understands "tomorrow", "in 3 days", "next week"; estimates shelf life when no date is given) |
| "I used two eggs" (adds to the shopping list when something runs out) |
| "What should I eat first?" |
| "Throw out what's expired" |
| "How much food have I wasted?" |
| "What vegetarian dinner can I make?" |
| "Plan dinners for the next three days" |
| "Add milk to my shopping list" |
| "What's in my pantry?" |
It also exposes the pantry://inventory resource (full state as JSON) and a use_it_up prompt.
Each household is isolated by the x-household-id request header, and writes are serialised per household.
Every response is short, plain spoken text with no markdown, so it reads well through a voice assistant.
Food names are normalised ("Eggs", "an egg" and "egg" are one item) and spoken back with correct plurals. Read-only and destructive tools carry MCP tool annotations.
Try it without an Alexa
The dashboard has an Alexa+ simulator: a text box and a microphone button (Chrome or Edge) where you type or say
a sentence such as "I bought six eggs that expire Sunday". src/intent.ts turns it into one of the tool calls, and
src/say.ts runs it on the real MCP server, so the pantry, the replies and the Bedrock call are all the real
server. It is a stand-in for Alexa's language understanding and it is not a real Alexa. Replies can be read aloud.
npm run demo plays a 12-sentence demo conversation against a running server. docs/DEMO.md is the recording
guide, and docs/SUBMISSION.md has the Devpost text.
Live dashboard
Open http://localhost:3000/?household=default to watch the pantry, shopping list and waste score update every
two seconds while you issue voice or tool commands. If MCP_AUTH_TOKEN is set, append &token=<token>.
AWS integration
suggest_recipe and plan_meals call Amazon Bedrock (Converse API) when BEDROCK_MODEL_ID is set, ranking pantry
items by expiry so the model prioritizes food that is about to go off. Without it, the tools fall back to a local
suggestion, so the server runs with no AWS account. The dashboard labels each result "Amazon Bedrock" or
"Local fallback" so you can see which path ran.
Bedrock setup
In the AWS console, open Amazon Bedrock in your region and request access to a text model.
Give the credentials the server runs with permission to call it. A minimal IAM policy:
{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": ["bedrock:InvokeModel"], "Resource": "*" }] }Make credentials available to the process (
aws configure,aws login, orAWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY).Find a model or inference profile ID your account can use and export it:
aws bedrock list-inference-profiles --region us-east-1 --query 'inferenceProfileSummaries[].inferenceProfileId' export BEDROCK_MODEL_ID=<id from the list> export AWS_REGION=us-east-1 npm run devAsk for a recipe and check the "Cooking idea" card on the dashboard says "Amazon Bedrock". If the call fails (access not granted, wrong region, bad ID) the error is logged to the server console and the local fallback is used.
Run it
npm install
npm run dev # http://localhost:3000/mcp
npm test # 310+ tests: names, dates, sentence parser, store, recipes, every MCP tool, HTTP + auth
npm run smoke # with the server running: end-to-end MCP client checks
npm run demo # with the server running: plays the demo conversationEnvironment variables:
Variable | Purpose |
| Listen port (default 3000) |
| If set, requests must send |
| Bedrock model or inference profile ID, enables AI recipes |
| Bedrock region (default |
| Directory for per-household JSON state (default |
To connect Alexa+, expose the server over HTTPS (for example ngrok http 3000) and register
https://<host>/mcp as your MCP endpoint.
Authentication and identity
MCP_AUTH_TOKENprotects/mcpwithAuthorization: Bearer <token>. The token is accepted only in the header, never in the URL. The dashboard's/api/statealso accepts?token=because a browser page can't set headers.Households are selected by the
x-household-idheader. This suits MCP clients you control, such as the smoke test, MCP Inspector and the demo. Alexa+ does not send this header. Amazon's Alexa+ add-on docs describe OAuth 2.1 account linking (authorization code with PKCE), where Alexa sends an access token that identifies the customer (Alexa+ MCP authentication). This project does not implement an OAuth authorization server, so behind a real Alexa+ link every caller shares thedefaulthousehold. Adding account linking is the next step for multi-user use.
Layout
src/server.ts: Express app exposing the stateless Streamable HTTP endpointsrc/mcp.ts: tool definitionssrc/recipes.ts: Bedrock call with local fallbacksrc/store.ts: per-household JSON persistence with write serialisationsrc/dashboard.ts: single-page live dashboard and simulator served at/src/intent.ts,src/say.ts: sentence-to-tool parser and the/api/saysimulator endpointsrc/activity.ts: per-household log of recent tool calls and the last recipe, shown on the dashboardsrc/names.ts: food-name normalisation and pluralssrc/dates.ts: natural-language expiry parsing and shelf-life estimatessrc/smoke-test.ts: end-to-end client testDockerfile:docker build -t pantry-pal . && docker run -p 3000:3000 -v pantry:/data pantry-pal
License
MIT
This server cannot be deployed
Maintenance
Related MCP Connectors
Household-aware cooking brain: pantry, meal suggestions, dietary safety, recipes, shopping lists.
Your kitchen in chat: pantry stock, shopping lists, recipes and scanned grocery receipts.
AI-powered kitchen management — pantry, recipes, meal plans, shopping lists
Answers 'what can I cook tonight?' from your own saved recipes and what's really in your kitchen.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceEnables Alexa+ to access a live household food inventory, providing expiry warnings, use-it-up recipe suggestions, and grocery list management.MIT
- AlicenseNot gradedqualityCmaintenanceEnables Alexa+ to manage a household pantry by voice, including adding and using items, tracking expirations, suggesting meals, and maintaining a shopping list.MIT
- AlicenseNot gradedqualityBmaintenanceEnables Alexa+ users to rescue expiring pantry items by planning high-protein meals, comparing and arbitraging grocery carts across Amazon Fresh, Whole Foods, and a local co-op, mutating dietary constraints mid-session, and checking out through five stateful MCP tools exposed over a Streamable HTTP transport. It also returns interactive MCP Apps UI cards so users can swap meals, filter dietary needs, and complete orders in a single tap.MIT
- AlicenseNot gradedqualityCmaintenanceEnables an Alexa+ voice or text client to act as a sous-chef: it tracks the ingredients, dietary restrictions and allergies in your pantry, ranks recipes by what you already have and reports missing items, builds shopping lists, and schedules meals on a plan for natural-language times. It returns structured results so clients can render visual cards alongside spoken replies.MIT