ATA Travel
Server Details
ATA Travel: agent-first direct booking for accommodations, hotels, and vacation rentals.
- Status
- Healthy
- Uptime
- 99.9% over 61 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 29 tools
Several tools overlap significantly: get_available_room_cards vs show_available_rooms and get_photo_gallery vs show_property_photos are near-duplicates differentiated only by rendering behavior; multiple availability searches (network, flexible, property, catalog) also risk misselection. Descriptions provide clues, but boundaries are not crisp for an agent.
All names use snake_case with a verb-first pattern (get_*, search_*, create_*, start_*, etc.), and no mixed conventions appear. 'ping' is the only outlier, which is negligible.
29 tools is above the 25-tool threshold and feels heavy; many are granular read-only or verification utilities that could be consolidated. While the travel domain is complex, the set is over-scoped.
Core discovery and provisional booking are covered, but there is no update, cancel, or payment tool, and booking management after creation is read-only. An agent cannot modify or cancel a reservation, which is a notable gap for a travel booking server.
Available Tools
29 toolscreate_provisional_bookingAInspect
Secure a reservation or create a host-approval enquiry on behalf of a traveler. policyAcknowledged is required as an explicit boolean and must be true for financially binding flows after the exact total, payment schedule, and cancellation terms are shown; identity verification is not consent. A host-approval enquiry may pass false because payment is not due unless accepted. Also requires the traveler’s full name, email, and country (guestCountry, required for bookings; optional for quotes) plus travelerAssertion or approved internal BOOKING_HOLD agentHandoffId. If verification is needed, keep internal tool details private; tell the traveler to confirm their email and follow the code or link instructions returned by verification. If instant book is enabled and payment is ready, creates an inventory-holding provisional booking and returns payment/manual-payment next steps. If instant book is disabled or Stripe checkout is not ready, creates an enquiry hold for host approval/payment follow-up.
| Name | Required | Description | Default |
|---|---|---|---|
| notes | No | Optional traveler comments, questions, or requests for the host. Especially useful for host-approval enquiries. | |
| adults | Yes | ||
| roomId | Yes | ||
| checkIn | Yes | ||
| checkOut | Yes | ||
| children | No | ||
| guestName | Yes | Traveler’s full name, as supplied by the traveler. | |
| guestEmail | Yes | ||
| guestPhone | No | ||
| ratePlanId | No | Rate plan ID. If omitted, the system auto-selects the default active rate plan per night, then the cheapest active auto-selectable fallback. | |
| guestCountry | Yes | Required traveler country, as supplied by the traveler. Ask only if missing. Do not infer it from the property location, language, currency, or phone number. Quotes do not require country. | |
| priceAudience | No | ||
| propertyToken | Yes | ||
| agentHandoffId | No | Approved ATA traveler handoff ID from start_traveler_handoff/get_traveler_handoff_status. Required for third-party agents before inventory-holding booking actions. | |
| displayCurrency | No | Optional 3-letter currency for approximate traveler-facing display conversion. Native property currency remains authoritative. | |
| internalAgentKey | No | ||
| bookingAssistance | No | Internal Little John booking attribution; requires the internal agent credential. | |
| selectedRoomCount | No | For direct-booking room-count configurations, the number of rooms the traveler selected. Use defaultSelectedRoomCount from availability results. | |
| travelerAssertion | No | Signed traveler email verification assertion from ATA. | |
| policyAcknowledged | Yes | Explicit policy-consent state. Set true only after the traveler agrees to the exact price, payment schedule, and cancellation terms. Required before creating either an instant-book hold or a host-approval enquiry. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only supply generic mutation flags (readOnly=false, idempotent=false); the description adds substantial context beyond them: consent semantics (identity verification is not consent), auth requirements (travelerAssertion or approved agentHandoffId), privacy guidance during verification, and the two distinct side-effect paths (inventory-holding provisional booking vs enquiry hold). No contradiction with destructiveHint=false.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and the consent rule, then the required identity fields, then branch behavior. It is dense but every sentence carries operational meaning; only slight redundancy with policyAcknowledged's schema description keeps it from a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 20-parameter mutation with no output schema, the description supplies the essential consent, identity, and branch semantics and even sketches the return (payment/manual-payment next steps, or host-approval follow-up). Return-value detail and a few opaque parameters remain undocumented, but nothing critical is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 20 params at 50% schema coverage, the description carries part of the load: it explains policyAcknowledged's consent conditions, guestCountry's requirement/profile and that it must not be inferred, and the travelerAssertion/agentHandoffId alternatives. It leaves several params (priceAudience, displayCurrency, selectedRoomCount, bookingAssistance, internalAgentKey) to the schema, so it does not fully compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource with scope: secure a reservation OR create a host-approval enquiry on behalf of a traveler. The two branches (instant-book vs enquiry hold) are named, and the sibling create_quote is implicitly distinguished by the description's own handling of quotes vs bookings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit conditions: policyAcknowledged must be true for financially binding flows but may be false for host-approval enquiries; country is required for bookings but optional for quotes; instant book enabled vs disabled determines which hold is created. It stops short of naming create_quote as the alternative for quote-only flows, but the when-to-use logic is unusually complete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_quoteAInspect
Generate a non-binding reference quote for a traveler. Requires guest name/email plus a current travelerAssertion or fresh approved internal QUOTE agentHandoffId. If verification is needed, keep internal tool details private; tell the traveler to confirm their email and follow the code or link instructions returned by verification. Quotes do not hold inventory or guarantee future availability.
| Name | Required | Description | Default |
|---|---|---|---|
| adults | Yes | ||
| roomId | Yes | ||
| checkIn | Yes | ||
| checkOut | Yes | ||
| children | No | ||
| guestName | Yes | ||
| guestEmail | Yes | ||
| guestPhone | No | ||
| ratePlanId | No | Rate plan ID. Optional. | |
| guestCountry | No | Optional for a quote. If omitted, the traveler supplies it when completing the booking. | |
| priceAudience | No | ||
| propertyToken | Yes | ||
| agentHandoffId | No | Fresh approved ATA traveler handoff ID from start_traveler_handoff/get_traveler_handoff_status. Required for third-party quote creation without a current traveler assertion. | |
| displayCurrency | No | Optional 3-letter currency for approximate traveler-facing display conversion. Native property currency remains authoritative. | |
| internalAgentKey | No | ||
| selectedRoomCount | No | For direct-booking room-count configurations, the number of rooms the traveler selected. Use defaultSelectedRoomCount from availability results. | |
| travelerAssertion | No | Signed traveler email verification assertion from ATA. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond the annotations by disclosing that the quote is non-binding, that it does not hold inventory or guarantee availability, and that verification steps may require keeping internal details private. These are meaningful behavioral traits beyond what readOnlyHint/openWorldHint/idempotentHint reveal. It does not contradict any annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences convey the core purpose, prerequisites, and key behavioral caveats with no filler. The most important information is front-loaded, and every clause earns its place. The density is appropriate for the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the main behavioral caveats and verification-handling guidance, but with 17 parameters, no output schema, and only 35% schema coverage, it is not complete enough on its own. It omits what the tool returns, how optional parameters like priceAudience or selectedRoomCount behave, and how to handle failure cases. It is adequate for tool selection but not fully sufficient for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has only 35% parameter description coverage, so the description must compensate, but it only adds nuance for guestName/guestEmail and the travelerAssertion/agentHandoffId auth path. With 17 parameters, the description leaves required fields like propertyToken, roomId, checkIn, checkOut, and adults without any explanatory context. This is a significant gap for correct invocation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and outcome: 'Generate a non-binding reference quote for a traveler.' It clearly distinguishes this tool from booking-related siblings by emphasizing the quote is non-binding and does not hold inventory. The purpose is immediately understandable and not a tautology of the tool name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear operational context by specifying prerequisites (guest name/email plus travelerAssertion or agentHandoffId) and notes that quotes do not hold inventory, implying this is not for provisional bookings. However, it never explicitly names an alternative tool like create_provisional_booking or states 'use this when...' versus 'use that when...'. The usage guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_available_room_cardsRead available room cardsARead-onlyIdempotentInspect
Data-only: read a page inside an already mounted comparison. For initial presentation use show_available_rooms; do not page this tool to assemble Markdown thumbnails. Read-only room comparison presentation. First search availability, then select returned property/room/rate/count IDs and preserve the exact dates, guests, budget and display currency. Rechecks the existing property availability tool for current authoritative stay totals; never accepts prices or quote data. Up to3 properties,4 cards/page,60 offers maximum. show_available_rooms renders once; get_available_room_cards is data-only for mounted-card pagination. Photo selection opens only the selected room gallery. No bookings, holds, quotes, emails or payments.
| Name | Required | Description | Default |
|---|---|---|---|
| adults | Yes | ||
| budget | No | Optional additional budget constraint. Clarify missing currency or basis before calling. Do not combine with legacy maxPrice/maxPriceCurrency. | |
| offset | No | ||
| checkIn | Yes | ||
| checkOut | Yes | ||
| children | No | ||
| selections | Yes | Properties and exact room/rate/count selections from prior availability. Omit offers to compare currently available offers at that property. | |
| displayCurrency | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| kind | Yes | |
| cards | Yes | |
| query | Yes | |
| total | Yes | |
| adults | Yes | |
| offset | Yes | |
| checkIn | Yes | |
| message | Yes | |
| version | Yes | |
| checkOut | Yes | |
| children | Yes | |
| checkedAt | Yes | |
| expiresAt | Yes | |
| truncated | Yes | |
| nextOffset | Yes | |
| previousOffset | Yes | |
| unavailableProperties | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, and closed-world, so the safety profile is covered. The description adds genuinely new context: hard limits (3 properties, 4 cards/page, 60 offers), that it rechecks availability for authoritative totals, that it 'never accepts prices or quote data', and that it performs no bookings/holds/quotes/payments. This is useful behavioral disclosure beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The scoping statement is front-loaded, but the text is a dense run-on with real redundancy: 'data-only' appears twice, show_available_rooms is explained twice, and 'never accepts prices or quote data' overlaps with 'No bookings, holds, quotes, emails or payments.' Several sentences could be merged without losing meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, and annotations cover safety. The description supplies limits, prerequisites, sibling routing, and negative exclusions, making it largely complete for a nested-object pagination tool. Minor gaps remain around offset/children semantics, which are neither in the description nor the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 25% across 8 parameters, so the description carries some burden. It adds meaning for selections (property/room/rate/count IDs), and the need to preserve exact dates, guests, budget, and display currency, plus the 3-property/4-card/60-offer caps. However, it does not explain offset pagination or children, leaving notable gaps relative to the low schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource: reading a page of room comparison cards inside an already mounted comparison. It explicitly differentiates itself from sibling show_available_rooms ('data-only for mounted-card pagination' vs 'renders once'), so an agent can distinguish them. The 'mounted comparison' framing is jargon-heavy but still conveys the operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It names the alternative (show_available_rooms) and the condition that selects it ('For initial presentation'), plus an explicit prohibition ('do not page this tool to assemble Markdown thumbnails'). It also gives the prerequisite workflow ('First search availability, then select returned property/room/rate/count IDs'), leaving little to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_booking_detailsARead-onlyIdempotentInspect
Read an existing booking by its ATA confirmation code returned by a successful booking or supplied by the traveler. Never invent a code. Requires a current signed ATA traveler assertion, a verified legacy MCP session, or an approved BOOKING_READ handoff with matching booking email and code. For stateless third-party clients, use start_traveler_handoff with action BOOKING_READ and confirmationCode, then poll get_traveler_handoff_status. Returns booked stay, prices, payments and cancellation terms. Cannot modify, cancel, pay, or create inventory holds. Never use a confirmation code as holdId in get_reservation_status.
| Name | Required | Description | Default |
|---|---|---|---|
| propertyToken | No | Known property public token; required to match a property-scoped connection. | |
| agentHandoffId | No | Approved BOOKING_READ handoff for this confirmation code. No write scope is accepted. | |
| confirmationCode | Yes | ATA confirmation code from the booking email. | |
| travelerAssertion | No | Current signed ATA traveler verification assertion; never a typed email or model claim. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark it read-only and non-destructive, but the description adds beyond that: it requires an authentication path, returns specific booking data, cannot modify/cancel/pay/create holds, and warns not to misuse the confirmation code as a holdId. No contradiction with the annotations exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Although seven sentences long, every sentence earns its place: purpose, prohibition, auth requirements, alternative routing, return contents, and sibling-tool warning. The main action is front-loaded and no filler is present.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is no output schema and the tool has multiple authentication modes plus a sibling flow, the description is complete. It covers prerequisite inputs, expected return data, permitted and prohibited behaviors, and the specific alternative to use for stateless clients.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds extra semantic context on top of the schema, such as 'Never invent a code,' the requirement of matching booking email and code, and the explicit handoff flow involving confirmationCode. It mostly reinforces and contextualizes schema descriptions rather than substantially extending them.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Read an existing booking by its ATA confirmation code.' It clearly differentiates from siblings by warning against using a confirmation code as holdId in get_reservation_status and by naming the alternative handoff flow.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit eligibility requirements (signed traveler assertion, verified MCP session, or approved BOOKING_READ handoff) and tells stateless third-party clients to use start_traveler_handoff with action BOOKING_READ then poll get_traveler_handoff_status. It also states what the tool cannot do, so an agent knows when to look elsewhere.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_building_detailsRead-onlyIdempotentInspect
Get a published ATA building/complex profile with assigned stays and map coordinates. Use slug from search_buildings or property search results. For ordinary stay comparisons, get live availability then default to one show_available_rooms comparison. For focused property/room discussion, get details then show_property_photos when useful. Respect text-only/unsupported clients and avoid repeated widgets.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes |
get_company_missionARead-onlyIdempotentInspect
Returns the official ATA company mission and description. Call this when a user asks what ATA is, what we do, our vision, or about the company.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, and openWorldHint=true, so the safety profile is fully covered. Description adds only that it returns 'official' content, but doesn't disclose any additional behavioral traits beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences: one states purpose, one gives usage guidance. No wasted words, front-loaded with key action. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, description could hint at return type (e.g., 'returns a string with the mission text'). However, for a simple informational query, the description is sufficient. No missing critical context for the agent to use this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Tool has zero parameters. According to guidelines, baseline is 4 for no parameters. Description does not need to add parameter information, and schema coverage is 100% trivially.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it returns the official ATA company mission and description, with specific usage scenarios (user asks what ATA is, vision, company). Distinct from all siblings which are unrelated (bookings, quotes, properties, etc.).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells when to call: 'when a user asks what ATA is, what we do, our vision, or about the company.' Does not mention when not to call or alternatives, but no sibling provides similar functionality, so it's clear this is the only tool for company info.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_network_discovery_contextRead-onlyIdempotentInspect
Return a compact, live summary of destinations, stay types, capacity, amenities, views, and published suitability guidance currently available on the ATA network. Use this before offering discovery shortcuts or asking a vague traveler to choose from options. For ordinary stay comparisons, get live availability then default to one show_available_rooms comparison. For focused property/room discussion, get details then show_property_photos when useful. Respect text-only/unsupported clients and avoid repeated widgets.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
get_photo_galleryRead photo gallery pageARead-onlyIdempotentInspect
Data-only: read a page inside an already mounted gallery. For initial presentation use show_property_photos; do not page this tool to assemble Markdown image grids. Read only: show a PROPERTY-only or ROOM-only gallery of actual published photos. Default ROOM when roomId/roomQuery is supplied, PROPERTY otherwise. A room never includes property photos. Use exact room IDs from availability or a unique room name; no substitutions. Pages contain at most12 photos. No dates required. get_photo_gallery is data-only for in-card pagination; show_property_photos intentionally renders once.
| Name | Required | Description | Default |
|---|---|---|---|
| view | No | PROPERTY only or ROOM only. Omit to infer ROOM when a room is supplied, PROPERTY otherwise. | |
| offset | No | ||
| roomId | No | Exact roomId from availability; must belong to this property. | |
| roomQuery | No | ||
| propertyToken | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| view | Yes | |
| total | Yes | |
| offset | Yes | |
| photos | Yes | |
| roomId | Yes | |
| message | Yes | |
| version | Yes | |
| roomName | Yes | |
| roomMatch | Yes | |
| nextOffset | Yes | |
| propertyName | Yes | |
| propertyToken | Yes | |
| previousOffset | Yes | |
| mediaPropertyId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed world), and the description adds real context on top: page size cap ('at most 12 photos'), no-dates-required, and the scoping invariant that a room never includes property photos. It stops short of return format or error behavior, but that is acceptable given the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the key data-only vs. rendered distinction and is dense with operational rules. The closing sentence restates the data-only/render contrast already made in sentence one, a small redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, and the description covers usage routing, view defaulting, room scoping, and page size. Missing detail on offset/roomQuery semantics is the only real gap for a 5-parameter paginated tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With schema coverage at 40%, the description does useful work on roomId ('exact room IDs from availability or a unique room name; no substitutions') and on view defaulting, but offset and roomQuery are left unexplained in both the schema and the description. Adequate compensation, not complete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('read a page inside an already mounted gallery') and immediately scopes it against the sibling show_property_photos. An agent can distinguish it from the other photo-listing tools without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names when to use the alternative ('For initial presentation use show_property_photos') and even states a prohibition ('do not page this tool to assemble Markdown image grids'). It also gives the default selection rule between PROPERTY and ROOM, 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.
get_property_detailsRead-onlyIdempotentInspect
Get date-free property and room details, including traveler-facing amenities, property-authored direct-booking benefits, policies, Events & Weddings, room profiles, published image links and up to two bounded image previews (property and uniquely matched room). Missing previews retain links. When the traveler names a room or unit, pass that wording as roomQuery before treating it as another property. For a focused property/room discussion, proactively use show_property_photos when published photos help. Use PROPERTY or the uniquely matched ROOM; preserve room identity. Skip missing/ambiguous photos, unsupported UI, text-only preferences and already-shown galleries. Image links are fallback references, not a replacement for the supported viewer.
| Name | Required | Description | Default |
|---|---|---|---|
| roomQuery | No | Optional traveler-provided room or unit name, such as '5B Casita Vista'. No stay dates are required. | |
| propertyToken | Yes |
get_quote_detailsARead-onlyIdempotentInspect
Read a previously created quote using its actual quoteId, quoteHash or quoteUrl. Requires a current signed traveler assertion, verified legacy session, or the still-valid USED QUOTE handoff that created this exact quote. A quote is not a booking or inventory hold. Returns stored prices and payment terms; never substitute another room's payment schedule.
| Name | Required | Description | Default |
|---|---|---|---|
| quoteId | No | ||
| quoteUrl | No | Existing ATA /stays/quote/ link supplied by the traveler or returned by create_quote. | |
| quoteHash | No | ||
| propertyToken | No | ||
| agentHandoffId | No | Still-valid USED QUOTE handoff that created this quote. Read-only access grants no additional writes; expired handoffs require fresh traveler verification. | |
| travelerAssertion | No | Current signed ATA traveler assertion for the quote owner. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint=true, destructiveHint=false), the description adds meaningful behavioral detail: it names the required authentication/authorization paths, states that the tool returns 'stored prices and payment terms,' and explicitly clarifies that a quote is not a booking or inventory hold. This enriches the agent's mental model of the tool's state and side effects without contradicting any annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences with zero filler: the first states the purpose and identifiers, the second enumerates auth prerequisites, and the third sets expectations about return values and limitation. Information is front-loaded and every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
In the absence of an output schema, the description covers the main return type ('stored prices and payment terms') and all auth paths. It does not specify whether the three identifiers are mutually exclusive or what happens when multiple are provided, nor does it state a precedence order. For a 6-parameter tool with no required fields and no output schema, this is a minor but meaningful gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With schema description coverage at only 50%, the description compensates by explaining that quoteId, quoteHash, and quoteUrl are interchangeable identifiers ('using its actual quoteId, quoteHash or quoteUrl'). It also clarifies that agentHandoffId must be a 'still-valid USED QUOTE handoff' and travelerAssertion must be 'current signed.' However, propertyToken remains undescribed in both schema and description, so compensation is incomplete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb ('Read'), resource ('previously created quote'), and the three accepted identifiers, immediately distinguishing it from sibling tools like create_quote and get_booking_details. The clarifying sentence 'A quote is not a booking or inventory hold' reinforces the differentiation. No ambiguity remains about what operation this tool performs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states the conditions under which the tool can be used ('Requires a current signed traveler assertion, verified legacy session, or the still-valid USED QUOTE handoff'), and warns against misuse ('never substitute another room's payment schedule'). It does not name sibling alternatives explicitly, but the caveat about quotes vs bookings implies when not to use it. Clear context with a minor exclusion makes this a 4.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_reservation_statusARead-onlyIdempotentInspect
Return the current status and exact stay, price, payment schedule, and cancellation terms for a reservation previously created through ATA. Requires the hold ID plus the same verified traveler context/assertion or the secure booking handoff that created it. This tool is read-only and cannot change, pay, cancel, check in, or check out a reservation.
| Name | Required | Description | Default |
|---|---|---|---|
| holdId | Yes | Hold ID returned by create_provisional_booking. | |
| guestEmail | No | Traveler email. Required when using travelerAssertion; populated automatically for a verified MCP session. | |
| propertyToken | No | Known public property token for this reservation; must match the hold property when supplied. | |
| agentHandoffId | No | Secure BOOKING_HOLD handoff ID that created this reservation. | |
| displayCurrency | No | Optional 3-letter currency for approximate display conversion. Native property currency remains authoritative. | |
| travelerAssertion | No | Current signed ATA traveler verification assertion for the reservation guest. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint, idempotentHint, non-destructive), the description explicitly states the tool cannot change, pay, cancel, check in, or check out a reservation. It also discloses the authentication/context requirement, which is meaningful behavioral information the agent needs before calling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each earning its place: what the tool returns, what it requires, and what it cannot do. The most important scoping information is front-loaded, and there is no redundancy with the schema or annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Even without an output schema, the description enumerates the returned content (status, stay, price, payment schedule, cancellation terms), covers prerequisites, and clarifies limitations. For a read-only lookup tool, this is sufficient for an agent to select and invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds semantic value by explaining that the hold ID must be paired with the same verified traveler context/assertion or the secure booking handoff that created the reservation, which clarifies the relationship between holdId, travelerAssertion, agentHandoffId, and guestEmail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('return') and a precise resource: the status, exact stay, price, payment schedule, and cancellation terms for an ATA-created reservation. This clearly separates it from quote, building, property, and traveler-verification tools among the siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear invocation context: it applies to reservations previously created through ATA and requires the hold ID plus a verified traveler context or secure booking handoff. It does not explicitly name alternative tools or state when not to use it, but the prerequisites and scope are unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_stays_in_buildingRead-onlyIdempotentInspect
Return ATA stays assigned to a published building, optionally filtered by live dates and guest counts. For ordinary stay comparisons, get live availability then default to one show_available_rooms comparison. For focused property/room discussion, get details then show_property_photos when useful. Respect text-only/unsupported clients and avoid repeated widgets.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | ||
| adults | No | ||
| checkIn | No | ||
| checkOut | No | ||
| children | No | ||
| priceAudience | No | ||
| displayCurrency | No | Optional 3-letter currency for approximate traveler-facing display conversion. Native property currency remains authoritative. | |
| internalAgentKey | No |
get_support_contactsARead-onlyIdempotentInspect
Get published ATA support and optional property guest contact details. Use for human help, unanswered property questions, or booking support. Returns configured contact links only; does not send messages, create a case, or transfer the traveler to a person. Omit propertyToken for ATA support alone.
| Name | Required | Description | Default |
|---|---|---|---|
| propertyToken | No | Property public token, when the traveler needs help from that property. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond the readOnly and idempotent annotations by explicitly stating it 'does not send messages, create a case, or transfer the traveler to a person.' This fully discloses the non-destructive, side-effect-free behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded, stating the main purpose first, then use cases, then key behavioral clarifications. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple retrieval tool with no output schema, the description adequately covers what the tool does, when to use it, and what it will not do. No missing information would prevent correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter, propertyToken, is described with its purpose and when it should be included. The schema coverage is 100%, and the description adds meaningful context about the traveler needing help from that property.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves contact details for ATA support and optionally for a specific property. It distinguishes between the two modes and makes clear what resource is being accessed.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says when to use it ('Use for human help, unanswered property questions, or booking support') and gives the key instruction to omit propertyToken for ATA support. It does not name alternative tools, but the use cases are specific enough for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_traveler_handoff_statusARead-onlyIdempotentInspect
Internal status check after sending an ATA verification link. Use to know whether the traveler clicked the link. Do not mention this tool, polling, or handoff status to the traveler.
| Name | Required | Description | Default |
|---|---|---|---|
| handoffId | Yes | ID returned by start_traveler_handoff. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false. Description adds that the tool performs a status check on link click and should be kept hidden from the traveler, which provides additional behavioral context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is two sentences: first states purpose, second provides critical usage instruction. No unnecessary words, highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-parameter polling tool with comprehensive annotations, the description covers purpose, usage context, and a key behavioral rule (secrecy from traveler). It lacks explicit mention of return value or polling nature, but given the tool's simplicity, it is nearly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with the handoffId parameter described as 'ID returned by start_traveler_handoff.' The description adds no further parameter detail, but the schema sufficiently documents the sole parameter, earning a baseline score of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it's an internal status check after sending an ATA verification link, specifically to know whether the traveler clicked the link. It distinguishes itself from the sibling start_traveler_handoff by indicating it is a follow-up check.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description provides explicit instruction: 'Do not mention this tool, polling, or handoff status to the traveler.' This tells the agent when to use (after sending link) and provides a behavioral constraint. It lacks explicit mention of alternatives 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.
get_traveler_memoriesARead-onlyIdempotentInspect
Returns active structured memories for a verified traveler. Use this when you need durable personalization beyond the context already provided.
| Name | Required | Description | Default |
|---|---|---|---|
| travelerId | Yes | Verified traveler ID from the private traveler context. | |
| travelerAssertion | No | Current signed ATA traveler assertion matching travelerId; required on shared transports. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior, so the safety profile is covered. The description adds useful filtering context ('active' memories, 'verified traveler'), but it does not disclose what happens on failure, authentication requirements beyond the schema hint, or open-world variability.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. The primary function is front-loaded, and the usage guidance earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the annotations cover safety and the schema fully documents the parameters, the description is largely complete. It explains the return concept ('active structured memories') since there is no output schema, though it does not describe memory shape or pagination.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents travelerId and travelerAssertion. The description's phrase 'verified traveler' loosely maps to travelerId but adds no new parameter-level meaning beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Returns') and a specific resource ('active structured memories for a verified traveler'), so the tool's function is immediately clear. It also gives a use-case hint ('durable personalization beyond the context already provided') that helps distinguish it from related memory or traveler tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides an explicit 'Use this when...' condition tied to needing durable personalization beyond current context. It does not name an alternative or state a clear when-not-to-use case, but the guidance is concrete enough for an agent to select the tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_traveler_verification_statusARead-onlyIdempotentInspect
Check whether a code or email-link challenge started in this MCP session has completed. A completed link binds the traveler privately to this MCP session.
| Name | Required | Description | Default |
|---|---|---|---|
| challengeRef | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds meaningful behavioral context by explaining the consequence of a completed challenge, namely the private binding of the traveler to this MCP session. No contradiction with annotations exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with no filler. The main purpose is front-loaded ('Check whether...'), and the additional binding context is compact and relevant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter, read-only status check, the description provides enough context about what the challenge is and its scope. There is no output schema, so a slightly more explicit statement about the returned status shape would strengthen it, but this omission is minor given how straightforward the tool's purpose is.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it partially does by clarifying that the challenge is a code or email-link challenge within this session. However, it never explicitly says challengeRef is the identifier returned from start_traveler_verification or how to obtain it, leaving that connection implied rather than direct.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('check whether') and names the exact resource: 'a code or email-link challenge started in this MCP session.' It clearly targets completion status and even explains what completion means ('binds the traveler privately'), distinguishing this from sibling tools like start_traveler_verification and verify_traveler_code.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives useful scope ('started in this MCP session') but never explicitly says when to use this tool instead of a sibling or what steps should precede it. The workflow is implied rather than stated, so an agent must infer that this follows starting a challenge and that it is not for verifying codes or checking handoff status.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_property_extrasARead-onlyIdempotentInspect
List date-free published events, services, activities, day passes, experiences, dining, wellness, packages, transfers, and other extras for a known property. Returns read-only offer details and ATA purchase links when the property is published on ATA; it does not create an order.
| Name | Required | Description | Default |
|---|---|---|---|
| category | No | Optional exact offer category filter, such as DAY_PASS, EXPERIENCE, WELLNESS, TRANSPORT, or PACKAGE. | |
| propertyToken | Yes | ||
| standaloneOnly | No | When true, exclude offers that require a stay. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint:false. The description adds useful context beyond these by explaining the 'date-free' scope, the 'published on ATA' condition, and explicitly stating it 'does not create an order.' This goes beyond simply restating the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no fluff. The first sentence states the primary function and scope; the second clarifies return details and non-mutation. Every phrase contributes to understanding without repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a list tool with no output schema, the description adequately covers the return values (read-only details and ATA purchase links) and the key condition (published on ATA). It could mention pagination or sorting, but these are not critical for selection. The description is complete enough for an agent to decide when to call it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema coverage is 67% (two of three parameters have descriptions). The description adds domain context like 'date-free' and 'for a known property,' which informally ties to parameters, but it does not explain the propertyToken parameter or any parameter-specific behavior beyond what is in the schema. The description is helpful but doesn't fully compensate for the missing schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the verb 'List' and specific resources (date-free published events, services, etc.) for a known property, with scope indicated by 'for a known property' and non-mutating behavior stated. This distinguishes it from sibling tools like search_property_catalog, though it doesn't name alternatives explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool (when you have a known property) and mentions a condition (when the property is published on ATA), but it does not reference any alternative tools or exclusionary criteria. There is no explicit 'when not to use' or naming of siblings, so the guidance is clear but incomplete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pingARead-onlyIdempotentInspect
A simple ping tool
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, covering the main behavioral traits. The description adds no extra context but does not contradict annotations. For a simple tool with annotations, this is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that perfectly front-loads the purpose without any unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (no parameters, clear annotations, standard ping behavior), the description is complete enough. No output schema is needed for a basic connectivity check.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters, so schema coverage is 100%. The description does not need to elaborate on parameters; the baseline of 4 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The name 'ping' and description 'A simple ping tool' clearly indicate a health-check or connectivity test. It is distinct from all sibling tools which focus on business operations like bookings and availability.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no explicit guidance on when to use or when not to use this tool. However, the purpose is self-evident for a ping tool, and there are no alternative ping-like tools among siblings, so the ambiguity is minimal.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_buildingsARead-onlyIdempotentInspect
Find published ATA building/complex profiles by destination, neighborhood, tag, amenity, or free-text. Use this for questions about buildings, condo towers, complexes, gated communities, marina developments, or neighborhoods.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | ||
| tags | No | ||
| query | No | Building name, neighborhood, city, or text query. | |
| amenities | No | ||
| maxResults | No | ||
| neighborhood | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the description doesn't need to restate safety. It adds context about the data source ('published ATA building/complex profiles') but doesn't discuss any other behavioral traits like pagination or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with purpose and usage. No wasted words; the structure is efficient and clear.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of output schema and 6 parameters, the description is adequate for a search tool but could be more complete by mentioning what the response contains (e.g., building IDs, names) or any result limits.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With only 17% schema description coverage, the description compensates by mapping search dimensions (destination, neighborhood, tag, amenity, free-text) to parameters, but it does not detail individual parameters or formats.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Find' and the resource 'published ATA building/complex profiles' and lists multiple search dimensions. However, it doesn't explicitly differentiate from sibling tools like get_building_details or search_property_catalog.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage context ('Use this for questions about buildings...') but does not specify when not to use or mention alternative tools for specific functions, such as get_building_details for detailed info on a single building.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_flexible_network_availabilityRead-onlyIdempotentInspect
Find real, priced ATA stays when the traveler is flexible. Defaults to a window 28–56 days from today, three nights, and two adults only when those values are missing; always return those defaults as explicit assumptions. Preferences are soft ranking signals, not a closed taxonomy. Default next step for a useful comparison: show_available_rooms with returned IDs and unchanged criteria; do not wait for a photo request or repeat this search just to render. One view after final results; skip unsupported UI, text-only preferences, no priced offers, legacy maxPrice caps and already-visible comparisons.
| Name | Required | Description | Default |
|---|---|---|---|
| views | No | Optional soft view preferences for flexible discovery. | |
| adults | No | Adult guests. Defaults to 2. | |
| nights | No | Length of stay. Defaults to 3 nights. | |
| children | No | Child guests. Defaults to 0. | |
| location | No | Optional city, state, country, neighborhood, or building. Omit when the traveler is open to ATA's current destinations. | |
| maxPrice | No | Maximum total stay price. | |
| amenities | No | Optional soft amenity preferences for flexible discovery. | |
| maxResults | No | Maximum priced stays to return. Defaults to 4. | |
| preferences | No | Open-ended soft preferences inferred from the traveler's own words or live network facets. | |
| propertyType | No | Optional soft property-type preference; it ranks results and is reported as a difference when unavailable. | |
| latestCheckIn | No | Latest acceptable check-in date. Defaults to 56 days from today. | |
| priceAudience | No | ||
| displayCurrency | No | Optional traveler-facing display currency. | |
| earliestCheckIn | No | Earliest acceptable check-in date. Defaults to 28 days from today. | |
| internalAgentKey | No | ||
| maxPriceCurrency | No | Currency for maxPrice when filtering mixed native currencies. |
search_network_availabilityRead-onlyIdempotentInspect
Find accommodations across the ATA Travel Network with real-time pricing. Use when dates are known. Supports filtering by amenities, views, property type, and free-text keyword to handle vague requests. Default next step for a useful comparison: show_available_rooms with returned IDs and unchanged criteria; do not wait for a photo request or repeat this search just to render. One view after final results; skip unsupported UI, text-only preferences, no priced offers, legacy maxPrice caps and already-visible comparisons.
| Name | Required | Description | Default |
|---|---|---|---|
| views | No | Filter by room views. e.g. ['Ocean', 'Mountain', 'Garden', 'City'] | |
| adults | No | Number of adults | |
| budget | No | Optional additional budget constraint. Clarify missing currency or basis before calling. Do not combine with legacy maxPrice/maxPriceCurrency. | |
| checkIn | Yes | Check-in date (YYYY-MM-DD) | |
| keyword | No | Free-text keyword matched against property name/description. Great for vibe searches like 'boutique', 'beachside', 'romantic'. | |
| checkOut | Yes | Check-out date (YYYY-MM-DD) | |
| children | No | Number of children | |
| location | No | Optional city, state, or country. Omit when the traveler knows dates but is open to ATA's current destinations. | |
| maxPrice | No | Maximum total price filter | |
| amenities | No | Filter by amenities on property or rooms. e.g. ['Pool', 'Gym', 'Pet Friendly', 'Spa'] | |
| preferences | No | Open-ended soft ranking signals. These do not exclude otherwise valid stays. | |
| propertyType | No | e.g. 'Hotel', 'Apartment', 'Villa' | |
| priceAudience | No | ||
| displayCurrency | No | Optional 3-letter currency for approximate traveler-facing display conversion. Native property currency remains authoritative. | |
| internalAgentKey | No | ||
| maxPriceCurrency | No | Currency for maxPrice when filtering across mixed property currencies. If omitted, maxPrice is compared to each property's native currency. |
search_property_availabilityRead-onlyIdempotentInspect
Search specific dates and occupancy for a known property using its propertyToken. Default next step for a useful comparison: show_available_rooms with returned IDs and unchanged criteria; do not wait for a photo request or repeat this search just to render. One view after final results; skip unsupported UI, text-only preferences, no priced offers, legacy maxPrice caps and already-visible comparisons.
| Name | Required | Description | Default |
|---|---|---|---|
| adults | No | ||
| budget | No | Optional additional budget constraint. Clarify missing currency or basis before calling. Do not combine with legacy maxPrice/maxPriceCurrency. | |
| checkIn | Yes | Check-in date (YYYY-MM-DD) | |
| checkOut | Yes | Check-out date (YYYY-MM-DD) | |
| children | No | ||
| priceAudience | No | ||
| propertyToken | Yes | Exact public propertyToken returned by discovery or property context. Never add a prefix or invent a token. | |
| displayCurrency | No | Optional 3-letter currency for approximate traveler-facing display conversion. Native property currency remains authoritative. | |
| internalAgentKey | No |
search_property_catalogRead-onlyIdempotentInspect
Browse the ATA property catalog WITHOUT needing dates. Fast, lightweight — no availability or pricing check. Use this for vague exploration, browsing by type/amenity/view, or when the traveler has no dates yet. For ordinary stay comparisons, get live availability then default to one show_available_rooms comparison. For focused property/room discussion, get details then show_property_photos when useful. Respect text-only/unsupported clients and avoid repeated widgets.
| Name | Required | Description | Default |
|---|---|---|---|
| views | No | e.g. ['Ocean', 'Mountain', 'Garden'] | |
| adults | No | Optional adults for occupancy-safe catalog suggestions. | |
| keyword | No | Free-text matched against name/description. e.g. 'boutique', 'beachside', 'romantic' | |
| children | No | Optional children for occupancy-safe catalog suggestions. | |
| location | No | City, State, or Country to filter by. Omit for a global search. | |
| amenities | No | e.g. ['Pool', 'Spa', 'Pet Friendly', 'Gym'] | |
| maxResults | No | Max number of properties to return (default 10) | |
| preferences | No | Open-ended soft ranking signals inferred from traveler language or current network facets. | |
| propertyType | No | e.g. 'Hotel', 'Villa', 'Apartment' |
show_available_roomsShow available room cardsARead-onlyIdempotentInspect
Default visual presentation after the final useful availability comparison when UI is supported and text-only was not requested. Render once without waiting for a photo request; narrate ordinary follow-ups without repeating searches or widgets. Read-only room comparison presentation. First search availability, then select returned property/room/rate/count IDs and preserve the exact dates, guests, budget and display currency. Rechecks the existing property availability tool for current authoritative stay totals; never accepts prices or quote data. Up to3 properties,4 cards/page,60 offers maximum. show_available_rooms renders once; get_available_room_cards is data-only for mounted-card pagination. Photo selection opens only the selected room gallery. No bookings, holds, quotes, emails or payments.
| Name | Required | Description | Default |
|---|---|---|---|
| adults | Yes | ||
| budget | No | Optional additional budget constraint. Clarify missing currency or basis before calling. Do not combine with legacy maxPrice/maxPriceCurrency. | |
| offset | No | ||
| checkIn | Yes | ||
| checkOut | Yes | ||
| children | No | ||
| selections | Yes | Properties and exact room/rate/count selections from prior availability. Omit offers to compare currently available offers at that property. | |
| displayCurrency | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| kind | Yes | |
| cards | Yes | |
| query | Yes | |
| total | Yes | |
| adults | Yes | |
| offset | Yes | |
| checkIn | Yes | |
| message | Yes | |
| version | Yes | |
| checkOut | Yes | |
| children | Yes | |
| checkedAt | Yes | |
| expiresAt | Yes | |
| truncated | Yes | |
| nextOffset | Yes | |
| previousOffset | Yes | |
| unavailableProperties | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive/openWorld=false, but the description adds real behavioral context: it rechecks authoritative stay totals and refuses price/quote data, renders only once, caps at 3 properties / 4 cards per page / 60 offers, and enumerates what it will never do (bookings, holds, quotes, emails, payments). Some of this is workflow narration rather than behavior, which keeps it from a clean 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Every sentence carries information — limits, exclusions, sibling routing — and the when-to-use condition leads. However it is a dense run-on with mild redundancy ('Render once' is restated as 'show_available_rooms renders once') and a typo ('Up to3 properties') that slightly impede scanning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex nested-object tool with an output schema (so return values need no explanation), the description covers workflow ordering, caps, sibling routing and hard exclusions. The only gap is the offset parameter and how first-page vs. paginated rendering is bounded, which is only handled indirectly via the sibling reference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 25%, so the description must compensate, and it does: it maps the caller's obligations to selections (property/room/rate/count IDs), exact dates, guests, budget and display currency. The offset/pagination parameter is not addressed here (it is delegated to the sibling), so coverage is strong but not complete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource — a read-only visual room-comparison presentation that renders once — and explicitly differentiates itself from the sibling get_available_room_cards ('data-only for mounted-card pagination'). The core purpose is front-loaded but wrapped in workflow phrasing ('Default visual presentation after the final useful availability comparison...'), so it takes parsing to extract the plain 'what it does'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit preconditions (after the final useful availability comparison, when UI is supported, when text-only was not requested) and explicit exclusions (no photo request needed, no repeat searches or widgets). It names the alternative sibling and the condition that selects it: get_available_room_cards for mounted-card pagination, plus a stated ordering dependency on search_property_availability.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
show_property_photosShow property or room photosARead-onlyIdempotentInspect
Default visual presentation for a focused property or room discussion when photos help, UI is supported and text-only was not requested. Render once; reuse the same returned room identity for explicit retries. Read only: show a PROPERTY-only or ROOM-only gallery of actual published photos. Default ROOM when roomId/roomQuery is supplied, PROPERTY otherwise. A room never includes property photos. Use exact room IDs from availability or a unique room name; no substitutions. Pages contain at most12 photos. No dates required. get_photo_gallery is data-only for in-card pagination; show_property_photos intentionally renders once.
| Name | Required | Description | Default |
|---|---|---|---|
| view | No | PROPERTY only or ROOM only. Omit to infer ROOM when a room is supplied, PROPERTY otherwise. | |
| offset | No | ||
| roomId | No | Exact roomId from availability; must belong to this property. | |
| roomQuery | No | ||
| propertyToken | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| view | Yes | |
| total | Yes | |
| offset | Yes | |
| photos | Yes | |
| roomId | Yes | |
| message | Yes | |
| version | Yes | |
| roomName | Yes | |
| roomMatch | Yes | |
| nextOffset | Yes | |
| propertyName | Yes | |
| propertyToken | Yes | |
| previousOffset | Yes | |
| mediaPropertyId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, and the description reinforces this with 'Read only'. It adds real behavioral context beyond the annotations: render once, reuse the same returned room identity for explicit retries, pages capped at 12 photos, no dates required, and that a room gallery never includes property photos.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense and front-loaded, with the routing/default logic and the render-once constraint stated up front. Slightly jargon-heavy ('explicit retries', 'in-card pagination'), but each sentence carries a distinct constraint.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be described, and the description covers mode inference, ID requirements, pagination cap, and the render-once contract. Only the offset/propertyToken semantics remain vague, a minor gap for a 5-param tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 40%, and the description compensates for the important parameters: it explains view inference (ROOM when roomId/roomQuery supplied, PROPERTY otherwise) and that roomId must be an exact ID from availability or a unique room name. However, offset and propertyToken are left undocumented, so the 5-param tool is only partially covered.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (show/render) and resource (published photos of a property or room), and explicitly distinguishes it from the sibling get_photo_gallery ('data-only for in-card pagination'). An agent can pick between the two without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use conditions (focused property/room discussion, photos help, UI supported, text-only not requested) and names the alternative get_photo_gallery with the condition that selects it. It also dictates when-not to substitute: 'no substitutions' for room IDs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start_traveler_handoffAInspect
Internal approval step for quote or booking tools. Before calling, read guestEmail back to the traveler and confirm it is correct; then set emailConfirmedByTraveler=true. If an email is sent, tell the traveler only to check their inbox and click the secure ATA link. Do not mention handoffs/tool details to the traveler.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | Use BOOKING_HOLD before creating a reservation; BOOKING_READ grants only read access to an existing booking for questions. | |
| adults | No | ||
| roomId | No | ||
| checkIn | No | ||
| quoteId | No | ||
| checkOut | No | ||
| children | No | ||
| agentName | No | Agent/application display name when known. | |
| guestName | Yes | Traveler name collected by the agent. | |
| quoteHash | No | ||
| guestEmail | Yes | Traveler email. ATA sends the verification/approval link here. | |
| guestPhone | No | ||
| ratePlanId | No | ||
| mcpSessionId | No | Optional client-side MCP/session correlation ID. | |
| agentProvider | No | Agent platform or provider name when known. | |
| intentSummary | No | Short traveler-facing summary of what ATA is verifying, without mentioning internal handoff/tool details. | |
| propertyToken | No | ||
| confirmationCode | No | Required for BOOKING_READ: the ATA confirmation code printed on the booking confirmation. | |
| selectedRoomCount | No | ||
| emailConfirmedByTraveler | No | Set true only after reading guestEmail back to the traveler and they confirm it is correct. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Given that annotations only indicate non-readOnly, non-destructive, non-idempotent, the description adds crucial transparency by revealing side effects: sending an email and setting the emailConfirmedByTraveler flag. It also clarifies the tool's internal nature, exceeding what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single paragraph that conveys all essential instructions without redundancy. It is tightly worded and each sentence contributes operational guidance, making it efficient and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
While the description provides the core workflow and constraints, it does not elaborate on the broader context (e.g., what constitutes a 'handoff', how this fits with other tools, or expected inputs beyond the two mentioned). However, given the tool's focused purpose and the presence of a schema, the description is largely sufficient for an agent to execute correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description only clarifies the usage of guestEmail and emailConfirmedByTraveler, while many other parameters (e.g., action, checkIn, checkOut, quoteId, ratePlanId) remain unaddressed. With schema description coverage at 45%, the description does not sufficiently compensate for the missing parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it is an internal approval step for quote or booking tools, and enumerates the exact actions to perform (read back email, confirm, set flag, send email). This distinguishes it from other tools by outlining its specific role and workflow.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit step-by-step instructions on when and how to use the tool, including prerequisites (read back guestEmail, set emailConfirmedByTraveler after confirmation) and post-conditions (send email, instruct traveler). Also includes a clear directive on what not to mention, which is valuable guidance for the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start_traveler_verificationBInspect
Start general traveler verification for this MCP session after the traveler confirms their email address. Uses the property’s configured verification method. This does not create a quote, enquiry, hold, or booking.
| Name | Required | Description | Default |
|---|---|---|---|
| method | No | ||
| agentName | No | ||
| guestName | Yes | ||
| guestEmail | Yes | ||
| guestPhone | No | ||
| agentProvider | No | ||
| propertyToken | No | ||
| emailConfirmedByTraveler | Yes | True only after the traveler confirms the exact email address. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnly, idempotent, and destructive hints, so the bar is lower. The description adds useful context: it operates for this MCP session, uses the property's configured verification method, and has no booking creation side effects. However, it does not explain what happens when emailConfirmedByTraveler is false or what the verification flow entails, and the statement about using the property's configured method is ambiguous given the optional method enum in the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three short, front-loaded sentences with no filler. Every sentence contributes meaningful information: when to call, what it does, and what it does not do.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 8 parameters, 3 required fields, no output schema, and sibling tools like verify_traveler_code, this description is undersized. It does not explain return behavior, what starting verification actually does for the traveler, how method interacts with the configured verification method, or what follow-up call is expected next. An agent cannot fully predict the result of invoking this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 13%, and the description does not compensate. It clarifies emailConfirmedByTraveler by tying it to traveler email confirmation, but leaves method, guestName, guestEmail, guestPhone, agentName, agentProvider, and propertyToken semantically unsupported. The phrase 'uses the property's configured verification method' actually conflicts with the schema's optional method enum, which needs explanation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action—starting traveler verification for the MCP session after email confirmation—and distinguishes itself from booking/quote creation with an explicit negative list. However, it does not explicitly differentiate itself from sibling tools like verify_traveler_code or start_traveler_handoff, and the word 'general' is somewhat vague.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit precondition ('after the traveler confirms their email address') and explicit exclusions ('does not create a quote, enquiry, hold, or booking'). It does not directly name sibling alternatives such as verify_traveler_code or get_traveler_verification_status, which would make the routing fully explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
suggest_traveler_memoryAInspect
Save or update one durable traveler memory for personalization. Use only for stable, travel-relevant preferences or constraints explicitly stated by the traveler.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Stable normalized memory key. Choose the closest allowed key. | |
| type | Yes | Memory category. | |
| value | Yes | Small JSON value, e.g. {"hasServiceDog":true} or {"typicalAdults":2,"typicalChildren":1}. | |
| source | No | USER_STATED | |
| summary | Yes | Short practical note, without speculation or sensitive details. | |
| confidence | No | Confidence in this memory. Use 1 for explicit user statements, lower for inferred patterns. | |
| travelerId | Yes | Verified traveler ID from the private traveler context. | |
| visibility | No | AGENT_ONLY | |
| travelerAssertion | No | Current signed ATA traveler assertion matching travelerId; required on shared transports. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds 'durable' and confirms write/update semantics, which is consistent with readOnlyHint=false and idempotentHint=false. But it does not disclose return behavior, side effects, or the fact that the schema explicitly permits inferred memories, and the 'explicitly stated' restriction is potentially misleading.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with the core action front-loaded and no redundant phrasing. Every sentence adds essential selection or invocation context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 9 parameters, no output schema, and many sibling tools, the description is minimal but mostly adequate for selecting it. It is incomplete because it does not clarify upsert behavior, expected response, or how to handle the schema's INFERRED source option, leaving an internal inconsistency for the agent to resolve.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 78%, so the schema already documents most parameters. The description itself adds no per-parameter detail, and its 'explicitly stated by the traveler' guidance may actually conflict with the source and confidence parameters that allow inferred input.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Save or update') and the resource ('one durable traveler memory for personalization'), which is specific and distinguishable from read-only siblings like get_traveler_memories. It also clarifies the arguably ambiguous tool name 'suggest_traveler_memory' by indicating it is actually a persistence operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'Use only for stable, travel-relevant preferences or constraints explicitly stated by the traveler' provides a useful eligibility rule. However, it does not mention alternatives such as get_traveler_memories, and it conflicts with the schema's support for source='INFERRED' and confidence guidance for inferred patterns, making the usage boundary inconsistent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_traveler_codeAInspect
Consume the six-digit code for a challenge started in this MCP session. On success, ATA privately binds the verified traveler to this MCP session; no reusable bearer credential is returned.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | ||
| challengeRef | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations mark this as a mutation (readOnlyHint=false) and non-destructive. The description adds valuable behavioral detail: 'On success, ATA privately binds the verified traveler to this MCP session; no reusable bearer credential is returned.' This explains the side effect (session binding) and the absence of a token, which is critical for an agent. However, it does not describe failure behavior or what happens if the code is invalid, so it's not fully transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no fluff. The primary action and side effect are front-loaded, and the security note about no bearer token is a single concise sentence. Every word contributes to understanding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a mutation with no output schema, so the description should ideally mention what is returned or emitted. It notes that no reusable credential is returned, implying a success indication, but does not specify the return format or error conditions. The flow context (part of traveler verification) is partially covered via the session-bound challenge, but the agent lacks guidance on failure handling and expected response, leaving some gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With schema description coverage at 0%, the description must compensate for parameter meanings. It does connect challengeRef to 'a challenge started in this MCP session' and identifies code as 'six-digit,' which aligns with the schema patterns. But it does not explain how to obtain the challengeRef, what constitutes a valid code beyond the pattern, or error semantics. The added context is helpful but minimal for a 0% coverage scenario.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action: 'Consume the six-digit code for a challenge started in this MCP session.' It names the specific resource (challenge) and the context (this session), and clarifies the outcome (binds traveler to session). This distinguishes it from sibling tools like start_traveler_verification and get_traveler_verification_status by focusing on the code consumption step.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies that this tool is used after a challenge is started in the same MCP session, which selects it from the verification flow. However, it does not explicitly state when to use it versus alternatives (e.g., 'after start_traveler_verification') or when not to use it. The context is clear but exclusions are absent, leaving some inference to the agent.
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.
4 tool updates
- Added
get_available_room_cards - Added
get_photo_gallery - Added
show_available_rooms - Changed
show_property_photos20 fields changed- added
Input schema / properties / offsetAdded value: +{ + "default": 0, + "maximum": 100000, + "minimum": 0, + "type": "integer" +} - added
Input schema / properties / roomIdAdded value: +{ + "description": "Exact roomId from availability; must belong to this property.", + "maxLength": 160, + "minLength": 1, + "type": "string" +} - added
Input schema / properties / viewAdded value: +{ + "description": "PROPERTY only or ROOM only. Omit to infer ROOM when a room is supplied, PROPERTY otherwise.", + "enum": [ + "PROPERTY", + "ROOM" + ], + "type": "string" +} - added
Output schema / properties / nextOffsetAdded value: +{ + "anyOf": [ + { + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] +} - added
Output schema / properties / offsetAdded value: +{ + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" +} - added
Output schema / properties / photos / items / properties / idAdded value: +{ + "type": "string" +} - added
Output schema / properties / photos / items / properties / status / constAdded value: +"PUBLISHED" - removed
Output schema / properties / photos / items / properties / status / enumRemoved value: -[ - "PUBLISHED", - "UNAVAILABLE" -] - removed
Output schema / properties / photos / items / properties / url / anyOfRemoved value: -[ - { - "format": "uri", - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / photos / items / properties / url / formatAdded value: +"uri" - added
Output schema / properties / photos / items / properties / url / typeAdded value: +"string" - changed
Output schema / properties / photos / items / requiredPrevious value: -[ - "subject", - "caption", - "status", - "url" -]New value: +[ + "id", + "subject", + "caption", + "status", + "url" +] - changed
Output schema / properties / photos / maxItemsPrevious value: -2New value: +12 - removed
Output schema / properties / photos / minItemsRemoved value: -2 - added
Output schema / properties / previousOffsetAdded value: +{ + "anyOf": [ + { + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] +} - added
Output schema / properties / roomIdAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] +} - added
Output schema / properties / totalAdded value: +{ + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" +} - changed
Output schema / properties / version / constPrevious value: -1New value: +2 - added
Output schema / properties / viewAdded value: +{ + "enum": [ + "PROPERTY", + "ROOM" + ], + "type": "string" +} - changed
Output schema / requiredPrevious value: -[ - "version", - "propertyToken", - "propertyName", - "mediaPropertyId", - "roomName", - "roomMatch", - "message", - "photos" -]New value: +[ + "version", + "view", + "propertyToken", + "propertyName", + "mediaPropertyId", + "roomId", + "roomName", + "roomMatch", + "message", + "offset", + "total", + "previousOffset", + "nextOffset", + "photos" +]
1 tool update
- Added
show_property_photos
2 tool updates
- Changed
search_network_availability1 field changed- added
Input schema / properties / budgetAdded value: +{ + "additionalProperties": false, + "description": "Optional additional budget constraint. Clarify missing currency or basis before calling. Do not combine with legacy maxPrice/maxPriceCurrency.", + "properties": { + "amount": { + "description": "Maximum amount in the explicitly supplied currency and basis.", + "exclusiveMinimum": 0, + "type": "number" + }, + "basis": { + "description": "Required explicit basis. Per-night means a stay-average allowance, not a ceiling on each night. Per-person means every adult and child equally; clarify other interpretations.", + "enum": [ + "TOTAL_STAY", + "PER_NIGHT", + "PER_PERSON_STAY", + "PER_PERSON_PER_NIGHT" + ], + "type": "string" + }, + "currency": { + "description": "Required 3-letter budget currency. Never infer from location or displayCurrency.", + "pattern": "^[A-Za-z]{3}$", + "type": "string" + }, + "scope": { + "default": "PRICED_STAY", + "description": "PRICED_STAY compares the accommodation total including configured taxes/fees. ALL_IN requires complete mandatory charges; currently ATA cannot verify completeness and will return labeled alternatives only.", + "enum": [ + "PRICED_STAY", + "ALL_IN" + ], + "type": "string" + } + }, + "required": [ + "amount", + "currency", + "basis" + ], + "type": "object" +}
- Changed
search_property_availability1 field changed- added
Input schema / properties / budgetAdded value: +{ + "additionalProperties": false, + "description": "Optional additional budget constraint. Clarify missing currency or basis before calling. Do not combine with legacy maxPrice/maxPriceCurrency.", + "properties": { + "amount": { + "description": "Maximum amount in the explicitly supplied currency and basis.", + "exclusiveMinimum": 0, + "type": "number" + }, + "basis": { + "description": "Required explicit basis. Per-night means a stay-average allowance, not a ceiling on each night. Per-person means every adult and child equally; clarify other interpretations.", + "enum": [ + "TOTAL_STAY", + "PER_NIGHT", + "PER_PERSON_STAY", + "PER_PERSON_PER_NIGHT" + ], + "type": "string" + }, + "currency": { + "description": "Required 3-letter budget currency. Never infer from location or displayCurrency.", + "pattern": "^[A-Za-z]{3}$", + "type": "string" + }, + "scope": { + "default": "PRICED_STAY", + "description": "PRICED_STAY compares the accommodation total including configured taxes/fees. ALL_IN requires complete mandatory charges; currently ATA cannot verify completeness and will return labeled alternatives only.", + "enum": [ + "PRICED_STAY", + "ALL_IN" + ], + "type": "string" + } + }, + "required": [ + "amount", + "currency", + "basis" + ], + "type": "object" +}
1 tool update
- Changed
create_provisional_booking1 field changed- added
Input schema / properties / bookingAssistanceAdded value: +{ + "description": "Internal Little John booking attribution; requires the internal agent credential.", + "enum": [ + "AI_ASSIST" + ], + "type": "string" +}
5 tool updates
- Added
get_quote_details - Changed
get_reservation_status1 field changed- added
Input schema / properties / propertyTokenAdded value: +{ + "description": "Known public property token for this reservation; must match the hold property when supplied.", + "type": "string" +}
- Changed
get_traveler_memories1 field changed- added
Input schema / properties / travelerAssertionAdded value: +{ + "description": "Current signed ATA traveler assertion matching travelerId; required on shared transports.", + "type": "string" +}
- Changed
search_property_availability1 field changed- changed
Input schema / properties / propertyToken / descriptionPrevious value: -"Public property token (e.g., pk_live_...)"New value: +"Exact public propertyToken returned by discovery or property context. Never add a prefix or invent a token."
- Changed
suggest_traveler_memory1 field changed- added
Input schema / properties / travelerAssertionAdded value: +{ + "description": "Current signed ATA traveler assertion matching travelerId; required on shared transports.", + "type": "string" +}
1 tool update
- Changed
create_provisional_booking4 fields changed- added
Input schema / properties / guestCountryAdded value: +{ + "description": "Required traveler country, as supplied by the traveler. Ask only if missing. Do not infer it from the property location, language, currency, or phone number. Quotes do not require country.", + "maxLength": 80, + "minLength": 1, + "type": "string" +} - added
Input schema / properties / guestName / descriptionAdded value: +"Traveler’s full name, as supplied by the traveler." - added
Input schema / properties / guestName / minLengthAdded value: +1 - changed
Input schema / requiredPrevious value: -[ - "propertyToken", - "roomId", - "checkIn", - "checkOut", - "guestName", - "guestEmail", - "adults", - "policyAcknowledged" -]New value: +[ + "propertyToken", + "roomId", + "checkIn", + "checkOut", + "guestName", + "guestEmail", + "guestCountry", + "adults", + "policyAcknowledged" +]
3 tool updates
- Added
get_booking_details - Added
get_support_contacts - Changed
start_traveler_handoff3 fields changed- changed
Input schema / properties / action / descriptionPrevious value: -"The action the traveler is being asked to approve. Use BOOKING_HOLD before create_provisional_booking."New value: +"Use BOOKING_HOLD before creating a reservation; BOOKING_READ grants only read access to an existing booking for questions." - changed
Input schema / properties / action / enumPrevious value: -[ - "QUOTE", - "BOOKING_HOLD" -]New value: +[ + "QUOTE", + "BOOKING_HOLD", + "BOOKING_READ" +] - added
Input schema / properties / confirmationCodeAdded value: +{ + "description": "Required for BOOKING_READ: the ATA confirmation code printed on the booking confirmation.", + "maxLength": 64, + "minLength": 1, + "type": "string" +}
1 tool update
- Changed
create_quote1 field changed- added
Input schema / properties / guestCountryAdded value: +{ + "description": "Optional for a quote. If omitted, the traveler supplies it when completing the booking.", + "maxLength": 80, + "type": "string" +}
2 tool updates
- Changed
create_provisional_booking2 fields changed- added
Input schema / properties / policyAcknowledgedAdded value: +{ + "description": "Explicit policy-consent state. Set true only after the traveler agrees to the exact price, payment schedule, and cancellation terms. Required before creating either an instant-book hold or a host-approval enquiry.", + "type": "boolean" +} - changed
Input schema / requiredPrevious value: -[ - "propertyToken", - "roomId", - "checkIn", - "checkOut", - "guestName", - "guestEmail", - "adults" -]New value: +[ + "propertyToken", + "roomId", + "checkIn", + "checkOut", + "guestName", + "guestEmail", + "adults", + "policyAcknowledged" +]
- Added
get_reservation_status
3 tool updates
- Added
get_traveler_verification_status - Added
start_traveler_verification - Added
verify_traveler_code
1 tool update
- Changed
get_property_details1 field changed- added
Input schema / properties / roomQueryAdded value: +{ + "description": "Optional traveler-provided room or unit name, such as '5B Casita Vista'. No stay dates are required.", + "maxLength": 160, + "minLength": 1, + "type": "string" +}
1 tool update
- Added
list_property_extras
4 tool updates
- Added
get_network_discovery_context - Added
search_flexible_network_availability - Changed
search_network_availability3 fields changed- changed
Input schema / properties / location / descriptionPrevious value: -"City, State, or Country (e.g. 'Puerto Vallarta', 'Mexico', 'California')"New value: +"Optional city, state, or country. Omit when the traveler knows dates but is open to ATA's current destinations." - added
Input schema / properties / preferencesAdded value: +{ + "description": "Open-ended soft ranking signals. These do not exclude otherwise valid stays.", + "items": { + "maxLength": 120, + "minLength": 1, + "type": "string" + }, + "maxItems": 6, + "type": "array" +} - changed
Input schema / requiredPrevious value: -[ - "location", - "checkIn", - "checkOut" -]New value: +[ + "checkIn", + "checkOut" +]
- Changed
search_property_catalog3 fields changed- added
Input schema / properties / adultsAdded value: +{ + "description": "Optional adults for occupancy-safe catalog suggestions.", + "maximum": 40, + "minimum": 1, + "type": "integer" +} - added
Input schema / properties / childrenAdded value: +{ + "description": "Optional children for occupancy-safe catalog suggestions.", + "maximum": 40, + "minimum": 0, + "type": "integer" +} - added
Input schema / properties / preferencesAdded value: +{ + "description": "Open-ended soft ranking signals inferred from traveler language or current network facets.", + "items": { + "maxLength": 120, + "minLength": 1, + "type": "string" + }, + "maxItems": 6, + "type": "array" +}
1 tool update
- Changed
create_quote1 field changed- changed
Input schema / properties / agentHandoffId / descriptionPrevious value: -"Approved ATA traveler handoff ID from start_traveler_handoff/get_traveler_handoff_status. Required for first-time third-party quote creation; repeat verified traveler emails can quote without a new handoff."New value: +"Fresh approved ATA traveler handoff ID from start_traveler_handoff/get_traveler_handoff_status. Required for third-party quote creation without a current traveler assertion."
Related MCP Connectors
Vacation rental discovery, direct booking, and property protection for AI agents.
Agent-bookable hotels in Dubai, Abu Dhabi & Goa: live all-in AED prices, rate holds, payment links.
Hotel direct booking for VIP and corporate rates - upgrades and loyalty eligible, 100K+ hotels
Book real hotel and resort stays from any AI agent: all-in pricing, hosted Stripe checkout, no key.
Related MCP Servers
- AlicenseBqualityAmaintenanceOfficial MCP server for MAQAMI, a hotel and flight booking platform with 3M+ hotels. Search live hotel rates and flights, look up places, airports and hotel details, then prebook and book. Remote Streamable HTTP endpoint, no API key required.1241428 npm2MIT
- FlicenseNot gradedqualityBmaintenanceEnables AI assistants to search live hotel availability and rates, compare preferred-partner perks with public rates, create a secure one-time payment page, and manage hotel bookings through a licensed travel agency.2-
- AlicenseNot gradedqualityDmaintenanceLuxury hotel intelligence and secure checkout handoff for AI travel agents.1Apache 2.0

Dida Hotel MCPofficial
AlicenseNot gradedqualityDmaintenanceEnables AI agents to search and book hotels globally with real-time pricing and inventory from over 2 million properties.46MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.