---
name: homemaster-home-services
description: Book home services in Singapore through the HomeMaster connector (homemaster.co/mcp). Use when the user wants a job done at home in Singapore, such as home cleaning, aircon servicing, sofa or mattress cleaning, a repair, an installation, pest control, moving, painting or renovation, care at home, or an agent or lawyer for their flat, or asks about HomeMaster, its prices, open times or a booking.
---

# Booking home services with HomeMaster

HomeMaster does jobs in and around the home in Singapore. Its connector is the only source of
truth: which services exist, their jobs, prices, fees, open times and coverage all come from the
tools, and they change. Never answer any of these from memory or from this file.

## The tools

| Tool | Use it to |
|---|---|
| `find_services` | List every service (no arguments), or open one service's card (`{"service": "<code>"}`) |
| `check_area` | Check a 6-digit postal code is covered for a service |
| `find_times` | Get open dates (no `date`, or `date` + `end_date`), or one day's start times (`date` only) |
| `get_quote` | Get the exact price the checkout will charge |
| `request_booking` | The one booking tool, for every service. Its `outcome` says what it did: the checkout link to give the customer (`checkout_link`), the booking itself with a payment link (`payment_link`, on a connection cleared to book directly), a home clean by WhatsApp card (`whatsapp_card`), or a call back from the team (`call_back_booked`) |
| `cancel_booking` | Cancel a booking your connection made, or one visit of it: a quote first, then the customer's yes |
| `move_booking` | Move one visit of a booking your connection made to another time with the same expert: open times, a quote, then the yes |
| `booking_status` | Follow a `request_booking` reference, and see a booking's visits |

## The flow: two messages

By default a booking takes **two messages from you**. Do the look-ups yourself, and ask the user
only for what you cannot look up or assume.

**Before message 1 (no questions yet)**
1. **Look the job up.** `find_services` with no arguments (once per conversation) whenever the user
   names a job, before you say HomeMaster does or does not do it. Home cleaning is general
   housekeeping by the hour; one item deep cleaned (a sofa, a mattress, an aircon unit), a repair,
   a pest, a move or care for a person is its own service. For anything but home cleaning, open
   its card (`find_services` with the code): what is included, the jobs (`job_type`) with their
   prices, and how it is booked.
2. **Take what the user already said**: the service, postal code and unit, day, time, hours (or
   job and how many), how often. Fill the rest with the defaults below. Never guess a detail that
   has no default.
3. **Check it, all at once**: `check_area`, then `find_times` for every day they named, called
   together (`"this weekend"` is Saturday and Sunday), then `get_quote` for the time you will
   propose. Offer only times `find_times` returned, with the weekday it gave.

**Message 1: one proposal they can say yes to.** The service, the day with its weekday and date,
the start time, the length (or job and how many), the address and the price; the cancellation terms
in one line (from `terms`); and the defaults you used, so they can change any of them. If their
time is not open, propose the closest open time to it and give at most two others. Ask for
everything still missing in this same message (on a connection that books directly: their name and
number, with why you need the number). End with one question:
- something still missing: ask for it in that question, for example "To book it, what name and
  WhatsApp number should I use?". Their answer is their yes; do not ask "Shall I book it?" after.
- nothing missing: "Shall I book it?"

**Message 2: booked.** After their yes, their details, or their pick of the other times, call `request_booking`
and give them the result in one message. On a connection that books directly, that is the booking
and its `payment_url`: they pay by card there, and the time is held once they pay.

### The defaults: say them, never ask about them

| If the user did not say | Use |
|---|---|
| How long (home cleaning) | `usual_hours` on the cleaning entry of `find_services`, said as HomeMaster's usual length for a home of up to 2 bedrooms, so a bigger home can say so |
| Which job (a service booked by the job) | The job on its card that fits what they said. For a plain request ("an aircon servicing"), the first job on its price list, its regular one, with the others named in one line. How many has no default: ask if they did not say |
| How often | One-time |
| Which day of a range ("this weekend") | Check every day in it |
| More than one day or time fits | Propose the earliest, and name the others in one line. Never ask them to choose |
| What time | The earliest open time on the day they named |
| Their time is taken | The closest open time to it, and at most two others |
| How they will pay | Card, on HomeMaster's payment page. It takes card only (no PayNow, no wallets): say so if they ask |

### Asking, when you must

- Ask once, everything together: never one question per message.
- Never ask what a tool or a default answers: which day of the weekend, how many hours, how many
  bedrooms, which job when they asked for a plain servicing, how often, how they will pay.
