MCP Server

smoobu

io.usefulapi/smoobu
Business & Operations Travel & Hospitality Public & reachable MCP 2026-07-28

What this MCP does

Manages vacation-rental properties, reservations, availability, rates, guest communications and channel-synchronized bookings.

smoobu_check_availability
Check availability and quote a stay
Check which properties can be booked for an arrival/departure pair and get the total price for each; unavailable ones come back with the reason (minimum stay, too many guests, arrival day, lead time...). Read-only, books nothing. Smoobu: POST /booking/checkApartmentAvailability.
Read only
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['arrival_date', 'departure_date'], 'properties': {'guests': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 1, 'description': 'Number of guests.'}, 'customer_id': {'type': 'integer', 'maximum': 9007199254740991, 'description': 'Your Smoobu user id. Omit to look it up automatically (one extra GET /api/me).', 'exclusiveMinimum': 0}, 'arrival_date': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$', 'description': 'Arrival date (yyyy-mm-dd).'}, 'apartment_ids': {'type': 'array', 'items': {'type': 'integer', 'maximum': 9007199254740991, 'exclusiveMinimum': 0}, 'description': 'Properties to check. Omit or pass [] to check all.'}, 'discount_code': {'type': 'string', 'description': 'Discount code from the booking-tool settings.'}, 'departure_date': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$', 'description': 'Departure date (yyyy-mm-dd).'}}}
smoobu_create_reservation
Create a reservation
Create a reservation (or a blocked period) on a property. Smoobu treats it like a booking from a channel and SYNCS the blocked dates to every connected channel (Airbnb, Booking.com, ...). Fails if the dates overlap an existing booking. This server offers no cancel — cancel it in Smoobu if needed. Which guest fields are mandatory depends on your booking-tool 'Form Content' settings. Smoobu: POST /api/reservations.
Destructive
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['apartment_id', 'arrival_date', 'departure_date'], 'properties': {'email': {'type': 'string', 'description': 'Guest email.'}, 'phone': {'type': 'string', 'description': 'Guest phone.'}, 'price': {'type': 'number', 'description': 'Total price of the booking.'}, 'adults': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Number of adults.'}, 'notice': {'type': 'string', 'description': 'Free-text notes on the booking.'}, 'address': {'type': 'object', 'properties': {'street': {'type': 'string'}, 'location': {'type': 'string', 'description': 'City / town.'}, 'postalCode': {'type': 'string'}}, 'description': 'Guest address.'}, 'country': {'type': 'string', 'description': 'Guest country.'}, 'deposit': {'type': 'number', 'description': 'Deposit amount.'}, 'children': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Number of children.'}, 'language': {'type': 'string', 'description': 'Guest language, e.g. en, de, es.'}, 'last_name': {'type': 'string', 'description': 'Guest last name.'}, 'channel_id': {'type': 'integer', 'maximum': 9007199254740991, 'description': 'Channel id (defaults to 70). Must be a channel the account has, e.g. 13 = Direct booking, 11 = Blocked channel.', 'exclusiveMinimum': 0}, 'first_name': {'type': 'string', 'description': 'Guest first name.'}, 'prepayment': {'type': 'number', 'description': 'Prepayment amount.'}, 'apartment_id': {'type': 'integer', 'maximum': 9007199254740991, 'description': 'The property id.', 'exclusiveMinimum': 0}, 'arrival_date': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$', 'description': 'Arrival date (yyyy-mm-dd).'}, 'arrival_time': {'type': 'string', 'pattern': '^\\d{2}:\\d{2}$', 'description': 'Arrival time (HH:mm, 24h).'}, 'price_status': {'anyOf': [{'type': 'number', 'const': 0}, {'type': 'number', 'const': 1}], 'description': 'Price status: 0 = open / not paid, 1 = paid in full.'}, 'departure_date': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$', 'description': 'Departure date (yyyy-mm-dd).'}, 'departure_time': {'type': 'string', 'pattern': '^\\d{2}:\\d{2}$', 'description': 'Departure time (HH:mm, 24h).'}, 'deposit_status': {'anyOf': [{'type': 'number', 'const': 0}, {'type': 'number', 'const': 1}], 'description': 'Deposit status: 0 = open / not paid, 1 = paid in full.'}, 'price_elements': {'type': 'array', 'items': {'type': 'object', 'required': ['name', 'amount', 'currencyCode'], 'properties': {'tax': {'type': ['number', 'null'], 'description': 'Tax, if applicable.'}, 'name': {'type': 'string', 'description': "Display name, e.g. 'Cleaning fee'."}, 'type': {'enum': ['basePrice', 'cleaningFee', 'addon', 'longStayDiscount', 'coupon'], 'type': 'string', 'description': 'Price element type.'}, 'amount': {'type': 'number', 'description': 'Amount.'}, 'quantity': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, {'type': 'null'}], 'description': 'Quantity, if applicable.'}, 'sortOrder': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Display order (ascending).'}, 'currencyCode': {'type': 'string', 'maxLength': 3, 'minLength': 3, 'description': 'ISO 4217 currency code, e.g. EUR.'}}}, 'description': 'Optional price breakdown (base price, cleaning fee, ...).'}, 'prepayment_status': {'anyOf': [{'type': 'number', 'const': 0}, {'type': 'number', 'const': 1}], 'description': 'Prepayment status: 0 = open / not paid, 1 = paid in full.'}}}
smoobu_get_apartment
Get one property
Fetch one property's details: location, time zone, rooms and beds, max occupancy, amenities, currency, min/max nightly price and type. Smoobu: GET /api/apartments/{apartmentId}.
Read only
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['apartment_id'], 'properties': {'apartment_id': {'type': 'integer', 'maximum': 9007199254740991, 'description': 'The apartment (property) id.', 'exclusiveMinimum': 0}}}
smoobu_get_guest
Get one guest
Fetch one guest by id (the guestId on a reservation) with contact details, notes and every booking they have made. Smoobu: GET /api/guests/{guestId}.
Read only
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['guest_id'], 'properties': {'guest_id': {'type': 'integer', 'maximum': 9007199254740991, 'description': 'The guest id.', 'exclusiveMinimum': 0}}}
smoobu_get_rates
Get rates and availability
Get the nightly price, minimum length of stay and availability (0 = not available) for each date in a range, for one or more properties. Smoobu: GET /api/rates.
Read only
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['apartment_ids', 'start_date', 'end_date'], 'properties': {'end_date': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$', 'description': 'Last date (yyyy-mm-dd).'}, 'start_date': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$', 'description': 'First date (yyyy-mm-dd).'}, 'apartment_ids': {'type': 'array', 'items': {'type': 'integer', 'maximum': 9007199254740991, 'exclusiveMinimum': 0}, 'minItems': 1, 'description': 'Property ids.'}}}
smoobu_get_reservation
Get one reservation
Fetch one reservation by id: guest, dates, check-in/out times, channel and its reference id, price, prepayment and deposit status, and the guest-app URL. Smoobu: GET /api/reservations/{reservationId}.
Read only
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['reservation_id'], 'properties': {'reservation_id': {'type': 'integer', 'maximum': 9007199254740991, 'description': 'The reservation (booking) id.', 'exclusiveMinimum': 0}}}
smoobu_get_reservation_placeholders
Get a reservation's message placeholders
Get every placeholder value Smoobu would substitute into a message for this reservation: guest name, dates and times, nights, price and balance, online check-in link, guest-app link, door PIN codes and more. Useful for drafting a guest message. Smoobu: GET /api/reservations/{reservationId}/placeholders.
Read only
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['reservation_id'], 'properties': {'reservation_id': {'type': 'integer', 'maximum': 9007199254740991, 'description': 'The reservation (booking) id.', 'exclusiveMinimum': 0}}}
smoobu_get_user
Get the current user
Fetch the Smoobu user these credentials belong to (id, name, email). A cheap way to confirm the setup works; the id is the customerId used by availability checks. Smoobu: GET /api/me.
Read only
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {}}
smoobu_list_addons
List add-ons
List the bookable add-ons (towels, breakfast, late check-out...) with amount, tax, calculation type (0 per booking, 1 per person, 2 per night, 3 per person and night) and the properties they apply to; optionally for one property. Smoobu: GET /api/addons[/{apartmentId}].
Read only
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'apartment_id': {'type': 'integer', 'maximum': 9007199254740991, 'description': 'Only add-ons for this property.', 'exclusiveMinimum': 0}}}
smoobu_list_apartments
List properties
List every property (Smoobu calls them apartments) in the account, with id and name. Start here to get apartment ids. Smoobu: GET /api/apartments.
Read only
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {}}
smoobu_list_custom_placeholders
List custom placeholders
List the account's custom message placeholders (key, default value, and whether they are global, per booking or per property). Smoobu: GET /api/custom-placeholders.
Read only
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {}}
smoobu_list_guests
List guests
List guests from the Smoobu CRM with their emails, phone numbers, address, notes and bookings; optionally search. Smoobu: GET /api/guests.
Read only
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'page': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 1, 'description': 'Page number, starting at 1.'}, 'query': {'type': 'string', 'description': 'Search term, e.g. a name or email.'}, 'page_size': {'type': 'integer', 'maximum': 100, 'minimum': 1, 'description': 'Guests per page, 1-100.'}}}
smoobu_list_message_threads
List inbox threads
List the unified guest inbox: one thread per booking with guest name, property and the latest message, plus the unread count. Smoobu: GET /api/threads.
Read only
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'page_size': {'type': 'integer', 'maximum': 100, 'minimum': 1, 'description': 'Threads per page.'}, 'page_number': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 1, 'description': 'Page number, starting at 1.'}, 'apartment_ids': {'type': 'array', 'items': {'type': 'integer', 'maximum': 9007199254740991, 'exclusiveMinimum': 0}, 'description': 'Only threads for these properties.'}}}
smoobu_list_price_elements
List a reservation's price elements
List the financial breakdown of one reservation: base price, cleaning fee, add-ons, long-stay discounts and coupons, with amounts, tax and currency. Smoobu: GET /api/reservations/{reservationId}/price-elements.
Read only
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['reservation_id'], 'properties': {'reservation_id': {'type': 'integer', 'maximum': 9007199254740991, 'description': 'The reservation (booking) id.', 'exclusiveMinimum': 0}}}
smoobu_list_reservation_messages
List a reservation's messages
Get the full conversation for one reservation, paginated. Each message has a subject, plain-text and HTML body, and type (1 = inbox / from guest, 2 = outbox / sent). Smoobu: GET /api/reservations/{reservationId}/messages.
Read only
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['reservation_id'], 'properties': {'page': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 1, 'description': 'Page number, starting at 1.'}, 'reservation_id': {'type': 'integer', 'maximum': 9007199254740991, 'description': 'The reservation (booking) id.', 'exclusiveMinimum': 0}, 'only_related_to_guest': {'type': 'boolean', 'description': 'true = only guest-facing messages; false = every message on the booking.'}}}
smoobu_list_reservations
List reservations
List reservations across all channels (Airbnb, Booking.com, direct, ...), paginated, with guest, dates, channel, price and payment status. Filter by stay range, arrival, departure, creation or modification date, and property. Smoobu: GET /api/reservations.
Read only
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'to': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$', 'description': 'End of that stay range (yyyy-mm-dd).'}, 'from': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$', 'description': 'Only bookings overlapping a stay range starting on this date (yyyy-mm-dd).'}, 'page': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 1, 'description': 'Page number, starting at 1.'}, 'page_size': {'type': 'integer', 'maximum': 100, 'minimum': 1, 'description': 'Bookings per page, 1-100.'}, 'arrival_to': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$', 'description': 'Only arrivals on or before (yyyy-mm-dd).'}, 'created_to': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$', 'description': 'Only bookings created on or before (yyyy-mm-dd).'}, 'modified_to': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$', 'description': 'Only bookings modified on or before (yyyy-mm-dd).'}, 'apartment_id': {'type': 'integer', 'maximum': 9007199254740991, 'description': 'Only this property.', 'exclusiveMinimum': 0}, 'arrival_from': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$', 'description': 'Only arrivals on or after (yyyy-mm-dd).'}, 'created_from': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$', 'description': 'Only bookings created on or after (yyyy-mm-dd).'}, 'departure_to': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$', 'description': 'Only departures on or before (yyyy-mm-dd).'}, 'modified_from': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$', 'description': 'Only bookings modified on or after (yyyy-mm-dd).'}, 'departure_from': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$', 'description': 'Only departures on or after (yyyy-mm-dd).'}, 'exclude_blocked': {'type': 'boolean', 'description': 'Hide blocked-period bookings.'}, 'include_related': {'type': 'boolean', 'description': 'With apartment_id: also return bookings from grouped properties.'}, 'show_cancellations': {'type': 'boolean', 'description': 'Include cancelled bookings.'}, 'include_price_elements': {'type': 'boolean', 'description': "Include each booking's price breakdown."}}}
smoobu_send_message_to_guest
Send a message to a guest
Send a message to the guest of a reservation through Smoobu (it goes out on the booking's channel, e.g. the Airbnb or Booking.com inbox, or email). Delivered IMMEDIATELY and cannot be unsent — confirm the text with the user first. Smoobu: POST /api/reservations/{reservationId}/messages/send-message-to-guest.
Destructive
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['reservation_id', 'message_body'], 'properties': {'subject': {'type': 'string', 'description': 'Subject line.'}, 'message_body': {'type': 'string', 'minLength': 1, 'description': 'Message content, HTML or plain text.'}, 'reservation_id': {'type': 'integer', 'maximum': 9007199254740991, 'description': 'The reservation (booking) id.', 'exclusiveMinimum': 0}}}
smoobu_send_message_to_host
Post a message to the host
Post a message on a reservation's thread addressed to the Smoobu user (the host). With internal=true it is an internal note hidden from the guest — handy for logging. Cannot be unsent. Smoobu: POST /api/reservations/{reservationId}/messages/send-message-to-host.
Destructive
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['reservation_id', 'message_body'], 'properties': {'subject': {'type': 'string', 'description': 'Subject line.'}, 'internal': {'type': 'boolean', 'description': 'true = visible only to the host, hidden from the guest.'}, 'message_body': {'type': 'string', 'minLength': 1, 'description': 'Message content, HTML or plain text.'}, 'reservation_id': {'type': 'integer', 'maximum': 9007199254740991, 'description': 'The reservation (booking) id.', 'exclusiveMinimum': 0}}}
smoobu_set_rates
Set rates and minimum stays
Set the nightly price and/or minimum length of stay for dates on one or more properties. Smoobu PUSHES these to every channel with price sync enabled, so this changes live prices guests see. Reversible by setting the old values again — read them first with smoobu_get_rates. Each operation needs daily_price, min_length_of_stay, or both (a minimum stay alone needs an existing price). Smoobu: POST /api/rates.
Destructive
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['apartment_ids', 'operations'], 'properties': {'operations': {'type': 'array', 'items': {'type': 'object', 'required': ['dates'], 'properties': {'dates': {'type': 'array', 'items': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}(:\\d{4}-\\d{2}-\\d{2})?$'}, 'minItems': 1, 'description': "Single dates 'yyyy-mm-dd' or ranges 'yyyy-mm-dd:yyyy-mm-dd'."}, 'daily_price': {'type': 'number', 'description': 'Nightly price.', 'exclusiveMinimum': 0}, 'min_length_of_stay': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 1, 'description': 'Minimum nights.'}}}, 'minItems': 1, 'description': 'Rate changes to apply.'}, 'apartment_ids': {'type': 'array', 'items': {'type': 'integer', 'maximum': 9007199254740991, 'exclusiveMinimum': 0}, 'minItems': 1, 'description': 'Property ids.'}}}
smoobu_update_reservation
Update a reservation
Update an existing reservation's times, guest contact, notes, guest counts, language, or price / prepayment / deposit amounts and paid status. Only the fields you pass are sent. Dates and property cannot be changed here. Smoobu: PUT /api/reservations/{reservationId}.
Destructive
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['reservation_id'], 'properties': {'price': {'type': 'number', 'description': 'Total price.'}, 'adults': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Number of adults.'}, 'notice': {'type': 'string', 'description': 'Free-text notes on the booking.'}, 'deposit': {'type': 'number', 'description': 'Deposit amount.'}, 'children': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Number of children.'}, 'language': {'type': 'string', 'description': 'Guest language, e.g. en, de, es.'}, 'guest_name': {'type': 'string', 'description': 'Guest name.'}, 'prepayment': {'type': 'number', 'description': 'Prepayment amount.'}, 'guest_email': {'type': 'string', 'description': 'Guest email.'}, 'guest_phone': {'type': 'string', 'description': 'Guest phone.'}, 'arrival_time': {'type': 'string', 'pattern': '^\\d{2}:\\d{2}$', 'description': 'Arrival time (HH:mm, 24h).'}, 'price_status': {'anyOf': [{'type': 'number', 'const': 0}, {'type': 'number', 'const': 1}], 'description': 'Price status: 0 = open / not paid, 1 = paid in full.'}, 'departure_time': {'type': 'string', 'pattern': '^\\d{2}:\\d{2}$', 'description': 'Departure time (HH:mm, 24h).'}, 'deposit_status': {'anyOf': [{'type': 'number', 'const': 0}, {'type': 'number', 'const': 1}], 'description': 'Deposit status: 0 = open / not paid, 1 = paid in full.'}, 'reservation_id': {'type': 'integer', 'maximum': 9007199254740991, 'description': 'The reservation (booking) id.', 'exclusiveMinimum': 0}, 'assistant_notice': {'type': 'string', 'description': 'Instructions for your assistant / cleaner.'}, 'prepayment_status': {'anyOf': [{'type': 'number', 'const': 0}, {'type': 'number', 'const': 1}], 'description': 'Prepayment status: 0 = open / not paid, 1 = paid in full.'}}}
Added
smoobu_send_message_to_host
Oct. 2, 2026, 2:40 a.m.
Added
smoobu_send_message_to_guest
Oct. 2, 2026, 2:40 a.m.
Added
smoobu_set_rates
Oct. 2, 2026, 2:40 a.m.
Added
smoobu_update_reservation
Oct. 2, 2026, 2:40 a.m.
Added
smoobu_create_reservation
Oct. 2, 2026, 2:40 a.m.
Added
smoobu_list_custom_placeholders
Oct. 2, 2026, 2:40 a.m.
Added
smoobu_list_addons
Oct. 2, 2026, 2:40 a.m.
Added
smoobu_get_guest
Oct. 2, 2026, 2:40 a.m.
Added
smoobu_list_guests
Oct. 2, 2026, 2:40 a.m.
Added
smoobu_list_reservation_messages
Oct. 2, 2026, 2:40 a.m.
Added
smoobu_list_message_threads
Oct. 2, 2026, 2:40 a.m.
Added
smoobu_check_availability
Oct. 2, 2026, 2:40 a.m.
Added
smoobu_get_rates
Oct. 2, 2026, 2:40 a.m.
Added
smoobu_get_reservation_placeholders
Oct. 2, 2026, 2:40 a.m.
Added
smoobu_list_price_elements
Oct. 2, 2026, 2:40 a.m.
Added
smoobu_get_reservation
Oct. 2, 2026, 2:40 a.m.
Added
smoobu_list_reservations
Oct. 2, 2026, 2:40 a.m.
Added
smoobu_get_apartment
Oct. 2, 2026, 2:40 a.m.
Added
smoobu_list_apartments
Oct. 2, 2026, 2:40 a.m.
Added
smoobu_get_user
Oct. 2, 2026, 2:40 a.m.