Inspiration

What it does

How we built it

Challenges we ran into

Accomplishments that we're proud of

What we learned

What's next for Nukkad: the corner store, on Alexa+

Inspiration

Alexa+ is getting big brands first. The shops I actually buy from every week are not on that list. On my street there is a kirana, a bakery and a dairy. None of them will ever build a voice app, and none of them should have to.

What they already have is worth putting on Alexa+. The shopkeeper knows my usual order. I pay on khata, which is a running tab of store credit. If something is out of stock, they swap it for something close. I wanted one sentence to Alexa to do what a phone call to my local shop does, across all three shops at once.

Nukkad is inspired by DukaanOS, an earlier web storefront for kirana shops that I built for a different hackathon. Nukkad is a new project in a new repository and no code was reused from DukaanOS. All shops, people and products in the demo are fictional.

What it does

Nukkad is one multi tenant MCP server for the independent shops on a street. A customer says: I am having six friends over on Saturday for chai and snacks. Get what I usually get, enough for everyone, and put it on my khata.

From that one sentence Nukkad does five things:

  1. Recalls the usual order across the kirana, the bakery and the dairy.
  2. Scales it up for the guests.
  3. Checks live stock and swaps what is short. In the demo the kirana has only 4 packets of biscuits left, so Nukkad uses cake rusk from the bakery instead.
  4. Checks the khata credit limit at each shop and places a separate order with each shop for Saturday.
  5. Shows the updated khata, with the credit left at each shop.

The results come back as MCP Apps cards: a cart, a khata card and an order tracker. On the other side, each shop has a console where the new order shows up within a few seconds. The shopkeeper accepts it, marks it packed and marks it delivered, and the customer sees the new status when they ask where the order is.

It also understands Hinglish words like atta, doodh, chini and chawal, because that is how people talk to their local shop.

The Alexa+ developer tools are open to select partners only, so I built a web based Alexa+ simulator. It is a real MCP client. It sends initialize, tools list, resources read and tools call over Streamable HTTP, and an inspector next to the chat shows every JSON RPC message with its timing.

How we built it

The MCP server is written in TypeScript on the official MCP SDK and implements the 25 November 2025 version of the MCP spec over Streamable HTTP. It is stateless: every request gets a fresh server and transport, and responses are plain JSON. It has nine tools, three MCP Apps views and two prompts.

The tools are find shops, search catalog, get usual, build cart, check stock and substitute, khata balance, place order, track order and khata add entry. Six of them link to an MCP Apps view. The views are HTML resources that the host reads, renders in a sandboxed frame and then feeds with the tool result over the MCP Apps message protocol. The two prompts are reorder usual and party order.

Everything runs on one AWS Lambda function, Node 22 on arm64, behind a Lambda Function URL. Shops, the catalog with live stock, customers and their usual orders, orders and the khata ledger all live in one Amazon DynamoDB table in on demand mode. In the live inspector, tool calls take about 45 to 220 milliseconds, which is under the 500 millisecond target in the Alexa+ docs.

The Lambda glue became its own small library, MCP Lambda Kit. It turns any MCP SDK server into a Function URL handler, with CORS, extra routes, an optional bearer token check and RFC 9728 protected resource metadata. It is MIT licensed and has its own tests.

The simulator and the shop console are a Next.js static export served from the same Lambda. The agent loop runs in the browser and calls a small proxy on the Lambda for the language model, so the API key never reaches the browser. The model is DeepSeek. The proxy has a per IP rate limit so a public demo cannot drain the balance. The repo also has an addon manifest in the Alexa+ format that points at the live MCP endpoint.

Challenges we ran into

  1. The first plan was Amazon Bedrock for the agent. My new AWS account was held back for Bedrock: every model call came back with Operation not allowed, in two regions, even though the models showed as available in the console. With a fixed deadline I moved the agent to DeepSeek behind a server side proxy and kept everything else on AWS.
  2. The Alexa+ MCP toolkit and simulator are limited to select partners, so I could not test on a real Alexa+ device. I built my own host instead and kept it a strict MCP client, so the server does not depend on anything special in the simulator.
  3. There is no official way to run a Streamable HTTP MCP server on a Lambda Function URL. Getting stateless handling right, with a fresh server per request and the protocol version header, took a while. That work is now MCP Lambda Kit.
  4. The MCP Apps host side took longer than the views. I wrote the frame handshake, the tool result push and the size updates myself so the cards fit the conversation without scrollbars.

Accomplishments

  1. The full party order works on the live site from one sentence: three shops, one substitution, a credit check at each shop and three orders on khata, with every step visible as real MCP traffic.
  2. The shop console updates live, so the demo shows both sides of the sale, the customer and the shopkeeper.
  3. The whole product runs on one Lambda function and one DynamoDB table.
  4. MCP Lambda Kit is small, tested and useful to anyone who wants to host an MCP server on Lambda.

What we learned

Fast, plain tools matter more than a clever model. The tools only read and write data, and the model only decides which tool to call next. That split made the flow reliable and kept tool latency low.

Stateless MCP over Streamable HTTP fits serverless very well. There is no session to store, so scaling was never something I had to think about.

MCP Apps make a voice answer much easier to trust. Hearing the total is fine. Seeing the cart with the swap and the credit left at each shop is better.

What is next

  1. Onboarding real shops, with a simple flow where a shopkeeper adds their catalog and credit rules and Nukkad serves them through the same server.
  2. OAuth sign in for customers. MCP Lambda Kit already serves the protected resource metadata for it.
  3. Amazon Bedrock for the agent once my account is cleared, and spoken replies with Amazon Polly.
  4. Deploying to Alexa+ as soon as the toolkit opens to developers.

The same idea works for any street with independent shops: a bodega, a home bakery, a corner pharmacy.

Built With

Share this project:

Updates

Submission history