Raptee Ops Agent
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., "@Raptee Ops AgentBook a T30 test ride for Priya tomorrow at 4pm"
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.
Raptee Ops Agent
The voice ops layer EV two-wheeler brands are missing. A self-hosted MCP server + simulated Alexa+ Echo Show app that replaces three broken phone conversations - sales, service, leadership reporting - with one agentic surface, built against real Raptee.HV data for the Amazon Developer Hackathon (Build, Ship, Shape - Alexa+ track).
One voice/chat surface, three personas, 22 real tools backed by a real (seeded) SQLite dataset - not a demo that just answers trivia.
Live Demo
Both apps are deployed to Vercel production — judges can try the full chain with zero local setup:
Simulated Alexa+ Echo Show app: https://raptee-ops-sim.vercel.app
MCP server (Streamable HTTP, bearer-token protected): https://raptee-ops-mcp.vercel.app
Health check: https://raptee-ops-mcp.vercel.app/health
MCP endpoint:
POST https://raptee-ops-mcp.vercel.app/mcp
Try it end-to-end:
curl -s https://raptee-ops-sim.vercel.app/api/context # live seeded owner/lead ids
curl -s -X POST https://raptee-ops-sim.vercel.app/api/agent \
-H 'content-type: application/json' \
-d '{"message":"Why should I buy an EV instead of a petrol bike?","persona":"prospect"}'Note: the MCP server runs as a stateless Vercel serverless function with its
SQLite DB written to /tmp and re-seeded (SEED=1) on every cold start, so
demo data does not persist permanently across cold starts — this is an
expected serverless tradeoff for this hackathon deployment, not a bug.
Related MCP server: LeadMCP
The pitch
India sells over 1 million electric two-wheelers a year, and every one of those OEMs runs the same three broken conversations by phone and email: a prospect who wants a straight answer on range/cost before they'll visit a showroom, an owner with a battery problem who can't get a human on the line fast enough, and a GM who finds out the workshop queue is backed up by reading a spreadsheet a week late. Raptee.HV is the forcing example here - CCS2 universal charging means a T30 owner can use India's existing EV car charging network, not a scarce motorcycle-specific grid, which is exactly the kind of fact a prospect needs explained clearly and immediately, not buried in a brochure.
Who actually buys this: the direct customer is any EV two-wheeler OEM or multi-brand dealership group (Raptee, Ather, Ola Electric, TVS iQube, Bajaj Chetak, Revolt and the dozen smaller brands behind them) - not the end rider. It replaces or augments a call center/showroom-floor headcount that today handles exactly these three jobs by phone, WhatsApp, and walk-in, at a fraction of the fully-loaded cost of even one shift of human agents, and it never puts a caller on hold. The natural pricing shape is the same SaaS model any dealership-management or CRM add-on uses: a flat platform fee plus a per-location or per-conversation charge, sold into an OEM's existing service network rather than to individual riders.
The business case, in numbers a judge can check against the code, not marketing copy:
Every prospect conversation that reaches
capture_leadorbook_test_rideis a sales-funnel action that happened without a human ever picking up the phone - at scale, that's the difference between leads that evaporate waiting for a callback and leads captured at 2am.log_service_requestdeduplicates by phone+category+2-hour window, so a worried owner calling three times about the same fault doesn't create three tickets a technician has to untangle later.check_warranty_coveragecomputes the answer live from purchase date and odometer reading - no owner is told "let me check and call you back," which is the #1 driver of bad CSAT in vehicle service calls.request_roadside_assistanceis deliberately a separate, always-urgent tool from a routine ticket - a stranded rider is a safety issue, not a queue item, and the leadershipget_rsa_activitytool flags unusual breakdown-call volume as a possible quality signal before it becomes a recall-sized problem.owner_briefingturns four separate systems (bookings, workshop queue, sales, RSA) into one daily rollup a GM can act on same-day instead of finding out from a weekly report.
Why this should win (mapped to the stated judging criteria)
Tech Implementation - this is not a thin MCP wrapper around one API.
apps/mcpis a real, spec-compliant (2025-11-25), stateless Streamable HTTP server with 22 tools, 2 resources, and a prompt, backed by genuine relational logic (dedup windows, computed warranty eligibility, SLA-aware queries) overnode:sqlite- and it's independently verified end-to-end, not just unit-tested in isolation (seedocs/testing/test_results.json: 22/22 real tool calls against the live server, real Groq function-calling choosing tools autonomously, not scripted keyword matching pretending to be an agent).Design - the UI is a deliberate Echo Show simulation (charcoal bezel, Alexa-cyan light bar that reacts to listening/thinking state, light response cards over a dark ambient screen, mic input via the Web Speech API), not a generic chat widget with an Alexa logo pasted on it, and every response is tuned for voice: one or two short sentences, no markdown tables, no raw JSON, ends in one concrete next step instead of an open "anything else?"
Potential Impact - a credible buyer (any 2W EV OEM), a quantified problem (missed leads, slow service response, delayed leadership visibility), and a product shape (SaaS, sold into an existing dealership network) that scales past this one hackathon demo without a pivot.
Quality of the Idea - this is the "creative" example in Amazon's own judging rubric, not the "obvious" one: an agentic workflow that autonomously chains multiple tools per turn (e.g.
log_service_request->book_service_slotwithout being told the second step), a context-aware surface that keeps owner/lead identity across turns, and three genuinely different personas sharing one MCP server rather than three copies of a single-turn Q&A bot.
Architecture
apps/mcp Streamable HTTP MCP server (spec 2025-11-25), Express, node:sqlite
apps/sim Simulated Alexa+ Echo Show web app, Next.js/React/TypeScript
docs/ DESIGN.md, this README, friction-log.mdapps/mcp is the real, spec-compliant MCP server:
Stateless Streamable HTTP - a fresh
McpServer+ transport per POST to/mcpBearer auth via
MCP_TOKENNative
node:sqlite(DatabaseSync, WAL, foreign keys on) - no better-sqlite322 tools across the three personas, 2 resources (a markdown FAQ, a JSON "most recent active ticket" snapshot), 1 prompt (
owner-daily-briefing)SEED=1seeds ~7 owners/bikes, a mix of ticket statuses (including one intentionally overdue past the 48h SLA), staggered test-ride/service slots, 14 days of sales, 3 unconverted leads, showroom inventory, and 2 RSA calls
apps/sim is the only consumer of that data, and it is only allowed to
reach it through a real @modelcontextprotocol/sdk client over Streamable
HTTP with the bearer token - see the comment at the top of
src/lib/mcpClient.ts. The agent is a 3-tier fallback:
Groq (
GROQ_API_KEY,openai/gpt-oss-120bvia OpenAI-compatible chat completions, real function-calling) - tried first if the key is set.Gemini (
GEMINI_API_KEY,gemini-3.6-flashvia@google/genai, native function declarations) - tried next.Scripted keyword fallback - zero external API keys required. This is what the hackathon verification below exercises end-to-end.
All three tiers call the exact same MCP tools through the exact same client wrapper - there is no "shortcut" path that bypasses MCP.
The UI is an Echo-Show-style ambient device: pick a persona at the top, get persona-specific example prompts, type or tap, get a spoken (Web Speech API) and written reply, and open the traceability drawer to see which tier answered and, for every MCP tool call that turn, the full arguments and the full response (not just one half).
Running it
1. MCP server
cd apps/mcp
pnpm install # (or from repo root: pnpm install)
pnpm build
SEED=1 PORT=3301 DB_PATH=./raptee-ops.db MCP_TOKEN=change-me node dist/server.js
# or for live dev: pnpm devListens on http://127.0.0.1:3301/mcp (health check at /health).
2. Simulated Alexa+ web app
cd apps/sim
cp .env.example .env.local # fill in MCP_TOKEN to match the server above
pnpm build && pnpm start # or pnpm dev for live reloadListens on http://127.0.0.1:3401. With no GROQ_API_KEY/GEMINI_API_KEY
set, it runs the scripted fallback automatically (or force it with
AGENT=scripted).
3. From the repo root
pnpm install
pnpm -r test # real tests for both apps
pnpm build # builds both appsTesting philosophy
apps/mcp's vitest suite spins up a real HTTP server and drives it with
the real @modelcontextprotocol/sdk Client + StreamableHTTPClientTransport
no mocked transport.
apps/sim's vitest suite exercises the scripted agent's keyword routing against multiple natural phrasings per scenario (not one canned sentence each) with the MCP client mocked, since its job is to prove routing, not re-prove the MCP server's own data correctness.
See the delivery report / commit history for the live curl/Node script
verification against a running server, which is the authoritative proof this
actually works end-to-end.
Known limitations
Free-text extraction (name/phone/city/VIN) in the scripted agent is regex-based and intentionally conservative: it asks a clarifying question rather than guessing when required fields aren't present in the message.
The scripted fallback is the final-resort tier only; Groq (tier 1) is the enforced default and was extensively verified live end-to-end against the real MCP server across all 22 tools and all 3 personas (see
docs/testing/test_results.json- 22/22 real tool calls,tier: "groq"on nearly every response). Gemini (tier 2) is implemented against the real SDK but was not separately load-tested since Groq never falls through to it in normal operation.
This server cannot be deployed
Maintenance
Related MCP Connectors
Lets AI agents get leads on the phone: call, send SMS, and schedule callbacks for sales teams.
Agentic CRM for service businesses — bookings, customers, WhatsApp, loyalty, invoicing.
Customer-context and ops layer for AI agents
Radar noEixo: WhatsApp sales and support with an AI agent, CRM pipeline and post-sale (Brazil).
Related MCP Servers
- FlicenseAqualityDmaintenanceExposes a connected-vehicle OBD-II/telematics platform to AI agents, enabling vehicle health scoring, live data queries, DTC decoding, maintenance prediction, and gated remote commands via a pluggable data layer.9-
- FlicenseNot gradedqualityCmaintenanceProvides multi-agent orchestration over MCP tool servers for CRM, inventory, calendar, and communications backed by SQLite mock adapters, enabling automotive dealership and rental lead qualification, vehicle recommendations, booking, and sales handoff without live Twilio or HubSpot. It accepts inbound channel turns such as web chat, WhatsApp, email, and voice mocks, routing each to a specialized agent.-
- AlicenseNot gradedqualityCmaintenanceEnables AI assistants to place real phone calls, engage in spoken conversations across 12 languages, and report the outcomes for tasks like booking appointments, answering questions, negotiating, or confirming orders.MIT
- AlicenseNot gradedqualityBmaintenanceEnables freelancers and small agencies to manage client operations through voice, with daily briefings, call preparation, invoice tracking, stale-client alerts, and persistent memory across sessions.MIT