{"name":"Bookwise","version":"1.1.0","documentation":"https://bookwise.live/docs","transport":"streamable-http","directoryEndpoint":"https://bookwise.live/api/mcp","businessEndpointTemplate":"https://bookwise.live/api/b/{slug}/mcp","businessEndpointDeprecated":true,"businessSelection":"Pass a business ID or booking-page slug as businessId on the directory endpoint.","tools":[{"name":"search_businesses","title":"Search businesses","description":"Searches published hotels, restaurants and salons by free-text query, location, type and optional date. Returns up to 10 businesses with price-from, distance and booking links. Results are not sponsored.","inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"query":{"type":"string","minLength":1,"maxLength":300,"description":"query: what the customer is looking for, e.g. \"quiet guesthouse near the beach\""},"location":{"anyOf":[{"type":"object","properties":{"lat":{"type":"number","minimum":-90,"maximum":90,"description":"lat: latitude in decimal degrees, e.g. 7.2213"},"lng":{"type":"number","minimum":-180,"maximum":180,"description":"lng: longitude in decimal degrees, e.g. 79.8406"},"radiusKm":{"default":25,"description":"radiusKm: search radius in kilometres, e.g. 10","type":"number","exclusiveMinimum":0,"maximum":500}},"required":["lat","lng"]},{"type":"object","properties":{"city":{"type":"string","minLength":1,"maxLength":100,"description":"city: city name, e.g. \"Negombo\""},"country":{"description":"country: optional ISO 3166-1 alpha-2 code, e.g. \"LK\"","type":"string","minLength":2,"maxLength":2}},"required":["city"]}]},"vertical":{"description":"vertical: optional business type: hotel, restaurant or salon","type":"string","enum":["hotel","restaurant","salon"]},"date":{"description":"date: optional local date to check availability for, YYYY-MM-DD, e.g. \"2026-11-14\"","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"partySize":{"description":"partySize: optional number of people (restaurants) or guests (hotels), e.g. 2","type":"integer","minimum":1,"maximum":50},"limit":{"default":10,"description":"limit: maximum results, 1–10","type":"integer","minimum":1,"maximum":10}},"required":["query"]},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"results":{"type":"array","items":{"type":"object","properties":{"businessId":{"type":"string"},"name":{"type":"string"},"sponsored":{"type":"boolean"}},"required":["businessId","name","sponsored"],"additionalProperties":{}}}},"required":["results"],"additionalProperties":{}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"category":"Discovery & availability","scope":"Directory only","authentication":"As specified in parameters"},{"name":"get_business","title":"Get business details","description":"Returns a business's profile, location, opening hours, policies (structured and readable), offerings summary, the JSON Schema for its booking parameters, its booking page URL and its MCP endpoint URL.","inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"businessId":{"type":"string","minLength":1,"description":"businessId: a business ID from search_businesses, e.g. \"biz_01j…\", or the business's booking-page slug, e.g. \"studio-nine\""}},"required":["businessId"]},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"businessId":{"type":"string"},"name":{"type":"string"},"bookingParamsSchema":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["businessId","name","bookingParamsSchema"],"additionalProperties":{}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"category":"Discovery & availability","scope":"Directory + business","authentication":"As specified in parameters"},{"name":"list_offerings","title":"List offerings","description":"Lists a business's bookable offerings (room types, table areas or services) with attributes, prices and real photos. Supports simple filters and pagination.","inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"businessId":{"type":"string","minLength":1,"description":"businessId: a business ID from search_businesses, e.g. \"biz_01j…\", or the business's booking-page slug, e.g. \"studio-nine\""},"maxPriceMinor":{"description":"maxPriceMinor: optional maximum base price in minor units, e.g. 15000 for 150.00","type":"integer","minimum":0,"maximum":9007199254740991},"minCapacity":{"description":"minCapacity: optional minimum number of guests the offering must fit, e.g. 2","type":"integer","minimum":1,"maximum":9007199254740991},"cursor":{"description":"cursor: pagination cursor from a previous call's nextCursor","type":"string"}},"required":["businessId"]},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"offerings":{"type":"array","items":{"type":"object","properties":{"offeringId":{"type":"string"},"name":{"type":"string"}},"required":["offeringId","name"],"additionalProperties":{}}},"nextCursor":{"type":["string","null"]}},"required":["offerings","nextCursor"],"additionalProperties":{}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"category":"Discovery & availability","scope":"Directory + business","authentication":"As specified in parameters"},{"name":"check_availability","title":"Check availability","description":"Checks live availability for the given booking parameters, optionally for one offering. Returns available options with total prices and up to 3 alternatives when the request can't be met.","inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"businessId":{"type":"string","minLength":1,"description":"businessId: a business ID from search_businesses, e.g. \"biz_01j…\", or the business's booking-page slug, e.g. \"studio-nine\""},"offeringId":{"type":"string","minLength":1,"description":"offeringId: an offering ID from list_offerings or get_business, e.g. \"off_01j…\""},"params":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{},"description":"params: booking parameters matching the business's bookingParamsSchema from get_business"}},"required":["businessId","params"]},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"available":{"type":"boolean"},"options":{"type":"array","items":{"type":"object","properties":{"optionId":{"type":"string"},"offeringId":{"type":"string"},"offeringName":{"type":"string"},"start":{"type":"string"},"end":{"type":"string"},"total":{"type":"object","properties":{"amountMinor":{"type":"number"},"currency":{"type":"string"},"formatted":{"type":"string"}},"required":["amountMinor","currency","formatted"],"additionalProperties":false},"bookingPageUrl":{"type":"string"}},"required":["optionId","offeringId","offeringName","start","end","total","bookingPageUrl"],"additionalProperties":{}}},"alternatives":{"type":"array","items":{"type":"object","properties":{"optionId":{"type":"string"},"offeringId":{"type":"string"},"offeringName":{"type":"string"},"start":{"type":"string"},"end":{"type":"string"},"total":{"type":"object","properties":{"amountMinor":{"type":"number"},"currency":{"type":"string"},"formatted":{"type":"string"}},"required":["amountMinor","currency","formatted"],"additionalProperties":false},"bookingPageUrl":{"type":"string"}},"required":["optionId","offeringId","offeringName","start","end","total","bookingPageUrl"],"additionalProperties":{}}},"message":{"type":"string"}},"required":["available","options","alternatives"],"additionalProperties":{}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"category":"Discovery & availability","scope":"Directory + business","authentication":"As specified in parameters"},{"name":"get_quote","title":"Get quote","description":"Returns the exact price breakdown for one option from check_availability: base price, seasonal adjustments, fees, taxes, deposit due and cancellation terms.","inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"businessId":{"type":"string","minLength":1,"description":"businessId: a business ID from search_businesses, e.g. \"biz_01j…\", or the business's booking-page slug, e.g. \"studio-nine\""},"optionId":{"type":"string","minLength":1,"description":"optionId: an option ID returned by check_availability, e.g. \"opt_eyJ…\""},"params":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{},"description":"params: booking parameters matching the business's bookingParamsSchema from get_business"}},"required":["businessId","optionId","params"]},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"optionId":{"type":"string"},"quote":{"type":"object","properties":{"total":{"type":"object","properties":{"amountMinor":{"type":"number"},"currency":{"type":"string"},"formatted":{"type":"string"}},"required":["amountMinor","currency","formatted"],"additionalProperties":false},"depositDue":{"type":"object","properties":{"amountMinor":{"type":"number"},"currency":{"type":"string"},"formatted":{"type":"string"}},"required":["amountMinor","currency","formatted"],"additionalProperties":false}},"required":["total","depositDue"],"additionalProperties":{}}},"required":["optionId","quote"],"additionalProperties":{}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"category":"Discovery & availability","scope":"Directory + business","authentication":"As specified in parameters"},{"name":"create_hold","title":"Hold an option","description":"Temporarily reserves one option (by optionId, or the first available option for params) for a few minutes so the customer can confirm. Returns holdId, expiresAt, the quote and the next step. Does not charge or message the customer.","inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"businessId":{"type":"string","minLength":1,"description":"businessId: a business ID from search_businesses, e.g. \"biz_01j…\", or the business's booking-page slug, e.g. \"studio-nine\""},"optionId":{"type":"string","minLength":1,"description":"optionId: an option ID returned by check_availability, e.g. \"opt_eyJ…\""},"offeringId":{"type":"string","minLength":1,"description":"offeringId: an offering ID from list_offerings or get_business, e.g. \"off_01j…\""},"params":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{},"description":"params: booking parameters matching the business's bookingParamsSchema from get_business"},"customer":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":120,"description":"name: customer full name, e.g. \"Asha Perera\""},"phone":{"type":"string","pattern":"^\\+[1-9]\\d{6,14}$","description":"phone: customer mobile number in E.164 format, e.g. \"+94771234567\""},"email":{"type":"string","format":"email","pattern":"^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$","description":"email: customer email address, e.g. \"asha@example.com\""}},"required":["name"],"description":"customer: who the hold is for; phone/email are optional at this step"},"idempotencyKey":{"type":"string","minLength":8,"maxLength":200,"description":"idempotencyKey: a unique string you generate per intended action (e.g. a UUID); retries with the same key return the same result"}},"required":["businessId","params","customer","idempotencyKey"]},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"holdId":{"type":"string"},"holdToken":{"type":"string","description":"Secret for get_booking_progress, release_hold and resend_verification_code. Store securely."},"status":{"type":"string","const":"held"},"expiresAt":{"type":"string"},"nextStep":{"type":"string"}},"required":["holdId","holdToken","status","expiresAt","nextStep"],"additionalProperties":{}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"category":"Booking management","scope":"Directory + business","authentication":"As specified in parameters"},{"name":"confirm_booking","title":"Confirm a booking","description":"Confirms a hold with the customer's contact details. Depending on the business's policies this sends a 6-digit verification code to the customer by WhatsApp, SMS or email, returns a payment link for a deposit, asks the business for approval, or confirms immediately.","inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"holdId":{"type":"string","minLength":1,"description":"holdId: the holdId returned by create_hold, e.g. \"bkg_01j…\""},"customer":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":120,"description":"name: customer full name, e.g. \"Asha Perera\""},"phone":{"type":"string","pattern":"^\\+[1-9]\\d{6,14}$","description":"phone: customer mobile number in E.164 format, e.g. \"+94771234567\""},"email":{"type":"string","format":"email","pattern":"^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$","description":"email: customer email address, e.g. \"asha@example.com\""},"marketingConsent":{"description":"marketingConsent: true only if the customer explicitly agreed to receive offers from this business","type":"boolean"}},"required":["name"],"description":"customer: contact details; a phone (E.164) or email is required to send the verification code"},"idempotencyKey":{"type":"string","minLength":8,"maxLength":200,"description":"idempotencyKey: a unique string you generate per intended action (e.g. a UUID); retries with the same key return the same result"}},"required":["holdId","customer","idempotencyKey"]},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"bookingId":{"type":"string"},"status":{"type":"string","enum":["held","pending_verification","pending_payment","pending_approval","confirmed","cancelled","expired","no_show","completed"]},"nextStep":{"type":"string"},"message":{"type":"string"},"accessToken":{"description":"Returned once after verification or when verification is not required. Store securely for booking management.","type":"string"},"total":{"type":"object","properties":{"amountMinor":{"type":"number"},"currency":{"type":"string"},"formatted":{"type":"string"}},"required":["amountMinor","currency","formatted"],"additionalProperties":false},"depositDue":{"type":"object","properties":{"amountMinor":{"type":"number"},"currency":{"type":"string"},"formatted":{"type":"string"}},"required":["amountMinor","currency","formatted"],"additionalProperties":false},"paymentUrl":{"description":"Customer must open this URL to pay; do not collect payment credentials in chat.","type":"string"},"expiresAt":{"type":"string"},"verification":{"type":"object","properties":{"channel":{"type":"string"},"destination":{"type":"string"},"expiresAt":{"type":"string"}},"required":["channel","destination","expiresAt"],"additionalProperties":false}},"required":["bookingId","status","nextStep","message","total","depositDue"],"additionalProperties":{}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"category":"Booking management","scope":"Directory + business","authentication":"As specified in parameters"},{"name":"verify_booking","title":"Verify a booking","description":"Submits the 6-digit code the customer received. On success the booking moves to its next step (payment, business approval or confirmed) and an accessToken is returned once. At most 5 attempts per hold.","inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"holdId":{"type":"string","minLength":1,"description":"holdId: the holdId returned by create_hold, e.g. \"bkg_01j…\""},"code":{"description":"code: the 6-digit code the customer received, as a string, e.g. \"482913\"","type":["string","number"]}},"required":["holdId","code"]},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"bookingId":{"type":"string"},"status":{"type":"string","enum":["held","pending_verification","pending_payment","pending_approval","confirmed","cancelled","expired","no_show","completed"]},"nextStep":{"type":"string"},"message":{"type":"string"},"accessToken":{"description":"Returned once after verification or when verification is not required. Store securely for booking management.","type":"string"},"total":{"type":"object","properties":{"amountMinor":{"type":"number"},"currency":{"type":"string"},"formatted":{"type":"string"}},"required":["amountMinor","currency","formatted"],"additionalProperties":false},"depositDue":{"type":"object","properties":{"amountMinor":{"type":"number"},"currency":{"type":"string"},"formatted":{"type":"string"}},"required":["amountMinor","currency","formatted"],"additionalProperties":false},"paymentUrl":{"description":"Customer must open this URL to pay; do not collect payment credentials in chat.","type":"string"},"expiresAt":{"type":"string"},"verification":{"type":"object","properties":{"channel":{"type":"string"},"destination":{"type":"string"},"expiresAt":{"type":"string"}},"required":["channel","destination","expiresAt"],"additionalProperties":false}},"required":["bookingId","status","nextStep","message","total","depositDue"],"additionalProperties":{}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"category":"Booking management","scope":"Directory + business","authentication":"As specified in parameters"},{"name":"get_booking","title":"Get a booking","description":"Returns a booking's status and details. Requires the bookingId and the accessToken issued when it was confirmed.","inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"bookingId":{"type":"string","minLength":1,"description":"bookingId: the booking ID (same as the holdId), e.g. \"bkg_01j…\""},"accessToken":{"type":"string","minLength":10,"description":"accessToken: secret returned after verification, immediate confirmation, or recover_booking_access; also works while awaiting payment or approval"}},"required":["bookingId","accessToken"]},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"bookingId":{"type":"string"},"status":{"type":"string"},"start":{"type":"string"},"end":{"type":"string"},"total":{"type":"object","properties":{"amountMinor":{"type":"number"},"currency":{"type":"string"},"formatted":{"type":"string"}},"required":["amountMinor","currency","formatted"],"additionalProperties":false}},"required":["bookingId","status","start","end","total"],"additionalProperties":{}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"category":"Booking management","scope":"Directory + business","authentication":"As specified in parameters"},{"name":"cancel_booking","title":"Cancel a booking","description":"Cancels a booking and applies the business's cancellation policy. Returns whether cancellation was free, any fee, and any refund. Notifies the business. This cannot be undone.","inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"bookingId":{"type":"string","minLength":1,"description":"bookingId: the booking ID (same as the holdId), e.g. \"bkg_01j…\""},"accessToken":{"type":"string","minLength":10,"description":"accessToken: secret returned after verification, immediate confirmation, or recover_booking_access; also works while awaiting payment or approval"},"reason":{"description":"reason: optional short reason, e.g. \"plans changed\"","type":"string","maxLength":500}},"required":["bookingId","accessToken"]},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"bookingId":{"type":"string"},"status":{"type":"string","const":"cancelled"},"fee":{"type":"object","properties":{"amountMinor":{"type":"number"},"currency":{"type":"string"},"formatted":{"type":"string"}},"required":["amountMinor","currency","formatted"],"additionalProperties":false},"refund":{"type":"object","properties":{"amountMinor":{"type":"number"},"currency":{"type":"string"},"formatted":{"type":"string"}},"required":["amountMinor","currency","formatted"],"additionalProperties":false}},"required":["bookingId","status","fee","refund"],"additionalProperties":{}},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true,"openWorldHint":true},"category":"Booking management","scope":"Directory + business","authentication":"As specified in parameters"},{"name":"reschedule_booking","title":"reschedule booking","description":"Preview or apply a replacement for a confirmed future booking. First call mode=preview with new params. Show the quote and priceDifference to the customer. After acceptance, call mode=apply with the returned optionId, acceptedTotalMinor, acceptedCurrency and a new idempotencyKey. Original booking is preserved on failure. Changes requiring a deposit adjustment/refund must be arranged with the business.","inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"bookingId":{"type":"string","minLength":1,"description":"Parent booking ID from create_hold (holdId), confirm_booking, or list_bookings. Never pass a child allocation ID."},"accessToken":{"type":"string","minLength":10,"description":"Secret accessToken returned after verification/confirmation or access recovery. Never invent or expose it publicly."},"params":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{},"description":"Booking parameters from get_business.bookingParamsSchema. Hotel: checkIn/checkOut YYYY-MM-DD, adults. Restaurant: date, time HH:mm, partySize. Salon: offeringId, date, optional time/staffId. Dates and times use the business timezone."},"offeringId":{"type":"string","minLength":1,"description":"Offering ID from list_offerings, belonging to this business."},"optionId":{"type":"string","minLength":1,"description":"Exact opaque optionId returned by an availability call or reschedule preview; pass unchanged."},"mode":{"default":"preview","description":"preview reads the replacement and price; apply changes it only after customer acceptance.","type":"string","enum":["preview","apply"]},"acceptedTotalMinor":{"description":"Required for apply: exact quote.total.amountMinor from preview, in minor currency units.","type":"integer","minimum":0,"maximum":9007199254740991},"acceptedCurrency":{"description":"Required for apply: quote.total.currency from preview, e.g. LKR.","type":"string","minLength":3,"maxLength":3},"idempotencyKey":{"type":"string","minLength":8,"maxLength":200,"description":"Generate a UUID per intended mutation. Reuse the same key and identical parameters only when retrying that action."}},"required":["bookingId","accessToken","params"]},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"bookingId":{"type":"string"},"applied":{"type":"boolean"},"option":{"type":"object","properties":{"optionId":{"type":"string"},"offeringId":{"type":"string"},"offeringName":{"type":"string"},"start":{"type":"string"},"end":{"type":"string"},"params":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"total":{"type":"object","properties":{"amountMinor":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"currency":{"type":"string"},"formatted":{"type":"string"}},"required":["amountMinor","currency","formatted"],"additionalProperties":false},"priceIsFrom":{"type":"boolean"},"bookingPageUrl":{"type":"string"}},"required":["optionId","offeringId","offeringName","start","end","params","total","priceIsFrom","bookingPageUrl"],"additionalProperties":false},"quote":{"type":"object","properties":{"currency":{"type":"string"},"lines":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"amountMinor":{"type":"number"},"formatted":{"type":"string"},"kind":{"type":"string"}},"required":["label","amountMinor","formatted","kind"],"additionalProperties":false}},"subtotal":{"type":"object","properties":{"amountMinor":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"currency":{"type":"string"},"formatted":{"type":"string"}},"required":["amountMinor","currency","formatted"],"additionalProperties":false},"fees":{"type":"object","properties":{"amountMinor":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"currency":{"type":"string"},"formatted":{"type":"string"}},"required":["amountMinor","currency","formatted"],"additionalProperties":false},"taxes":{"type":"object","properties":{"amountMinor":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"currency":{"type":"string"},"formatted":{"type":"string"}},"required":["amountMinor","currency","formatted"],"additionalProperties":false},"total":{"type":"object","properties":{"amountMinor":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"currency":{"type":"string"},"formatted":{"type":"string"}},"required":["amountMinor","currency","formatted"],"additionalProperties":false},"depositDue":{"type":"object","properties":{"amountMinor":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"currency":{"type":"string"},"formatted":{"type":"string"}},"required":["amountMinor","currency","formatted"],"additionalProperties":false},"priceIsFrom":{"type":"boolean"},"units":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"cancellation":{"type":"object","properties":{"freeUntil":{"type":["string","null"]},"summary":{"type":"string"}},"required":["freeUntil","summary"],"additionalProperties":false}},"required":["currency","lines","subtotal","fees","taxes","total","depositDue","priceIsFrom","units","cancellation"],"additionalProperties":false},"priceDifference":{"type":"object","properties":{"amountMinor":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"currency":{"type":"string"},"formatted":{"type":"string"}},"required":["amountMinor","currency","formatted"],"additionalProperties":false},"nextStep":{"type":"string"}},"required":["bookingId","applied","option","quote","priceDifference","nextStep"],"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true,"openWorldHint":true},"category":"Booking management","scope":"Directory + business","authentication":"As specified in parameters"},{"name":"get_cancellation_quote","title":"get cancellation quote","description":"Read the fee and refund that would apply if this booking were cancelled now. Does not cancel it. Show the preview before calling cancel_booking; the actual fee can change at the policy deadline.","inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"bookingId":{"type":"string","minLength":1,"description":"Parent booking ID from create_hold (holdId), confirm_booking, or list_bookings. Never pass a child allocation ID."},"accessToken":{"type":"string","minLength":10,"description":"Secret accessToken returned after verification/confirmation or access recovery. Never invent or expose it publicly."}},"required":["bookingId","accessToken"]},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"bookingId":{"type":"string"},"freeCancellation":{"type":"boolean"},"fee":{"type":"object","properties":{"amountMinor":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"currency":{"type":"string"},"formatted":{"type":"string"}},"required":["amountMinor","currency","formatted"],"additionalProperties":false},"refund":{"type":"object","properties":{"amountMinor":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"currency":{"type":"string"},"formatted":{"type":"string"}},"required":["amountMinor","currency","formatted"],"additionalProperties":false},"calculatedAt":{"type":"string"},"nextStep":{"type":"string"}},"required":["bookingId","freeCancellation","fee","refund","calculatedAt","nextStep"],"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"category":"Booking management","scope":"Directory + business","authentication":"As specified in parameters"},{"name":"release_hold","title":"release hold","description":"Release an unpaid held/pending-verification reservation immediately using its holdToken. Frees capacity without charging or messaging. For verified bookings use get_cancellation_quote then cancel_booking.","inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"bookingId":{"type":"string","minLength":1,"description":"Parent booking ID from create_hold (holdId), confirm_booking, or list_bookings. Never pass a child allocation ID."},"holdToken":{"type":"string","minLength":10,"description":"Secret holdToken returned by create_hold, used before customer verification."},"idempotencyKey":{"type":"string","minLength":8,"maxLength":200,"description":"Generate a UUID per intended mutation. Reuse the same key and identical parameters only when retrying that action."}},"required":["bookingId","holdToken","idempotencyKey"]},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"bookingId":{"type":"string"},"status":{"type":"string","const":"expired"},"message":{"type":"string"}},"required":["bookingId","status","message"],"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true,"openWorldHint":false},"category":"Booking management","scope":"Directory + business","authentication":"As specified in parameters"},{"name":"resend_verification_code","title":"resend verification code","description":"Resend a booking code to the contact already on an active hold. Requires holdToken. Wait 60 seconds between sends; at most 3 resends. Does not extend the hold or reset guessing attempts. Ask the customer for the new code, then call verify_booking.","inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"bookingId":{"type":"string","minLength":1,"description":"Parent booking ID from create_hold (holdId), confirm_booking, or list_bookings. Never pass a child allocation ID."},"holdToken":{"type":"string","minLength":10,"description":"Secret holdToken returned by create_hold, used before customer verification."},"idempotencyKey":{"type":"string","minLength":8,"maxLength":200,"description":"Generate a UUID per intended mutation. Reuse the same key and identical parameters only when retrying that action."}},"required":["bookingId","holdToken","idempotencyKey"]},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"bookingId":{"type":"string"},"channel":{"type":"string"},"expiresAt":{"type":"string"},"nextStep":{"type":"string"}},"required":["bookingId","channel","expiresAt","nextStep"],"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"category":"Booking management","scope":"Directory + business","authentication":"As specified in parameters"},{"name":"get_booking_progress","title":"get booking progress","description":"Read status and nextStep using holdToken before verification or accessToken afterward. A hold token never returns a payment URL or personal details. Use this while waiting for verification, payment or business approval.","inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"bookingId":{"type":"string","minLength":1,"description":"Parent booking ID from create_hold (holdId), confirm_booking, or list_bookings. Never pass a child allocation ID."},"accessToken":{"type":"string","minLength":10,"description":"Secret accessToken returned after verification/confirmation or access recovery. Never invent or expose it publicly."},"holdToken":{"type":"string","minLength":10,"description":"Secret holdToken returned by create_hold, used before customer verification."}},"required":["bookingId"]},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"bookingId":{"type":"string"},"status":{"type":"string","enum":["held","pending_verification","pending_payment","pending_approval","confirmed","cancelled","expired","no_show","completed"]},"nextStep":{"type":"string"},"expiresAt":{"type":["string","null"]},"paymentUrl":{"type":["string","null"]}},"required":["bookingId","status","nextStep","expiresAt","paymentUrl"],"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"category":"Booking management","scope":"Directory + business","authentication":"As specified in parameters"},{"name":"search_available_businesses","title":"search available businesses","description":"Search the top 10 matching published businesses and check live availability with exact booking requirements. Requires vertical and matching params. Salon searches may omit offeringId to search each business's services. Returns bookable options, without reserving capacity.","inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"query":{"type":"string","minLength":1,"maxLength":300,"description":"query: what the customer is looking for, e.g. \"quiet guesthouse near the beach\""},"location":{"description":"Optional city/country or latitude/longitude/radiusKm search area.","anyOf":[{"type":"object","properties":{"lat":{"type":"number","minimum":-90,"maximum":90,"description":"lat: latitude in decimal degrees, e.g. 7.2213"},"lng":{"type":"number","minimum":-180,"maximum":180,"description":"lng: longitude in decimal degrees, e.g. 79.8406"},"radiusKm":{"default":25,"description":"radiusKm: search radius in kilometres, e.g. 10","type":"number","exclusiveMinimum":0,"maximum":500}},"required":["lat","lng"]},{"type":"object","properties":{"city":{"type":"string","minLength":1,"maxLength":100,"description":"city: city name, e.g. \"Negombo\""},"country":{"description":"country: optional ISO 3166-1 alpha-2 code, e.g. \"LK\"","type":"string","minLength":2,"maxLength":2}},"required":["city"]}]},"vertical":{"type":"string","enum":["hotel","restaurant","salon"],"description":"Required so params have one unambiguous booking model."},"limit":{"default":10,"description":"limit: maximum results, 1–10","type":"integer","minimum":1,"maximum":10},"params":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{},"description":"Booking parameters from get_business.bookingParamsSchema. Hotel: checkIn/checkOut YYYY-MM-DD, adults. Restaurant: date, time HH:mm, partySize. Salon: offeringId, date, optional time/staffId. Dates and times use the business timezone."}},"required":["query","vertical","params"]},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"results":{"type":"array","items":{"type":"object","properties":{"businessId":{"type":"string"},"name":{"type":"string"},"options":{"type":"array","items":{"type":"object","properties":{"optionId":{"type":"string"},"offeringId":{"type":"string"},"offeringName":{"type":"string"},"start":{"type":"string"},"end":{"type":"string"},"params":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"total":{"type":"object","properties":{"amountMinor":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"currency":{"type":"string"},"formatted":{"type":"string"}},"required":["amountMinor","currency","formatted"],"additionalProperties":false},"priceIsFrom":{"type":"boolean"},"bookingPageUrl":{"type":"string"}},"required":["optionId","offeringId","offeringName","start","end","params","total","priceIsFrom","bookingPageUrl"],"additionalProperties":false}}},"required":["businessId","name","options"],"additionalProperties":{}}},"candidatesChecked":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"message":{"type":"string"}},"required":["results","candidatesChecked","message"],"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"category":"Discovery & availability","scope":"Directory only","authentication":"As specified in parameters"},{"name":"get_availability_calendar","title":"get availability calendar","description":"Compare available options and starting prices across an inclusive range of up to 31 local dates. Supply non-date booking params; each day replaces date/checkIn/checkOut. For hotels nights is the stay length. For restaurants supply time and partySize; for salons supply offeringId.","inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"offeringId":{"type":"string","minLength":1,"description":"Offering ID from list_offerings, belonging to this business."},"fromDate":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$","description":"First local date, inclusive, YYYY-MM-DD."},"toDate":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$","description":"Last local date, inclusive, at most 30 days after fromDate."},"nights":{"default":1,"description":"Hotel stay length for each candidate check-in date; ignored for other verticals.","type":"integer","minimum":1,"maximum":30},"params":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{},"description":"Non-date parameters such as adults, partySize/time, or salon offeringId/staffId. Calendar dates replace date/checkIn/checkOut."},"businessId":{"type":"string","minLength":1,"description":"Published business ID from search_businesses, or the business's booking-page slug (e.g. \"studio-nine\"); owner calls may also use the business ID shown in the dashboard."}},"required":["fromDate","toDate","params","businessId"]},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"businessId":{"type":"string"},"timezone":{"type":"string"},"days":{"type":"array","items":{"type":"object","properties":{"date":{"type":"string"},"available":{"type":"boolean"},"priceFrom":{"anyOf":[{"type":"object","properties":{"amountMinor":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"currency":{"type":"string"},"formatted":{"type":"string"}},"required":["amountMinor","currency","formatted"],"additionalProperties":false},{"type":"null"}]},"options":{"type":"array","items":{"type":"object","properties":{"optionId":{"type":"string"},"offeringId":{"type":"string"},"offeringName":{"type":"string"},"start":{"type":"string"},"end":{"type":"string"},"params":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"total":{"type":"object","properties":{"amountMinor":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"currency":{"type":"string"},"formatted":{"type":"string"}},"required":["amountMinor","currency","formatted"],"additionalProperties":false},"priceIsFrom":{"type":"boolean"},"bookingPageUrl":{"type":"string"}},"required":["optionId","offeringId","offeringName","start","end","params","total","priceIsFrom","bookingPageUrl"],"additionalProperties":false}}},"required":["date","available","priceFrom","options"],"additionalProperties":false}}},"required":["businessId","timezone","days"],"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"category":"Discovery & availability","scope":"Directory + business","authentication":"As specified in parameters"},{"name":"update_booking_details","title":"update booking details","description":"Update the guest name and/or special requests on an active verified booking. Empty notes clears requests. Does not alter dates, prices, verified contact details, or other bookings belonging to this customer. Use reschedule_booking for dates or offerings.","inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"bookingId":{"type":"string","minLength":1,"description":"Parent booking ID from create_hold (holdId), confirm_booking, or list_bookings. Never pass a child allocation ID."},"accessToken":{"type":"string","minLength":10,"description":"Secret accessToken returned after verification/confirmation or access recovery. Never invent or expose it publicly."},"name":{"description":"New guest name for this booking only; does not rename the customer's other bookings.","type":"string","minLength":1,"maxLength":120},"notes":{"description":"Replace special requests/notes; empty string clears them. Requests are subject to business acceptance.","type":"string","maxLength":1000},"idempotencyKey":{"type":"string","minLength":8,"maxLength":200,"description":"Generate a UUID per intended mutation. Reuse the same key and identical parameters only when retrying that action."}},"required":["bookingId","accessToken","idempotencyKey"]},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"bookingId":{"type":"string"},"name":{"type":["string","null"]},"notes":{"type":["string","null"]},"status":{"type":"string","enum":["held","pending_verification","pending_payment","pending_approval","confirmed","cancelled","expired","no_show","completed"]}},"required":["bookingId","name","notes","status"],"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"category":"Booking management","scope":"Directory + business","authentication":"As specified in parameters"},{"name":"recover_booking_access","title":"recover booking access","description":"Recover a lost booking access token in two calls. request_code requires the existing booking contact; the response does not reveal whether it matches. verify_code requires the returned recoveryId and customer's 6-digit code. Success rotates the token, invalidating the old one. Codes expire in 10 minutes and allow at most 5 guesses.","inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"bookingId":{"type":"string","minLength":1,"description":"Parent booking ID from create_hold (holdId), confirm_booking, or list_bookings. Never pass a child allocation ID."},"action":{"type":"string","enum":["request_code","verify_code"],"description":"request_code sends a code to an existing matching contact; verify_code exchanges that code for a replacement accessToken."},"contact":{"description":"For request_code: existing booking email address or E.164 phone number.","type":"string","minLength":3,"maxLength":254},"recoveryId":{"description":"For verify_code: recoveryId from request_code.","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"code":{"description":"For verify_code: 6-digit code supplied by the customer. Expires after 10 minutes; at most 5 attempts.","anyOf":[{"type":"string"},{"type":"integer","minimum":0,"maximum":9007199254740991}]}},"required":["bookingId","action"]},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"bookingId":{"type":"string"},"recoveryId":{"type":"string"},"accessToken":{"type":"string"},"nextStep":{"type":"string"},"message":{"type":"string"}},"required":["bookingId","nextStep","message"],"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true},"category":"Booking management","scope":"Directory + business","authentication":"As specified in parameters"},{"name":"join_booking_waitlist","title":"join booking waitlist","description":"Subscribe the customer to one email when their requested option becomes available. Requires explicit customer intent to receive the alert. Does not reserve, pay, or auto-book. The entry expires after the requested local date. Separate from the business signup waitlist.","inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"offeringId":{"type":"string","minLength":1,"description":"Offering ID from list_offerings, belonging to this business."},"params":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{},"description":"Booking parameters from get_business.bookingParamsSchema. Hotel: checkIn/checkOut YYYY-MM-DD, adults. Restaurant: date, time HH:mm, partySize. Salon: offeringId, date, optional time/staffId. Dates and times use the business timezone."},"name":{"type":"string","minLength":1,"maxLength":120,"description":"Customer name for the availability notification."},"email":{"type":"string","format":"email","pattern":"^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$","description":"Customer email address for one requested availability notification; does not grant marketing consent."},"idempotencyKey":{"type":"string","minLength":8,"maxLength":200,"description":"Generate a UUID per intended mutation. Reuse the same key and identical parameters only when retrying that action."},"businessId":{"type":"string","minLength":1,"description":"Published business ID from search_businesses, or the business's booking-page slug (e.g. \"studio-nine\"); owner calls may also use the business ID shown in the dashboard."}},"required":["params","name","email","idempotencyKey","businessId"]},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"waitlistId":{"type":"string"},"status":{"type":"string","const":"waiting"},"expiresAt":{"type":"string"},"currentlyAvailable":{"type":"boolean"},"message":{"type":"string"}},"required":["waitlistId","status","expiresAt","currentlyAvailable","message"],"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"category":"Booking management","scope":"Directory + business","authentication":"As specified in parameters"},{"name":"list_bookings","title":"list bookings","description":"OWNER ONLY. List this owner's business bookings, optionally filtered by status, channel, customer name, booking ID or time window. Requires owner authentication. Returns parent bookings; from/to select overlapping stays or appointments.","inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"businessId":{"type":"string","minLength":1,"description":"Published business ID from search_businesses, or the business's booking-page slug (e.g. \"studio-nine\"); owner calls may also use the business ID shown in the dashboard."},"statuses":{"description":"Optional booking statuses to include.","maxItems":9,"type":"array","items":{"type":"string","enum":["held","pending_verification","pending_payment","pending_approval","confirmed","cancelled","expired","no_show","completed"]}},"channel":{"description":"Optional acquisition channel filter.","type":"string","enum":["mcp_directory","mcp_business","chatgpt_app","booking_page","owner_manual","api"]},"from":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"ISO 8601 timestamp including timezone offset, e.g. 2026-11-14T00:00:00+05:30."},"to":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"ISO 8601 timestamp including timezone offset, e.g. 2026-11-14T00:00:00+05:30."},"q":{"description":"Search booking ID or customer/guest name.","type":"string","maxLength":200},"limit":{"default":50,"description":"Maximum rows, 1–200, newest booking starts first.","type":"integer","minimum":1,"maximum":200}},"required":["businessId"]},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"bookings":{"type":"array","items":{"type":"object","properties":{"bookingId":{"type":"string"},"status":{"type":"string","enum":["held","pending_verification","pending_payment","pending_approval","confirmed","cancelled","expired","no_show","completed"]},"start":{"type":"string"},"end":{"type":"string"},"offeringName":{"type":["string","null"]},"guestName":{"type":["string","null"]},"total":{"type":"object","properties":{"amountMinor":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"currency":{"type":"string"},"formatted":{"type":"string"}},"required":["amountMinor","currency","formatted"],"additionalProperties":false},"channel":{"type":"string"}},"required":["bookingId","status","start","end","offeringName","guestName","total","channel"],"additionalProperties":false}},"limit":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["bookings","limit"],"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"category":"Owner operations","scope":"Directory + business","authentication":"Owner session"},{"name":"get_booking_detail","title":"get booking detail","description":"OWNER ONLY. Inspect one parent booking with customer contact, special requests, payments and status history. Requires ownership of businessId; customer access tokens are not used or returned.","inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"businessId":{"type":"string","minLength":1,"description":"Published business ID from search_businesses, or the business's booking-page slug (e.g. \"studio-nine\"); owner calls may also use the business ID shown in the dashboard."},"bookingId":{"type":"string","minLength":1,"description":"Parent booking ID from create_hold (holdId), confirm_booking, or list_bookings. Never pass a child allocation ID."}},"required":["businessId","bookingId"]},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"bookingId":{"type":"string"},"businessId":{"type":"string"},"status":{"type":"string","enum":["held","pending_verification","pending_payment","pending_approval","confirmed","cancelled","expired","no_show","completed"]},"start":{"type":"string"},"end":{"type":"string"},"guestName":{"type":["string","null"]},"notes":{"type":["string","null"]},"params":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"total":{"type":"object","properties":{"amountMinor":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"currency":{"type":"string"},"formatted":{"type":"string"}},"required":["amountMinor","currency","formatted"],"additionalProperties":false},"customer":{"anyOf":[{"type":"object","properties":{"name":{"type":"string"},"email":{"type":["string","null"]},"phone":{"type":["string","null"]}},"required":["name","email","phone"],"additionalProperties":false},{"type":"null"}]},"payments":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"status":{"type":"string"},"amountMinor":{"type":"number"},"currency":{"type":"string"}},"required":["id","status","amountMinor","currency"],"additionalProperties":false}},"events":{"type":"array","items":{"type":"object","properties":{"fromStatus":{"type":["string","null"]},"toStatus":{"type":"string"},"at":{"type":"string"},"actor":{"type":"string"}},"required":["fromStatus","toStatus","at","actor"],"additionalProperties":false}}},"required":["bookingId","businessId","status","start","end","guestName","notes","params","total","customer","payments","events"],"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"category":"Owner operations","scope":"Directory + business","authentication":"Owner session"},{"name":"approve_booking","title":"approve booking","description":"OWNER ONLY. Approve a booking awaiting business approval before its deadline. Requires business ownership and an idempotencyKey. Notifies the customer through the existing booking workflow.","inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"businessId":{"type":"string","minLength":1,"description":"Published business ID from search_businesses, or the business's booking-page slug (e.g. \"studio-nine\"); owner calls may also use the business ID shown in the dashboard."},"bookingId":{"type":"string","minLength":1,"description":"Parent booking ID from create_hold (holdId), confirm_booking, or list_bookings. Never pass a child allocation ID."},"idempotencyKey":{"type":"string","minLength":8,"maxLength":200,"description":"Generate a UUID per intended mutation. Reuse the same key and identical parameters only when retrying that action."}},"required":["businessId","bookingId","idempotencyKey"]},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"bookingId":{"type":"string"},"status":{"type":"string","enum":["held","pending_verification","pending_payment","pending_approval","confirmed","cancelled","expired","no_show","completed"]}},"required":["bookingId","status"],"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"category":"Owner operations","scope":"Directory + business","authentication":"Owner session"},{"name":"decline_booking","title":"decline booking","description":"OWNER ONLY. Decline a booking awaiting business approval before its deadline. Requires business ownership and an idempotencyKey. Notifies the customer through the existing booking workflow.","inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"businessId":{"type":"string","minLength":1,"description":"Published business ID from search_businesses, or the business's booking-page slug (e.g. \"studio-nine\"); owner calls may also use the business ID shown in the dashboard."},"bookingId":{"type":"string","minLength":1,"description":"Parent booking ID from create_hold (holdId), confirm_booking, or list_bookings. Never pass a child allocation ID."},"idempotencyKey":{"type":"string","minLength":8,"maxLength":200,"description":"Generate a UUID per intended mutation. Reuse the same key and identical parameters only when retrying that action."}},"required":["businessId","bookingId","idempotencyKey"]},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"bookingId":{"type":"string"},"status":{"type":"string","enum":["held","pending_verification","pending_payment","pending_approval","confirmed","cancelled","expired","no_show","completed"]}},"required":["bookingId","status"],"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true,"openWorldHint":true},"category":"Owner operations","scope":"Directory + business","authentication":"Owner session"},{"name":"mark_booking_outcome","title":"mark booking outcome","description":"OWNER ONLY. Mark a confirmed booking completed after its scheduled end or no_show after its scheduled start. Updates customer history and triggers the existing completion workflow. Requires ownership and a unique idempotencyKey.","inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"businessId":{"type":"string","minLength":1,"description":"Published business ID from search_businesses, or the business's booking-page slug (e.g. \"studio-nine\"); owner calls may also use the business ID shown in the dashboard."},"bookingId":{"type":"string","minLength":1,"description":"Parent booking ID from create_hold (holdId), confirm_booking, or list_bookings. Never pass a child allocation ID."},"outcome":{"type":"string","enum":["completed","no_show"],"description":"completed after service ended; no_show after the scheduled start when the customer did not attend."},"idempotencyKey":{"type":"string","minLength":8,"maxLength":200,"description":"Generate a UUID per intended mutation. Reuse the same key and identical parameters only when retrying that action."}},"required":["businessId","bookingId","outcome","idempotencyKey"]},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"bookingId":{"type":"string"},"status":{"type":"string","enum":["held","pending_verification","pending_payment","pending_approval","confirmed","cancelled","expired","no_show","completed"]}},"required":["bookingId","status"],"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"category":"Owner operations","scope":"Directory + business","authentication":"Owner session"},{"name":"get_business_calendar","title":"get business calendar","description":"OWNER ONLY. Read booking allocations, resources and calendar blocks overlapping an explicit window of at most 93 days. Timestamps must include UTC offsets. Requires business ownership. Calendar feed tokens and connection credentials are never returned.","inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"businessId":{"type":"string","minLength":1,"description":"Published business ID from search_businesses, or the business's booking-page slug (e.g. \"studio-nine\"); owner calls may also use the business ID shown in the dashboard."},"from":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"Window start inclusive, with UTC offset."},"to":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"Window end exclusive, with UTC offset. Maximum 93 days."}},"required":["businessId","from","to"]},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"businessId":{"type":"string"},"timezone":{"type":"string"},"resources":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"kind":{"type":"string"},"active":{"type":"boolean"}},"required":["id","name","kind","active"],"additionalProperties":false}},"bookings":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"parentBookingId":{"type":["string","null"]},"resourceId":{"type":"string"},"status":{"type":"string","enum":["held","pending_verification","pending_payment","pending_approval","confirmed","cancelled","expired","no_show","completed"]},"start":{"type":"string"},"end":{"type":"string"},"holderName":{"type":["string","null"]},"offeringName":{"type":["string","null"]}},"required":["id","parentBookingId","resourceId","status","start","end","holderName","offeringName"],"additionalProperties":false}},"blocks":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"resourceId":{"type":["string","null"]},"start":{"type":"string"},"end":{"type":"string"},"note":{"type":["string","null"]}},"required":["id","resourceId","start","end","note"],"additionalProperties":false}}},"required":["businessId","timezone","resources","bookings","blocks"],"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"category":"Owner operations","scope":"Directory + business","authentication":"Owner session"},{"name":"get_business_overview","title":"get business overview","description":"OWNER ONLY. Read booking totals, conversion, no-show rates and estimated commission savings for the last days (default 30). Money values use minor currency units; commission savings are estimates. Requires business ownership.","inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"businessId":{"type":"string","minLength":1,"description":"Published business ID from search_businesses, or the business's booking-page slug (e.g. \"studio-nine\"); owner calls may also use the business ID shown in the dashboard."},"days":{"default":30,"description":"Number of trailing days used for dashboard metrics, 1–366.","type":"integer","minimum":1,"maximum":366}},"required":["businessId"]},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"businessId":{"type":"string"},"currency":{"type":"string"},"timezone":{"type":"string"},"period":{"type":"object","properties":{"days":{"type":"number"},"since":{"type":"string"},"until":{"type":"string"}},"required":["days","since","until"],"additionalProperties":false},"totals":{"type":"object","properties":{"bookings":{"type":"number"},"confirmed":{"type":"number"}},"required":["bookings","confirmed"],"additionalProperties":false},"conversion":{"type":"object","properties":{"attempts":{"type":"number"},"converted":{"type":"number"},"rate":{"type":["number","null"]}},"required":["attempts","converted","rate"],"additionalProperties":false},"noShow":{"type":"object","properties":{"noShows":{"type":"number"},"finished":{"type":"number"},"rate":{"type":["number","null"]}},"required":["noShows","finished","rate"],"additionalProperties":false},"commission":{"type":"object","properties":{"bps":{"type":"number"},"directRevenueMinor":{"type":"number"},"estimatedSavedMinor":{"type":"number"},"currency":{"type":"string"}},"required":["bps","directRevenueMinor","estimatedSavedMinor","currency"],"additionalProperties":false}},"required":["businessId","currency","timezone","period","totals","conversion","noShow","commission"],"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"category":"Owner operations","scope":"Directory + business","authentication":"Owner session"}]}