The Problem

A few weeks ago, our washing machine broke down. My father spent over two hours on the phone calling different repairmen — coordinating timings, checking availability, comparing quotes, playing phone tag. It was exhausting.

We have ChatGPT. We have AI. So why was he still stuck doing manual legwork?

The problem: current AI is a glorified search engine. It finds you a list of plumber names and phone numbers, then stops. You're back to the old way — cold-calling strangers, waiting on hold, hoping someone picks up. The AI made discovery slightly easier, but it didn't solve the actual problem: getting an appointment.

In Singapore, this is a particularly acute pain point. Service providers (handymen, plumbers, electricians, cleaners) are fragmented across Carousell, classifieds, and WhatsApp. There's no unified marketplace. Booking anything is friction-heavy and time-consuming — exactly the kind of task AI should automate end-to-end, not just the first step.

The Solution

Instead of AI as a search tool, Tukang is an AI agent that actually completes the booking flow.

Ask for a plumber in one conversation. Behind the scenes, Tukang:

  • Searches a curated directory of verified contractors
  • Reaches out to multiple providers simultaneously on WhatsApp
  • Collects and compares their quotes automatically
  • Lets you pick a winner and pay a flat $5 fee to unlock their contact
  • Can even ping you on job day to confirm arrival

No app to download. No account to create. Just a one-time connector configuration on your AI chat you already use.

How We Built It

Tech Stack:

  • Backend: Node.js + TypeScript ESM, running as an MCP server over HTTP (Streamable transport)
  • LLM: Qwen Cloud / DashScope (via OpenAI-compatible API) — powers all conversational reasoning
  • Outreach: WhatsApp Business API — sends quotes to multiple contractors in parallel
  • Payments: Stripe — $5 booking fee to unlock provider contact details
  • Data: SQLite (via sql.js in-memory) — stores handymen, reviews, bids, bookings
  • Memory: Mem0 — persists user preferences across sessions
  • Discovery: Exa API — live web search for new, unverified service providers
  • Deploy: Alibaba Cloud ECS (Singapore) — production backend with Let's Encrypt TLS

Architecture: User (MCP client) → Tukang MCP Server (16 tools) → Qwen Cloud for reasoning + WhatsApp/Stripe for transactions + SQLite for state. Contractor replies on WhatsApp are parsed automatically via regex (price, availability, datetime) and surfaced back into the chat as structured bids.

Challenges We Ran Into

  1. WhatsApp Business Verification Bottleneck BIGGEST BUGBEAR

    • Meta's Cloud API only delivers to a tiny allow-list while the app is in dev/test mode. We can send quotes to test numbers, but real contractor outreach fails with error 131030 ("Recipient phone number not in allowed list").
    • Solution: Built the full flow end-to-end anyway; once the app gets Live/Production status + business verification (currently pending with Meta), outreach will work at scale.
  2. Time Pressure + Hackathon Infrastructure

    • ECS provisioning, DNS cutover, Let's Encrypt cert issuance, and WhatsApp/Stripe webhook re-routing all needed to happen within ~48 hours of the deadline.
    • Solution: Scripted everything via deploy/setup.sh and pre-built DEPLOY.md; used nip.io as a quick DNS workaround while waiting for Namecheap propagation.
  3. Contact Number Gating

    • The entire value prop is "pay $5 to get the provider's real number." Had to ensure no phone/WhatsApp leaks in any tool output (search results, bid lists, booking confirmations) until payment_status='paid'.
    • Solution: Centralized contact resolution via contactForOutput() function that masks all numbers server-side, resolved via provider ID only.
  4. Parallel WhatsApp Outreach + Reply Parsing

    • Matching incoming WhatsApp replies to the right outbound session (when multiple contractors reply to the same user simultaneously) required careful timestamp/session ID ordering.
    • Solution: Match replies to the most recent open session_id per contractor; regex-parse prices, availability, and datetime from free-form WhatsApp text.

Accomplishments We're Proud Of

  • 16 fully functional MCP tools — search, discovery (live web + seeded DB), quoting, outreach, bids, booking, registration, all working end-to-end
  • Live deployment on Alibaba Cloud ECS — backend running in production on Singapore infrastructure with a real domain (tukang.app) and valid TLS cert
  • Parallel contractor outreach — fire off WhatsApp quotes to 5+ providers simultaneously and collect bids automatically without human intervention
  • Contact gating mechanism — first time users see provider details is after payment, not before — solves the "how do we monetize discovery" problem elegantly
  • MCP-native architecture — works as a true MCP connector; users can add Tukang to Claude, ChatGPT, or any MCP-capable AI chat without downloading an app
  • Graceful API degradation — every external service (WhatsApp, Stripe, Qwen, Exa, Mem0) degrades to a simulated response if its API key is missing, so the server runs end-to-end demo even in offline mode

What We Learned

  1. MCP is a powerful but strict protocol — streaming responses, per-session server instances, careful tool registration — requires discipline but unlocks true AI-agent composability
  2. WhatsApp Business API is mature but gated — Many AI startup event circuits complain AI isn't making money- and the real issue is entrenched bureacratic systems that gate new ideas. For us, whatsapp business verification is a real gatekeepers for production use
  3. SQLite in memory is fast and simple, but has limits — perfect for a single-process MCP server at hackathon scale; wouldn't scale to thousands of concurrent sessions
  4. Contact gating is a product insight, not just a payment trick — users trust that the provider's real number is valuable enough to pay for; makes the $5 fee feel fair
  5. Regex parsing beats LLM for structured extraction — extracting prices and availability from WhatsApp replies via regex is faster, cheaper, and more reliable than calling Qwen each time
  6. Singapore home services market is fragmented and hungry for automation — every provider we spoke to was already WhatsApp-first; they'd adopt a booking platform instantly if it brought them customers

What's Next for Tukang

  1. Complete Meta Business Verification — get the WhatsApp app out of dev mode so real outreach works at scale (this is the critical blocker) BIGGEST BUGBEAR
  2. Expand service categories — beyond handymen to dentists, facialists, spa and other local services
  3. Onboard real contractors — move from a seeded demo directory to a live roster of verified, paying service providers
  4. Admin dashboard for providers — let contractors see incoming job requests, manage availability, track earnings, and build reviews
  5. Geographic expansion — launch in Malaysia (Kuala Lumpur, Selangor) where similar fragmentation exists
  6. Subscription model for providers — charge contractors a small fee per booking closed (instead of or in addition to the user-facing $5 fee)
  7. Agent autonomy — let Tukang negotiate with providers and finalize bookings without user sign-off, if the user grants permission

Built With

Share this project:

Updates