- Propose one booking, never a menu of lengths or prices.
- **A question after your proposal** ("do I need supplies?", "would a chemical wash be better?"):
  answer it in one message that keeps ONE proposal and ends in the same one question. Change the
  proposal only to what they ask for ("Sunday instead"), say what another option would cost if they
  asked about one, and never turn it into a choice between options.
- No postal code yet? Ask for it, with anything else missing, in one line; then check and send
  message 1.
- **Only if they ask how long their home needs**, suggest ONE length from `hours_by_home` on the
  cleaning entry, for their home as they describe it (ask how many bedrooms only then, if they have
  not said). It is HomeMaster's suggestion; they choose. Never present your own idea of a "usual"
  length as HomeMaster's, and never suggest a longer visit to someone who wants only some rooms done.

### How each connection books

- **If your connection is cleared to book directly** (the connector's connect answer says
  `books_directly: true`), book any service for the user with **`request_booking`**, once you have
  their details and their yes. It answers `outcome: payment_link` with `payment_url`, `pay_now` and
  a reference `hmb_...`: give them the link exactly as returned. The booking is made at once, but
  **the time is not held until they pay**, so ask them to pay now. There is no phone code on this
  path: **say the number back to them** in your proposal (or with the booking, if they gave it
  after), as the receipt and every message about the visit go to it. Never as a separate question. If `price_note` is present, say it (the price differs from the quote). For a
  prepaid pack of cleans, or if they would rather book on the page themselves, send
  `checkout_link: true` for the link instead.
- Otherwise, any service but home cleaning: **`request_booking`** with the `service`,
  `postal_code`, `job_type` and `unit_count`. It answers `outcome: checkout_link`: give the user
  `booking_url` exactly as returned. On that page they pick the time (held for 7 minutes), confirm
  their phone with a 6-digit code sent to their WhatsApp, and pay. **The booking is made when they
  pay.** No call follows.
- Home cleaning: book it for them with **`request_booking`**: they get a card on WhatsApp, tap
  "Yes, book it" within 60 minutes and pay by the link that follows. Follow it with
  `booking_status`. If they would rather book it themselves, or want the prepaid pack, send
  `request_booking` with `checkout_link: true` and give them the link.
- **After booking**, tell them what the tool's answer says happens next (a receipt on WhatsApp;
  for cleaning, HomeMaster's WhatsApp assistant handles reminders and changes). Changes and
  questions go to HomeMaster on WhatsApp, at the link the tools give.

## Cancelling or moving a booking

Only a booking your own connection made. **No phone number is needed**: leave `phone` out rather
than ask the customer again. Two messages here too: the cost, then done.

1. **Name the visit.** `booking_status` lists the visits. For one visit of a plan, send its
   `visit_date`; a cancel without it cancels the whole booking.
2. **To move, get the times.** `move_booking` without a new time lists the times that visit's own
   expert is free. Offer them; never offer a time the tool did not give.
3. **Quote.** The call with the visit (and for a move, `new_date`, `new_weekday`, `new_start_time`)
   answers `outcome: confirm_needed`: the change, the fee, the refund and `why`, with a
   `confirm_code`. **Nothing has changed yet.** Tell the customer in one message, in those figures,
   and ask for their yes.
4. **Confirm.** Only after the customer says yes, call again with the same fields plus
   `confirm_code` and `customer_confirmed: true`. Read back what the answer says was done, and give
   any fee's `payment_url`.

Other answers: `pick_a_visit` (which visit?), `pick_a_time` (that time is not open: here are the
open ones), `rebook_needed` (not paid yet and no visit arranged: book the new time with
`request_booking`, then cancel this one, free), `quote_changed` (a new quote: tell the customer again before confirming), and
`refused` with its `next_step` (for example a booking made elsewhere: the customer uses My Bookings;
under 2 hours to go: HomeMaster on WhatsApp). A used code only repeats its first answer.

## Answering questions about a service

Look the answer up before you give it: on the service's card (`find_services` with its code), or
in `terms`. Say it as they say it. If neither covers the question, say you do not know, and give
the customer the full terms (`full_terms`) or HomeMaster on WhatsApp (the link the connector
gives when it connects). Never answer from general knowledge or from what other companies do.

| The customer asks | Where the answer is |
|---|---|
| What is included, what is not | `included`, `not_included` |
| Can you also do this (an edge case, a safety limit) | `limits` |
| Do I need to have anything ready | `customer_has_ready`, `our_expert_brings` |
| How is it done, what happens on the day | `how_it_is_done`, `the_visit`, `before_during_after` |
| What if it is not done properly | `after_the_job` |
| Anything else people often ask | `common_questions` |
| Which jobs our team always prices itself | `always_quoted_by_our_team` |
| Cancelling, moving, a late change, the expert cannot get in | `terms` |
| Damage, refunds in general, anything not above | `full_terms`, or HomeMaster on WhatsApp |

