Snapstay
Server Details
Connect AI assistants to Snapstay to look up hotel reservations, availability, rates, guests, and performance. OAuth lets hotel teams select one property and approve read or write access. Public beta for independent and boutique hotels. Setup: https://snapstay.ai/support#assistant-help
- Status
- Healthy
- Uptime
- 99.6% over 21 days
- OAuth
- Works in Glama
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- ChatGPT
- –
- Claude
- Snapstay
TDQS
Scored across 15 tools
Most tools target clearly distinct resources and actions, and descriptions explicitly route between similar tools such as bookings.list vs. guests.bookings. The main overlap is guests.list vs. guests.search, both guest lookup tools, but the partial-match vs. full-text distinction is explained.
The server uses a predictable namespace.verb pattern such as bookings.get, guests.create, knowledge.search, and units.occupancy. Minor deviations like units.listTypes and noun-style actions guests.bookings and stays.current are readable but slightly less consistent.
Fifteen tools is at the upper end of a well-scoped set but still appropriate for a hotel operations surface covering bookings, guests, rooms, reviews, metrics, knowledge, and hotel settings. Each tool maps to a recognizable area without excessive fragmentation.
The surface is strong for read/lookup workflows and includes guests.create, but it lacks core write operations such as booking creation or modification, guest updates, and review reply/send despite reviews.list exposing reply status. These gaps are notable for a hotel operations server, though many read workflows remain usable.
Available Tools
15 toolsbookings.getGet a booking at the selected hotel by its IDARead-onlyIdempotentInspect
Get a booking at the selected hotel by its ID. Use bookings.list to find the ID by guest name, email, or booking code. Use guests.bookings for a guest's booking history.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Booking record ID from bookings.list or guests.bookings. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds the 'selected hotel' scoping context but does not discuss behavior when the ID is missing, not found, or unauthorized, nor does it describe the returned record. With annotations carrying most behavioral weight, this is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The definition is two sentences, front-loaded with the action and followed by precise sibling-routing guidance. Every sentence earns its place with no repetition or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has a complete input schema and an output schema, so return values need not be explained in the description. Annotations cover safety and determinism, and the description covers the key retrieval workflow and alternatives. Nothing an agent needs in order to select and invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema already documents the single id parameter as coming from bookings.list or guests.bookings. The description reinforces that source in prose but adds no syntax, format, or validation detail beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: get a booking by its ID at the selected hotel. It also names sibling tools and clarifies the different retrieval paths, so an agent can distinguish it from bookings.list and guests.bookings without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says to use bookings.list when the ID must first be found by guest name, email, or booking code, and to use guests.bookings for a guest's booking history. This gives clear routing guidance among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bookings.listFind bookings by guest name, email, or booking codeARead-onlyIdempotentInspect
Find bookings by guest name, email, or booking code. Combine text, date, and status filters, or omit them to list all bookings. Supply both start and end when filtering dates. The range includes bookings departing on start or arriving on end. Returns up to 100 bookings per page. Set page to the returned page.next to continue. A next value of 0 marks the last page.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | End hotel date in YYYY-MM-DD format, on or after start, including arrivals on this date. Required with start. | |
| page | No | Page number, starting at 1. Omit for the first page. Use the returned page.next number to continue. | |
| query | No | Partial guest name, email, or booking code. Code spaces and separators are ignored. Omit to list all matches. | |
| start | No | Start hotel date in YYYY-MM-DD format, including departures on this date. Required with end. | |
| statuses | No | Booking statuses to include. Omit or use [] for all statuses. | |
| stayStatuses | No | Room stay statuses to include. Dates and status must match the same room. Use booked for rooms awaiting check-in, staying for occupied rooms, or completed for checked-out rooms. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive behavior, so the bar is lower. The description still adds real value with the pagination contract (100 per page, set page to page.next, next=0 means last page) and the requirement that start and end be supplied together — behavior an agent could not infer from annotations alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, front-loaded with purpose then filters then pagination; every sentence carries actionable information with no repetition of the schema or title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only search tool with an output schema and full schema descriptions, the description covers what remains: filter combination, date-pair requirement, and how to page through results. Nothing needed to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% so a 3 is the baseline, but the description adds cross-parameter semantics beyond the schema: start and end must be supplied as a pair, and the range is inclusive at both edges (departures on start, arrivals on end). That is genuine added meaning, though per-parameter format details remain in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Find') and resource ('bookings') plus the searchable identifiers (guest name, email, booking code), which clearly separates it from the sibling bookings.get lookup-by-id.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Combine text, date, and status filters, or omit them to list all bookings' gives clear context for both filtered and unfiltered use. However, it never names an alternative (e.g. bookings.get or guests.bookings) or states when not to use this tool, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
guests.bookingsGet booking history and lifetime value for a guestARead-onlyIdempotentInspect
Get booking history and lifetime value for a guest. Get guestId from guests.list or guests.search. Lifetime value is the sum of booked, staying, and completed booking totals. Use bookings.list to search bookings by date or booking code. This history does not include extras or fee details; use bookings.get to read them. Returns up to 100 bookings per page. Set page to bookings.page.next to continue. A next value of 0 marks the last page.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number, starting at 1. Omit for the first page. | |
| guestId | Yes | Guest record ID from guests.list, guests.search, or guests.create. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description still adds real behavioral value: it defines lifetime value as the sum of booked, staying and completed totals, and warns the history omits extras and fees. However, it does not describe ordering of the returned bookings or what happens for a guest with no bookings, so it is not fully transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose, and every sentence carries information with no filler. The three-sentence pagination block is slightly verbose and could be tightened, but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output shape is covered by the output schema, and the description fills the remaining gaps an agent needs: ID provenance, page size, continuation token semantics, and the exclusion of extras/fees with a pointer to the tool that has them. Complete for a two-parameter paged read.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline would be 3, but the description goes beyond the schema by explaining pagination semantics: 100 bookings per page and 'set page to bookings.page.next, a next value of 0 marks the last page'. That is invocation-critical meaning the schema does not carry, and it also reinforces where guestId comes from.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get booking history and lifetime value for a guest') and the title reinforces it. It also implicitly differentiates from bookings.list and bookings.get by naming each as the right tool for other tasks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent: guestId from guests.list or guests.search, use bookings.list for date/booking-code searches, and bookings.get for extras and fee details. Both the alternative and the condition that selects it are stated, so nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
guests.createCreate a guest profile with a name, email, and optional phone and billing addressAInspect
Create a guest profile with a name, email, and optional phone and billing address. Returns the guest ID and name. Each successful call creates a separate profile, including calls with the same email. Use guests.list to find existing profiles.
| Name | Required | Description | Default |
|---|---|---|---|
| Yes | Guest email address, such as jordan@example.com. | ||
| phone | No | Contact phone number, including the country calling code. | |
| givenName | Yes | Guest given name, from 1 to 100 characters. | |
| familyName | Yes | Guest family name, from 1 to 100 characters. | |
| billingAddress | No | Optional guest billing address. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and idempotentHint=false, but the description makes that non-idempotency concrete and operational: each call creates a distinct profile even for a duplicate email. It also names the return payload (guest ID and name), which an agent needs for chaining. No permission, validation-error, or rate-limit context, so not a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences in priority order: what it does, what it returns, the duplicate-profile behavior, then the alternative. Nothing is repeated from the title and no sentence is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple create tool with full schema documentation, an output schema, and clear annotations, the description covers everything an agent needs: purpose, return value, the duplicate-creation trap, and the routing to guests.list.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all five parameters and the nested billing address are already documented with constraints. The description only restates the field set and is slightly looser than the schema, saying 'a name' where givenName and familyName are both required. Baseline 3 for full schema coverage with no added parameter detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Create a guest profile') plus the payload contents, which immediately separates it from read-side siblings like guests.search and guests.bookings. The closing pointer to guests.list makes the create-vs-find boundary explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives both when-to-use ('Create a guest profile...') and a concrete alternative with its condition ('Use guests.list to find existing profiles'). The warning that repeated calls with the same email produce separate profiles tells the agent not to reach for this tool to deduplicate or upsert.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
guests.listList guests with optional partial name or email matchingARead-onlyIdempotentInspect
List guests with optional partial name or email matching. Matching ignores case, and results are newest first. Use guests.search for full-text matching. Returns up to 100 guests per page. Set page to the returned page.next to continue. A next value of 0 marks the last page.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number, starting at 1. Omit for the first page. | |
| query | No | Partial guest name or email, up to 200 characters. Omit to list all guests. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered; the description adds substantial context beyond that: case-insensitive matching, newest-first ordering, a 100-per-page cap, and the page/page.next continuation protocol with 0 marking the last page. That is exactly the behavioral detail an agent needs to page correctly.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, front-loaded with purpose, then matching semantics, then the sibling alternative, then pagination mechanics. Every sentence carries information the agent needs; no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter, zero-required list tool with an output schema present, the description covers everything the agent must decide: when to use it, matching semantics, ordering, page size, and how to continue paging. Return-value explanation is not needed given the output schema, and the pagination fields are still referenced usefully.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description exceeds that by explaining the pagination contract ('Set page to the returned page.next to continue', 'A next value of 0 marks the last page'), which the schema alone does not convey. It adds no extra detail on the query parameter beyond the schema's own 'partial name or email, up to 200 characters'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List guests') plus the narrowing scope ('optional partial name or email matching'), and explicitly names the sibling it is not (guests.search for full-text matching). An agent can distinguish it from guests.search without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent: use guests.search for full-text matching, implying this tool is for plain partial name/email lookup. The 'Omit to list all guests' behavior is conveyed via the title/schema, so the choice between listing-all and searching is inferable without ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
guests.searchFind guests by name or email using full-text searchARead-onlyIdempotentInspect
Find guests by name or email using full-text search. Use guests.list for partial matching or to browse all guests. Returns up to 100 guest IDs and names per page. Set page to the returned page.next to continue. A next value of 0 marks the last page.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number, starting at 1. Omit for the first page. | |
| query | Yes | Full-text search terms for a name or email, up to 200 characters. Use guests.list to match part of a name or email. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, and closed-world, so the safety profile is covered. The description adds useful behavior the annotations don't: a 100-result page cap, the page.next continuation pattern, and the next=0 terminal marker. It stops short of describing result ordering or match ranking, which would matter for a search tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four tight sentences with zero waste; purpose and alternative routing are front-loaded before pagination mechanics. Every sentence carries distinct information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values needn't be restated, and the description still covers the two things an agent must know to iterate results correctly. Nothing needed to invoke it properly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so parameters are already documented. The description still adds meaning beyond the schema by explaining that 'page' should be set to the returned page.next value and that next=0 signals the last page, which is operational guidance the schema cannot express.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Find'), resource ('guests'), and scope ('full-text search by name or email'), which distinguishes it from guests.list by matching mode. An agent can select it without inspecting the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the alternative ('Use guests.list for partial matching or to browse all guests') along with the condition that selects it. Pagination continuation is also spelled out, leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
knowledge.readRead a saved hotel website page by its pageId from knowledge.searchARead-onlyIdempotentInspect
Read a saved hotel website page by its pageId from knowledge.search. Returns page text, a source link, fetch date, and collection status. Text is limited to 20,000 characters. The truncated flag indicates whether more text exists. The response includes a page when collection is enabled and the page is available.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Page ID from a knowledge search result. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent and non-destructive, so the bar is lower; the description nonetheless adds real behavior: a 20,000-character text cap, a truncated flag, and the condition that a page is only returned when collection is enabled and the page is available. It does not explain failure behavior for an invalid or uncollected pageId, which keeps it off a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, front-loaded with purpose and the sibling dependency. The 'truncated flag' sentence is slightly redundant given an output schema exists, but it is short and useful enough to keep.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read-only tool with annotations and an output schema, the description covers purpose, source of the ID, size limit, and the availability condition. Only the failure/empty case is unaddressed, which is a minor gap rather than a blocking one.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single parameter already documents itself as 'Page ID from a knowledge search result.' The description restates the same provenance without adding format or validation detail beyond the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (read) plus resource (a saved hotel website page) and ties it directly to the sibling that produces the input, knowledge.search. An agent can distinguish it from knowledge.search (find vs. fetch) without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent: call this with a pageId obtained from knowledge.search, which implies the search-then-read workflow. It stops short of stating exclusions or what to do if the page was never collected, so it falls just short of 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
knowledge.searchSearch saved hotel website text with a question or topicARead-onlyIdempotentInspect
Search saved hotel website text with a question or topic. Returns matching sections, page IDs, links, fetch dates, and collection status. Limit sets the maximum number of sections. The search can use the configured AI provider to translate the query. Use knowledge.read with a returned pageId to read the full saved page.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum source sections to return. Omit for ten sections. | |
| query | Yes | Question or topic to research, up to 500 characters. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, open-world, non-destructive, so the bar is lower; the description still adds non-obvious behavior — that the query may be rewritten via the configured AI provider, which can affect results, and that responses include fetch dates and collection status. It does not mention latency or cost implications of that provider call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, front-loaded with purpose before return shape and routing. The limit sentence duplicates the schema description and could be dropped without loss.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be enumerated; annotations carry the safety profile. The description supplies the remaining essentials: scope, result shape, query translation caveat, and the handoff to knowledge.read.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both parameters are already fully documented, including limit defaults and bounds. The description's 'Limit sets the maximum number of sections' merely restates the schema and adds no new semantics for query either.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (search) and resource (saved hotel website text), plus the input modality (question or topic). It explicitly distinguishes itself from knowledge.read, which is the natural sibling to confuse it with.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit follow-up routing rule: 'Use knowledge.read with a returned pageId to read the full saved page.' That is clear context for the search-then-read flow, but there is no guidance on when search is inappropriate (e.g., fetching a known page directly).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
metrics.listGet hotel performance metrics, each with its daily series, for a preset period or explicit start-inclusive, end-exclusive hotel datesARead-onlyIdempotentInspect
Get hotel performance metrics, each with its daily series, for a preset period or explicit start-inclusive, end-exclusive hotel dates. Includes occupancy, bookings made, room revenue, ADR, RevPAR, cancellations, and average stay length. Dates use the hotel timezone. Set compare to period for the preceding period, or year for the same period last year. Revenue uses booking amounts in the hotel currency. Use bookings.list for individual bookings.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | End hotel date, excluded. Must be after start. | |
| start | No | Start hotel date, included. Supply with end instead of period. | |
| period | No | Reporting period based on today in the hotel timezone. For example, this_month covers the whole current calendar month. | |
| compare | Yes | Compare with the preceding period or the same period in the previous year. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so the description's job is to add semantics — which it does: dates are evaluated in the hotel timezone, end is exclusive, revenue is in booking amounts and hotel currency. No rate limits or failure modes are described, but for a read-only aggregation endpoint that is a minor gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Six short, front-loaded sentences with no filler; the metric list, timezone rule, compare semantics, and sibling pointer each earn their place. The opening sentence duplicates the title almost verbatim, which is a small redundancy but also the front-loading of purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return shape needn't be explained, and the description still usefully names the metrics included. Combined with full schema coverage and read-only annotations, an agent has nearly everything needed; only the overlap with a sibling metrics tool is unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description earns an extra point by clarifying that compare=period means the immediately preceding period and compare=year means the same period last year, and that period presets are anchored to today in the hotel timezone. It does not resolve the period-versus-start/end mutual exclusivity beyond the schema's own note.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get hotel performance metrics, each with its daily series') and enumerates the metric families returned, so an agent can tell it apart from bookings.list, which it explicitly routes to. It does not, however, differentiate itself from the sibling units.occupancy, which plausibly overlaps on occupancy-type metrics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear routing guidance ('Use bookings.list for individual bookings') and explains the compare modes and the period-vs-explicit-dates choice, which is decision-relevant context. It stops short of stating exclusions or what happens if both period and start/end are supplied, leaving one branch to the schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reviews.listList imported guest reviews and their saved replies, drafts, and send statusARead-onlyIdempotentInspect
List imported guest reviews and their saved replies, drafts, and send status. Returns status.canReply and status.reason for each review. Publication dates use UTC with start included and end excluded. Results match all supplied filters. Supply page.size and page.number. Set page.number to the returned page.next to continue with the same page.size. A next value of 0 marks the last page. The syncs field contains the last import time and any import error.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | Review publication end date in UTC, excluded. Must be after start. | |
| page | Yes | Required page size and number. Start with {size: 20, number: 1}. Set number to the returned page.next to continue. Keep size unchanged. Stop at 0. | |
| query | No | Search text, up to 200 characters. | |
| start | No | Review publication start date in UTC, included. Supply with end. | |
| source | No | Review platform to include. Omit for all platforms. | |
| urgency | No | Set urgent to return urgent reviews only. | |
| replyStatuses | No | Reply statuses to include. Omit for all statuses. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and non-destructive behavior, so safety is covered. The description adds context annotations cannot: UTC date boundaries with start included/end excluded, conjunctive filter matching, the pagination termination rule, and what the syncs field reports (last import time and errors).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads purpose, then return fields, then date filtering, then pagination protocol. Every sentence carries a distinct fact; no repetition of the title or annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description needn't enumerate return shapes, and it still calls out status.canReply/status.reason and the syncs field. Pagination and date semantics are fully covered; only filter-specific behaviors (e.g., how query matching works) are left implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, and the description adds meaning beyond field-level docs: it explains how page.size/page.number interact with the returned page.next cursor and that size must stay unchanged. It does not elaborate on query, source, urgency, or replyStatuses, which the schema already documents well.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource: list imported guest reviews along with replies, drafts, and send status. That immediately distinguishes it from bookings/guests/units siblings, none of which handle reviews, but there is no explicit statement of scope differences from those siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains results match all supplied filters (AND semantics) and gives operational guidance: supply page.size and page.number, continue by setting page.number to returned page.next, and treat next=0 as the last page. It lacks explicit when-not-to-use or prerequisite guidance, but for a list tool with no direct sibling alternative, this is clear context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stays.currentGet the current hotel profile and settings, including timezone, currency, contacts, and booking policiesARead-onlyIdempotentInspect
Get the current hotel profile and settings, including timezone, currency, contacts, and booking policies. Use knowledge.search for information from the hotel website. Use bookings.get for cancellation terms saved on a booking.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered without the description. The description adds no behavioral context beyond that – no note on caching or freshness of the 'current' snapshot, no indication of what happens when no profile is configured. It neither contradicts nor enriches the annotation set.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each earning its place: the capability first, then two disambiguation pointers. Front-loaded with the primary verb+resource and free of boilerplate.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value detail is not required in the description, and the zero-parameter signature removes any input-side obligation. Combined with full annotation coverage, the agent has everything needed to select and invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate; the baseline for a parameterless tool applies. No misleading or extraneous parameter language is present.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
A specific verb ('Get') plus a defined resource ('the current hotel profile and settings') with the returned fields enumerated (timezone, currency, contacts, booking policies). The name/title pair and the enumeration make it unmistakable against siblings like units.get or bookings.get.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes to alternatives with conditions: 'Use knowledge.search for information from the hotel website' and 'Use bookings.get for cancellation terms saved on a booking.' These are concrete when-to-use-something-else statements rather than vague hints.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
units.getGet a room's details by its ID from units.list or a booking's unitIdARead-onlyIdempotentInspect
Get a room's details by its ID from units.list or a booking's unitId. Use units.listTypes for room type details and units.occupancy for reserved or blocked dates.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Room record ID from units.list or a booking room's unitId. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered. The description adds no behavioral context beyond the schema: no mention of what 'details' include, error behavior for unknown IDs, or whether archived rooms are returned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero waste, with the core action front-loaded and the disambiguation guidance following immediately. Nothing redundant or padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read tool with an output schema, full annotation coverage, and explicit sibling routing, everything an agent needs to call it correctly is present. The return payload is defined by the output schema, so the description need not restate it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single parameter is fully documented there, so the baseline is 3. The description restates the ID provenance, reinforcing but not extending the schema's meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get a room's details by its ID') plus the provenance of the identifier, so an agent knows exactly what it retrieves. It also names the sibling resources it is not (units.listTypes, units.occupancy), making it distinguishable without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent to units.listTypes for room type data and units.occupancy for reserved/blocked dates, and tells where the ID comes from (units.list or a booking's unitId). It stops short of stating when this tool itself is unnecessary versus units.list, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
units.listList rooms at the selected hotelARead-onlyIdempotentInspect
List rooms at the selected hotel. Use a returned room ID with units.get or units.occupancy. Use units.listTypes for room types. Returns up to 100 rooms per page. Set page to the returned page.next to continue. A next value of 0 marks the last page.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number, starting at 1. Omit for the first page. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/no-destructive, so the safety profile is covered. The description adds substantive behavior beyond that: a 100-room page cap, iterating with page.next, and the sentinel next=0 for the final page. It stops short of describing per-room fields, but the output schema covers those.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Five short sentences, purpose first, then routing, then pagination mechanics. Every sentence carries information an agent needs; nothing is repeated from the schema or annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a single optional parameter, an output schema, and annotation coverage of the safety profile, the description supplies exactly the missing piece: pagination loop termination. Nothing needed to call it correctly is absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter is fully described in the schema, so the baseline is 3; the description goes further by explaining how to drive it across pages (set page to the returned page.next, 0 means done), which is semantics the schema cannot express.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource scoped to 'the selected hotel', and explicitly distinguishes itself from units.listTypes and routes returned IDs to units.get/units.occupancy.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Names the follow-on tools and the condition that selects each: use a returned room ID with units.get or units.occupancy, use units.listTypes for room types. Clear when to use what.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
units.listTypesList all room types, newest first, including active, inactive, and archived typesARead-onlyIdempotentInspect
List all room types, newest first, including active, inactive, and archived types. Use a room's unitTypeId to find its type. Use units.list for individual rooms. Returns all types in one call.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive, and closed-world behavior, so the bar is lower. The description still adds real value beyond them: records come back newest-first, inactive and archived types are included (no filtering), and the whole set is returned in a single call with no pagination.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, each carrying distinct information: ordering/scope first, then sibling routing, then the no-pagination guarantee. No filler and nothing buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, closed-world list tool with an output schema, the description covers ordering, scope, and call cost. The only small gap is behavior when the result set is large or empty, though the one-call guarantee largely pre-empts that concern.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, which sets the baseline at 4. Nothing further is needed, and the description's mention of unitTypeId correctly frames the field as a downstream reference rather than an input.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("List all room types") plus the exact scope: newest-first ordering and inclusion of active, inactive, and archived types. It is immediately distinguishable from siblings units.list (individual rooms) and units.get, which the description explicitly calls out.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent to the right alternative ("Use units.list for individual rooms") and explains the join key ("Use a room's unitTypeId to find its type"). It stops short of stating when NOT to call it (e.g., when targeting a single known type), so it is clear context rather than a full decision rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
units.occupancyGet reserved and blocked date ranges for a roomARead-onlyIdempotentInspect
Get reserved and blocked date ranges for a room. Get id from units.list or units.get. Start is included and end is excluded. End must be after start. Returns active allocations that overlap the requested dates. Returned ranges can extend beyond those dates. Use bookings.list for guest and booking details.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Room record ID from units.list or units.get. | |
| end | Yes | End hotel date in YYYY-MM-DD format. Must be after start. This date is excluded from the requested nights. | |
| start | Yes | First hotel date to check, in YYYY-MM-DD format. End must be after start. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish that this is a read-only, idempotent, non-destructive operation. The description adds useful behavioral context about date inclusion/exclusion, overlapping active allocations, and returned ranges possibly extending beyond the requested window; it does not need to explain return values because an output schema exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded with the purpose, followed by id source, date semantics, overlap behavior, and the sibling alternative. Every sentence contributes useful selection or invocation context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema, full annotation coverage, and complete input schema, the description supplies the remaining decision-critical context: which sibling to use, how to obtain the id, and how the date range and overlapping ranges behave.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents id, start, and end, including the YYYY-MM-DD format and end-after-start requirement. The description reinforces start-inclusive and end-exclusive semantics but does not add substantial parameter meaning beyond the structured schema, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: getting reserved and blocked date ranges for a room. It is clearly distinguishable from booking-detail and unit-listing siblings, especially by pointing to bookings.list for guest and booking details.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly tells the agent where to get the required id from units.list or units.get, and it names bookings.list as the alternative when guest and booking details are needed. The routing between occupancy lookup and booking detail lookup is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
2 tool updates
- Changed
metrics.list3 fields changed- added
Input schema / properties / endAdded value: +{ + "description": "End hotel date, excluded. Must be after start.", + "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])))$", + "type": "string" +} - added
Input schema / properties / startAdded value: +{ + "description": "Start hotel date, included. Supply with end instead of period.", + "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])))$", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "period", - "compare" -]New value: +[ + "compare" +]
- Changed
reviews.list3 fields changed- added
Input schema / properties / endAdded value: +{ + "description": "Review publication end date in UTC, excluded. Must be after start.", + "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])))$", + "type": "string" +} - added
Input schema / properties / startAdded value: +{ + "description": "Review publication start date in UTC, included. Supply with end.", + "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])))$", + "type": "string" +} - added
Output schema / properties / result / properties / items / items / properties / statusAdded value: +{ + "additionalProperties": false, + "properties": { + "canReply": { + "type": "boolean" + }, + "reason": { + "type": "string" + } + }, + "required": [ + "canReply", + "reason" + ], + "type": "object" +}
1 tool update
- Changed
metrics.list5 fields changed- added
Output schema / properties / result / properties / metrics / items / properties / lowerAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / result / properties / metrics / items / properties / seriesAdded value: +{ + "items": { + "additionalProperties": false, + "properties": { + "date": { + "type": "string" + }, + "value": { + "type": "number" + } + }, + "required": [ + "date", + "value" + ], + "type": "object" + }, + "type": "array" +} - changed
Output schema / properties / result / properties / metrics / items / requiredPrevious value: -[ - "id", - "name", - "description", - "valueType", - "value" -]New value: +[ + "id", + "name", + "description", + "valueType", + "lower", + "series" +] - removed
Output schema / properties / result / properties / timeseriesRemoved value: -{ - "items": { - "additionalProperties": false, - "properties": { - "data": { - "items": { - "additionalProperties": false, - "properties": { - "date": { - "type": "string" - }, - "value": { - "type": "number" - } - }, - "required": [ - "date", - "value" - ], - "type": "object" - }, - "type": "array" - }, - "metric": { - "type": "string" - } - }, - "required": [ - "metric", - "data" - ], - "type": "object" - }, - "type": "array" -} - changed
Output schema / properties / result / requiredPrevious value: -[ - "metrics", - "timeseries" -]New value: +[ + "metrics" +]
3 tool updates
- Changed
bookings.get1 field changed- added
Output schema / properties / result / properties / booking / properties / productsAdded value: +{ + "description": "Active extras and fees. Prices and totals use the booking currency.", + "items": { + "additionalProperties": false, + "properties": { + "bookingUnitId": { + "type": "string" + }, + "mode": { + "enum": [ + "once", + "per_night", + "per_person", + "per_person_per_night" + ], + "type": "string" + }, + "name": { + "type": "string" + }, + "price": { + "type": "string" + }, + "quantity": { + "type": "number" + }, + "total": { + "type": "string" + }, + "type": { + "enum": [ + "product", + "fee" + ], + "type": "string" + } + }, + "required": [ + "name", + "type", + "mode", + "price", + "quantity", + "total" + ], + "type": "object" + }, + "type": "array" +}
- Changed
bookings.list1 field changed- added
Output schema / properties / result / properties / items / items / properties / productsAdded value: +{ + "description": "Active extras and fees. Prices and totals use the booking currency.", + "items": { + "additionalProperties": false, + "properties": { + "bookingUnitId": { + "type": "string" + }, + "mode": { + "enum": [ + "once", + "per_night", + "per_person", + "per_person_per_night" + ], + "type": "string" + }, + "name": { + "type": "string" + }, + "price": { + "type": "string" + }, + "quantity": { + "type": "number" + }, + "total": { + "type": "string" + }, + "type": { + "enum": [ + "product", + "fee" + ], + "type": "string" + } + }, + "required": [ + "name", + "type", + "mode", + "price", + "quantity", + "total" + ], + "type": "object" + }, + "type": "array" +}
- Changed
guests.bookings1 field changed- added
Output schema / properties / result / properties / bookings / properties / items / items / properties / productsAdded value: +{ + "description": "Active extras and fees. Prices and totals use the booking currency.", + "items": { + "additionalProperties": false, + "properties": { + "bookingUnitId": { + "type": "string" + }, + "mode": { + "enum": [ + "once", + "per_night", + "per_person", + "per_person_per_night" + ], + "type": "string" + }, + "name": { + "type": "string" + }, + "price": { + "type": "string" + }, + "quantity": { + "type": "number" + }, + "total": { + "type": "string" + }, + "type": { + "enum": [ + "product", + "fee" + ], + "type": "string" + } + }, + "required": [ + "name", + "type", + "mode", + "price", + "quantity", + "total" + ], + "type": "object" + }, + "type": "array" +}
3 tool updates
- Changed
bookings.get2 fields changed- added
Output schema / properties / result / properties / booking / properties / units / items / properties / stayStatusAdded value: +{ + "enum": [ + "booked", + "staying", + "completed" + ], + "type": "string" +} - changed
Output schema / properties / result / properties / booking / properties / units / items / requiredPrevious value: -[ - "unitId", - "checkinAt", - "checkoutAt", - "guests" -]New value: +[ + "unitId", + "stayStatus", + "checkinAt", + "checkoutAt", + "guests" +]
- Changed
bookings.list3 fields changed- added
Input schema / properties / stayStatusesAdded value: +{ + "default": [], + "description": "Room stay statuses to include. Dates and status must match the same room. Use booked for rooms awaiting check-in, staying for occupied rooms, or completed for checked-out rooms.", + "items": { + "enum": [ + "booked", + "staying", + "completed" + ], + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / result / properties / items / items / properties / units / items / properties / stayStatusAdded value: +{ + "enum": [ + "booked", + "staying", + "completed" + ], + "type": "string" +} - changed
Output schema / properties / result / properties / items / items / properties / units / items / requiredPrevious value: -[ - "unitId", - "checkinAt", - "checkoutAt", - "guests" -]New value: +[ + "unitId", + "stayStatus", + "checkinAt", + "checkoutAt", + "guests" +]
- Changed
guests.bookings2 fields changed- added
Output schema / properties / result / properties / bookings / properties / items / items / properties / units / items / properties / stayStatusAdded value: +{ + "enum": [ + "booked", + "staying", + "completed" + ], + "type": "string" +} - changed
Output schema / properties / result / properties / bookings / properties / items / items / properties / units / items / requiredPrevious value: -[ - "unitId", - "checkinAt", - "checkoutAt", - "guests" -]New value: +[ + "unitId", + "stayStatus", + "checkinAt", + "checkoutAt", + "guests" +]
9 tool updates
- Changed
bookings.get1 field changed- changed
Input schema / properties / id / descriptionPrevious value: -"ID of the record to get or change."New value: +"Booking record ID from bookings.list or guests.bookings."
- Changed
bookings.list5 fields changed- added
Input schema / examplesAdded value: +[ + { + "end": "2026-11-07", + "query": "Jordan", + "start": "2026-11-01", + "statuses": [ + "booked" + ] + } +] - changed
Input schema / properties / end / descriptionPrevious value: -"Optional range end in YYYY-MM-DD format. Supply start too."New value: +"End hotel date in YYYY-MM-DD format, on or after start, including arrivals on this date. Required with start." - changed
Input schema / properties / page / descriptionPrevious value: -"Page number to fetch."New value: +"Page number, starting at 1. Omit for the first page. Use the returned page.next number to continue." - changed
Input schema / properties / start / descriptionPrevious value: -"Optional range start in YYYY-MM-DD format. Supply end too."New value: +"Start hotel date in YYYY-MM-DD format, including departures on this date. Required with end." - changed
Input schema / properties / statuses / descriptionPrevious value: -"Optional booking statuses."New value: +"Booking statuses to include. Omit or use [] for all statuses."
- Changed
guests.bookings1 field changed- changed
Input schema / properties / guestId / descriptionPrevious value: -"Guest ID from guests.search or guests.create."New value: +"Guest record ID from guests.list, guests.search, or guests.create."
- Changed
guests.create3 fields changed- added
Input schema / examplesAdded value: +[ + { + "email": "jordan@example.com", + "familyName": "Sample", + "givenName": "Jordan" + } +] - changed
Input schema / properties / billingAddress / descriptionPrevious value: -"Guest billing address."New value: +"Optional guest billing address." - changed
Input schema / properties / email / descriptionPrevious value: -"Contact email address."New value: +"Guest email address, such as jordan@example.com."
- Changed
guests.search1 field changed- changed
Input schema / properties / query / descriptionPrevious value: -"Search text, up to 200 characters."New value: +"Full-text search terms for a name or email, up to 200 characters. Use guests.list to match part of a name or email."
- Changed
metrics.list1 field changed- changed
Input schema / properties / period / descriptionPrevious value: -"Hotel performance period to measure."New value: +"Reporting period based on today in the hotel timezone. For example, this_month covers the whole current calendar month."
- Changed
reviews.list1 field changed- changed
Input schema / properties / page / descriptionPrevious value: -"Page size and number. Use page.next from the result to get more reviews."New value: +"Required page size and number. Start with {size: 20, number: 1}. Set number to the returned page.next to continue. Keep size unchanged. Stop at 0."
- Changed
units.get1 field changed- changed
Input schema / properties / id / descriptionPrevious value: -"ID of the record to get or change."New value: +"Room record ID from units.list or a booking room's unitId."
- Changed
units.occupancy4 fields changed- added
Input schema / examplesAdded value: +[ + { + "end": "2026-11-03", + "id": "room-id-from-units-list", + "start": "2026-11-01" + } +] - changed
Input schema / properties / end / descriptionPrevious value: -"End hotel date in YYYY-MM-DD format."New value: +"End hotel date in YYYY-MM-DD format. Must be after start. This date is excluded from the requested nights." - changed
Input schema / properties / id / descriptionPrevious value: -"ID of the record to get or change."New value: +"Room record ID from units.list or units.get." - changed
Input schema / properties / start / descriptionPrevious value: -"Start hotel date in YYYY-MM-DD format."New value: +"First hotel date to check, in YYYY-MM-DD format. End must be after start."
2 tool updates
- Changed
bookings.list4 fields changed- changed
Input schema / properties / end / descriptionPrevious value: -"Range end in YYYY-MM-DD format."New value: +"Optional range end in YYYY-MM-DD format. Supply start too." - added
Input schema / properties / queryAdded value: +{ + "default": "", + "description": "Partial guest name, email, or booking code. Code spaces and separators are ignored. Omit to list all matches.", + "maxLength": 200, + "type": "string" +} - changed
Input schema / properties / start / descriptionPrevious value: -"Range start in YYYY-MM-DD format."New value: +"Optional range start in YYYY-MM-DD format. Supply end too." - removed
Input schema / requiredRemoved value: -[ - "start", - "end" -]
- Added
guests.list
2 tool updates
- Added
knowledge.read - Added
knowledge.search
1 tool update
- Changed
metrics.list1 field changed- changed
Output schema / properties / result / properties / metrics / items / properties / comparison / requiredPrevious value: -[ - "period", - "value", - "percent" -]New value: +[ + "period", + "value" +]
44 tool updates
- Removed
bookings.cancel - Removed
bookings.create - Changed
bookings.get2 fields changed- added
Input schema / properties / id / descriptionAdded value: +"ID of the record to get or change." - added
Output schema / properties / result / requiredAdded value: +[ + "booking" +]
- Removed
bookings.reject - Removed
connectors.disconnect - Removed
connectors.list - Removed
connectors.specs - Removed
domains.create - Removed
domains.deleteDomain - Removed
domains.get - Removed
domains.list - Removed
domains.verify - Changed
guests.bookings2 fields changed- added
Input schema / properties / guestId / descriptionAdded value: +"Guest ID from guests.search or guests.create." - added
Input schema / properties / pageAdded value: +{ + "default": 1, + "description": "Page number, starting at 1. Omit for the first page.", + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" +}
- Changed
guests.create14 fields changed- added
Input schema / properties / billingAddress / additionalPropertiesAdded value: +false - added
Input schema / properties / billingAddress / descriptionAdded value: +"Guest billing address." - added
Input schema / properties / billingAddress / properties / city / descriptionAdded value: +"City or town." - added
Input schema / properties / billingAddress / properties / country / descriptionAdded value: +"Two-letter country code, such as GB." - added
Input schema / properties / billingAddress / properties / postcode / descriptionAdded value: +"Postal code. Omit when not applicable." - added
Input schema / properties / billingAddress / properties / region / descriptionAdded value: +"State or region. Omit when not applicable." - added
Input schema / properties / billingAddress / properties / street / descriptionAdded value: +"Street address." - added
Input schema / properties / email / descriptionAdded value: +"Contact email address." - added
Input schema / properties / familyName / descriptionAdded value: +"Guest family name, from 1 to 100 characters." - added
Input schema / properties / givenName / descriptionAdded value: +"Guest given name, from 1 to 100 characters." - added
Input schema / properties / phone / descriptionAdded value: +"Contact phone number, including the country calling code." - added
Input schema / properties / phone / minLengthAdded value: +1 - removed
Input schema / properties / phone / propertiesRemoved value: -{ - "country": { - "type": "string" - }, - "number": { - "type": "string" - } -} - changed
Input schema / properties / phone / typePrevious value: -"object"New value: +"string"
- Changed
guests.search7 fields changed- added
Input schema / properties / pageAdded value: +{ + "default": 1, + "description": "Page number, starting at 1. Omit for the first page.", + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" +} - added
Input schema / properties / query / descriptionAdded value: +"Search text, up to 200 characters." - added
Output schema / properties / result / additionalPropertiesAdded value: +false - removed
Output schema / properties / result / itemsRemoved value: -{ - "additionalProperties": false, - "properties": { - "familyName": { - "type": "string" - }, - "givenName": { - "type": "string" - }, - "id": { - "type": "string" - } - }, - "required": [ - "id", - "givenName", - "familyName" - ], - "type": "object" -} - added
Output schema / properties / result / propertiesAdded value: +{ + "items": { + "items": { + "additionalProperties": false, + "properties": { + "familyName": { + "type": "string" + }, + "givenName": { + "type": "string" + }, + "id": { + "type": "string" + } + }, + "required": [ + "id", + "givenName", + "familyName" + ], + "type": "object" + }, + "type": "array" + }, + "page": { + "additionalProperties": false, + "properties": { + "count": { + "type": "number" + }, + "next": { + "type": "number" + }, + "number": { + "type": "number" + }, + "previous": { + "type": "number" + }, + "size": { + "type": "number" + }, + "total": { + "type": "number" + } + }, + "required": [ + "size", + "count", + "number", + "total", + "next", + "previous" + ], + "type": "object" + } +} - added
Output schema / properties / result / requiredAdded value: +[ + "items" +] - changed
Output schema / properties / result / typePrevious value: -"array"New value: +"object"
- Changed
metrics.list2 fields changed- added
Input schema / properties / compare / descriptionAdded value: +"Compare with the preceding period or the same period in the previous year." - added
Input schema / properties / period / descriptionAdded value: +"Hotel performance period to measure."
- Removed
paymentlinks.get - Removed
paymentlinks.list - Removed
products.archive - Removed
products.create - Removed
products.get - Removed
products.list - Removed
products.update - Removed
rateplans.create - Removed
rateplans.get - Removed
rateplans.list - Removed
rateplans.update - Changed
reviews.list20 fields changed- added
Input schema / properties / page / additionalPropertiesAdded value: +false - added
Input schema / properties / page / descriptionAdded value: +"Page size and number. Use page.next from the result to get more reviews." - added
Input schema / properties / page / properties / number / descriptionAdded value: +"Page number, starting at 1." - added
Input schema / properties / page / properties / number / exclusiveMinimumAdded value: +0 - added
Input schema / properties / page / properties / number / maximumAdded value: +9007199254740991 - changed
Input schema / properties / page / properties / number / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / page / properties / size / descriptionAdded value: +"Number of results per page, from 1 to 100." - added
Input schema / properties / page / properties / size / maximumAdded value: +100 - added
Input schema / properties / page / properties / size / minimumAdded value: +1 - changed
Input schema / properties / page / properties / size / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / query / descriptionAdded value: +"Search text, up to 200 characters." - added
Input schema / properties / replyStatuses / descriptionAdded value: +"Reply statuses to include. Omit for all statuses." - added
Input schema / properties / source / descriptionAdded value: +"Review platform to include. Omit for all platforms." - added
Input schema / properties / urgency / descriptionAdded value: +"Set urgent to return urgent reviews only." - added
Output schema / properties / result / properties / items / items / properties / guestNameAdded value: +{ + "type": "string" +} - added
Output schema / properties / result / properties / items / items / properties / publishedAtAdded value: +{ + "type": "string" +} - added
Output schema / properties / result / properties / items / items / properties / repliedAtAdded value: +{ + "type": "string" +} - added
Output schema / properties / result / properties / items / items / properties / replyErrorAdded value: +{ + "type": "string" +} - added
Output schema / properties / result / properties / items / items / properties / replySendTextAdded value: +{ + "type": "string" +} - added
Output schema / properties / result / properties / syncsAdded value: +{ + "items": { + "additionalProperties": false, + "properties": { + "error": { + "additionalProperties": false, + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + "erroredAt": { + "type": "string" + }, + "source": { + "type": "string" + }, + "syncedAt": { + "type": "string" + } + }, + "required": [ + "source" + ], + "type": "object" + }, + "type": "array" +}
- Removed
reviews.reply - Removed
reviews.saveDraft - Removed
reviews.sync - Removed
stays.configure - Changed
stays.current4 fields changed- added
Output schema / properties / result / properties / channelsAdded value: +{ + "type": "string" +} - added
Output schema / properties / result / properties / logoAdded value: +{ + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" +} - added
Output schema / properties / result / properties / reviewsAdded value: +{ + "type": "string" +} - added
Output schema / properties / result / properties / settings / properties / booking / properties / cancellationPolicyAdded value: +{ + "additionalProperties": false, + "properties": { + "enabled": { + "type": "boolean" + }, + "noshow": { + "additionalProperties": false, + "properties": { + "type": { + "type": "string" + }, + "value": { + "type": "number" + } + }, + "required": [ + "type" + ], + "type": "object" + }, + "presetId": { + "type": "string" + }, + "tiers": { + "items": { + "additionalProperties": false, + "properties": { + "minDays": { + "type": "number" + }, + "penalty": { + "additionalProperties": false, + "properties": { + "type": { + "type": "string" + }, + "value": { + "type": "number" + } + }, + "required": [ + "type" + ], + "type": "object" + } + }, + "required": [ + "minDays", + "penalty" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "enabled", + "tiers", + "noshow" + ], + "type": "object" +}
- Removed
stays.update - Removed
taxes.create - Removed
taxes.get - Removed
taxes.list - Removed
taxes.update - Removed
units.create - Removed
units.createType - Changed
units.get1 field changed- added
Input schema / properties / id / descriptionAdded value: +"ID of the record to get or change."
- Changed
units.list1 field changed- added
Input schema / properties / pageAdded value: +{ + "default": 1, + "description": "Page number, starting at 1. Omit for the first page.", + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" +}
- Changed
units.listTypes1 field changed- added
Output schema / properties / result / properties / items / items / properties / photosAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +}
- Changed
units.occupancy3 fields changed- added
Input schema / properties / end / descriptionAdded value: +"End hotel date in YYYY-MM-DD format." - added
Input schema / properties / id / descriptionAdded value: +"ID of the record to get or change." - added
Input schema / properties / start / descriptionAdded value: +"Start hotel date in YYYY-MM-DD format."
9 tool updates
- Changed
bookings.cancel5 fields changed- added
Output schema / properties / result / properties / booking / properties / units / items / properties / cancellationPolicyAdded value: +{ + "additionalProperties": false, + "properties": { + "enabled": { + "type": "boolean" + }, + "noshow": { + "additionalProperties": false, + "properties": { + "type": { + "type": "string" + }, + "value": { + "type": "number" + } + }, + "required": [ + "type" + ], + "type": "object" + }, + "presetId": { + "type": "string" + }, + "tiers": { + "items": { + "additionalProperties": false, + "properties": { + "minDays": { + "type": "number" + }, + "penalty": { + "additionalProperties": false, + "properties": { + "type": { + "type": "string" + }, + "value": { + "type": "number" + } + }, + "required": [ + "type" + ], + "type": "object" + } + }, + "required": [ + "minDays", + "penalty" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "enabled", + "tiers", + "noshow" + ], + "type": "object" +} - added
Output schema / properties / result / properties / booking / properties / units / items / properties / idAdded value: +{ + "type": "string" +} - removed
Output schema / properties / result / properties / penaltyAmountRemoved value: -{ - "additionalProperties": false, - "properties": { - "currency": { - "type": "string" - }, - "number": { - "type": "string" - } - }, - "required": [ - "number", - "currency" - ], - "type": "object" -} - added
Output schema / properties / result / properties / planAdded value: +{ + "additionalProperties": false, + "properties": { + "afterPrice": { + "additionalProperties": false, + "properties": { + "penalty": { + "additionalProperties": false, + "properties": { + "currency": { + "type": "string" + }, + "number": { + "type": "string" + } + }, + "required": [ + "number", + "currency" + ], + "type": "object" + }, + "products": { + "additionalProperties": false, + "properties": { + "currency": { + "type": "string" + }, + "number": { + "type": "string" + } + }, + "required": [ + "number", + "currency" + ], + "type": "object" + }, + "subtotal": { + "additionalProperties": false, + "properties": { + "currency": { + "type": "string" + }, + "number": { + "type": "string" + } + }, + "required": [ + "number", + "currency" + ], + "type": "object" + }, + "taxes": { + "additionalProperties": false, + "properties": { + "currency": { + "type": "string" + }, + "number": { + "type": "string" + } + }, + "required": [ + "number", + "currency" + ], + "type": "object" + }, + "total": { + "additionalProperties": false, + "properties": { + "currency": { + "type": "string" + }, + "number": { + "type": "string" + } + }, + "required": [ + "number", + "currency" + ], + "type": "object" + } + }, + "required": [ + "subtotal", + "taxes", + "products", + "penalty", + "total" + ], + "type": "object" + }, + "appliedPenalty": { + "additionalProperties": false, + "properties": { + "currency": { + "type": "string" + }, + "number": { + "type": "string" + } + }, + "required": [ + "number", + "currency" + ], + "type": "object" + }, + "beforePrice": { + "additionalProperties": false, + "properties": { + "penalty": { + "additionalProperties": false, + "properties": { + "currency": { + "type": "string" + }, + "number": { + "type": "string" + } + }, + "required": [ + "number", + "currency" + ], + "type": "object" + }, + "products": { + "additionalProperties": false, + "properties": { + "currency": { + "type": "string" + }, + "number": { + "type": "string" + } + }, + "required": [ + "number", + "currency" + ], + "type": "object" + }, + "subtotal": { + "additionalProperties": false, + "properties": { + "currency": { + "type": "string" + }, + "number": { + "type": "string" + } + }, + "required": [ + "number", + "currency" + ], + "type": "object" + }, + "taxes": { + "additionalProperties": false, + "properties": { + "currency": { + "type": "string" + }, + "number": { + "type": "string" + } + }, + "required": [ + "number", + "currency" + ], + "type": "object" + }, + "total": { + "additionalProperties": false, + "properties": { + "currency": { + "type": "string" + }, + "number": { + "type": "string" + } + }, + "required": [ + "number", + "currency" + ], + "type": "object" + } + }, + "required": [ + "subtotal", + "taxes", + "products", + "penalty", + "total" + ], + "type": "object" + }, + "bookingId": { + "type": "string" + }, + "calculatedPenalty": { + "additionalProperties": false, + "properties": { + "currency": { + "type": "string" + }, + "number": { + "type": "string" + } + }, + "required": [ + "number", + "currency" + ], + "type": "object" + }, + "effectiveDate": { + "additionalProperties": false, + "properties": { + "day": { + "type": "number" + }, + "month": { + "type": "number" + }, + "year": { + "type": "number" + } + }, + "required": [ + "year", + "month", + "day" + ], + "type": "object" + }, + "ready": { + "type": "boolean" + }, + "settlement": { + "additionalProperties": false, + "properties": { + "amount": { + "additionalProperties": false, + "properties": { + "currency": { + "type": "string" + }, + "number": { + "type": "string" + } + }, + "required": [ + "number", + "currency" + ], + "type": "object" + }, + "status": { + "enum": [ + "guest_owes", + "balanced", + "hotel_owes", + "external" + ], + "type": "string" + } + }, + "required": [ + "status", + "amount" + ], + "type": "object" + }, + "units": { + "items": { + "additionalProperties": false, + "properties": { + "appliedPenalty": { + "additionalProperties": false, + "properties": { + "currency": { + "type": "string" + }, + "number": { + "type": "string" + } + }, + "required": [ + "number", + "currency" + ], + "type": "object" + }, + "calculatedPenalty": { + "additionalProperties": false, + "properties": { + "currency": { + "type": "string" + }, + "number": { + "type": "string" + } + }, + "required": [ + "number", + "currency" + ], + "type": "object" + }, + "canceledProductIds": { + "items": { + "type": "string" + }, + "type": "array" + }, + "decision": { + "type": "string" + }, + "decisionReason": { + "type": "string" + }, + "penaltyBasis": { + "additionalProperties": false, + "properties": { + "currency": { + "type": "string" + }, + "number": { + "type": "string" + } + }, + "required": [ + "number", + "currency" + ], + "type": "object" + }, + "requiresDecision": { + "type": "boolean" + }, + "resultingCheckoutAt": { + "additionalProperties": false, + "properties": { + "day": { + "type": "number" + }, + "month": { + "type": "number" + }, + "year": { + "type": "number" + } + }, + "required": [ + "year", + "month", + "day" + ], + "type": "object" + }, + "retainedSubtotal": { + "additionalProperties": false, + "properties": { + "currency": { + "type": "string" + }, + "number": { + "type": "string" + } + }, + "required": [ + "number", + "currency" + ], + "type": "object" + }, + "termsAvailable": { + "type": "boolean" + }, + "unit": { + "additionalProperties": false, + "properties": { + "cancellationPolicy": { + "additionalProperties": false, + "properties": { + "enabled": { + "type": "boolean" + }, + "noshow": { + "additionalProperties": false, + "properties": { + "type": { + "type": "string" + }, + "value": { + "type": "number" + } + }, + "required": [ + "type" + ], + "type": "object" + }, + "presetId": { + "type": "string" + }, + "tiers": { + "items": { + "additionalProperties": false, + "properties": { + "minDays": { + "type": "number" + }, + "penalty": { + "additionalProperties": false, + "properties": { + "type": { + "type": "string" + }, + "value": { + "type": "number" + } + }, + "required": [ + "type" + ], + "type": "object" + } + }, + "required": [ + "minDays", + "penalty" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "enabled", + "tiers", + "noshow" + ], + "type": "object" + }, + "checkinAt": { + "additionalProperties": false, + "properties": { + "day": { + "type": "number" + }, + "month": { + "type": "number" + }, + "year": { + "type": "number" + } + }, + "required": [ + "year", + "month", + "day" + ], + "type": "object" + }, + "checkoutAt": { + "additionalProperties": false, + "properties": { + "day": { + "type": "number" + }, + "month": { + "type": "number" + }, + "year": { + "type": "number" + } + }, + "required": [ + "year", + "month", + "day" + ], + "type": "object" + }, + "guests": { + "additionalProperties": false, + "properties": { + "adults": { + "type": "number" + }, + "children": { + "type": "number" + }, + "infants": { + "type": "number" + }, + "pets": { + "type": "number" + } + }, + "required": [ + "adults" + ], + "type": "object" + }, + "id": { + "type": "string" + }, + "ratePlanId": { + "type": "string" + }, + "subtotal": { + "additionalProperties": false, + "properties": { + "currency": { + "type": "string" + }, + "number": { + "type": "string" + } + }, + "required": [ + "number", + "currency" + ], + "type": "object" + }, + "unitId": { + "type": "string" + } + }, + "required": [ + "unitId", + "checkinAt", + "checkoutAt", + "guests" + ], + "type": "object" + }, + "warnings": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "unit", + "termsAvailable", + "penaltyBasis", + "calculatedPenalty", + "appliedPenalty", + "decision", + "decisionReason", + "requiresDecision", + "retainedSubtotal", + "resultingCheckoutAt", + "canceledProductIds", + "warnings" + ], + "type": "object" + }, + "minItems": 1, + "type": "array" + } + }, + "required": [ + "bookingId", + "effectiveDate", + "beforePrice", + "afterPrice", + "units", + "settlement", + "calculatedPenalty", + "appliedPenalty", + "ready" + ], + "type": "object" +} - removed
Output schema / properties / result / properties / refundAmountRemoved value: -{ - "additionalProperties": false, - "properties": { - "currency": { - "type": "string" - }, - "number": { - "type": "string" - } - }, - "required": [ - "number", - "currency" - ], - "type": "object" -}
- Changed
bookings.create2 fields changed- added
Output schema / properties / result / properties / booking / properties / units / items / properties / cancellationPolicyAdded value: +{ + "additionalProperties": false, + "properties": { + "enabled": { + "type": "boolean" + }, + "noshow": { + "additionalProperties": false, + "properties": { + "type": { + "type": "string" + }, + "value": { + "type": "number" + } + }, + "required": [ + "type" + ], + "type": "object" + }, + "presetId": { + "type": "string" + }, + "tiers": { + "items": { + "additionalProperties": false, + "properties": { + "minDays": { + "type": "number" + }, + "penalty": { + "additionalProperties": false, + "properties": { + "type": { + "type": "string" + }, + "value": { + "type": "number" + } + }, + "required": [ + "type" + ], + "type": "object" + } + }, + "required": [ + "minDays", + "penalty" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "enabled", + "tiers", + "noshow" + ], + "type": "object" +} - added
Output schema / properties / result / properties / booking / properties / units / items / properties / idAdded value: +{ + "type": "string" +}
- Changed
bookings.get2 fields changed- added
Output schema / properties / result / properties / booking / properties / units / items / properties / cancellationPolicyAdded value: +{ + "additionalProperties": false, + "properties": { + "enabled": { + "type": "boolean" + }, + "noshow": { + "additionalProperties": false, + "properties": { + "type": { + "type": "string" + }, + "value": { + "type": "number" + } + }, + "required": [ + "type" + ], + "type": "object" + }, + "presetId": { + "type": "string" + }, + "tiers": { + "items": { + "additionalProperties": false, + "properties": { + "minDays": { + "type": "number" + }, + "penalty": { + "additionalProperties": false, + "properties": { + "type": { + "type": "string" + }, + "value": { + "type": "number" + } + }, + "required": [ + "type" + ], + "type": "object" + } + }, + "required": [ + "minDays", + "penalty" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "enabled", + "tiers", + "noshow" + ], + "type": "object" +} - added
Output schema / properties / result / properties / booking / properties / units / items / properties / idAdded value: +{ + "type": "string" +}
- Changed
bookings.list2 fields changed- added
Output schema / properties / result / properties / items / items / properties / units / items / properties / cancellationPolicyAdded value: +{ + "additionalProperties": false, + "properties": { + "enabled": { + "type": "boolean" + }, + "noshow": { + "additionalProperties": false, + "properties": { + "type": { + "type": "string" + }, + "value": { + "type": "number" + } + }, + "required": [ + "type" + ], + "type": "object" + }, + "presetId": { + "type": "string" + }, + "tiers": { + "items": { + "additionalProperties": false, + "properties": { + "minDays": { + "type": "number" + }, + "penalty": { + "additionalProperties": false, + "properties": { + "type": { + "type": "string" + }, + "value": { + "type": "number" + } + }, + "required": [ + "type" + ], + "type": "object" + } + }, + "required": [ + "minDays", + "penalty" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "enabled", + "tiers", + "noshow" + ], + "type": "object" +} - added
Output schema / properties / result / properties / items / items / properties / units / items / properties / idAdded value: +{ + "type": "string" +}
- Changed
bookings.reject2 fields changed- added
Output schema / properties / result / properties / booking / properties / units / items / properties / cancellationPolicyAdded value: +{ + "additionalProperties": false, + "properties": { + "enabled": { + "type": "boolean" + }, + "noshow": { + "additionalProperties": false, + "properties": { + "type": { + "type": "string" + }, + "value": { + "type": "number" + } + }, + "required": [ + "type" + ], + "type": "object" + }, + "presetId": { + "type": "string" + }, + "tiers": { + "items": { + "additionalProperties": false, + "properties": { + "minDays": { + "type": "number" + }, + "penalty": { + "additionalProperties": false, + "properties": { + "type": { + "type": "string" + }, + "value": { + "type": "number" + } + }, + "required": [ + "type" + ], + "type": "object" + } + }, + "required": [ + "minDays", + "penalty" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "enabled", + "tiers", + "noshow" + ], + "type": "object" +} - added
Output schema / properties / result / properties / booking / properties / units / items / properties / idAdded value: +{ + "type": "string" +}
- Changed
guests.bookings2 fields changed- added
Output schema / properties / result / properties / bookings / properties / items / items / properties / units / items / properties / cancellationPolicyAdded value: +{ + "additionalProperties": false, + "properties": { + "enabled": { + "type": "boolean" + }, + "noshow": { + "additionalProperties": false, + "properties": { + "type": { + "type": "string" + }, + "value": { + "type": "number" + } + }, + "required": [ + "type" + ], + "type": "object" + }, + "presetId": { + "type": "string" + }, + "tiers": { + "items": { + "additionalProperties": false, + "properties": { + "minDays": { + "type": "number" + }, + "penalty": { + "additionalProperties": false, + "properties": { + "type": { + "type": "string" + }, + "value": { + "type": "number" + } + }, + "required": [ + "type" + ], + "type": "object" + } + }, + "required": [ + "minDays", + "penalty" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "enabled", + "tiers", + "noshow" + ], + "type": "object" +} - added
Output schema / properties / result / properties / bookings / properties / items / items / properties / units / items / properties / idAdded value: +{ + "type": "string" +}
- Removed
reviews.draft - Changed
reviews.list1 field changed- added
Output schema / properties / result / properties / items / items / properties / draftTextAdded value: +{ + "type": "string" +}
- Added
reviews.saveDraft
45 tool updates
- First observed
bookings.cancel - First observed
bookings.create - First observed
bookings.get - First observed
bookings.list - First observed
bookings.reject - First observed
connectors.disconnect - First observed
connectors.list - First observed
connectors.specs - First observed
domains.create - First observed
domains.deleteDomain - First observed
domains.get - First observed
domains.list - First observed
domains.verify - First observed
guests.bookings - First observed
guests.create - First observed
guests.search - First observed
metrics.list - First observed
paymentlinks.get - First observed
paymentlinks.list - First observed
products.archive - First observed
products.create - First observed
products.get - First observed
products.list - First observed
products.update - First observed
rateplans.create - First observed
rateplans.get - First observed
rateplans.list - First observed
rateplans.update - First observed
reviews.draft - First observed
reviews.list - First observed
reviews.reply - First observed
reviews.sync - First observed
stays.configure - First observed
stays.current - First observed
stays.update - First observed
taxes.create - First observed
taxes.get - First observed
taxes.list - First observed
taxes.update - First observed
units.create - First observed
units.createType - First observed
units.get - First observed
units.list - First observed
units.listTypes - First observed
units.occupancy
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceRemote MCP server that lets AI assistants read tracked competitive intelligence — competitor news, reviews, website changes, social posts and ads — and act on it by managing projects, competitors, battle cards, reports and canvases. Every answer carries a source and a date, and write actions only publish when explicitly shared.MIT
- AlicenseCqualityCmaintenanceCompetitor Monitor AI - MCP server providing AI-powered tools and automation by MEOK AI Labs112 npm58 PyPIMIT
- AlicenseAqualityCmaintenanceEnables brand visibility monitoring across major AI platforms like ChatGPT, Claude, Gemini, and Perplexity. It allows users to track visibility scores, analyze competitor data, and receive actionable insights to improve AI-generated brand recommendations.1623 npm1MIT

industrylens-mcpofficial
AlicenseNot gradedqualityBmaintenanceBrowse IndustryLens's published competitive-intelligence reports and head-to-head competitor comparisons from any AI agent — real, source-backed data.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.