Skip to main content
Glama

Book for the customer

request_booking
Idempotent

Book a HomeMaster service for the customer: only the one they asked for, never an extra. Ask for their name, their phone number and their OK first, and never fill a field with a guess or a placeholder. The answer's outcome says what was booked. (1) whatsapp_card, home cleaning: we sent the customer Helen's booking card on WhatsApp, showing the date, their address, the clean and their price; nothing is booked until they tap "Yes, book it" within 60 minutes, then they pay by the payment link Helen sends, and the time is not held while they decide. Needs postal_code, unit, date with its weekday, a start_time from find_times, and the hours the customer chose. A weekly or every-2-weeks clean is sent as paying visit by visit (get_quote's pay_per_visit); for the prepaid pack, give the checkout link from start_booking instead. Returns a reference for booking_status. (2) call_back_booked, any other service: a call back from our team, only for an address we do not cover online, a service under more_services, or a customer who asks to speak to our team before booking. Every other service is booked online with start_booking's link, so do not offer the call back as a choice. It is free for a service with a price list; for a service quoted for each job, the quotation has a fee, stated on its card and in the answer, which our team collects. Tell the customer that, ask when they are free for a call, and send a 2-hour window (call_back_date, its call_back_weekday, and call_back_from). Our team calls them in that window with the price and a time for the job. No message is sent and nothing is paid through this booking. Returns a reference (hmc_) for booking_status. To move the call, call this again with a new window. For a customer with several such jobs, book each service in the same window: our team makes one call. After booking, read back to the customer the day and the number in the answer (booked_for, or sent_to for a clean): if either is not what they said, book again with the right one. HomeMaster has no emergency service: for someone who needs help now, say so, and offer the call back only as a follow-up. A refusal means nothing is booked. (3) pick_a_call_back_time: you asked for a call back without a window; nothing is saved, and the answer holds the question to ask and the windows we take.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
dateNoYYYY-MM-DD, Singapore date.
unitNoCleaning: floor AND unit number, e.g. #05-12 (for a landed house, the house number). The floor alone is not a unit number. Ask the customer; never make one up.
hoursNoCleaning only: visit length in hours (see find_services for the lengths we sell, e.g. 2, 3 or 4).
phoneYesThe customer's 8-digit Singapore number, exactly as they gave it, e.g. 9123 4567. We add +65 ourselves: do not add, repeat or drop a digit. For cleaning it must be on WhatsApp.
detailsNoA call back: the job in the customer's words, with what the price depends on (see its service card): what, how many, what size, what is wrong. Never make a detail up. If the customer cannot say which job on the price list is theirs, describe the problem and book: do not make them choose.
serviceYesRequired: the service the customer asked for, from find_services. cleaning (general housekeeping only) for Helen's WhatsApp card, or the code of any other service for a call back, e.g. pipe_leak_repair.
weekdayNoCleaning: the weekday the customer agreed to, e.g. Saturday. Required with date; we refuse a date that is not that weekday.
frequencyNoCleaning only: one-time, weekly, or bi-weekly (every 2 weeks).one-time
agent_nameNoOptional, cleaning: your name as the customer knows you (letters, digits and spaces), shown on the card as "<name> asked us to book this for you".
start_timeNoCleaning: HH:MM in Singapore time, one of the start times from find_times.
postal_codeNo6-digit Singapore postal code, e.g. 238823. Cleaning: required. A call back: send it too, when the customer gives it; our team confirms on the call whether we serve the address. A job with two addresses (a move, a delivery): the address it starts from here, the other one in details.
customer_nameNoThe customer's name. Required for a call back (any service but cleaning). For cleaning: recommended, saved only once they confirm, and never over a name we already have.
call_back_dateNoA call back: the day the customer is free for our call, YYYY-MM-DD, Singapore date, today to 14 days ahead.
call_back_fromNoA call back: the start of the 2-hour window for our call, HH:MM in Singapore time, on the hour or half hour, 09:00 to 19:00 (so the latest window is 7pm to 9pm).
call_back_weekdayNoA call back: the weekday the customer agreed to for the call, e.g. Saturday. Required with call_back_date; we refuse a date that is not that weekday.
customer_confirmedNoRequired. true only when the customer themselves gave you every detail you are sending (their number, the unit, the day, the hours or the job) and said yes to this booking. If you filled in or guessed any of it, do not send: ask them first.
preferred_job_timeNoA call back, optional: when the customer would like the JOB done, in their words (e.g. Saturday mornings, within two weeks, on 31 October), and how often if they want it regularly (e.g. every week). It can be later than 14 days: the call-back window is only for the call.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed8 schema fields changed
    • changedInput schema / properties / call_back_date / description
      Previous value: -"A service under more_services: the day the customer is free for our call, YYYY-MM-DD, Singapore date, today to 14 days ahead."New value: +"A call back: the day the customer is free for our call, YYYY-MM-DD, Singapore date, today to 14 days ahead."
    • changedInput schema / properties / call_back_from / description
      Previous value: -"A service under more_services: the start of the 2-hour window for our call, HH:MM in Singapore time, on the hour or half hour, 09:00 to 19:00 (so the latest window is 7pm to 9pm)."New value: +"A call back: the start of the 2-hour window for our call, HH:MM in Singapore time, on the hour or half hour, 09:00 to 19:00 (so the latest window is 7pm to 9pm)."
    • changedInput schema / properties / call_back_weekday / description
      Previous value: -"A service under more_services: the weekday the customer agreed to for the call, e.g. Saturday. Required with call_back_date; we refuse a date that is not that weekday."New value: +"A call back: the weekday the customer agreed to for the call, e.g. Saturday. Required with call_back_date; we refuse a date that is not that weekday."
    • changedInput schema / properties / customer_name / description
      Previous value: -"The customer's name. Required for a service under more_services. For cleaning: recommended, saved only once they confirm, and never over a name we already have."New value: +"The customer's name. Required for a call back (any service but cleaning). For cleaning: recommended, saved only once they confirm, and never over a name we already have."
    • changedInput schema / properties / details / description
      Previous value: -"A service under more_services: the job in the customer's words, with what the price depends on (see its service card): what, how many, what size, what is wrong. Never make a detail up. If the customer cannot say which job on the price list is theirs, describe the problem and book: do not make them choose."New value: +"A call back: the job in the customer's words, with what the price depends on (see its service card): what, how many, what size, what is wrong. Never make a detail up. If the customer cannot say which job on the price list is theirs, describe the problem and book: do not make them choose."
    • changedInput schema / properties / postal_code / description
      Previous value: -"6-digit Singapore postal code, e.g. 238823. Cleaning: required. A service under more_services: send it too, when the customer gives it; our team confirms on the call whether we serve the address. A job with two addresses (a move, a delivery): the address it starts from here, the other one in details."New value: +"6-digit Singapore postal code, e.g. 238823. Cleaning: required. A call back: send it too, when the customer gives it; our team confirms on the call whether we serve the address. A job with two addresses (a move, a delivery): the address it starts from here, the other one in details."
    • changedInput schema / properties / preferred_job_time / description
      Previous value: -"A service under more_services, optional: when the customer would like the JOB done, in their words (e.g. Saturday mornings, within two weeks, on 31 October), and how often if they want it regularly (e.g. every week). It can be later than 14 days: the call-back window is only for the call."New value: +"A call back, optional: when the customer would like the JOB done, in their words (e.g. Saturday mornings, within two weeks, on 31 October), and how often if they want it regularly (e.g. every week). It can be later than 14 days: the call-back window is only for the call."
    • changedInput schema / properties / service / description
      Previous value: -"Required: the service the customer asked for, from find_services. cleaning (general housekeeping only), or the code of a service under more_services, e.g. pipe_leak_repair."New value: +"Required: the service the customer asked for, from find_services. cleaning (general housekeeping only) for Helen's WhatsApp card, or the code of any other service for a call back, e.g. pipe_leak_repair."
  2. Changed3 schema fields changed
    • changedInput schema / properties / details / description
      Previous value: -"A service under more_services: the job in the customer's words, with what the price depends on (see its service card): what, how many, what size, what is wrong. Never make a detail up."New value: +"A service under more_services: the job in the customer's words, with what the price depends on (see its service card): what, how many, what size, what is wrong. Never make a detail up. If the customer cannot say which job on the price list is theirs, describe the problem and book: do not make them choose."
    • changedInput schema / properties / postal_code / description
      Previous value: -"6-digit Singapore postal code, e.g. 238823. Cleaning: required. A service under more_services: send it too, when the customer gives it; our team confirms on the call whether we serve the address."New value: +"6-digit Singapore postal code, e.g. 238823. Cleaning: required. A service under more_services: send it too, when the customer gives it; our team confirms on the call whether we serve the address. A job with two addresses (a move, a delivery): the address it starts from here, the other one in details."
    • changedInput schema / properties / preferred_job_time / description
      Previous value: -"A service under more_services, optional: when the customer would like the JOB done, in their words (e.g. Saturday mornings, within two weeks). The call-back window is only for the call."New value: +"A service under more_services, optional: when the customer would like the JOB done, in their words (e.g. Saturday mornings, within two weeks, on 31 October), and how often if they want it regularly (e.g. every week). It can be later than 14 days: the call-back window is only for the call."
  3. Changed1 schema field changed
    • changedInput schema / properties / postal_code / description
      Previous value: -"6-digit Singapore postal code, e.g. 238823."New value: +"6-digit Singapore postal code, e.g. 238823. Cleaning: required. A service under more_services: send it too, when the customer gives it; our team confirms on the call whether we serve the address."
  4. Changed14 schema fields changed
    • changedInput schema / properties / agent_name / description
      Previous value: -"Optional: your name as the customer knows you (letters, digits and spaces), shown on the card as \"<name> asked us to book this for you\"."New value: +"Optional, cleaning: your name as the customer knows you (letters, digits and spaces), shown on the card as \"<name> asked us to book this for you\"."
    • addedInput schema / properties / call_back_date
      Added value: +{
      +  "description": "A service under more_services: the day the customer is free for our call, YYYY-MM-DD, Singapore date, today to 14 days ahead.",
      +  "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      +  "type": "string"
      +}
    • addedInput schema / properties / call_back_from
      Added value: +{
      +  "description": "A service under more_services: the start of the 2-hour window for our call, HH:MM in Singapore time, on the hour or half hour, 09:00 to 19:00 (so the latest window is 7pm to 9pm).",
      +  "pattern": "^\\d{2}:\\d{2}$",
      +  "type": "string"
      +}
    • addedInput schema / properties / call_back_weekday
      Added value: +{
      +  "description": "A service under more_services: the weekday the customer agreed to for the call, e.g. Saturday. Required with call_back_date; we refuse a date that is not that weekday.",
      +  "enum": [
      +    "Monday",
      +    "Tuesday",
      +    "Wednesday",
      +    "Thursday",
      +    "Friday",
      +    "Saturday",
      +    "Sunday"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / customer_confirmed
      Added value: +{
      +  "description": "Required. true only when the customer themselves gave you every detail you are sending (their number, the unit, the day, the hours or the job) and said yes to this booking. If you filled in or guessed any of it, do not send: ask them first.",
      +  "type": "boolean"
      +}
    • changedInput schema / properties / customer_name / description
      Previous value: -"Recommended: the customer's name, so their cleaning expert and receipt can greet them. Saved only once they confirm, and never over a name we already have."New value: +"The customer's name. Required for a service under more_services. For cleaning: recommended, saved only once they confirm, and never over a name we already have."
    • addedInput schema / properties / details
      Added value: +{
      +  "description": "A service under more_services: the job in the customer's words, with what the price depends on (see its service card): what, how many, what size, what is wrong. Never make a detail up.",
      +  "maxLength": 600,
      +  "type": "string"
      +}
    • changedInput schema / properties / phone / description
      Previous value: -"The customer's WhatsApp number, e.g. +6591234567."New value: +"The customer's 8-digit Singapore number, exactly as they gave it, e.g. 9123 4567. We add +65 ourselves: do not add, repeat or drop a digit. For cleaning it must be on WhatsApp."
    • addedInput schema / properties / preferred_job_time
      Added value: +{
      +  "description": "A service under more_services, optional: when the customer would like the JOB done, in their words (e.g. Saturday mornings, within two weeks). The call-back window is only for the call.",
      +  "maxLength": 120,
      +  "type": "string"
      +}
    • addedInput schema / properties / service
      Added value: +{
      +  "description": "Required: the service the customer asked for, from find_services. cleaning (general housekeeping only), or the code of a service under more_services, e.g. pipe_leak_repair.",
      +  "type": "string"
      +}
    • changedInput schema / properties / start_time / description
      Previous value: -"HH:MM in Singapore time, one of the start times from find_times."New value: +"Cleaning: HH:MM in Singapore time, one of the start times from find_times."
    • changedInput schema / properties / unit / description
      Previous value: -"Floor and unit number, e.g. #05-12."New value: +"Cleaning: floor AND unit number, e.g. #05-12 (for a landed house, the house number). The floor alone is not a unit number. Ask the customer; never make one up."
    • addedInput schema / properties / weekday
      Added value: +{
      +  "description": "Cleaning: the weekday the customer agreed to, e.g. Saturday. Required with date; we refuse a date that is not that weekday.",
      +  "enum": [
      +    "Monday",
      +    "Tuesday",
      +    "Wednesday",
      +    "Thursday",
      +    "Friday",
      +    "Saturday",
      +    "Sunday"
      +  ],
      +  "type": "string"
      +}
    • changedInput schema / required
      Previous value: -[
      -  "postal_code",
      -  "unit",
      -  "date",
      -  "start_time",
      -  "hours",
      -  "phone"
      -]New value: +[
      +  "service",
      +  "phone"
      +]
  5. First observed

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds substantial behavior beyond the annotations: nothing is booked until the customer taps 'Yes, book it' within 60 minutes, the time is not held, payment flows through Helen's link, call-back quotes carry a fee, and 'no message is sent and nothing is paid through this booking.' It also covers corrections ('book again with the right one') and that a refusal books nothing.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the single most important rule ('only the one they asked for, never an extra') before the mode breakdown. The length is largely justified by three distinct behaviors and 17 parameters, though the numbered parentheticals are dense and some detail is repeated across modes.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite no output schema, the description explains the answer fields (outcome, booked_for, sent_to, an hmc_ reference for booking_status) and the follow-up read-back step. Combined with rich annotations and a fully documented schema, nothing an agent needs to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents every parameter including the cleaning-vs-call-back conditional requirements. The description restates which fields belong to each mode (postal_code/unit/date/start_time/hours vs call_back_date/call_back_weekday/call_back_from) but adds little syntax or meaning beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Book a HomeMaster service for the customer') and immediately constrains scope ('only the one they asked for, never an extra'). It then enumerates the three distinct behaviors (whatsapp_card cleaning, call_back_booked, pick_a_call_back_time) and names siblings (start_booking, find_times, get_quote, booking_status) so an agent can distinguish it from alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-to-use routing: cleaning uses the WhatsApp card, any other service uses a call back, but 'every other service is booked online with start_booking's link, so do not offer the call back as a choice.' It also states exclusions (no emergency service) and the conditions selecting the call back (uncovered address, more_services, customer requests a call).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources