Tool tree
Reactive Salon & Spa appointment booking storefront with WebMCP tool registration (PR #498 pattern)
Implementation
gradeNot graded
gradeNot graded
salon.search_servicesAction
Search LuxeSalon & Spa treatments by keyword, category, or budget. Returns service IDs, pricing, duration, and descriptions. Updates the catalog UI reactively.
View tool JSON
{
"name": "salon.search_services",
"kind": "act",
"impl": "imperative",
"description": "Search LuxeSalon & Spa treatments by keyword, category, or budget. Returns service IDs, pricing, duration, and descriptions. Updates the catalog UI reactively.",
"inputSchema": {
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "Keyword to search for salon treatments (e.g. 'haircut', 'facial', 'color', 'massage', 'nails')."
},
"category": {
"type": "string",
"enum": [
"all",
"hair",
"skin",
"massage",
"nails"
],
"description": "Filter treatments by service category."
},
"maxPrice": {
"type": "number",
"minimum": 0,
"description": "Upper price limit in USD."
}
},
"additionalProperties": false
}
}salon.get_available_slotsAction
Look up available time slots and designated specialists for a service on a given date. Returns slot IDs required for booking. Updates the calendar UI view.
View tool JSON
{
"name": "salon.get_available_slots",
"kind": "act",
"impl": "imperative",
"description": "Look up available time slots and designated specialists for a service on a given date. Returns slot IDs required for booking. Updates the calendar UI view.",
"inputSchema": {
"type": "object",
"properties": {
"serviceId": {
"type": "string",
"minLength": 1,
"description": "Unique ID of the salon service (e.g., 'hair-cut-style', 'hydra-glow-facial', 'hair-balayage-color'). Must be obtained from salon.search_services."
},
"date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Target appointment date in YYYY-MM-DD format (e.g. '2026-09-05')."
},
"stylistId": {
"type": "string",
"description": "Optional specialist handle (e.g. 'alex-vance', 'elena-rostova') if the client requests a specific stylist."
}
},
"required": [
"serviceId"
],
"additionalProperties": false
}
}salon.book_appointmentSensitive Action
Propose an appointment booking. Surfaces a pending confirmation modal in the storefront UI for human user approval. Resolves once user confirms or declines.
View tool JSON
{
"name": "salon.book_appointment",
"kind": "transact",
"impl": "imperative",
"description": "Propose an appointment booking. Surfaces a pending confirmation modal in the storefront UI for human user approval. Resolves once user confirms or declines.",
"inputSchema": {
"type": "object",
"properties": {
"serviceId": {
"type": "string",
"minLength": 1,
"description": "Service ID from salon.search_services (e.g., 'hair-cut-style')."
},
"slotId": {
"type": "string",
"minLength": 1,
"description": "Exact slot ID returned by salon.get_available_slots (e.g., 'slot-2026-09-05-1100-alex-vance')."
},
"date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Appointment date in YYYY-MM-DD format."
},
"clientName": {
"type": "string",
"minLength": 2,
"maxLength": 100,
"description": "Full name of the client receiving the service."
},
"clientPhone": {
"type": "string",
"minLength": 7,
"maxLength": 25,
"description": "Client phone number for booking confirmation and SMS reminders."
},
"notes": {
"type": "string",
"maxLength": 500,
"description": "Optional requests, hair/skin allergies, or styling preferences."
}
},
"required": [
"serviceId",
"slotId",
"date",
"clientName",
"clientPhone"
],
"additionalProperties": false
}
}salon.get_booking_statusAnswer
Retrieve details and status for an existing appointment by booking reference code or client phone number. Opens the appointments list for the customer.
View tool JSON
{
"name": "salon.get_booking_status",
"kind": "answer",
"impl": "imperative",
"description": "Retrieve details and status for an existing appointment by booking reference code or client phone number. Opens the appointments list for the customer.",
"inputSchema": {
"type": "object",
"properties": {
"bookingReference": {
"type": "string",
"description": "The confirmation reference code (e.g. 'LUXE-9412') provided when the appointment was booked."
},
"clientPhone": {
"type": "string",
"description": "The phone number used during booking to search customer reservations."
}
},
"additionalProperties": false
}
}