Inspiration
Connecting conversational AI to physical, real-world hospitality operations often faces custom integration overhead. We built ZIBA Cafe on Alexa+ to demonstrate how an open standard—the Model Context Protocol (MCP)—can bridge smart voice assistants and live restaurant workflows seamlessly. By equipping an assistant with structured tools to interact directly with café operations, guests can place orders, reserve tables, and check dietary options through natural conversation.
What it does
ZIBA Cafe on Alexa+ connects an Alexa-style assistant directly to café systems using a self-hosted MCP server and client simulation. The project provides a complete end-to-end experience:
- 8 Core MCP Tools: The server exposes tools to fetch café info (
get_cafe_info), search or filter menus (search_menu), price orders (price_order), place collection or booking orders (create_order), check order statuses (get_order_status), check table availability (check_table_availability), reserve slots (reserve_table), and process cancellations (cancel_reservation). - Order Totaling & Price Calculations: Price validation sums base items and add-ons server-side: \[ P_{\text{total}} = \sum_{i=1}^{n} \left( P_{\text{item}, i} + \sum_{j=1}^{m} P_{\text{add-on}, i, j} \right) \]
- Table Reservations: Manages 5 daily time slots with a default capacity of \( C_{\text{slot}} = 6 \) bookings per slot: \[ C_{\text{slot}} = \text{ZIBA_BOOKINGS_PER_SLOT} = 6 \]
- Live Kitchen Display (
/kitchen.html): Staff monitor incoming tickets across stages (new,booked arrivals,preparing,ready) using a PIN-protected view (ziba-demo). - Real-Time Status Tracking: When kitchen staff advance a ticket status, queries to
get_order_statusinstantly reflect live progress to the guest. - Simulated Alexa+ Web Client: Includes a web interface with a live "MCP traffic" log, demo guest profile, and rule-based brain (
public/brain.js) operating over Streamable HTTP.
How we built it
- Backend Architecture: Built on Node.js (v20+) using the official TypeScript SDK for MCP.
- Protocol & Transport: Implemented stateless Streamable HTTP with JSON payloads conforming to protocol version
2025-11-25at the/mcpendpoint. - Security & Isolation: Enforced CORS via
ALLOWED_ORIGINSand isolated staff operations on separate/staff/*endpoints so administrative actions are never exposed over MCP. - Agent Guidance: Designed an Agent Skill (
skills/ziba-cafe/SKILL.md) defining workflow logic—such as confirming actions before execution and following a "resolve \(\rightarrow\) price \(\rightarrow\) place" sequence. - State & Deployment: Maintained order and booking state in
data/state.json, packaged with a Dockerfile configured for Node or container platforms like Render, Railway, or Fly.io.
Challenges we ran into
- Server-Side Rule Enforcement: Validating menu add-ons required strict server-side logic (e.g., ensuring milk add-ons apply only to milk-based coffees).
- Dietary & Allergen Handling: Handling ambiguous menu items required explicit tagging logic; for example, frappes and hot chocolate are treated as "may contain dairy", requiring mandatory staff allergen cautions.
- 24-Hour Cancellation Window: Enforcing cancellation policies mathematically based on booking timestamps: \[ \Delta t = t_{\text{booking}} - t_{\text{cancel}} \] Evaluating whether \( \Delta t < 24 \text{ hours} \) determines whether the cancellation falls inside or outside the policy window.
- API Isolation: Preventing assistant tools from accessing kitchen management functions required establishing strict boundaries between assistant tools and staff endpoints (
/staff/*).
Accomplishments that we're proud of
- End-to-End Operational Loop: Successfully connecting an assistant query to a kitchen display ticket and returning live status updates back to the user.
- Automated Test Coverage: Creating an 11-check automated test suite (
npm test) that validates MCP tool schemas, response structures, and Agent Skill policies against a live server. - Structured Data Outputs: Designing tools that return clean, structured data rather than hardcoded conversational scripts, enabling the assistant to draft natural replies independently.
What we learned
- MCP Protocol Design: Hands-on experience implementing stateless Streamable HTTP transports using the official TypeScript SDK.
- Agent Skill Optimization: How structured skill definitions (
SKILL.md) guide LLMs through multi-step operational flows while reducing hallucination risks. - Domain-Specific Constraints: The necessity of isolating public AI interfaces from internal staff controls in hospitality environments.
What's next for ZIBA Cafe Alexa+
- LLM Integration: Replacing the rule-based
public/brain.jsclient stand-in with a full Amazon Bedrock-backed language model. - Production Storage: Migrating state management from local
data/state.jsonto a persistent production database. - Payment Processing: Incorporating live payment gateway tools for seamless collection order and reservation checkout
Built With
- agent-skills
- ai-agents
- conversational-ai
- css3
- docker
- fly.io
- hospitality-tech
- html5
- javascript
- json-rpc
- mcp
- model-context-protocol
- node.js
- npm
- railway
- render
- rest-api
- streamable-http
- typescript
- voice-assistants
Log in or sign up for Devpost to join the conversation.