# Santara AI MCP — tool reference Live version with connection guides: `https://mcp.santara.ai/docs` · machine-readable: `https://mcp.santara.ai/tools.json`. A tool is listed to a client only when the host granted its **scope** AND their role in the workspace allows it. Write tools for outside assistants (ChatGPT, Claude, Grok…) follow the host's *Settings → AI assistants*: **runs at once**, **asks first in the chat** (returns `confirmation_required`; call again with `approval=` only after the host says yes), or **off**. 26 read tools · 22 write tools. ## Read tools ### `get_host_context` — Workspace overview Scope `host:read` (See your workspace and properties) The workspace this connection acts for: its name, the member's role, how many properties they can see, the properties' time zones with today's date there, and the permissions this connection was granted. ### `today_overview` — Today at a glance Scope `bookings:read` (See reservations and guests' stay details) Everything that needs the host today: arrivals and departures (guest, place, time), guests in house, guests waiting for a reply, today's cleans by status, urgent and high-priority open tickets, and needsAttention — Santara AI's brief insights (tight turnovers, early departures, complaints), most severe first. ### `list_properties` — List properties Scope `host:read` (See your workspace and properties) The properties (buildings or listings) and their rooms that this member can see, with their ids, city, time zone, currency, unit count and status. | Parameter | Type | Required | Description | |---|---|---|---| | `includeInactive` | boolean | | Include inactive and draft properties. Default false. | ### `get_property_details` — Property details Scope `host:read` (See your workspace and properties) Guest-facing facts about one property: address, type, bedrooms and bathrooms, check-in and check-out times, pets, house rules, check-in instructions, parking, FAQs, local tips, and each room's size, beds and amenities. Door codes and WiFi passwords are not included. | Parameter | Type | Required | Description | |---|---|---|---| | `propertyId` | uuid | yes | The property's id. | ### `list_bookings` — List bookings Scope `bookings:read` (See reservations and guests' stay details) Reservations that overlap a date window (default: today through the next 14 days) — a single day returns everyone in house that day; guests checking out that day are returned with departingOnly. Optional filters: property, room, status, partial guest name, arrivals only, departures only. Results are paged (25 per page, `cursor` for more); `totals` covers every matching booking (count, nights, revenue). | Parameter | Type | Required | Description | |---|---|---|---| | `from` | date (YYYY-MM-DD) | | Date as YYYY-MM-DD. | | `to` | date (YYYY-MM-DD) | | Date as YYYY-MM-DD. | | `propertyId` | uuid | | Only this property (its id). | | `roomId` | uuid | | Only this room (its id). | | `status` | "confirmed" \| "pending" \| "cancelled" \| "completed" | | | | `includeCancelled` | boolean | | Also return cancelled bookings (left out by default — they are not stays). status: "cancelled" returns only those. | | `guestName` | string | | Partial guest name, case-insensitive. | | `arrivingOnly` | boolean | | Only stays that CHECK IN inside the window (arrivals) — not guests already in house. | | `departingOnly` | boolean | | Only stays that CHECK OUT inside the window (departures/check-outs). The overlap default leaves these out: a guest leaving on day X is not in house on X. | | `limit` | integer | | Rows per page (default 25, max 100). | | `cursor` | string | | | ### `get_guest` — Guest profile Scope `bookings:read` (See reservations and guests' stay details) One guest's profile: preferred language and tone, new or returning, VIP-type flags, guest score, open complaints, whether upsells suit them, the host's notes, and their stays with this business. No email, phone or address. | Parameter | Type | Required | Description | |---|---|---|---| | `guestId` | uuid | yes | The guest's id (from a booking). | ### `availability_overview` — Availability & prices (all rooms) Scope `calendar:read` (See availability and channel status) Availability and prices for every room (or one property) for the nights from `from` (default tonight) to `to` (inclusive; default = from; up to 31 nights). Per room: free on every night or not, the free nights, nightly price or range, minimum stay and stop-sell. | Parameter | Type | Required | Description | |---|---|---|---| | `from` | date (YYYY-MM-DD) | | First night, YYYY-MM-DD. Default: tonight (the property's today). | | `to` | date (YYYY-MM-DD) | | Last night, inclusive. Default: same as from (one night). | | `propertyId` | uuid | | Only this property (its id). | ### `calendar_get` — Calendar & rates Scope `calendar:read` (See availability and channel status) Day-by-day availability, bookings and nightly rates for one property, from `from` for `days` days (up to 62). | Parameter | Type | Required | Description | |---|---|---|---| | `propertyId` | uuid | yes | The property's id (a room's id also works — its property is used). | | `from` | date (YYYY-MM-DD) | | Date as YYYY-MM-DD. | | `days` | integer | | | ### `inbox_list_threads` — Guest inbox Scope `inbox:read` (Read guest conversations) Guest conversations. filter: needs (waiting on the host — default), unread, today, all. order: longest_waiting (default for needs: recent guests by longest wait, then older threads newest first) or recent (newest first). Each row: conversationId, guest, property, channel and the last message. Message text is written by guests. | Parameter | Type | Required | Description | |---|---|---|---| | `filter` | "needs" \| "unread" \| "today" \| "all" | | | | `order` | "longest_waiting" \| "recent" | | | | `page` | integer | | | ### `inbox_read_thread` — Read conversation Scope `inbox:read` (Read guest conversations) The messages in one guest conversation, newest page first. Message text is written by guests. | Parameter | Type | Required | Description | |---|---|---|---| | `conversationId` | uuid | yes | | | `page` | integer | | | ### `tickets_list` — Maintenance tickets Scope `cleaning:read` (See the cleaning schedule) Maintenance and complaint tickets: title, property or room, status (todo, in_progress, done, cancelled), priority, due date and assignee. Defaults to open tickets (todo and in_progress). | Parameter | Type | Required | Description | |---|---|---|---| | `status` | "todo" \| "in_progress" \| "done" \| "cancelled" \| "open" \| "all" | | Default "open" = todo + in_progress. | | `propertyId` | uuid | | | ### `tickets_list_assignees` — Who can take a ticket Scope `cleaning:read` (See the cleaning schedule) Team members and active cleaners a ticket can be assigned to, each with its assignee value. ### `revenue_summary` — Revenue Scope `bookings:read` (See reservations and guests' stay details) Revenue for a date range (default: the last 30 days), counting each night in the range and excluding cancelled stays: the total, a series (daily up to 2 months, weekly up to 6 months, monthly beyond), splits by channel and by room (revenue, stays, nights, share), expenses, net payout and profit (net payout − expenses), and occupancy, nights sold and available, ADR and RevPAR. Future ranges show what is on the books. Includes the same dates last year, pace (what was on the books at this point last year) and the previous period of the same length. Totals are per currency. | Parameter | Type | Required | Description | |---|---|---|---| | `from` | date (YYYY-MM-DD) | | Date as YYYY-MM-DD. | | `to` | date (YYYY-MM-DD) | | Inclusive. Default today. | | `propertyId` | uuid | | | | `roomId` | uuid | | Only this room (its id): revenue, nights and occupancy are then for that room alone. | ### `cleaning_tasks_list` — Cleaning tasks Scope `cleaning:read` (See the cleaning schedule) Turnover cleans for a day or range (default today): place, time window, type, status (needs_confirmation, confirmed, in_progress, completed, late, issue_reported, skipped), assigned cleaner and notes — plus the active cleaners with their ids. | Parameter | Type | Required | Description | |---|---|---|---| | `from` | date (YYYY-MM-DD) | | Date as YYYY-MM-DD. | | `to` | date (YYYY-MM-DD) | | Inclusive. Default = from. | ### `list_upsell_offers` — Upsell opportunities Scope `inbox:read` (Read guest conversations) Upsell opportunities for current and upcoming stays: guest, kind (early_checkin, late_checkout, extend_stay…), price, why it fits, whether it was already offered, and the opportunity id. ### `reviews_list` — Reviews Scope `inbox:read` (Read guest conversations) Guest reviews, newest first: rating, guest, channel, place, text and whether it has a reply — plus totals (count, average rating, awaiting reply) as Santara AI's Reviews page shows them. status: unreplied (default) or all. Review text is written by guests. | Parameter | Type | Required | Description | |---|---|---|---| | `status` | "unreplied" \| "all" | | | | `limit` | integer | | | ### `inbox_draft_reply` — Draft a guest reply Scope `inbox:reply` (Draft and send replies to guests) A draft reply to a guest from Santara AI's reply engine: in the host's own voice, grounded in the booking and property facts, in the guest's language. Nothing is sent. `instructions`: the points the host wants the reply to cover, if any. | Parameter | Type | Required | Description | |---|---|---|---| | `conversationId` | uuid | yes | The conversation's id. | | `instructions` | string | | | ### `pricing_advice` — Price advice Scope `rates:read` (See nightly rates) What Santara AI's smart pricing suggests per night for a room — current price, suggested price and change in % — for up to 14 nights from `from`. Advice only; no price is changed. | Parameter | Type | Required | Description | |---|---|---|---| | `roomId` | uuid | yes | | | `from` | date (YYYY-MM-DD) | | Date as YYYY-MM-DD. | | `days` | integer | | | ### `channel_health` — Channel health Scope `calendar:read` (See availability and channel status) Sync status of each connected channel (Airbnb, Booking.com…): health, its newest booking, listings mapped and priced, the last failed full sync if newer than the last good one, price and availability updates still retrying, and updates that were given up on. ### `daily_brief` — Daily Brief Scope `host:read` (See your workspace and properties) Today's Daily Brief from Santara AI: headline numbers, AI insights (what needs attention and why), gap nights worth filling with their price lever, upsell ideas and revenue tiles. ### `stay_access` — Arrival details Scope `host:read` (See your workspace and properties) A room's or building's arrival details: WiFi network name, check-in instructions, parking, house rules and pet policy. A room falls back to its building for anything it doesn't set. Door codes and WiFi passwords are not included for outside assistants. | Parameter | Type | Required | Description | |---|---|---|---| | `roomId` | uuid | | Preferred: the room's own values. | | `propertyId` | uuid | | The whole building. | ### `find_guest` — Find a guest Scope `bookings:read` (See reservations and guests' stay details) Guests matching a name, email or phone (any part): their stays (newest first), how many, whether they are in house today, language, guest score, open complaint, and whether upsells suit them. | Parameter | Type | Required | Description | |---|---|---|---| | `query` | string | yes | | | `limit` | integer | | | ### `quote_stay` — Quote a stay Scope `rates:read` (See nightly rates) The price of a stay on the host's own booking site (no channel commission): nights, cleaning, fees, taxes and total, plus a link that opens the room with these dates and guests filled in. Says when the dates aren't bookable (sold out, minimum stay, closed to arrival) or the room isn't on the booking site. | Parameter | Type | Required | Description | |---|---|---|---| | `roomId` | uuid | yes | | | `checkIn` | date (YYYY-MM-DD) | yes | Date as YYYY-MM-DD. | | `checkOut` | date (YYYY-MM-DD) | yes | Date as YYYY-MM-DD. | | `guests` | integer | | | ### `gap_nights` — Empty nights between bookings Scope `rates:read` (See nightly rates) Short runs of empty nights (1–3) between two bookings or blocks in the next N days. Per room: dates, nights, current price, and the minimum stay that may be blocking them. Single-unit rooms only; without propertyId every property is checked. An empty `gaps` list means there are none. | Parameter | Type | Required | Description | |---|---|---|---| | `days` | integer | | How far ahead to look (default 30). | | `propertyId` | uuid | | | ### `alerts_since` — What's new Scope `bookings:read` (See reservations and guests' stay details) What happened since a moment in time: new bookings, cancellations, and guests waiting longer than `waitingMinutes` (default 120) for a reply. | Parameter | Type | Required | Description | |---|---|---|---| | `since` | string | yes | ISO time, e.g. 2026-10-06T07:00:00+08:00 (at most 7 days ago). | | `waitingMinutes` | integer | | | ### `owner_statement` — Owner statement Scope `bookings:read` (See reservations and guests' stay details) A month's owner statement as Santara AI's Reports page shows it: a stay counts in the month it checks out; gross booking revenue − channel fees − expenses = owner net, per currency, with how many stays lack a gross figure or a reported fee. month = YYYY-MM (default this month); propertyId for one property. | Parameter | Type | Required | Description | |---|---|---|---| | `month` | string | | | | `propertyId` | uuid | | | ## Write tools ### `calendar_block_dates` — Block dates Scope `calendar:write` (Block and unblock dates) · Calendar, tickets & cleaning · default: **runs at once** Closes one room for a date range (inclusive, tonight or later) on every connected channel. | Parameter | Type | Required | Description | |---|---|---|---| | `roomId` | uuid | yes | The room's id. | | `from` | date (YYYY-MM-DD) | yes | Date as YYYY-MM-DD. | | `to` | date (YYYY-MM-DD) | yes | Last night to block (inclusive). | ### `calendar_unblock_dates` — Unblock dates Scope `calendar:write` (Block and unblock dates) · Calendar, tickets & cleaning · default: **runs at once** Re-opens one room for a date range (inclusive): removes the manual block, so availability follows bookings again. | Parameter | Type | Required | Description | |---|---|---|---| | `roomId` | uuid | yes | | | `from` | date (YYYY-MM-DD) | yes | Date as YYYY-MM-DD. | | `to` | date (YYYY-MM-DD) | yes | Date as YYYY-MM-DD. | ### `rates_set_nightly` — Set nightly rate Scope `rates:write` (Change nightly rates within your limits) · Prices & restrictions · default: **runs at once** Sets the nightly price for one room over a date range (inclusive), on its main rate plan unless ratePlanId is given. Pushed to every connected channel. | Parameter | Type | Required | Description | |---|---|---|---| | `roomId` | uuid | yes | | | `from` | date (YYYY-MM-DD) | yes | Date as YYYY-MM-DD. | | `to` | date (YYYY-MM-DD) | yes | Date as YYYY-MM-DD. | | `rate` | number | yes | Price per night in the rate plan's currency. | | `ratePlanId` | uuid | | | ### `inbox_send_reply` — Send message to guests Scope `inbox:reply` (Draft and send replies to guests) · Guest messages · default: **asks first** Sends a message to one guest (conversationId) or to several (reservationIds), each in their own conversation on the booking channel (Airbnb, Booking.com…). {placeholders} — first name, place, dates, check-in time, WiFi, door code, check-in instructions, parking — are filled per guest by Santara AI. | Parameter | Type | Required | Description | |---|---|---|---| | `conversationId` | uuid | | One guest: the conversation's id. | | `reservationIds` | uuid[] | | Several guests (e.g. everyone arriving tomorrow): their reservation ids; each gets the message in their own conversation. | | `message` | string | yes | The text. Placeholders {guest} (first name), {place}, {checkIn}, {checkOut}, {checkInTime}, {wifi}, {wifiPassword}, {doorCode}, {checkInInstructions} and {parking} are filled per guest from their booking and room. | ### `tickets_create` — Open a ticket Scope `cleaning:write` (Create and assign cleaning tasks and tickets) · Calendar, tickets & cleaning · default: **runs at once** Opens a maintenance or complaint ticket, optionally for a property or room, with a priority, due date and assignee. | Parameter | Type | Required | Description | |---|---|---|---| | `title` | string | yes | | | `description` | string | | | | `category` | "maintenance" \| "complaint" \| "other" | | Default maintenance. | | `priority` | "low" \| "medium" \| "high" \| "urgent" | | Default medium. | | `propertyId` | uuid | | | | `roomId` | uuid | | | | `dueAt` | date (YYYY-MM-DD) | | YYYY-MM-DD | | `assignee` | string | | An assignee value, e.g. "cleaner:…" or "user:…". Empty string unassigns. | ### `tickets_set_status` — Move a ticket Scope `cleaning:read` (See the cleaning schedule) · Calendar, tickets & cleaning · default: **runs at once** Changes one ticket's status: todo, in_progress, done or cancelled. | Parameter | Type | Required | Description | |---|---|---|---| | `ticketId` | uuid | yes | The ticket's id. | | `status` | "todo" \| "in_progress" \| "done" \| "cancelled" | yes | | ### `tickets_update` — Edit a ticket Scope `cleaning:write` (Create and assign cleaning tasks and tickets) · Calendar, tickets & cleaning · default: **runs at once** Assigns or reassigns one ticket, or changes its priority, due date, title or description. Only the given fields change. | Parameter | Type | Required | Description | |---|---|---|---| | `ticketId` | uuid | yes | The ticket's id. | | `assignee` | string \| string | | | | `priority` | "low" \| "medium" \| "high" \| "urgent" | | | | `dueAt` | date (YYYY-MM-DD) \| string | | YYYY-MM-DD, or "" to clear. | | `title` | string | | | | `description` | string | | | ### `cleaning_assign` — Assign a cleaner Scope `cleaning:write` (Create and assign cleaning tasks and tickets) · Calendar, tickets & cleaning · default: **runs at once** Assigns or reassigns one cleaning task to a cleaner, who is notified as in the app. | Parameter | Type | Required | Description | |---|---|---|---| | `taskId` | uuid | yes | The cleaning task's id. | | `cleanerId` | uuid | yes | The cleaner's id. | ### `cleaning_set_status` — Update a clean Scope `cleaning:write` (Create and assign cleaning tasks and tickets) · Calendar, tickets & cleaning · default: **runs at once** Marks one cleaning task in_progress, completed (records the completion and notifies, as in the app), skipped, or back to needs_confirmation. | Parameter | Type | Required | Description | |---|---|---|---| | `taskId` | uuid | yes | The cleaning task's id. | | `status` | "needs_confirmation" \| "in_progress" \| "completed" \| "skipped" | yes | | ### `upsell_send_offer` — Send an upsell offer Scope `upsell:write` (Send upsell offers to guests) · Guest messages · default: **asks first** Sends one upsell offer to its guest, in their conversation on their booking channel, and records it as offered. | Parameter | Type | Required | Description | |---|---|---|---| | `opportunityId` | uuid | yes | The upsell opportunity's id. | | `message` | string | yes | | | `price` | number | | | ### `reservations_create` — Create a booking Scope `bookings:write` (Create, change and cancel bookings) · Bookings & expenses · default: **asks first** Creates a direct booking (phone, walk-in, repeat guest) for a room and dates; check-out is the morning the guest leaves. | Parameter | Type | Required | Description | |---|---|---|---| | `roomId` | uuid | yes | The room's id. | | `checkIn` | date (YYYY-MM-DD) | yes | Date as YYYY-MM-DD. | | `checkOut` | date (YYYY-MM-DD) | yes | Departure day (YYYY-MM-DD), after checkIn. | | `guestName` | string | yes | | | `guestCount` | integer | | | | `totalAmount` | number | | Total price for the stay, in the room's currency. Omit if unknown. | | `notes` | string | | | ### `reservations_update` — Change a booking Scope `bookings:write` (Create, change and cancel bookings) · Bookings & expenses · default: **asks first** Changes a booking's dates, number of guests, guest name, price or notes — only the given fields change. Dates of channel bookings (Airbnb, Booking.com…) are changed on the channel, not here. | Parameter | Type | Required | Description | |---|---|---|---| | `reservationId` | uuid | yes | The booking's id. | | `checkIn` | date (YYYY-MM-DD) | | Date as YYYY-MM-DD. | | `checkOut` | date (YYYY-MM-DD) | | Date as YYYY-MM-DD. | | `guestCount` | integer | | | | `guestName` | string | | | | `totalAmount` | number | | | | `notes` | string | | | ### `reservations_cancel` — Cancel a booking Scope `bookings:write` (Create, change and cancel bookings) · Bookings & expenses · default: **asks first** Cancels a direct booking; its nights become bookable again. Channel bookings are cancelled on their channel. | Parameter | Type | Required | Description | |---|---|---|---| | `reservationId` | uuid | yes | | ### `restrictions_set` — Set booking rules Scope `rates:write` (Change nightly rates within your limits) · Prices & restrictions · default: **runs at once** Sets booking rules for one room over a date range (inclusive): minimum stay, maximum stay, stop sell, closed to arrival and closed to departure. Only the given rules change; null clears a rule. | Parameter | Type | Required | Description | |---|---|---|---| | `roomId` | uuid | yes | | | `from` | date (YYYY-MM-DD) | yes | Date as YYYY-MM-DD. | | `to` | date (YYYY-MM-DD) | yes | Last night (inclusive). | | `minStay` | integer \| null | | | | `maxStay` | integer \| null | | | | `stopSell` | any | | | | `closedToArrival` | any | | | | `closedToDeparture` | any | | | ### `review_reply` — Reply to a review Scope `reviews:write` (Reply to reviews) · Guest messages · default: **asks first** Publishes the host's public reply to a guest review on its channel (Airbnb, Booking.com). Only for reviews with canReply. | Parameter | Type | Required | Description | |---|---|---|---| | `reviewId` | uuid | yes | The review's id. | | `reply` | string | yes | | ### `expense_add` — Record an expense Scope `money:write` (Record expenses and owner agreements) · Bookings & expenses · default: **asks first** Records a cost for a property (it feeds the owner statement): amount, category, what it was and the day it was paid. Currency defaults to the property's. | Parameter | Type | Required | Description | |---|---|---|---| | `propertyId` | uuid | yes | The property's id. | | `amount` | number | yes | | | `currency` | string | | | | `category` | "cleaning" \| "linen" \| "consumables" \| "electricity" \| "water" \| "utilities" \| "maintenance" \| "repairs" \| "staff" \| "supplies" \| "marketing" \| "insurance" \| "tax_levy" \| "platform" \| "other" | yes | | | `description` | string | yes | | | `incurredOn` | date (YYYY-MM-DD) | | Default: today. | | `vendor` | string | | | ### `rates_set_many` — Set many prices Scope `rates:write` (Change nightly rates within your limits) · Prices & restrictions · default: **runs at once** Sets nightly prices for several rooms and date ranges in one change — for example new prices for a run of empty nights, or +10% on every room for a holiday. Pushed to every connected channel. | Parameter | Type | Required | Description | |---|---|---|---| | `changes` | object[] | yes | Each row: one room, a date range (inclusive) and the new price per night in that room's currency. Same price on neighbouring nights = one row. | ### `upsell_send_offers` — Send offers Scope `upsell:write` (Send upsell offers to guests) · Guest messages · default: **asks first** Sends several upsell offers at once (up to 20), each to its own guest in their own conversation. | Parameter | Type | Required | Description | |---|---|---|---| | `items` | object[] | yes | | ### `tickets_set_status_many` — Move tickets Scope `cleaning:read` (See the cleaning schedule) · Calendar, tickets & cleaning · default: **runs at once** Changes the status of several tickets at once (up to 50): todo, in_progress, done or cancelled. | Parameter | Type | Required | Description | |---|---|---|---| | `items` | object[] | yes | | ### `tickets_update_many` — Update tickets Scope `cleaning:write` (Create and assign cleaning tasks and tickets) · Calendar, tickets & cleaning · default: **runs at once** Assigns, reassigns, reprioritises or re-dates several tickets at once (up to 50). Only the given fields change per ticket. | Parameter | Type | Required | Description | |---|---|---|---| | `items` | object[] | yes | | ### `cleaning_set_status_many` — Update cleans Scope `cleaning:write` (Create and assign cleaning tasks and tickets) · Calendar, tickets & cleaning · default: **runs at once** Marks several cleaning tasks at once (up to 50) in_progress, completed, skipped or back to needs_confirmation. | Parameter | Type | Required | Description | |---|---|---|---| | `items` | object[] | yes | | ### `cleaning_assign_many` — Assign cleans Scope `cleaning:write` (Create and assign cleaning tasks and tickets) · Calendar, tickets & cleaning · default: **runs at once** Assigns several cleaning tasks at once (up to 50), each to its cleaner. | Parameter | Type | Required | Description | |---|---|---|---| | `items` | object[] | yes | |