Inspiration

Booking a haircut should not require downloading another app or navigating a calendar. Sometimes, the most natural request is simply, "Kal shaam 5 baje haircut."

That was our starting point for VoiceStack: make local appointment booking feel like a conversation, while giving the business a schedule it can trust.

But understanding a request is only half the problem. What happens when two people ask for the same slot? Or when a customer presses confirm again because the connection dropped? We wanted to build the less visible part of a voice experience too: making sure the action behind the conversation is reliable.

What it does

VoiceStack connects conversational requests to a working appointment-booking system through the Model Context Protocol (MCP).

A shop owner can turn a short description of services, prices, and opening hours into an editable draft, then approve it for publication. Customers can search for businesses and request appointments using supported Hindi or English phrases, through browser speech input or typed text.

Before booking, VoiceStack reads back the details and temporarily holds the slot for two minutes. The customer must explicitly confirm. Repeating the same confirmation request returns the original booking instead of creating another one.

If a slot is occupied, another customer can join its waitlist. When the booking is cancelled, the waiting customer can receive a temporary offer.

Our browser demo simulates the Alexa+ interaction while calling a real MCP server. It is not a deployed Alexa+ integration.

How we built it

We built the backend in Python using the official MCP SDK, with eight tools covering business onboarding, discovery, availability, holds, confirmation, cancellation, and waitlisting.

The server uses Streamable HTTP. A lightweight HTML and JavaScript interface provides Customer, Shop owner, and Developer views, including visibility into tool calls.

For the prototype, we deliberately used rule-based parsing rather than an LLM. That kept supported requests predictable and let us focus on the booking workflow without requiring cloud services or API keys.

SQLite handles persistence. Transactions and occupancy constraints protect reserved time intervals, while confirmation idempotency makes retries safe. Longer services reserve multiple intervals so they cannot overlap another appointment.

Challenges we ran into

The hardest part was deciding what should happen between "that slot looks available" and "your booking is confirmed." Availability can change during a conversation, so checking it once was not enough. Temporary holds gave that interaction a clear boundary.

We also had to distinguish a retry from a new request. A repeated confirmation should return the same receipt, but a different customer requesting an occupied slot must be rejected.

Language introduced another challenge: keeping the experience approachable without suggesting that our parser understands every possible sentence. Editable input and explicit confirmation help customers catch mistakes before a booking is made.

Accomplishments that we're proud of

We completed an end-to-end workflow from owner onboarding to customer confirmation, cancellation, and a waitlist offer.

We also made booking conflicts visible. The Developer view can send competing requests for a slot, showing which request succeeds and which are rejected.

Our verification included 33 passing automated tests and a successful integration smoke test against the running MCP server. Seeing the workflow hold up beyond the happy path was an important milestone.

What we learned

MCP provides a way for a client to discover and call tools. It does not supply the business rules, permissions, or conversational understanding behind them. Those still need careful design.

We also learned that reliability is part of the user experience. A clear read-back, an explicit confirmation, and a receipt that survives a retry matter just as much as accepting a spoken request.

What's next for VoiceStack

Our next priorities are authentication, stronger business-owner verification, and validation with an external MCP client and a real Alexa+ integration.

We also want to expand language coverage, evaluate speech recognition with real users, and improve scheduling and waitlist handling, including passing expired offers to the next person.

VoiceStack is currently a local prototype. The next step is to test it with small businesses and learn which parts of their booking workflow it genuinely makes easier.

Built With

Share this project:

Updates

Submission history