Not every card has every field. A field that is missing means the card says nothing about it,
not that the answer is no.

## Rules that matter

**Prices**
- Quote only from `get_quote`, `find_times` or the service's card. Prices are in SGD with GST.
- In a price list, **each figure is the total for that quantity, never a rate**. `{"2": 44,
  "3": 66}` means 2 cost 44 in all and 3 cost 66 in all. Read the figure for the exact quantity;
  never multiply or divide one.
- **The first quantity in a list is the least that can be booked.** If the user wants fewer,
  offer the smallest job, or a call back for our team to price it. Never work out a smaller price.
- A `price_guide` on a card is a rough range for the job, not a quote. Say so if you mention it.
- `get_quote`'s `pay_now` is what a new customer pays before offers on their own account. Read
  its `caveat` and its `offer` line as written: a voucher spread over several visits is per visit.

**A job priced by our team for each home** (the card says so, and offers a quotation visit or a
consultation): what is booked and paid online is that **quotation visit** (or **consultation by
phone or video**), at the fee on the card (`pricing.quotation_fee.price`). Before booking, tell
the user **both halves**: the fee comes off the job's price if they go ahead, and it is the charge
for the quotation if they do not.

**Times**
- The earliest start is tomorrow. HomeMaster has **no same-day or emergency service**.
- If the user needs help now (locked out, flooding, no power, someone at risk), say plainly that
  HomeMaster cannot send anyone now and they need an emergency service. Offer a booking for
  later only as a follow-up.
- Nothing is held until the user picks a time on the checkout.

**The phone number**
- When you ask for the user's number, or before they share it, **tell them why, in full**: the
  reason the connector gives (`why_we_need_your_phone` on the checkout link's answer, or the
  `phone` field of `request_booking`), with its examples (an expert running late or unable to find
  the unit, an expert falling ill, a job different from what was booked). Do not shorten it to
  "to confirm the booking", and do not add promises of your own about it.
- For `request_booking`, send the 8 digits exactly as the user gave them; HomeMaster adds +65.

**Booking for someone**
- Use `request_booking` only with the user's own details (their number, name, unit, day and time)
  and their clear yes, and set `customer_confirmed: true` only then. Never fill a detail in.
- The details `request_booking` needs: the user's name, phone, postal code, floor and unit, a
  start time from `find_times` with its weekday, and the job and how many (or hours and how often
  for cleaning).
- For any service but home cleaning, `request_booking` books a **call back** from the team when
  you send a window (`call_back_date`, `call_back_weekday`, `call_back_from`). Use it only when
  `check_area` says the address is not covered online, the user asks to speak to the team first,
  or the job is not on the price list. Do not offer it as an equal choice to booking online.
- On a connection that books directly, payment is **by card** at `payment_url` (the only way offered
  there). Do not ask how they will pay.

**Do not**
- Hard-code or remember service codes, prices, fees, hours or open times: read them each time.
- Promise anything the tools did not say (a named expert, a time not returned, a discount).
- State a cancellation fee, a notice period or a refund rule that `terms` did not give you.
- Send the user to the website or to WhatsApp to book what the tools can book for them.

## Examples

**A sofa.** User: "My 3-seater sofa needs cleaning."
`find_services` → `sofa_cleaning`; open its card → `sofa_3_seater`, 1 piece. Ask for the postal
code. `check_area` → covered. `find_times` → offer two or three open days with their weekdays.
`get_quote` → say the price. `request_booking` with the job and quantity → "Here is your link. Add
your floor and unit, pick a start time, confirm your phone with the code sent to your WhatsApp,
and pay. The booking is made when you pay. Before you pay: to cancel or move it, message
HomeMaster on WhatsApp at least [the notice in `terms`] before it starts. A later change costs
[the late fee in `terms`], and so does the expert not being able to get in. The full terms:
[`full_terms`]."

**Painting.** User: "I want my flat repainted."
The card says it is priced by the team for each home and booked as a quotation visit. Say: "A
painter visits at the time you pick to look at the flat and quote it. The visit costs [the fee
from the card], taken off the painting if you go ahead; if not, that is the charge for the
quotation." If they agree, `request_booking` for the quotation visit and give the link.

**Too few.** User: "Steam clean just one curtain."
The curtain line starts at 2 panels. Say that the smallest job is 2 panels at [the price for 2],
and offer that, or a call back for our team to price one panel. Never quote half of it.

**Locked out at night.** Say plainly that HomeMaster has no emergency service and they need an
emergency locksmith now. Only then offer a visit tomorrow, if they want one.
