Inspiration

A seller in Karachi runs kapraa.pk, a real unstitched-clothes store, and like thousands of Pakistani sellers he lives in WhatsApp groups and Instagram DMs — selling even without a proper website. Meanwhile sellers who DO have a system — Shopify, WooCommerce or a custom PHP site — still burn hours clicking through admin panels for every order. We asked one question: what if the seller could just TALK, and the store does the work?

Voice assistants exist, but nobody trusts one with a LIVE catalogue. So we built the assistant we would actually trust: every read is instant, every write asks a spoken Yes/No first, and everything lands in an audit log.

  • What it does

  • 18 MCP tools over Streamable HTTP (the Alexa+ protocol): sales briefs today/week, live low-stock, order lookups, status updates with tracking, restock planning, customer message drafts.

  • Works with every kind of store — first-class Shopify Admin GraphQL adapter, Woocomerce REST adapter, a custom JSON adapter that bridges any PHP/MySQL site through a 300-line file (live on kapraa.pk right now), and a manual mode for sellers with NO website (WhatsApp and Instagram sellers add products and record orders in the app, and voice runs them the same way).

  • Many stores, one app: per-store profiles with instant switching and an "add store in one tap" flow in the browser.

  • Safety by design: confirmation gate with spoken codes, one pending action per order, TTL expiry, rate limits, and a complete audit log of the MCP tool calls that made it happen.

  • A three-pane web simulator (Web Speech in/out) so anyone can run it from a browser — plus a Practice store with fake data for zero-risk demos.

  • How we built it

TypeScript + Express + MCP SDK (Streamable HTTP, session state in SQLite), Zod config, and the store layer published separately as an npm package held to a shared behavioural contract. Amazon Bedrock drafts the words when configured and degrades to deterministic voice templates otherwise. 174 green tests in CI + browser end-to-end tests + secret-scan gates on every push. We connected it to a REAL kapraa.pk production database during development — real-world data pushed our adapters far beyond clean JSON fixtures.

  • Challenges we ran into

  • MCP session state vs scaling trade-off — documented the decision in an ADR.

  • WooCommerce has no native fulfilment or tracking — we mapped the semantics carefully (ADR-0002).

  • Bedrock's strict Converse typing needed one adapter cast (friction log FL-008).

  • Live store data broke our first "clean" mappings immediately — the hard way to learn that real schemas lie.

  • What we learned

Voice UX is mostly safety UX. A tool that answers "what's selling" needs no permission; a tool that ships an order needs idempotency, misunderstood-word handling and confirmations that survive reloads. MCP gives the transport and tools — the hard part is the seam between spoken language and shop state.

  • What's next

  • Real Alexa+ console run with account linking to the deployed endpoint.

  • Reorder recommendations from Bedrock trend prompts.

  • Multi-worker scaling mode (path documented in ADR-0005).

Built With

Share this project:

Updates

Submission history