Skip to main content
Glama

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

Ownership verified
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

A4.1/5.0

Scored across 15 tools

Disambiguation4/5

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.

Naming Consistency4/5

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.

Tool Count5/5

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.

Completeness3/5

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 tools
bookings.getGet a booking at the selected hotel by its IDA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
idYesBooking record ID from bookings.list or guests.bookings.

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 codeA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
endNoEnd hotel date in YYYY-MM-DD format, on or after start, including arrivals on this date. Required with start.
pageNoPage number, starting at 1. Omit for the first page. Use the returned page.next number to continue.
queryNoPartial guest name, email, or booking code. Code spaces and separators are ignored. Omit to list all matches.
startNoStart hotel date in YYYY-MM-DD format, including departures on this date. Required with end.
statusesNoBooking statuses to include. Omit or use [] for all statuses.
stayStatusesNoRoom 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

NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 guestA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
pageNoPage number, starting at 1. Omit for the first page.
guestIdYesGuest record ID from guests.list, guests.search, or guests.create.

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

NameRequiredDescriptionDefault
emailYesGuest email address, such as jordan@example.com.
phoneNoContact phone number, including the country calling code.
givenNameYesGuest given name, from 1 to 100 characters.
familyNameYesGuest family name, from 1 to 100 characters.
billingAddressNoOptional guest billing address.

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 matchingA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
pageNoPage number, starting at 1. Omit for the first page.
queryNoPartial guest name or email, up to 200 characters. Omit to list all guests.

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.9/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 searchA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
pageNoPage number, starting at 1. Omit for the first page.
queryYesFull-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

NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.searchA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
idYesPage ID from a knowledge search result.

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 topicA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
limitNoMaximum source sections to return. Omit for ten sections.
queryYesQuestion or topic to research, up to 500 characters.

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 datesA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
endNoEnd hotel date, excluded. Must be after start.
startNoStart hotel date, included. Supply with end instead of period.
periodNoReporting period based on today in the hotel timezone. For example, this_month covers the whole current calendar month.
compareYesCompare with the preceding period or the same period in the previous year.

Output Schema

NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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 statusA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
endNoReview publication end date in UTC, excluded. Must be after start.
pageYesRequired 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.
queryNoSearch text, up to 200 characters.
startNoReview publication start date in UTC, included. Supply with end.
sourceNoReview platform to include. Omit for all platforms.
urgencyNoSet urgent to return urgent reviews only.
replyStatusesNoReply statuses to include. Omit for all statuses.

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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 policiesA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 unitIdA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
idYesRoom record ID from units.list or a booking room's unitId.

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 hotelA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
pageNoPage number, starting at 1. Omit for the first page.

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 typesA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 roomA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
idYesRoom record ID from units.list or units.get.
endYesEnd hotel date in YYYY-MM-DD format. Must be after start. This date is excluded from the requested nights.
startYesFirst hotel date to check, in YYYY-MM-DD format. End must be after start.

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

  1. 2 tool updates
    • Changedmetrics.list3 fields changed
      • addedInput schema / properties / end
        Added 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"
        +}
      • addedInput schema / properties / start
        Added 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"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "period",
        -  "compare"
        -]New value: +[
        +  "compare"
        +]
    • Changedreviews.list3 fields changed
      • addedInput schema / properties / end
        Added 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"
        +}
      • addedInput schema / properties / start
        Added 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"
        +}
      • addedOutput schema / properties / result / properties / items / items / properties / status
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "canReply": {
        +      "type": "boolean"
        +    },
        +    "reason": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "canReply",
        +    "reason"
        +  ],
        +  "type": "object"
        +}
  2. 1 tool update
    • Changedmetrics.list5 fields changed
      • addedOutput schema / properties / result / properties / metrics / items / properties / lower
        Added value: +{
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / result / properties / metrics / items / properties / series
        Added value: +{
        +  "items": {
        +    "additionalProperties": false,
        +    "properties": {
        +      "date": {
        +        "type": "string"
        +      },
        +      "value": {
        +        "type": "number"
        +      }
        +    },
        +    "required": [
        +      "date",
        +      "value"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • changedOutput schema / properties / result / properties / metrics / items / required
        Previous value: -[
        -  "id",
        -  "name",
        -  "description",
        -  "valueType",
        -  "value"
        -]New value: +[
        +  "id",
        +  "name",
        +  "description",
        +  "valueType",
        +  "lower",
        +  "series"
        +]
      • removedOutput schema / properties / result / properties / timeseries
        Removed 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"
        -}
      • changedOutput schema / properties / result / required
        Previous value: -[
        -  "metrics",
        -  "timeseries"
        -]New value: +[
        +  "metrics"
        +]
  3. 3 tool updates
    • Changedbookings.get1 field changed
      • addedOutput schema / properties / result / properties / booking / properties / products
        Added 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"
        +}
    • Changedbookings.list1 field changed
      • addedOutput schema / properties / result / properties / items / items / properties / products
        Added 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"
        +}
    • Changedguests.bookings1 field changed
      • addedOutput schema / properties / result / properties / bookings / properties / items / items / properties / products
        Added 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"
        +}
  4. 3 tool updates
    • Changedbookings.get2 fields changed
      • addedOutput schema / properties / result / properties / booking / properties / units / items / properties / stayStatus
        Added value: +{
        +  "enum": [
        +    "booked",
        +    "staying",
        +    "completed"
        +  ],
        +  "type": "string"
        +}
      • changedOutput schema / properties / result / properties / booking / properties / units / items / required
        Previous value: -[
        -  "unitId",
        -  "checkinAt",
        -  "checkoutAt",
        -  "guests"
        -]New value: +[
        +  "unitId",
        +  "stayStatus",
        +  "checkinAt",
        +  "checkoutAt",
        +  "guests"
        +]
    • Changedbookings.list3 fields changed
      • addedInput schema / properties / stayStatuses
        Added 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"
        +}
      • addedOutput schema / properties / result / properties / items / items / properties / units / items / properties / stayStatus
        Added value: +{
        +  "enum": [
        +    "booked",
        +    "staying",
        +    "completed"
        +  ],
        +  "type": "string"
        +}
      • changedOutput schema / properties / result / properties / items / items / properties / units / items / required
        Previous value: -[
        -  "unitId",
        -  "checkinAt",
        -  "checkoutAt",
        -  "guests"
        -]New value: +[
        +  "unitId",
        +  "stayStatus",
        +  "checkinAt",
        +  "checkoutAt",
        +  "guests"
        +]
    • Changedguests.bookings2 fields changed
      • addedOutput schema / properties / result / properties / bookings / properties / items / items / properties / units / items / properties / stayStatus
        Added value: +{
        +  "enum": [
        +    "booked",
        +    "staying",
        +    "completed"
        +  ],
        +  "type": "string"
        +}
      • changedOutput schema / properties / result / properties / bookings / properties / items / items / properties / units / items / required
        Previous value: -[
        -  "unitId",
        -  "checkinAt",
        -  "checkoutAt",
        -  "guests"
        -]New value: +[
        +  "unitId",
        +  "stayStatus",
        +  "checkinAt",
        +  "checkoutAt",
        +  "guests"
        +]
  5. 9 tool updates
    • Changedbookings.get1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"ID of the record to get or change."New value: +"Booking record ID from bookings.list or guests.bookings."
    • Changedbookings.list5 fields changed
      • addedInput schema / examples
        Added value: +[
        +  {
        +    "end": "2026-11-07",
        +    "query": "Jordan",
        +    "start": "2026-11-01",
        +    "statuses": [
        +      "booked"
        +    ]
        +  }
        +]
      • changedInput schema / properties / end / description
        Previous 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."
      • changedInput schema / properties / page / description
        Previous 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."
      • changedInput schema / properties / start / description
        Previous 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."
      • changedInput schema / properties / statuses / description
        Previous value: -"Optional booking statuses."New value: +"Booking statuses to include. Omit or use [] for all statuses."
    • Changedguests.bookings1 field changed
      • changedInput schema / properties / guestId / description
        Previous value: -"Guest ID from guests.search or guests.create."New value: +"Guest record ID from guests.list, guests.search, or guests.create."
    • Changedguests.create3 fields changed
      • addedInput schema / examples
        Added value: +[
        +  {
        +    "email": "jordan@example.com",
        +    "familyName": "Sample",
        +    "givenName": "Jordan"
        +  }
        +]
      • changedInput schema / properties / billingAddress / description
        Previous value: -"Guest billing address."New value: +"Optional guest billing address."
      • changedInput schema / properties / email / description
        Previous value: -"Contact email address."New value: +"Guest email address, such as jordan@example.com."
    • Changedguests.search1 field changed
      • changedInput schema / properties / query / description
        Previous 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."
    • Changedmetrics.list1 field changed
      • changedInput schema / properties / period / description
        Previous 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."
    • Changedreviews.list1 field changed
      • changedInput schema / properties / page / description
        Previous 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."
    • Changedunits.get1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"ID of the record to get or change."New value: +"Room record ID from units.list or a booking room's unitId."
    • Changedunits.occupancy4 fields changed
      • addedInput schema / examples
        Added value: +[
        +  {
        +    "end": "2026-11-03",
        +    "id": "room-id-from-units-list",
        +    "start": "2026-11-01"
        +  }
        +]
      • changedInput schema / properties / end / description
        Previous 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."
      • changedInput schema / properties / id / description
        Previous value: -"ID of the record to get or change."New value: +"Room record ID from units.list or units.get."
      • changedInput schema / properties / start / description
        Previous 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."
  6. 2 tool updates
    • Changedbookings.list4 fields changed
      • changedInput schema / properties / end / description
        Previous value: -"Range end in YYYY-MM-DD format."New value: +"Optional range end in YYYY-MM-DD format. Supply start too."
      • addedInput schema / properties / query
        Added 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"
        +}
      • changedInput schema / properties / start / description
        Previous value: -"Range start in YYYY-MM-DD format."New value: +"Optional range start in YYYY-MM-DD format. Supply end too."
      • removedInput schema / required
        Removed value: -[
        -  "start",
        -  "end"
        -]
    • Addedguests.list
  7. 2 tool updates
    • Addedknowledge.read
    • Addedknowledge.search
  8. 1 tool update
    • Changedmetrics.list1 field changed
      • changedOutput schema / properties / result / properties / metrics / items / properties / comparison / required
        Previous value: -[
        -  "period",
        -  "value",
        -  "percent"
        -]New value: +[
        +  "period",
        +  "value"
        +]
  9. 44 tool updates
    • Removedbookings.cancel
    • Removedbookings.create
    • Changedbookings.get2 fields changed
      • addedInput schema / properties / id / description
        Added value: +"ID of the record to get or change."
      • addedOutput schema / properties / result / required
        Added value: +[
        +  "booking"
        +]
    • Removedbookings.reject
    • Removedconnectors.disconnect
    • Removedconnectors.list
    • Removedconnectors.specs
    • Removeddomains.create
    • Removeddomains.deleteDomain
    • Removeddomains.get
    • Removeddomains.list
    • Removeddomains.verify
    • Changedguests.bookings2 fields changed
      • addedInput schema / properties / guestId / description
        Added value: +"Guest ID from guests.search or guests.create."
      • addedInput schema / properties / page
        Added value: +{
        +  "default": 1,
        +  "description": "Page number, starting at 1. Omit for the first page.",
        +  "exclusiveMinimum": 0,
        +  "maximum": 9007199254740991,
        +  "type": "integer"
        +}
    • Changedguests.create14 fields changed
      • addedInput schema / properties / billingAddress / additionalProperties
        Added value: +false
      • addedInput schema / properties / billingAddress / description
        Added value: +"Guest billing address."
      • addedInput schema / properties / billingAddress / properties / city / description
        Added value: +"City or town."
      • addedInput schema / properties / billingAddress / properties / country / description
        Added value: +"Two-letter country code, such as GB."
      • addedInput schema / properties / billingAddress / properties / postcode / description
        Added value: +"Postal code. Omit when not applicable."
      • addedInput schema / properties / billingAddress / properties / region / description
        Added value: +"State or region. Omit when not applicable."
      • addedInput schema / properties / billingAddress / properties / street / description
        Added value: +"Street address."
      • addedInput schema / properties / email / description
        Added value: +"Contact email address."
      • addedInput schema / properties / familyName / description
        Added value: +"Guest family name, from 1 to 100 characters."
      • addedInput schema / properties / givenName / description
        Added value: +"Guest given name, from 1 to 100 characters."
      • addedInput schema / properties / phone / description
        Added value: +"Contact phone number, including the country calling code."
      • addedInput schema / properties / phone / minLength
        Added value: +1
      • removedInput schema / properties / phone / properties
        Removed value: -{
        -  "country": {
        -    "type": "string"
        -  },
        -  "number": {
        -    "type": "string"
        -  }
        -}
      • changedInput schema / properties / phone / type
        Previous value: -"object"New value: +"string"
    • Changedguests.search7 fields changed
      • addedInput schema / properties / page
        Added value: +{
        +  "default": 1,
        +  "description": "Page number, starting at 1. Omit for the first page.",
        +  "exclusiveMinimum": 0,
        +  "maximum": 9007199254740991,
        +  "type": "integer"
        +}
      • addedInput schema / properties / query / description
        Added value: +"Search text, up to 200 characters."
      • addedOutput schema / properties / result / additionalProperties
        Added value: +false
      • removedOutput schema / properties / result / items
        Removed value: -{
        -  "additionalProperties": false,
        -  "properties": {
        -    "familyName": {
        -      "type": "string"
        -    },
        -    "givenName": {
        -      "type": "string"
        -    },
        -    "id": {
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "id",
        -    "givenName",
        -    "familyName"
        -  ],
        -  "type": "object"
        -}
      • addedOutput schema / properties / result / properties
        Added 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"
        +  }
        +}
      • addedOutput schema / properties / result / required
        Added value: +[
        +  "items"
        +]
      • changedOutput schema / properties / result / type
        Previous value: -"array"New value: +"object"
    • Changedmetrics.list2 fields changed
      • addedInput schema / properties / compare / description
        Added value: +"Compare with the preceding period or the same period in the previous year."
      • addedInput schema / properties / period / description
        Added value: +"Hotel performance period to measure."
    • Removedpaymentlinks.get
    • Removedpaymentlinks.list
    • Removedproducts.archive
    • Removedproducts.create
    • Removedproducts.get
    • Removedproducts.list
    • Removedproducts.update
    • Removedrateplans.create
    • Removedrateplans.get
    • Removedrateplans.list
    • Removedrateplans.update
    • Changedreviews.list20 fields changed
      • addedInput schema / properties / page / additionalProperties
        Added value: +false
      • addedInput schema / properties / page / description
        Added value: +"Page size and number. Use page.next from the result to get more reviews."
      • addedInput schema / properties / page / properties / number / description
        Added value: +"Page number, starting at 1."
      • addedInput schema / properties / page / properties / number / exclusiveMinimum
        Added value: +0
      • addedInput schema / properties / page / properties / number / maximum
        Added value: +9007199254740991
      • changedInput schema / properties / page / properties / number / type
        Previous value: -"number"New value: +"integer"
      • addedInput schema / properties / page / properties / size / description
        Added value: +"Number of results per page, from 1 to 100."
      • addedInput schema / properties / page / properties / size / maximum
        Added value: +100
      • addedInput schema / properties / page / properties / size / minimum
        Added value: +1
      • changedInput schema / properties / page / properties / size / type
        Previous value: -"number"New value: +"integer"
      • addedInput schema / properties / query / description
        Added value: +"Search text, up to 200 characters."
      • addedInput schema / properties / replyStatuses / description
        Added value: +"Reply statuses to include. Omit for all statuses."
      • addedInput schema / properties / source / description
        Added value: +"Review platform to include. Omit for all platforms."
      • addedInput schema / properties / urgency / description
        Added value: +"Set urgent to return urgent reviews only."
      • addedOutput schema / properties / result / properties / items / items / properties / guestName
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / result / properties / items / items / properties / publishedAt
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / result / properties / items / items / properties / repliedAt
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / result / properties / items / items / properties / replyError
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / result / properties / items / items / properties / replySendText
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / result / properties / syncs
        Added 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"
        +}
    • Removedreviews.reply
    • Removedreviews.saveDraft
    • Removedreviews.sync
    • Removedstays.configure
    • Changedstays.current4 fields changed
      • addedOutput schema / properties / result / properties / channels
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / result / properties / logo
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "id": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "id"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / properties / result / properties / reviews
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / result / properties / settings / properties / booking / properties / cancellationPolicy
        Added 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"
        +}
    • Removedstays.update
    • Removedtaxes.create
    • Removedtaxes.get
    • Removedtaxes.list
    • Removedtaxes.update
    • Removedunits.create
    • Removedunits.createType
    • Changedunits.get1 field changed
      • addedInput schema / properties / id / description
        Added value: +"ID of the record to get or change."
    • Changedunits.list1 field changed
      • addedInput schema / properties / page
        Added value: +{
        +  "default": 1,
        +  "description": "Page number, starting at 1. Omit for the first page.",
        +  "exclusiveMinimum": 0,
        +  "maximum": 9007199254740991,
        +  "type": "integer"
        +}
    • Changedunits.listTypes1 field changed
      • addedOutput schema / properties / result / properties / items / items / properties / photos
        Added value: +{
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
    • Changedunits.occupancy3 fields changed
      • addedInput schema / properties / end / description
        Added value: +"End hotel date in YYYY-MM-DD format."
      • addedInput schema / properties / id / description
        Added value: +"ID of the record to get or change."
      • addedInput schema / properties / start / description
        Added value: +"Start hotel date in YYYY-MM-DD format."
  10. 9 tool updates
    • Changedbookings.cancel5 fields changed
      • addedOutput schema / properties / result / properties / booking / properties / units / items / properties / cancellationPolicy
        Added 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"
        +}
      • addedOutput schema / properties / result / properties / booking / properties / units / items / properties / id
        Added value: +{
        +  "type": "string"
        +}
      • removedOutput schema / properties / result / properties / penaltyAmount
        Removed value: -{
        -  "additionalProperties": false,
        -  "properties": {
        -    "currency": {
        -      "type": "string"
        -    },
        -    "number": {
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "number",
        -    "currency"
        -  ],
        -  "type": "object"
        -}
      • addedOutput schema / properties / result / properties / plan
        Added 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"
        +}
      • removedOutput schema / properties / result / properties / refundAmount
        Removed value: -{
        -  "additionalProperties": false,
        -  "properties": {
        -    "currency": {
        -      "type": "string"
        -    },
        -    "number": {
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "number",
        -    "currency"
        -  ],
        -  "type": "object"
        -}
    • Changedbookings.create2 fields changed
      • addedOutput schema / properties / result / properties / booking / properties / units / items / properties / cancellationPolicy
        Added 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"
        +}
      • addedOutput schema / properties / result / properties / booking / properties / units / items / properties / id
        Added value: +{
        +  "type": "string"
        +}
    • Changedbookings.get2 fields changed
      • addedOutput schema / properties / result / properties / booking / properties / units / items / properties / cancellationPolicy
        Added 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"
        +}
      • addedOutput schema / properties / result / properties / booking / properties / units / items / properties / id
        Added value: +{
        +  "type": "string"
        +}
    • Changedbookings.list2 fields changed
      • addedOutput schema / properties / result / properties / items / items / properties / units / items / properties / cancellationPolicy
        Added 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"
        +}
      • addedOutput schema / properties / result / properties / items / items / properties / units / items / properties / id
        Added value: +{
        +  "type": "string"
        +}
    • Changedbookings.reject2 fields changed
      • addedOutput schema / properties / result / properties / booking / properties / units / items / properties / cancellationPolicy
        Added 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"
        +}
      • addedOutput schema / properties / result / properties / booking / properties / units / items / properties / id
        Added value: +{
        +  "type": "string"
        +}
    • Changedguests.bookings2 fields changed
      • addedOutput schema / properties / result / properties / bookings / properties / items / items / properties / units / items / properties / cancellationPolicy
        Added 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"
        +}
      • addedOutput schema / properties / result / properties / bookings / properties / items / items / properties / units / items / properties / id
        Added value: +{
        +  "type": "string"
        +}
    • Removedreviews.draft
    • Changedreviews.list1 field changed
      • addedOutput schema / properties / result / properties / items / items / properties / draftText
        Added value: +{
        +  "type": "string"
        +}
    • Addedreviews.saveDraft
  11. 45 tool updates
    • First observedbookings.cancel
    • First observedbookings.create
    • First observedbookings.get
    • First observedbookings.list
    • First observedbookings.reject
    • First observedconnectors.disconnect
    • First observedconnectors.list
    • First observedconnectors.specs
    • First observeddomains.create
    • First observeddomains.deleteDomain
    • First observeddomains.get
    • First observeddomains.list
    • First observeddomains.verify
    • First observedguests.bookings
    • First observedguests.create
    • First observedguests.search
    • First observedmetrics.list
    • First observedpaymentlinks.get
    • First observedpaymentlinks.list
    • First observedproducts.archive
    • First observedproducts.create
    • First observedproducts.get
    • First observedproducts.list
    • First observedproducts.update
    • First observedrateplans.create
    • First observedrateplans.get
    • First observedrateplans.list
    • First observedrateplans.update
    • First observedreviews.draft
    • First observedreviews.list
    • First observedreviews.reply
    • First observedreviews.sync
    • First observedstays.configure
    • First observedstays.current
    • First observedstays.update
    • First observedtaxes.create
    • First observedtaxes.get
    • First observedtaxes.list
    • First observedtaxes.update
    • First observedunits.create
    • First observedunits.createType
    • First observedunits.get
    • First observedunits.list
    • First observedunits.listTypes
    • First observedunits.occupancy

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Remote 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
  • A
    license
    A
    quality
    C
    maintenance
    Enables 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.
    16
    23 npm
    1
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Browse IndustryLens's published competitive-intelligence reports and head-to-head competitor comparisons from any AI agent — real, source-backed data.
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources