Skip to main content
Glama

Server Details

Live flight, hotel and seat prices, cheapest-day calendars, and price-drop alerts.

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Uptime
100.0% over 26 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL

TDQS

A3.9/5.0

Scored across 38 tools

Disambiguation4/5

Most tools have a clearly distinct resource and action, and the descriptions explicitly clarify the boundaries between similar pairs such as search_flights, flight_lookup, route_airlines, and price_calendar. The watch-related tools are numerous but still separable: list_tracked_flights, check_my_watches, and watch_details each describe a different level of inspection. A few overlaps remain, such as share_link versus handoff_link versus shared_trip, but the descriptions resolve them well.

Naming Consistency3/5

All names use snake_case, but the naming convention is mixed: many tools are action-first (search_flights, track_hotel, update_bucket_list), while others are noun-first (flight_lookup, hotel_details, seat_availability, price_calendar). The pattern is still readable and resource-oriented, but it is not a consistent verb_noun scheme across the whole set.

Tool Count2/5

Thirty-eight tools is heavy for this server, especially with four parallel watch types each having create, list, update, stop, and detail operations. The breadth of the travel domain partly justifies the surface, but the set is large enough that an agent must choose carefully among many similar watch-management tools.

Completeness5/5

The surface covers flight and hotel search, booking options, flexible bucket lists, price tracking, seat alerts, account management, sharing, and trip/place utilities. CRUD-style lifecycle coverage exists for watches and bucket lists, and the core travel workflows do not have obvious dead ends.

Available Tools

38 tools
add_flight_bucket_listAdd a flight bucket listA
Idempotent
Inspect

Call this tool when the traveler wants to be alerted about a route over flexible dates, for example "tell me when New York to Tokyo drops under $700 this winter". SlickTrip keeps searching the months or dates the traveler chose and alerts them when a fare is under their price limit. It returns a bucket_id.

When the traveler asks to be alerted, call it now: that is their go-ahead. Otherwise offer it first.

Use the months, the number of nights and the price limit the traveler gave you, and the defaults for anything they did not say (every month on sale, 3 to 10 nights, 1 traveler); then tell them what you assumed. They can change any of it with update_bucket_list.

Do not use this tool for fixed dates. Search those dates with search_flights, then use track_flight to watch the flight the traveler picks.

NameRequiredDescriptionDefault
nameNoA short name for the list in the traveler's words; give one. It is how the list is called in every alert and on the site.
cabinNoCabin class.economy
monthsNoMonths to watch, as names or YYYY-MM, or give start_date + end_date. Leave both empty to watch every month on sale (the default).
originYesA 3-letter airport code (JFK), or a city code that searches every airport in the city (SlickTrip's 4-letter codes: NYCA New York, LOND London, ROME Rome, TYOA Tokyo). Up to 3 places joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. When the traveler names a city rather than an airport, send the city (its name or code), not one of its airports: one airport can miss the cheapest or the only flights. Unsure of the code: call find_places.
airlinesNoOnly these marketing carriers, as IATA codes or names.
end_dateNoLast travel date, YYYY-MM-DD.
max_stopsNoMost stops allowed: 0 nonstop, 1, or 2.
travelersNoTravelers who need a seat (adults and children). Fares are quoted for all of them together; one booking holds up to 9 (a larger group gets a suggested split). A baby under 2 on a lap is not a seat and is not counted here.
trip_typeNoRound trip or one way.roundtrip
max_nightsNoLongest trip, nights (round trips).
min_nightsNoShortest trip, nights (round trips).
start_dateNoFirst travel date, YYYY-MM-DD. Give with end_date instead of months.
depart_daysNoOnly depart on these weekdays.
destinationYesA 3-letter airport code (JFK), or a city code that searches every airport in the city (SlickTrip's 4-letter codes: NYCA New York, LOND London, ROME Rome, TYOA Tokyo). Up to 3 places joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. When the traveler names a city rather than an airport, send the city (its name or code), not one of its airports: one airport can miss the cheapest or the only flights. Unsure of the code: call find_places.
return_daysNoOnly return on these weekdays.
arrive_afterNoHH:MM, local time at that airport.
checked_bagsNoChecked bags per traveler (0-2), priced only for flights within the US and Canada (elsewhere the answer says the prices do not include them). Prices then include the bag fees: search_flights shows them as price_with_bags next to the fare; a calendar or bucket list prices every day with them.
depart_afterNoHH:MM, local time at that airport.
user_requestNoOptional, and it works in the traveler's favor. Quote the traveler's latest message about this trip exactly as they wrote it, in their wording, language and spelling, not a summary. SlickTrip runs its own travel parser on these words: when a search fails or comes back empty, it compares what the traveler said with the arguments sent and returns a corrected search, so you can fix it without asking them again. It has caught Cancun sent as MEX instead of CUN, and travelers dropped from the party. A summary loses exactly the details it checks. If the message only answers a question ("yes, the 20th"), quote the message where they asked for the trip. Send the same quote on every call for this request. Leave out anything not about the trip, and never include names, contact details, or payment or ID information. The words also help SlickTrip improve its search.
arrive_beforeNoHH:MM, local time at that airport.
carry_on_bagsNoCarry-on bags per traveler (0-1). Prices then include the bag fees: search_flights shows them as price_with_bags next to the fare; a calendar or bucket list prices every day with them.
depart_beforeNoHH:MM, local time at that airport.
max_price_usdNoThe price bar, USD per traveler (or the trip total when price_is_total).
price_is_totalNomax_price_usd is the total for all travelers.
lower_emissionsNoOnly itineraries with lower emissions than is typical for the route.
exclude_airlinesNoLeave out itineraries with any flight sold by these carriers (IATA codes, names or an alliance), by flight number or airline name: for 'not Gol' or 'avoid Air India'.
max_layover_hoursNoLongest layover allowed at every connection, in hours (half hours allowed): for 'layovers no longer than 5 hours'.
min_layover_hoursNoShortest layover allowed at every connection, in hours (half hours allowed): for 'at least 2 hours to connect'.
max_duration_hoursNoLongest itinerary to show, in hours.
connecting_airportsNoOnly itineraries that change planes at these airports (codes or city codes), nonstops included: for 'US connections only' name the hubs.
exclude_connecting_airportsNoLeave out itineraries that change planes at these airports (codes or city codes).

Output Schema

NameRequiredDescription
codeNoOn an error: a machine-readable kind, e.g. unknown_place
kindNoAlways "flight"
nameNoCustom name if given
noteNoFirst results timing
fieldNoOn unknown_place: which argument (origin, destination, ...)
routeNoorigin, destination, names, destination_image, trip_type, cabin, travelers
alertsNoPlain-words description of alerts
monthsNoMonth names watched
nightsNo[min_nights, max_nights] for round trips
statusNowatching | error | sign_in_required
windowNo{start, end} date window
messageNoError or sign-in message from the server wrapper
airlinesNoIATA carrier codes
channelsNoAlert channels on the record: email, text (booleans)
bucket_idNoThe new bucket list record id
max_stopsNoStop limit 0-2
saved_urlNoslicktrip.com saved-buckets page link
handoff_urlNoBucket-list autosave link on slicktrip.com
suggestionsNoOn unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country
display_nameNoName as the card shows it
max_price_usdNoPrice bar
places_assumedNoPlace names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare non-read-only, idempotent, non-destructive. The description adds real context beyond them: the list keeps searching and alerts when a fare drops under the limit, the tool returns a bucket_id, sensible defaults are applied and should be surfaced to the traveler, and the list can later be changed via update_bucket_list. It does not mention cost, rate limits, or alert frequency, which keeps it short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short paragraphs, each earning its place: trigger and effect, call-vs-offer rule, defaults policy, and the exclusion/alternative. Front-loaded with the caller's situation and example, with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 31-parameter mutation tool with full schema coverage and an output schema, the description covers everything an agent needs: when to call, what it produces (bucket_id), what defaults to use, how to revise later, and which siblings handle the cases this tool does not.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds policy-level guidance the schema cannot: use what the traveler gave, fill the rest with defaults (every month on sale, 3-10 nights, 1 traveler) and tell them what was assumed. It does not walk through individual parameters, which is fine given the rich schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (creates a bucket list that watches a route and alerts on price drops) and gives a concrete example request. It also distinguishes itself from search_flights, track_flight, and update_bucket_list by name, so an agent can route correctly without opening another schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-to-use (traveler wants alerts over flexible dates, and even 'call it now' vs 'offer it first' depending on whether they asked), and explicit when-not-to-use (fixed dates go to search_flights then track_flight). Alternatives are named with the condition that selects them.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

add_hotel_bucket_listAdd a hotel bucket listA
Idempotent
Inspect

Use for flexible-date hotel watches on a place or one named hotel: SlickTrip keeps searching stays of the given length across the chosen months or date window and alerts when a stay clears the per-night bar. Returns a bucket_id. When the traveler asks to be alerted, call it now; otherwise offer it first. Not for fixed dates (search_hotels, then track_hotel).

NameRequiredDescriptionDefault
adultsNoAdults. A hotel room prices up to 6 guests in all; vacation rentals up to 16.
monthsNoMonths to watch, as names or YYYY-MM, or give start_date + end_date. Leave both empty to watch every month on sale (the default).
nightsYesNights, 1-30.
end_dateNoLatest check-in, YYYY-MM-DD.
locationYesA city, area or landmark.
min_starsNoLowest star class to show, 1-5.
hotel_nameNoPin one exact hotel instead of the whole area.
start_dateNoEarliest check-in, YYYY-MM-DD. Give with end_date instead of months.
user_requestNoOptional, and it works in the traveler's favor. Quote the traveler's latest message about this trip exactly as they wrote it, in their wording, language and spelling, not a summary. SlickTrip runs its own travel parser on these words: when a search fails or comes back empty, it compares what the traveler said with the arguments sent and returns a corrected search, so you can fix it without asking them again. It has caught Cancun sent as MEX instead of CUN, and travelers dropped from the party. A summary loses exactly the details it checks. If the message only answers a question ("yes, the 20th"), quote the message where they asked for the trip. Send the same quote on every call for this request. Leave out anything not about the trip, and never include names, contact details, or payment or ID information. The words also help SlickTrip improve its search.
check_in_daysNoOnly check in on these weekdays.
max_price_per_nightNoThe price bar, USD per night.

Output Schema

NameRequiredDescription
codeNoOn an error: a machine-readable kind, e.g. unknown_place
kindNoAlways "hotel"
noteNoFirst results timing
stayNolocation, hotel_name, nights, adults
fieldNoOn unknown_place: which argument (origin, destination, ...)
alertsNoPlain-words description of alerts
monthsNoMonth names watched
statusNowatching | error | sign_in_required
windowNo{start, end} date window
messageNoError or sign-in message from the server wrapper
channelsNoAlert channels on the record: email, text (booleans)
bucket_idNoThe new bucket list record id
min_starsNoMinimum star rating
saved_urlNoslicktrip.com saved hotel-buckets link
suggestionsNoOn unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country
places_assumedNoPlace names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler
max_price_per_night_usdNoNightly price bar

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes beyond the annotations (readOnlyHint=false, idempotentHint=true) by explaining the ongoing behavior: SlickTrip keeps re-searching stays of the given length across the chosen months and alerts when the per-night bar is cleared, and it returns a bucket_id. Missing are operational limits an agent might hit — caps on number of watches, how/when alerts are delivered, or cost — which keeps it off a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four tight sentences: what it does first, return value second, decision rule third, exclusion last. No filler and no repetition of schema detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 11 parameters, an output schema present, and full annotation coverage, the description carries only the parts structured data can't: the alerting model and the call/offer policy. It leaves out limits on how many watches exist and what an alert looks like, minor gaps for an otherwise complete definition.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning by explaining how parameters combine into a search: "given length" (nights) across "the chosen months or date window" (months vs start_date/end_date) with a "per-night bar" (max_price_per_night) on a place or "one named hotel". It frames the semantics rather than restating field text.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource — a flexible-date hotel watch on a place or a single named hotel — and immediately distinguishes it from fixed-date tracking by naming search_hotels and track_hotel as the alternative path. An agent can route correctly without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"When the traveler asks to be alerted, call it now; otherwise offer it first" gives an explicit call-vs-offer decision rule, and "Not for fixed dates (search_hotels, then track_hotel)" names the exclusion and the sibling chain that replaces it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

booking_optionsSellers for an itineraryA
Read-onlyIdempotent
Inspect

Use when the traveler wants to book flights they have chosen: the sellers offering that exact itinerary (airline direct and agencies), each with its price and a link that opens its checkout on the seller's site. Takes a complete itinerary_id: one-way from search_flights, round trip from search_return_flights. Not for an outbound alone (choose a return first) and not a price watch (track_flight).

NameRequiredDescriptionDefault
itinerary_idYesA complete itinerary_id from search_flights (one way) or search_return_flights (round trip).

Output Schema

NameRequiredDescription
codeNoOn an error: a machine-readable kind, e.g. unknown_place
noteNoLinks open seller checkout; last a day
fieldNoOn unknown_place: which argument (origin, destination, ...)
statusNook | book_on_site | needs_return | unavailable | error | sign_in_required
messageNoExplanation for non-ok statuses or wrapper errors
sellersNoItems: seller, price_usd, airline_direct, separate_tickets, book_url
outboundNoOn needs_return: the outbound leg (airlines, segments, layovers) the answer is about
search_keyNoThe search key of the itinerary
search_urlNoslicktrip.com search page link
suggestionsNoOn unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country
itinerary_idNoThe itinerary the sellers are for
flight_numbersNoStrings: flight numbers of every segment
places_assumedNoPlace names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler
trip_total_usdNoThe itinerary's searched total price

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=true and destructiveHint=false, so the safety profile is covered. The description adds useful non-annotation context: the result is a set of sellers (airline direct and agencies) each with price and an external checkout link, which sets expectations for an open-world read. It does not add auth, rate-limit, or freshness/caching details, so it falls short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences: purpose first, then the prerequisite constraint, then the exclusions. Every clause carries routing or prerequisite information, and nothing is repeated from the schema beyond necessary framing.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Annotations cover the safety profile, the output schema covers return values, and the single parameter is fully documented in the schema. Combined with the description's explicit prerequisites and alternatives, an agent has everything needed to invoke this correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 1 parameter at 100% schema description coverage, the schema already documents itinerary_id, and the description largely restates it (one-way from search_flights, round trip from search_return_flights). The only added nuance is the word 'complete', which is already implied by the schema wording, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: retrieving the sellers offering a chosen itinerary, with each seller's price and checkout link. It explicitly names the sibling tools it derives from (search_flights, search_return_flights) and the one it is not (track_flight), so an agent can distinguish it without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit trigger ('when the traveler wants to book flights they have chosen'), an explicit exclusion ('not for an outbound alone – choose a return first'), and an alternative for a different intent ('not a price watch (track_flight)'). The when/when-not/alternative triad is fully covered.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

check_my_watchesCheck every watchA
Read-onlyIdempotent
Inspect

Use for a routine check of everything the traveler watches (for example a daily scheduled check, or "anything new on my watches?"): what dropped, what rose, new lows and the alerts SlickTrip sent in the last since_hours, with whether each moved price is lower than usual. One call covers every flight, bucket list, hotel and seat watch, from SlickTrip's records; it never runs a new search. For one watch in full, use watch_details.

NameRequiredDescriptionDefault
since_hoursNoHow far back to look, in hours: 24 for a daily check (the default), up to 168.

Output Schema

NameRequiredDescription
codeNoOn an error: a machine-readable kind, e.g. unknown_place
noteNoHow to report the check
fieldNoOn unknown_place: which argument (origin, destination, ...)
movedNoWatches that moved or sent an alert: watch, kind, title, now_usd, was_usd, change_usd, lowest_seen, alerts_sent, price_check
statusNook | no_watches, or error | sign_in_required
steadyNoWatches with no move: watch, kind, title, now_usd
messageNoError or sign-in message from the server wrapper
summaryNoCounts: watches, dropped, rose, new_low, alerts_sent, off_sale
since_hoursNoThe window checked, in hours
suggestionsNoOn unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country
places_assumedNoPlace names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive and closed-world, so safety is covered. The description adds genuinely useful behavior: it reads from 'SlickTrip's records' and 'never runs a new search', which tells an agent the call is cheap/instant and won't refresh live prices, and it previews the return content (drops, rises, new lows, sent alerts). Missing only finer traits such as record staleness or result volume.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The use case and scope are front-loaded before the return summary and the sibling redirect. It is a dense run-on covering many clauses; each is informative, but the parenthetical example phrase could be trimmed without loss.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only aggregate tool with one optional parameter and an existing output schema, the description covers scope, data source, no-new-search semantics, time window, and the sibling alternative. Nothing an agent needs to invoke it correctly is absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and since_hours already carries type, default, min/max and the '24 for a daily check' guidance. The description only reuses 'in the last since_hours' when framing the alert window, adding little beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'routine check of everything the traveler watches', then enumerates the covered entity types (flights, bucket lists, hotels, seat watches). It explicitly contrasts with the sibling watch_details for single-watch lookups, so an agent can route without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It names the triggering scenarios ('daily scheduled check', 'anything new on my watches?') and states the alternative: 'For one watch in full, use watch_details.' Both the when and the when-not are spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

explore_destinationsCheapest places to goA
Read-onlyIdempotent
Inspect

Use when the traveler wants the cheapest place to fly from somewhere, or ideas for where to go, instead of a destination they already chose: "the cheapest flight from Warsaw, anywhere", "where can I go cheaply", "the cheapest city in Brazil". Returns destinations cheapest first with the airline, stops and a search_url: priced on the traveler's dates when you give depart_date (and return_date for a round trip), else each on its own cheapest dates in the coming months.

NameRequiredDescriptionDefault
cabinNoCabin class.economy
abroadNoOnly places outside the origin's country, when the traveler says out of the country, abroad or international.
originYesA 3-letter airport code (JFK), or a city code that searches every airport in the city (SlickTrip's 4-letter codes: NYCA New York, LOND London, ROME Rome, TYOA Tokyo). Up to 3 places joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. When the traveler names a city rather than an airport, send the city (its name or code), not one of its airports: one airport can miss the cheapest or the only flights. Unsure of the code: call find_places.
nonstopNoNonstop flights only.
travelersNoTravelers who need a seat (adults and children). Fares are quoted for all of them together; one booking holds up to 9 (a larger group gets a suggested split). A baby under 2 on a lap is not a seat and is not counted here.
trip_typeNoRound trip or one way.roundtrip
depart_dateNoYYYY-MM-DD: price every place on this day (the traveler's own). Empty: each on its own cheapest dates.
max_resultsNoHow many destinations to list.
return_dateNoYYYY-MM-DD, with depart_date, for a round trip.
user_requestNoOptional, and it works in the traveler's favor. Quote the traveler's latest message about this trip exactly as they wrote it, in their wording, language and spelling, not a summary. SlickTrip runs its own travel parser on these words: when a search fails or comes back empty, it compares what the traveler said with the arguments sent and returns a corrected search, so you can fix it without asking them again. It has caught Cancun sent as MEX instead of CUN, and travelers dropped from the party. A summary loses exactly the details it checks. If the message only answers a question ("yes, the 20th"), quote the message where they asked for the trip. Send the same quote on every call for this request. Leave out anything not about the trip, and never include names, contact details, or payment or ID information. The words also help SlickTrip improve its search.
max_price_usdNoOnly fares at or under this total, in US dollars.
country_or_regionNoOnly destinations in this country or region, as the traveler said it.

Output Schema

NameRequiredDescription
codeNoOn an error: a machine-readable kind, e.g. unknown_place
noteNoHow to read and use the list
fieldNoOn unknown_place: which argument (origin, destination, ...)
searchNoorigin, trip_type, travelers, cabin, nonstop, country_or_region, max_price_usd
statusNook | no_data | error | sign_in_required
messageNoWhat went wrong, when status is error
suggestionsNoOn unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country
total_foundNoDestinations that fit, before max_results
destinationsNocity, country, airport, price_usd (total), per_traveler_usd, depart_date, return_date, airline, stops, duration_minutes, search_url
places_assumedNoPlace names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/openWorld/idempotent/non-destructive, so the safety profile is covered. The description adds meaningful behavioral context beyond that: the return shape (cheapest first, airline, stops, search_url) and the pricing mode switch (traveler's exact dates vs each destination's own cheapest dates). It stops short of covering pagination or rate-limit behavior, which is minor here.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tightly written sentences, front-loaded with the use case and examples, then the return/pricing behavior. Every clause carries information the agent needs; nothing is repeated from the schema or annotations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given a 12-parameter schema with full descriptions, rich annotations, and an output schema, the description is nearly complete: it establishes purpose, usage, return content, and the key date-driven pricing behavior. It does not mention notable optional controls like max_price_usd or user_request, but those are thoroughly documented in the schema and output schema is present, so the omission is small.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description earns an extra point by explaining the semantic consequence of depart_date/return_date: when supplied, all destinations are priced on those dates; when omitted, each destination is priced on its own cheapest dates in the coming months. That is genuine meaning beyond the schema text.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb+resource ('cheapest place to fly from somewhere', 'ideas for where to go') and explicitly scopes it as an alternative to a trip where the destination is already chosen. The concrete example utterances make the purpose unmistakable without requiring the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It clearly defines when to use this tool ('the traveler wants the cheapest place to fly from somewhere... instead of a destination they already chose') and backs it with realistic traveler quotes. It does not name the sibling alternative (search_flights) explicitly, so the when-not is implied rather than enumerated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

find_placesFind airport and city codesA
Read-onlyIdempotent
Inspect

Use when unsure of an airport or city code before searching. Matches a place name or code and returns the code to pass as origin or destination, whether it is one airport or all airports in a city, and the airports a city code covers. Not needed for well-known codes like JFK or LHR.

NameRequiredDescriptionDefault
limitNoMost matches to return.
queryYesA city or airport name, or a code to check.

Output Schema

NameRequiredDescription
codeNoOn an error: a machine-readable kind, e.g. unknown_place
noteNoHow to use the code, or no-match hint
fieldNoOn unknown_place: which argument (origin, destination, ...)
placesNoItems: code, name, kind, country, plus airports[] (city) or city (airport)
statusNoerror | sign_in_required (absent on success)
messageNoError or sign-in message from the server wrapper
suggestionsNoOn unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country
places_assumedNoPlace names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, and non-open-world, so the safety profile is covered. The description adds real behavioral context beyond that: it explains the resolution granularity (one airport vs. all airports in a city) and that the returned code is meant to be fed into origin/destination fields. It stops short of describing result size or fallback behavior on no match.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three compact sentences, front-loaded with the usage trigger, then the behavior, then the exclusion. No filler and nothing redundant with structured fields.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Although an output schema exists (so return shape needn't be documented), the description still conveys the practical payload semantics an agent needs: the code to use, and the airport set a city code covers. With fully documented params and annotations, nothing essential is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% so the baseline is 3, and the description goes beyond it by clarifying that 'query' accepts a place name or a code and by describing how the query is interpreted (single airport, whole city, or code-to-coverage). It adds meaning not present in the schema's field titles.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('matches a place name or code') and the concrete output ('returns the code to pass as origin or destination'), which cleanly separates it from siblings like flight_lookup and search_flights. An agent can identify its role without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says when to use it ('before searching' when unsure of a code) and when not to ('Not needed for well-known codes like JFK or LHR'), with a concrete example. This is close to ideal routing guidance for a lookup/resolution tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

flight_lookupFlights on a route that dayA
Read-onlyIdempotent
Inspect

Call this tool when the traveler wants to know which flights operate on a route on a given date, or when you need a flight number for seat_availability or track_seats. It returns the departure and arrival times, the airline, the aircraft and the stops. It does not return prices. To find prices, use search_flights.

NameRequiredDescriptionDefault
originYesA 3-letter airport code (JFK), or a city code that searches every airport in the city (SlickTrip's 4-letter codes: NYCA New York, LOND London, ROME Rome, TYOA Tokyo). Up to 3 places joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. When the traveler names a city rather than an airport, send the city (its name or code), not one of its airports: one airport can miss the cheapest or the only flights. Unsure of the code: call find_places.
displayNocompact: one line per option, more options, far fewer tokens; full: every field (what the cards draw). Empty picks for you: compact when the app shows no cards, full when it does.
depart_dateYesYYYY-MM-DD.
destinationYesA 3-letter airport code (JFK), or a city code that searches every airport in the city (SlickTrip's 4-letter codes: NYCA New York, LOND London, ROME Rome, TYOA Tokyo). Up to 3 places joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. When the traveler names a city rather than an airport, send the city (its name or code), not one of its airports: one airport can miss the cheapest or the only flights. Unsure of the code: call find_places.
user_requestNoOptional, and it works in the traveler's favor. Quote the traveler's latest message about this trip exactly as they wrote it, in their wording, language and spelling, not a summary. SlickTrip runs its own travel parser on these words: when a search fails or comes back empty, it compares what the traveler said with the arguments sent and returns a corrected search, so you can fix it without asking them again. It has caught Cancun sent as MEX instead of CUN, and travelers dropped from the party. A summary loses exactly the details it checks. If the message only answers a question ("yes, the 20th"), quote the message where they asked for the trip. Send the same quote on every call for this request. Leave out anything not about the trip, and never include names, contact details, or payment or ID information. The words also help SlickTrip improve its search.
flight_numberNoOnly this flight, like AA100.

Output Schema

NameRequiredDescription
codeNoOn an error: a machine-readable kind, e.g. unknown_place
noteNoGuidance for the assistant
fieldNoOn unknown_place: which argument (origin, destination, ...)
searchNoorigin, destination, depart_date with names
statusNook | no_data | error | sign_in_required
flightsNoScheduled flights: flight_numbers, aircraft, airlines, stops, duration_minutes, segments
messageNoError or sign-in text
suggestionsNoOn unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country
places_assumedNoPlace names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler
seat_tracker_urlNoThe seat tracker on slicktrip.com

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive/openWorld, so safety is covered. The description adds real behavioral context beyond that: the exact payload fields (departure/arrival times, airline, aircraft, stops) and a negative disclosure that prices are not returned, which prevents misuse. It stops short of volume/pagination or error-shape notes.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences: trigger first, output description second, exclusion and alternative last. No restatement of the title or filler, and every sentence affects selection or invocation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present and full annotation coverage, the description supplies exactly what structured fields cannot: when to choose it over search_flights/route_airlines, what the result contains, and where its output feeds downstream tools. Nothing essential is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the parameter docs are unusually rich (city codes, underscore joins, unknown_place errors, user_request quoting rules), so the schema carries the load. The description adds no parameter-level detail beyond the implicit route/date framing, which is the expected baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource with scope: which flights operate on a route on a given date, plus what is returned (times, airline, aircraft, stops). It explicitly distinguishes itself from search_flights by saying it returns no prices, so an agent can separate it from the price-oriented siblings without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit triggering conditions (traveler wants flights on a route/date) and a chaining rationale (needed to obtain a flight number for seat_availability or track_seats). It also names the alternative for pricing (search_flights), covering when-not-to-use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_accountThe SlickTrip accountA
Read-onlyIdempotent
Inspect

Use before offering text alerts, or when the traveler asks about their account: name, member since, which alert channels work (text needs a phone verified on the site), the plan and its free limit, and how many fares, stays, seats and bucket lists are watched.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
codeNoOn an error: a machine-readable kind, e.g. unknown_place
nameNoDisplay name on the account
noteNoText alerts need verified phone, when unverified
planNo"premium" or "free"
emailNoSigned-in email
fieldNoOn unknown_place: which argument (origin, destination, ...)
statusNook | error | sign_in_required
messageNoError or sign-in message from the server wrapper
channelsNoemail, text, text_available booleans
watchingNoCounts: flights, hotels, seats, bucket_lists
manage_urlNoslicktrip.com profile page link
suggestionsNoOn unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country
member_sinceNoAccount creation date YYYY-MM-DD
places_assumedNoPlace names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler
free_limit_per_typeNoFree-tier tracking cap; null on premium

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description adds genuinely useful behavioral context the annotations do not: text alerts only work if a phone is verified on the site. It does not mention caching or refresh behavior, but that is minor given the annotations and output schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence, front-loaded with the usage trigger before the field enumeration, with no filler. The trailing colon-list is long but every item maps to real returned data, so it earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the description need not document return values, and it instead spends its words on the trigger, the contents, and the phone-verification prerequisite for text alerts. Nothing an agent needs to call this correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so per the rubric the baseline is 4. Nothing in the description misleads about inputs, and the field list it does give describes the response rather than arguments.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description enumerates exactly what the tool returns — name, member since, working alert channels, plan and its free limit, and watched-item counts — which lets an agent distinguish it from update_account and the list_tracked_* siblings. The verb is only implicit (carried by the name 'get'), so it falls just short of a full verb+resource statement.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives two concrete triggers: 'before offering text alerts' and 'when the traveler asks about their account'. That is clear usage context, but no when-not guidance or explicit routing to update_account as the alternative is provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

hotel_booking_optionsSellers for a hotelA
Read-onlyIdempotent
Inspect

Use when the traveler wants to book a hotel from search_hotels: every seller quoting it for those dates (the hotel itself and booking sites), each with the stay total and a link that opens its checkout on the seller's site. Takes the search_key and hotel_id from search_hotels. Not a price watch (track_hotel).

NameRequiredDescriptionDefault
hotel_idYesThe hotel_id from search_hotels.
search_keyYesThe search_key from search_hotels.

Output Schema

NameRequiredDescription
codeNoOn an error: a machine-readable kind, e.g. unknown_place
nameNoHotel name
noteNoLinks open seller checkout; last a day
fieldNoOn unknown_place: which argument (origin, destination, ...)
statusNook | unavailable | error | sign_in_required
messageNoExplanation for unavailable or wrapper errors
sellersNoItems: seller, total_usd, per_night_usd, hotel_direct, free_cancellation, book_url
hotel_idNoThe hotel's property token
hotel_urlNoslicktrip.com hotel page link
search_keyNoThe hotel search key
suggestionsNoOn unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country
places_assumedNoPlace names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is covered. The description adds meaningful context on top: the result is a multi-seller list including the hotel's own site, each entry carries a stay total and a link that leaves the app to open the seller's checkout — which is exactly the openWorld behavior an agent should anticipate. It does not mention auth requirements or result limits, so it stops short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, each load-bearing: trigger, payload description, input provenance, then the sibling exclusion. The purpose and the 'when' are front-loaded before any detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present the description need not explain return fields, yet it still characterizes the result well enough to set expectations. Trigger, inputs, provenance, and sibling differentiation are all present for a simple two-parameter read tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and both properties are already documented as coming from search_hotels, so the description's 'Takes the search_key and hotel_id from search_hotels' largely repeats the schema. Baseline 3 is appropriate when the schema carries the parameter burden.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific action (retrieve every seller quoting a given hotel for the searched dates), the resource (hotel booking sellers), and the payload shape (stay total plus a checkout link per seller). It also distinguishes itself from the near-named sibling booking_options and from track_hotel by explicitly disclaiming price watching.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It opens with an explicit trigger ('Use when the traveler wants to book a hotel from search_hotels'), states the prerequisite source for both inputs, and names an exclusion ('Not a price watch (track_hotel)'). An agent knows both when to call it and when not to.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

hotel_detailsHotel detailsA
Read-onlyIdempotent
Inspect

Use when the traveler asks for the details, more information, photos, rooms or description of one hotel from search_hotels: description, photos, guest rating, amenities, the sellers' stay totals, the rooms, check-in and check-out times. Takes the search_key and hotel_id from search_hotels. Not for prices across dates (hotel_price_calendar). Booking links are hotel_booking_options; call that only when they say book.

NameRequiredDescriptionDefault
hotel_idYesThe hotel_id from search_hotels.
search_keyYesThe search_key from search_hotels.

Output Schema

NameRequiredDescription
codeNoOn an error: a machine-readable kind, e.g. unknown_place
nameNoHotel name
noteNoGuidance for the assistant
stayNolocation, check_in, check_out, adults, children
fieldNoOn unknown_place: which argument (origin, destination, ...)
roomsNoRooms: name, seller, total_usd, free_cancellation
starsNoStar class
imagesNoPhoto URLs
nightsNoNights in the stay
statusNook | no_data | error | sign_in_required
addressNoStreet address
messageNoError or sign-in text
reviewsNoReview count
sellersNoStay total by seller, cheapest first: seller, total_usd, per_night_usd, hotel_direct, free_cancellation
hotel_idNoHotel id
amenitiesNoAmenity names
hotel_urlNoThe hotel on slicktrip.com
total_usdNoCheapest room stay total
search_keyNoThe hotel search key
descriptionNoHotel description
suggestionsNoOn unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country
guest_ratingNoGuest rating out of 5
check_in_timeNoCheck-in time
per_night_usdNoCheapest room per night
check_out_timeNoCheck-out time
places_assumedNoPlace names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint false, so the safety profile is covered. The description adds the data-provenance dependency (both arguments must come from a prior search_hotels call) and the routing constraint on booking links, but no rate limits, caching, or failure modes. Since an output schema exists and annotations handle safety, this is a genuine but modest addition.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, front-loaded with the trigger condition before the alternatives and prerequisites. The mid-sentence enumeration of returned fields is slightly list-heavy but every item is differentiating information, not filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return values need no prose, annotations cover the safety profile, and the description covers trigger, prerequisites, and the two adjacent siblings. Nothing an agent needs to call this correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and both param descriptions already say 'from search_hotels', so the description's 'Takes the search_key and hotel_id from search_hotels' largely repeats the schema. It adds the useful implicit constraint that these are search-scoped, not global IDs, but no format or validity details. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb+resource (fetch details/photos/rooms/rating for ONE hotel) and enumerates the payload returned, so the agent knows exactly what it gets. It explicitly distinguishes itself from hotel_price_calendar (prices across dates) and hotel_booking_options (links).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

States the trigger condition ('traveler asks for details, more information, photos, rooms or description of one hotel'), the alternative to use for dates/prices, and the sibling for booking links with a gating condition ('call that only when they say book'). Prerequisites for both params are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

hotel_price_calendarHotel price calendarA
Read-onlyIdempotent
Inspect

Use for 'when is this hotel cheapest' (signed-in account): one hotel's nightly price by check-in date across a span of months. Needs a hotel_id from search_hotels. Then search_hotels with the chosen dates to track it.

NameRequiredDescriptionDefault
hotel_idYesA hotel_id from search_hotels.
end_monthNoLast month, as a name or YYYY-MM. Empty means next month.
hotel_nameNoThe hotel's name from search_hotels, for the card's title.
start_monthNoFirst month, as a name or YYYY-MM. Empty means this month.

Output Schema

NameRequiredDescription
codeNoOn an error: a machine-readable kind, e.g. unknown_place
daysNoItems: check_in, per_night_usd, day_of_week
noteNoPer-night semantics and next step
fieldNoOn unknown_place: which argument (origin, destination, ...)
monthsNo[start_month_name, end_month_name]
statusNook | no_data | error | sign_in_required
messageNoNo-data explanation or wrapper error
summaryNopriced_days, cheapest_per_night_usd, cheapest_check_in, median_per_night_usd, first_date, last_date
hotel_idNoThe hotel property token
hotel_nameNoThe hotel name as given by the caller
suggestionsNoOn unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country
places_assumedNoPlace names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the safety profile is covered. The description adds real context beyond them: the call requires a signed-in account and spans months of results, which is not derivable from 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences with no filler; the user-intent trigger is front-loaded, then the prerequisite, then the next step. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers the intent, prerequisite chain and follow-up action, and an output schema exists so return values need not be explained. Only minor gap is the lack of explicit differentiation from the sibling price_calendar tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents hotel_id, start_month and end_month (including defaults and formats). The description only restates the hotel_id source, adding no new syntax or semantics. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource+scope: 'one hotel's nightly price by check-in date across a span of months', and frames the user intent ('when is this hotel cheapest'). This clearly distinguishes it from hotel_details, hotel_booking_options and the generic price_calendar sibling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a clear trigger phrase, a required prerequisite ('Needs a hotel_id from search_hotels'), and a follow-up workflow ('Then search_hotels with the chosen dates to track it'). It does not, however, explicitly contrast with the sibling price_calendar, leaving some ambiguity for an agent choosing between the two calendars.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_bucket_listsList bucket listsA
Read-onlyIdempotent
Inspect

Use to see the flight and hotel bucket lists on the signed-in account, each with its settings, the best deals found so far, and the bucket_id that update_bucket_list, remove_bucket_list and share_link take.

NameRequiredDescriptionDefault
nameNoOnly the bucket lists the traveler asked about: words from a list's name or its places, e.g. 'Firefall' or 'Lisbon'. Leave out to list them all.
limitNoHow many to return, newest first, 1-200.

Output Schema

NameRequiredDescription
codeNoOn an error: a machine-readable kind, e.g. unknown_place
noteNoHow to remove; price semantics
countNoNumber of bucket lists returned
fieldNoOn unknown_place: which argument (origin, destination, ...)
statusNoerror | sign_in_required (absent on success)
messageNoError or sign-in message from the server wrapper
manage_urlNoslicktrip.com saved-buckets page link
suggestionsNoOn unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country
bucket_listsNoFlight items (bucket_id, kind, route fields, months, window, nights, price, best_deals...) and hotel items (location, nights, adults, months, best_deals...)
places_assumedNoPlace names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and openWorldHint=false, so the safety profile is covered. The description still adds real value by disclosing the payload contents (settings, best deals found so far, bucket_id) rather than just repeating 'list'. It doesn't mention pagination beyond what the schema's limit field implies, which is the only gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single well-formed sentence that front-loads the purpose and then appends the return-value details and the sibling linkage. Dense but every clause carries information; no filler or repetition of the title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With annotations covering the safety profile and an output schema covering the return shape, the description only needs to state scope and purpose, which it does. The downstream bucket_id pointer is a genuinely useful addition for a tool in a large, mutation-heavy sibling set.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both the name filter and the limit ordering ('newest first') are already documented in the schema. The description adds no syntax, format, or filtering hints beyond that, which is fine but earns only the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('see the flight and hotel bucket lists on the signed-in account') and enumerates what each entry contains, which cleanly distinguishes it from the add_*, update_*, and remove_* siblings. An agent can tell this is the read-side of the bucket-list family without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The opening 'Use to see...' plus the mention that entries carry the bucket_id consumed by update_bucket_list, remove_bucket_list, and share_link makes the read-before-mutate usage pattern clear. It stops short of explicit when-not-to-use guidance, but the alternatives are implied by naming the downstream tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_tracked_flightsList tracked flightsA
Read-onlyIdempotent
Inspect

Use to see the flight price alerts on the signed-in account: route, dates, cabin, alert settings, each itinerary's current price against the price when tracking began, and the search_key and fid that stop_tracking_flight and update_flight_tracking take.

NameRequiredDescriptionDefault
limitNoHow many to return, newest first, 1-200.

Output Schema

NameRequiredDescription
codeNoOn an error: a machine-readable kind, e.g. unknown_place
noteNoHow to stop a tracking
countNoNumber of flight trackings on the account
fieldNoOn unknown_place: which argument (origin, destination, ...)
statusNoerror | sign_in_required (absent on success)
messageNoError or sign-in message from the server wrapper
trackingsNoItems: route fields, search_key, alert_preference, alert_method, prices, last_alert_sent, itineraries[], manage_url
manage_urlNoslicktrip.com saved-flights page link
suggestionsNoOn unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country
places_assumedNoPlace names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive, and closed-world, so the safety profile is covered. The description adds real value beyond that: it is scoped to the signed-in account, it discloses that each itinerary is shown as current price versus price at tracking start, and it surfaces the IDs needed by mutation tools.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence that opens with the usage verb and then lists return contents without filler. The enumerated list is dense but every item is informative, though the sentence is on the long side for a one-parameter list tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Output schema exists so return values need not be explained, yet the description still calls out the account scoping, the price-comparison semantics, and the downstream ID handoff — precisely the context an agent needs to route and chain correctly. Nothing material is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the single 'limit' parameter (1-200, newest first, default 50) is fully documented in the schema. The description adds no further parameter guidance such as pagination or default-ordering notes, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('see the flight price alerts on the signed-in account') and then enumerates the exact contents returned: route, dates, cabin, alert settings, price deltas, and the search_key/fid identifiers. It also names the sibling tools that consume those identifiers, so the agent knows how this read tool fits the tracked-flights workflow.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The opening clause 'Use to see...' gives a clear when-to-use context tied to the signed-in account, and mentioning stop_tracking_flight/update_flight_tracking implies the follow-up workflow. There is no explicit statement of when not to use it or a direct pointer to list_tracked_hotels/list_tracked_seats as alternatives, so it falls short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_tracked_hotelsList tracked hotelsA
Read-onlyIdempotent
Inspect

Use to see the hotel price alerts on the signed-in account: stay dates, guests, each hotel's current price against the price when tracking began, and the tracking_id and hotel_id the update and stop tools take.

NameRequiredDescriptionDefault
limitNoHow many to return, newest first, 1-200.

Output Schema

NameRequiredDescription
codeNoOn an error: a machine-readable kind, e.g. unknown_place
noteNoHow to stop a tracking
countNoNumber of hotel stays tracked
fieldNoOn unknown_place: which argument (origin, destination, ...)
statusNoerror | sign_in_required (absent on success)
messageNoError or sign-in message from the server wrapper
trackingsNoItems: tracking_id, name, check_in, check_out, adults, children, alert settings, prices, hotels[], manage_url
manage_urlNoslicktrip.com saved-hotels page link
suggestionsNoOn unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country
places_assumedNoPlace names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, closed-world, non-destructive), so the bar is lower; the description still adds value by scoping results to the signed-in account and disclosing the comparison semantics (current price vs. price when tracking began). It does not mention pagination or ordering beyond what the limit param implies.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler; the purpose comes first and the field inventory follows. It is somewhat dense in its enumeration but every clause carries information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the description needn't document return values, yet it still previews them and links to the downstream update/stop tools. Annotations plus the 1-param schema leave nothing an agent needs missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only one parameter and its schema description is fully covered (default 50, range 1-200, newest first). The prose adds no parameter detail, which is acceptable given the schema does the work, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('see the hotel price alerts on the signed-in account') and enumerates what the listing contains: stay dates, guests, current vs. starting price, and the tracking_id/hotel_id. The 'hotel' qualifier and account scoping cleanly separate it from list_tracked_flights and list_tracked_seats.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The opening 'Use to see...' establishes the context of use and the trailing clause implicitly routes the agent to the update and stop tools by naming the IDs they consume. It never states exclusions or an explicit alternative (e.g., when to prefer this over hotel_booking_options), so it falls short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_tracked_seatsList tracked seatsA
Read-onlyIdempotent
Inspect

Use to see the seat alerts on the signed-in account: flight, departure, cabin, the seats watched and which are open now, and the tracking_key the update and stop tools take.

NameRequiredDescriptionDefault
limitNoHow many to return, newest first, 1-200.

Output Schema

NameRequiredDescription
codeNoOn an error: a machine-readable kind, e.g. unknown_place
noteNoHow to stop a seat alert
countNoNumber of seat alerts on the account
fieldNoOn unknown_place: which argument (origin, destination, ...)
statusNoerror | sign_in_required (absent on success)
messageNoError or sign-in message from the server wrapper
trackingsNoItems: tracking_key, flight_number, origin, destination, departure_time, aircraft, cabins, seats_together, tracked_seats, open_now, alert_method, created_at, manage_url
manage_urlNoslicktrip.com saved-seats page link
suggestionsNoOn unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country
places_assumedNoPlace names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive and closed-world, so safety is covered. The description adds genuinely useful context beyond that: results are scoped to the signed-in account, and the tracking_key it returns is the handle the update/stop tools take, which tells the agent how to chain calls.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One sentence, front-loaded with the 'Use to see...' intent and no filler. It is dense and slightly run-on with its comma-separated field list, but every clause carries information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so listing return fields is not strictly required, and annotations cover the safety profile; the description still fills the remaining gaps (account scoping, tracking_key handoff). Nothing essential for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the single 'limit' parameter is fully documented in the schema (1-200, newest first). The description adds nothing about the parameter, so the baseline 3 for schema-carried semantics applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('see the seat alerts on the signed-in account') and enumerates the returned fields (flight, departure, cabin, watched seats, open status). This cleanly separates it from the sibling list_tracked_flights and list_tracked_hotels, which cover different tracked entities.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear context ('seat alerts on the signed-in account') and implicitly routes the agent onward by noting the returned tracking_key is what the update and stop tools consume, which is a real workflow hint. It stops short of an explicit when-not or a named alternative tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

price_calendarPrice calendarA
Read-onlyIdempotent
Inspect

Use price_calendar only for a traveler who is flexible within a period they named (for example "sometime in March", "any weekend in December", "this winter"), has told you how many nights they want to stay, and wants to know which days are cheapest.

It shows the cheapest fare for each departure day, across about two months starting with the month you give. With max_stops=0 it also shows which days have a nonstop flight, for a traveler who is flexible within a period they named and wants a nonstop.

Every price in the calendar is for one exact trip: a set number of nights away, one cabin, one number of travelers, and one set of stops, airlines and times. If any of these is guessed, every price in the calendar is for a trip the traveler will not take.

Before you call it, you need from the traveler: the month or period, and for a round trip the number of nights they want to stay. Also pass any preferences the traveler gave you: nonstop or not, airlines, times of day, cabin, and number of travelers. If the traveler has not told you the period, or for a round trip the number of nights, ask them in one question. Do not choose a month for the traveler. Do not choose a trip length for the traveler.

Do not call this tool when the traveler has given you dates. Search those dates with search_flights instead. Do not call this tool when the traveler has given no dates at all. Ask them when they want to go instead, and offer a bucket list alert with add_flight_bucket_list, which watches the route for them.

Call it once, or twice at most, per answer. Then show the traveler the two or three cheapest days. The answer tells you how to close: one question that offers flights for the day they pick, or a bucket list alert that watches the whole period.

NameRequiredDescriptionDefault
cabinNoCabin class.economy
monthNoThe month the traveler named, as YYYY-MM. Leave it empty only when the traveler asked about the next few weeks. Do not choose a month for the traveler.
originYesA 3-letter airport code (JFK), or a city code that searches every airport in the city (SlickTrip's 4-letter codes: NYCA New York, LOND London, ROME Rome, TYOA Tokyo). Up to 3 places joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. When the traveler names a city rather than an airport, send the city (its name or code), not one of its airports: one airport can miss the cheapest or the only flights. Unsure of the code: call find_places.
airlinesNoUp to 3 carriers as IATA codes, or one alliance: star alliance, oneworld, skyteam.
depart_toNoYYYY-MM-DD, the last day the traveler could leave.
max_stopsNoMost stops allowed: 0 nonstop, 1, or 2 (2 or more: any number).
travelersNoTravelers who need a seat (adults and children). Fares are quoted for all of them together; one booking holds up to 9 (a larger group gets a suggested split). A baby under 2 on a lap is not a seat and is not counted here.
trip_typeNoRound trip or one way.roundtrip
depart_fromNoYYYY-MM-DD, with depart_to: only departures in the traveler's own window ("any day before Christmas" is December 1 to 24; "mid-March through April" is March 15 to April 30). It can run to the end of the month after depart_from.
destinationYesA 3-letter airport code (JFK), or a city code that searches every airport in the city (SlickTrip's 4-letter codes: NYCA New York, LOND London, ROME Rome, TYOA Tokyo). Up to 3 places joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. When the traveler names a city rather than an airport, send the city (its name or code), not one of its airports: one airport can miss the cheapest or the only flights. Unsure of the code: call find_places.
lap_infantsNoBabies under 2 who will sit on an adult's lap (no seat of their own). Not counted in travelers and not in the quoted fare; the answer says how airlines charge them.
arrive_afterNoHH:MM, local time at that airport.
checked_bagsNoChecked bags per traveler (0-2), priced only for flights within the US and Canada (elsewhere the answer says the prices do not include them). Prices then include the bag fees: search_flights shows them as price_with_bags next to the fare; a calendar or bucket list prices every day with them.
depart_afterNoHH:MM, local time at that airport.
user_requestNoOptional, and it works in the traveler's favor. Quote the traveler's latest message about this trip exactly as they wrote it, in their wording, language and spelling, not a summary. SlickTrip runs its own travel parser on these words: when a search fails or comes back empty, it compares what the traveler said with the arguments sent and returns a corrected search, so you can fix it without asking them again. It has caught Cancun sent as MEX instead of CUN, and travelers dropped from the party. A summary loses exactly the details it checks. If the message only answers a question ("yes, the 20th"), quote the message where they asked for the trip. Send the same quote on every call for this request. Leave out anything not about the trip, and never include names, contact details, or payment or ID information. The words also help SlickTrip improve its search.
arrive_beforeNoHH:MM, local time at that airport.
carry_on_bagsNoCarry-on bags per traveler (0-1). Prices then include the bag fees: search_flights shows them as price_with_bags next to the fare; a calendar or bucket list prices every day with them.
depart_beforeNoHH:MM, local time at that airport.
lower_emissionsNoOnly itineraries with lower emissions than is typical for the route.
exclude_airlinesNoLeave out itineraries with any flight sold by these carriers (IATA codes, names or an alliance), by flight number or airline name: for 'not Gol' or 'avoid Air India'.
trip_length_daysNoHow many nights the traveler wants to stay. Round trips only. Every price in the calendar is for exactly this many nights. If the traveler has not told you how many nights, ask them. Do not pick a number for the traveler.
max_layover_hoursNoLongest layover allowed at every connection, in hours (half hours allowed): for 'layovers no longer than 5 hours'.
min_layover_hoursNoShortest layover allowed at every connection, in hours (half hours allowed): for 'at least 2 hours to connect'.
max_duration_hoursNoLongest itinerary to show, in hours.
connecting_airportsNoOnly itineraries that change planes at these airports (codes or city codes), nonstops included: for 'US connections only' name the hubs.
exclude_connecting_airportsNoLeave out itineraries that change planes at these airports (codes or city codes).

Output Schema

NameRequiredDescription
codeNoOn an error: a machine-readable kind, e.g. unknown_place
daysNoItems: depart_date, return_date, price_usd, day_of_week, low_price
noteNoNext-step guidance or why no data
fieldNoOn unknown_place: which argument (origin, destination, ...)
queryNoThe calendar query: origin, destination, cabin, travelers, trip_type, stops, month, airlines
statusNook | no_data | error | sign_in_required
messageNoError or sign-in message from the server wrapper
summaryNoPartner grid summary stats for the window
search_urlNoslicktrip.com flights tab link
suggestionsNoOn unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country
places_assumedNoPlace names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, and the description adds real behavioral context on top: every price is for one exact trip (fixed nights, cabin, traveler count, stops/airlines/times) and any guessed input invalidates the whole calendar. It also discloses the call-count budget and what the response expects downstream ('the answer tells you how to close'), which annotations cannot convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded and well structured: eligibility first, then what it returns, then preconditions, then exclusions and closing behavior. It loses a point for repetition — 'flexible within a period they named' and 'Do not choose a month/trip length for the traveler' appear twice, and the same prohibition is restated in the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 26-parameter tool with an output schema and rich annotations, the description covers everything an agent needs before calling: who it is for, which inputs are mandatory versus optional preferences, what must be asked rather than assumed, and the fallback path when inapplicable. Return-value detail is correctly delegated to the output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 100% schema coverage the schema carries the per-field detail, but the description still adds decision-level meaning: month and trip_length_days must come from the traveler and must not be guessed, and max_stops=0 changes the output to flag nonstop days. It does not explain interplays like depart_from/depart_to window semantics or user_request, which the schema handles.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (shows the cheapest fare for each departure day over a roughly two-month window) and pins down the exact traveler situation it serves: flexible within a named period, known trip length, wanting the cheapest days. It is immediately distinguishable from search_flights (fixed dates) and add_flight_bucket_list (no dates at all).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly gives when to use, when NOT to use ('Do not call this tool when the traveler has given you dates ... Do not call this tool when the traveler has given no dates at all'), and names the substitute for each case (search_flights, add_flight_bucket_list). It also caps invocation frequency ('once, or twice at most, per answer') and specifies the pre-call information gathering (ask in one question, never invent a month or trip length).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

recent_dealsRecent dealsA
Read-onlyIdempotent
Inspect

Use for 'any deals right now?': the freshest price-drop alerts SlickTrip actually sent, by category (flights, hotels, seats, flexible routes). Not a search; no account needed.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
codeNoOn an error: a machine-readable kind, e.g. unknown_place
noteNoThese are real alerts sent recently
siteNoslicktrip.com homepage link with attribution
fieldNoOn unknown_place: which argument (origin, destination, ...)
alertsNoCategory name to array of recent alert items (route, price, prevPrice, dates, url, ...)
statusNoerror | sign_in_required (absent on success)
messageNoError or sign-in message from the server wrapper
suggestionsNoOn unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country
places_assumedNoPlace names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds genuine non-structured context: no authentication required, and that results are alerts SlickTrip actually sent (a sent-history feed) rather than computed-on-demand prices. It leaves the freshness window (how far back "recent" reaches) undefined.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One tightly packed sentence plus a short negating clause: the usage trigger, the data source, the category breakdown and the no-auth note all land up front with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need no explanation, and the description correctly focuses on source, categories and auth. The only meaningful gap is the undefined recency window, which an agent would need to interpret "freshest" or set user expectations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so the baseline is 4; there is no argument syntax for the description to clarify. It does usefully enumerate the category dimension of the result, which is the only knob-like concept here, but that belongs to the output rather than the input.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific resource (the freshest price-drop alerts SlickTrip actually sent) and scope (by category: flights, hotels, seats, flexible routes), and explicitly contrasts itself with search tools. An agent can distinguish it from search_flights/search_hotels/price_calendar without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a concrete usage trigger ("any deals right now?") and an exclusion ("Not a search"), plus the precondition that no account is needed. It does not name a specific sibling to use instead when the user wants a targeted search, so it falls just short of the full when/when-not/alternative triad.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

remove_bucket_listRemove a bucket listA
DestructiveIdempotent
Inspect

Use to stop a bucket list (bucket_id from list_bucket_lists). Cannot be undone; confirm first.

NameRequiredDescriptionDefault
bucket_idYesThe list's bucket_id from list_bucket_lists.

Output Schema

NameRequiredDescription
codeNoOn an error: a machine-readable kind, e.g. unknown_place
kindNo"flight" or "hotel"
nameNoThe bucket's name
stayNoHotel only: location, hotel_name, nights, adults
fieldNoOn unknown_place: which argument (origin, destination, ...)
routeNoFlight only: origin, destination, names, trip_type, cabin, travelers
statusNoremoved | error | sign_in_required
messageNoError or sign-in message from the server wrapper
bucket_idNoThe removed bucket list id
manage_urlNoslicktrip.com saved buckets page link
suggestionsNoOn unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country
display_nameNoName as the card shows it
places_assumedNoPlace names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=true, so the safety profile is covered structurally. The description adds genuinely new behavioral context: the action cannot be undone and the caller should confirm first, which is a workflow requirement not encoded in 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence carrying purpose, parameter provenance, irreversibility, and a confirmation cue. No filler and nothing redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter destructive tool with annotations covering safety and an output schema covering returns, the description supplies the missing prerequisites and reversibility warning. Only the absence of alternative-tool routing keeps it from being fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single parameter's description already states it comes from list_bucket_lists, so the description largely repeats the schema. It adds no format, type, or validation detail beyond provenance. Baseline 3 is appropriate when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific action on a specific resource (stop a bucket list) and its title matches 'Remove a bucket list'. The verb 'stop' is slightly softer than the actual destructive removal, but the reference to bucket_id from list_bucket_lists anchors it clearly against siblings like add_flight_bucket_list and update_bucket_list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a clear precondition (obtain bucket_id from list_bucket_lists) and an operational instruction ('confirm first'), which is more than most definitions offer. It does not explicitly contrast itself with update_bucket_list or the add_* siblings, so it stops short of full when/when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

route_airlinesAirlines on a routeA
Read-onlyIdempotent
Inspect

Use when the traveler asks who flies a route, or before filtering by airline: the carriers on the route, nonstop ones first, with the codes the airlines filters take. Not a fare search.

NameRequiredDescriptionDefault
originYesA 3-letter airport code (JFK), or a city code that searches every airport in the city (SlickTrip's 4-letter codes: NYCA New York, LOND London, ROME Rome, TYOA Tokyo). Up to 3 places joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. When the traveler names a city rather than an airport, send the city (its name or code), not one of its airports: one airport can miss the cheapest or the only flights. Unsure of the code: call find_places.
destinationYesA 3-letter airport code (JFK), or a city code that searches every airport in the city (SlickTrip's 4-letter codes: NYCA New York, LOND London, ROME Rome, TYOA Tokyo). Up to 3 places joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. When the traveler names a city rather than an airport, send the city (its name or code), not one of its airports: one airport can miss the cheapest or the only flights. Unsure of the code: call find_places.

Output Schema

NameRequiredDescription
codeNoOn an error: a machine-readable kind, e.g. unknown_place
noteNoGuidance for the assistant
fieldNoOn unknown_place: which argument (origin, destination, ...)
originNoOrigin code
statusNook | no_data | error | sign_in_required
messageNoError or sign-in text
airlinesNocode, name, nonstop
destinationNoDestination code
suggestionsNoOn unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country
places_assumedNoPlace names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, openWorld and non-destructive, so safety is covered. The description still adds non-trivial behavior the annotations do not: nonstop-first ordering and the fact that returned codes are the same codes the airline filters accept, which matters for chaining into a filtered search. It stops short of describing pagination or result size, so a 4 rather than a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One dense sentence opening with the usage trigger, followed by a three-word exclusion. Every clause earns its place and the most decision-relevant information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need no explanation, and the description covers purpose, trigger conditions, ordering and the nearest competing tool. Only the error/edge path (unknown_place handling) is left entirely to the schema, which is a minor gap for a read-only lookup.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and both parameters carry exhaustive guidance (airport vs city codes, underscore-joined multi-place, unknown_place errors, find_places fallback). The description adds nothing parameter-specific beyond the code-format hint implied by 'codes the airlines filters take', so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('the carriers on the route') plus the ordering rule ('nonstop ones first'), and explicitly distinguishes itself from a fare search. An agent can tell it apart from search_flights or flight_lookup without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives two concrete triggers ('the traveler asks who flies a route', 'before filtering by airline') and an explicit exclusion ('Not a fare search'), which routes the agent away from the fare/booking siblings. Nothing about when to reach for this tool is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_flightsSearch flightsA
Read-onlyIdempotent
Inspect

Call this tool to find flights once the traveler has told you their dates. It handles one-way trips, round trips, two possible dates each way, and up to three airports on each side at once.

Before you call it, you need four things from the traveler: where they are flying from, where they are flying to, the date they want to leave, and, for a round trip, the date they want to come back. If the traveler has not told you any of these, ask them for everything that is missing in one question. Do not pick dates for the traveler. Do not guess whether the trip is one way or a round trip.

A question like "what is the cheapest flight from Newark to Los Angeles" still needs dates. Ask the traveler when they want to go and whether it is one way or a round trip, then call this tool. If the traveler does not have dates yet, offer to set up a bucket list alert with add_flight_bucket_list, which watches the route for them and alerts them when a good fare appears.

Search as soon as you have those four things. After the results, offer ways to narrow the choice: cabin, stops, airlines, times of day.

You can search up to two departure dates and two return dates in one call by joining them with _ (for example 2026-11-20_2026-11-21).

Fill in origin, destination, depart_date and, for a round trip, return_date. You can also pass the traveler's own words in query and leave the fields you do not know empty. SlickTrip fills in only what the traveler's words say. It does not guess the rest.

The answer lists priced itineraries, cheapest first, each with an itinerary_id for track_flight and search_return_flights, and a search_url.

When the traveler wants to be alerted about a route over flexible months, or does not have dates yet, use add_flight_bucket_list.

NameRequiredDescriptionDefault
legsNoMulti-city trip: the legs in order, 2 to 5, each one airport or city code per side and one date. When given, origin / destination / depart_date / return_date are ignored.
sortNoOrder of results.price
cabinNoCabin class.economy
queryNoThe traveler's request in their own words, used to fill any field left empty.
originNoA 3-letter airport code (JFK) or a city code for all its airports (NYCA, LOND, ROME); up to 3 joined with _ (JFK_EWR). A clear place name works too. When the traveler names a city rather than an airport, send the city (its name or code), not one of its airports: one airport can miss the cheapest or the only flights. Unsure of the code: call find_places.
displayNocompact: one line per option, more options, far fewer tokens; full: every field (what the cards draw). Empty picks for you: compact when the app shows no cards, full when it does.
airlinesNoOnly these marketing carriers, as IATA codes or names.
max_stopsNoMost stops allowed: 0 nonstop, 1, or 2 (2 or more: any number).
travelersNoTravelers who need a seat (adults and children). Fares are quoted for all of them together; one booking holds up to 9 (a larger group gets a suggested split). A baby under 2 on a lap is not a seat and is not counted here.
depart_dateNoYYYY-MM-DD. A second date joined with _ searches both as flexible dates (2026-11-03_2026-11-04); at most 2 per direction.
destinationNoA 3-letter airport code (JFK) or a city code for all its airports (NYCA, LOND, ROME); up to 3 joined with _ (JFK_EWR). A clear place name works too. When the traveler names a city rather than an airport, send the city (its name or code), not one of its airports: one airport can miss the cheapest or the only flights. Unsure of the code: call find_places.
lap_infantsNoBabies under 2 who will sit on an adult's lap (no seat of their own). Not counted in travelers and not in the quoted fare; the answer says how airlines charge them.
max_resultsNoHow many results to return, 1-50.
return_dateNoYYYY-MM-DD for a round trip; empty for one way.
arrive_afterNoHH:MM, local time at that airport.
checked_bagsNoChecked bags per traveler (0 to 2). Bag fees are only priced for flights within the US and Canada; for other flights the answer says the prices do not include them. The prices then include the bag fees, shown as price_with_bags next to the fare.
depart_afterNoHH:MM, local time at that airport.
user_requestNoOptional, and it works in the traveler's favor. Quote the traveler's latest message about this trip exactly as they wrote it, in their wording, language and spelling, not a summary. SlickTrip runs its own travel parser on these words: when a search fails or comes back empty, it compares what the traveler said with the arguments sent and returns a corrected search, so you can fix it without asking them again. It has caught Cancun sent as MEX instead of CUN, and travelers dropped from the party. A summary loses exactly the details it checks. If the message only answers a question ("yes, the 20th"), quote the message where they asked for the trip. Send the same quote on every call for this request. Leave out anything not about the trip, and never include names, contact details, or payment or ID information. The words also help SlickTrip improve its search.
arrive_beforeNoHH:MM, local time at that airport.
carry_on_bagsNoCarry-on bags per traveler (0 or 1). The prices then include the bag fees, shown as price_with_bags next to the fare.
depart_beforeNoHH:MM, local time at that airport.
max_price_usdNoHighest fare to show, USD, as the TOTAL for all travelers together: for a per-person budget, multiply by travelers (2 people at $300 each = 600). Unlike bucket lists, whose price bar is per traveler.
lower_emissionsNoOnly itineraries with lower emissions than is typical for the route.
exclude_airlinesNoLeave out itineraries with any flight sold by these carriers (IATA codes, names or an alliance), by flight number or airline name: for 'not Gol' or 'avoid Air India'.
max_layover_hoursNoLongest layover allowed at every connection, in hours (half hours allowed): for 'layovers no longer than 5 hours'.
min_layover_hoursNoShortest layover allowed at every connection, in hours (half hours allowed): for 'at least 2 hours to connect'.
max_duration_hoursNoLongest itinerary to show, in hours.
connecting_airportsNoOnly itineraries that change planes at these airports (codes or city codes), nonstops included: for 'US connections only' name the hubs.
no_overnight_layoversNoLeave out itineraries with an overnight layover: for 'no overnight at the transit airport'.
exclude_connecting_airportsNoLeave out itineraries that change planes at these airports (codes or city codes).

Output Schema

NameRequiredDescription
codeNoOn an error: a machine-readable kind, e.g. unknown_place
noteNoGuidance on trip type or why empty
fieldNoOn unknown_place: which argument (origin, destination, ...)
countsNopriced, matching_filters, returned integers
searchNoRoute dict: origin, destination, names, destination_image, cabin, travelers, dates, trip_type, legs (multi-city), search_key, served_from, retrieved_at
statusNook | no_data | error | sign_in_required
filtersNoFilters as the caller gave them (max_stops, airlines, max_price_usd, ...)
messageNoError or sign-in message from the server wrapper
highlightsNoThe spread over every matching fare: cheapest, cheapest_nonstop, fastest, earliest, latest; each with itinerary_id, price, airlines, stops, duration_minutes, departs_at
search_urlNoslicktrip.com search page link with attribution
itinerariesNoItems: itinerary_id, price {total_usd, per_traveler_usd}, outbound leg, needs_leg, track_url, optional depart_date + search_key
searched_asNoWhat the search assumed: trip type, travelers, cabin
suggestionsNoOn unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country
places_assumedNoPlace names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and non-destructive, so the safety profile is covered. The description adds real sequencing/behavioral context (search as soon as prerequisites are met, SlickTrip fills only what the traveler's words say and does not guess, results are cheapest-first with itinerary_id/search_url), but it does not disclose auth, rate limits, or error behavior beyond the unknown_place note 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose and prerequisites, then alternatives and return shape. It is long, but justified for a 30-parameter agentic tool; the only redundancy is the closing sentence re-stating the add_flight_bucket_list guidance already given mid-description.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given complexity (30 params, nested legs, open-world search) the description covers the full workflow: prerequisites, routing to alternatives, flexible-date syntax, and the shape/next-steps of results. With an output schema present, return-value detail is optional and its presence is a bonus, not a gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all 30 parameters thoroughly. The description partly restates this by listing origin/destination/depart_date/return_date and the query fallback, adding only light workflow framing rather than new parameter meaning; baseline 3 is appropriate when the schema carries the load.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (search) and resource (flights) and immediately scopes the behavior: one-way, round trip, two dates per direction, up to three airports per side. It also names the sibling it is not (add_flight_bucket_list) for the no-dates case, so an agent can route without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states the precondition (four traveler facts), what to do when they are missing (ask once, never guess dates or trip type), and the alternative tool when the traveler has no dates. It even handles the tempting edge case ('cheapest flight from Newark to LA') by requiring dates first.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_hotelsSearch hotelsA
Read-onlyIdempotent
Inspect

Use when the traveler wants a place to stay for known dates. Returns hotels cheapest first with star class, guest rating, per-night and whole-stay price, hotel_ids and a search_key for track_hotel and hotel_price_calendar, and a search_url. Filters match the site: price, stars, guest rating, property kinds, amenities, free cancellation, hotels or vacation rentals, bedrooms (rentals), sort. Not for flexible months (add_hotel_bucket_list).

NameRequiredDescriptionDefault
sortNoCheapest first, or best rated first.price
brandNoOnly stays of this brand or chain, matched in the hotel's name. Put the city in location, the brand here.
adultsNoAdults. A hotel room prices up to 6 guests in all; vacation rentals up to 16.
check_inYesYYYY-MM-DD.
locationYesA city, neighbourhood, landmark or hotel name.
amenitiesNoHotels: free parking, pool, gym, spa, free breakfast, beach access, pet-friendly, child-friendly, free wi-fi, air conditioning, all-inclusive, wheelchair accessible, ev charger, bar, restaurant, room service. Vacation rentals: kitchen, hot tub, fireplace, patio, grill, crib, beach access, pet-friendly, gym, air conditioning.
check_outYesYYYY-MM-DD.
min_starsNoLowest star class to show, 1-5.
max_resultsNoHow many results to return, 1-50.
min_bedroomsNoVacation rentals with at least this many bedrooms, as the traveler said it ("a 5-bedroom house": 5). Searches vacation rentals; each home says its bedrooms, bathrooms and how many it sleeps.
user_requestNoOptional, and it works in the traveler's favor. Quote the traveler's latest message about this trip exactly as they wrote it, in their wording, language and spelling, not a summary. SlickTrip runs its own travel parser on these words: when a search fails or comes back empty, it compares what the traveler said with the arguments sent and returns a corrected search, so you can fix it without asking them again. It has caught Cancun sent as MEX instead of CUN, and travelers dropped from the party. A summary loses exactly the details it checks. If the message only answers a question ("yes, the 20th"), quote the message where they asked for the trip. Send the same quote on every call for this request. Leave out anything not about the trip, and never include names, contact details, or payment or ID information. The words also help SlickTrip improve its search.
children_agesNoOne age per child, 1-17.
property_typeNoHotels, or vacation rentals.hotel
property_kindsNoHotels: resort, boutique hotel, hostel, inn, motel, spa hotel, bed and breakfast, apartment hotel, beach hotel, ryokan. Vacation rentals: apartment, house, villa, cabin, cottage, chalet, bungalow, houseboat.
min_guest_ratingNoLowest guest rating out of 5; 3.5, 4 or 4.5 work best. A rating out of 10 (8 and up) is read as half.
free_cancellationNoOnly stays with free cancellation.
max_price_per_nightNoHighest price per night to show, USD.
min_price_per_nightNoLowest price per night to show, USD.

Output Schema

NameRequiredDescription
codeNoOn an error: a machine-readable kind, e.g. unknown_place
noteNoPrices are whole-stay; how to track
fieldNoOn unknown_place: which argument (origin, destination, ...)
hotelsNoItems: hotel_id, name, image, type, stars, guest_rating, reviews, per_night_usd, total_usd, amenities, description, hotel_url; vacation rentals add sleeps, bedrooms, bathrooms
searchNolocation, check_in, check_out, adults, children_ages, nights, search_key
statusNook | no_data | error | sign_in_required
filtersNoApplied filters: property_type, min_stars, free_cancellation, min_bedrooms, advanced, sort
messageNoError or sign-in message from the server wrapper
highlightsNoThe spread over every priced stay: cheapest, best_rated, cheapest_4_star_plus, most_reviewed; each with hotel_id, name, per_night_usd, total_usd, stars, guest_rating, reviews
search_urlNoslicktrip.com hotels search link
searched_asNoWhat the search assumed: guests, hotels or vacation rentals
suggestionsNoOn unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country
total_foundNoTotal hotels found before max_results cut
places_assumedNoPlace names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare this as a safe, read-only, idempotent, open-world search. The description adds useful behavioral context beyond that: results are cheapest first, include star class, guest rating, per-night and whole-stay price, hotel_ids, search_key, and search_url, and the search_key feeds track_hotel and hotel_price_calendar. It does not discuss failure modes or pagination, but the added return-format and follow-on-tool context is substantial.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the use case, then return behavior, then filter scope, then a clear exclusion. Despite being dense, every sentence adds routing or behavioral value, and the sibling exclusion is placed where it is most useful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 18 parameters, full schema descriptions, an output schema, and rich annotations, the description supplies the remaining context an agent needs: when to use it, what it returns, how results are ordered, and which sibling handles a different case. Nothing essential for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every parameter is already documented in the schema, including filter enums, ranges, and examples. The description adds only a high-level enumeration of filter categories ('price, stars, guest rating, property kinds, amenities, free cancellation, hotels or vacation rentals, bedrooms, sort') and does not add syntax or semantics beyond the schema. This meets the baseline for fully covered schemas.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource (search hotels) plus the precise condition for use: known dates. It also distinguishes this tool from add_hotel_bucket_list for flexible-month searches, so the agent can route correctly without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly says when to use the tool ('traveler wants a place to stay for known dates') and when not to use it ('Not for flexible months'), naming the alternative sibling tool. No inference is required.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_return_flightsSearch return flightsA
Read-onlyIdempotent
Inspect

Use after search_flights when the traveler wants a specific return, or the next leg of a multi-city trip (once per remaining leg). Takes an outbound itinerary_id; returns complete itineraries with the trip total, needs_leg false once the trip is whole. Filters apply to the leg being chosen. Not needed for an outbound watch.

NameRequiredDescriptionDefault
sortNoOrder of results.price
displayNocompact: one line per option, more options, far fewer tokens; full: every field (what the cards draw). Empty picks for you: compact when the app shows no cards, full when it does.
airlinesNoOnly these marketing carriers, as IATA codes or names.
max_stopsNoMost stops allowed: 0 nonstop, 1, or 2 (2 or more: any number).
max_resultsNoHow many results to return, 1-50.
arrive_afterNoHH:MM, local time at that airport.
checked_bagsNoChecked bags per traveler (0 to 2). Bag fees are only priced for flights within the US and Canada; for other flights the answer says the prices do not include them. The prices then include the bag fees, shown as price_with_bags next to the fare.
depart_afterNoHH:MM, local time at that airport.
itinerary_idYesAn outbound (or partial multi-city) itinerary_id from search_flights or a previous call.
arrive_beforeNoHH:MM, local time at that airport.
carry_on_bagsNoCarry-on bags per traveler (0 or 1). The prices then include the bag fees, shown as price_with_bags next to the fare.
depart_beforeNoHH:MM, local time at that airport.
max_price_usdNoHighest fare to show, USD, as the TOTAL for all travelers together: for a per-person budget, multiply by travelers (2 people at $300 each = 600). Unlike bucket lists, whose price bar is per traveler.
lower_emissionsNoOnly itineraries with lower emissions than is typical for the route.
exclude_airlinesNoLeave out itineraries with any flight sold by these carriers (IATA codes, names or an alliance), by flight number or airline name: for 'not Gol' or 'avoid Air India'.
max_layover_hoursNoLongest layover allowed at every connection, in hours (half hours allowed): for 'layovers no longer than 5 hours'.
min_layover_hoursNoShortest layover allowed at every connection, in hours (half hours allowed): for 'at least 2 hours to connect'.
max_duration_hoursNoLongest itinerary to show, in hours.
connecting_airportsNoOnly itineraries that change planes at these airports (codes or city codes), nonstops included: for 'US connections only' name the hubs.
no_overnight_layoversNoLeave out itineraries with an overnight layover: for 'no overnight at the transit airport'.
exclude_connecting_airportsNoLeave out itineraries that change planes at these airports (codes or city codes).

Output Schema

NameRequiredDescription
codeNoOn an error: a machine-readable kind, e.g. unknown_place
noteNoGuidance on totals and next step
fieldNoOn unknown_place: which argument (origin, destination, ...)
countsNopriced, matching_filters, returned integers
searchNoRoute dict plus search_key, outbound_itinerary_id; multi-city adds leg_number, legs_total
statusNook | no_data | error | sign_in_required
filtersNoFilters as the caller gave them
messageNoError or sign-in message from the server wrapper
outboundNoLeg shape: airlines, stops, duration_minutes, segments, layovers
track_urlNoOutbound handoff tracking link (round-trip path only)
highlightsNoThe spread over every matching return: cheapest, cheapest_nonstop, fastest, earliest, latest
search_urlNoslicktrip.com search page link
itinerariesNoItems: itinerary_id, price, return (round trip) or next_leg (multi-city) leg object, needs_leg
legs_chosenNoMulti-city only: leg objects chosen so far
suggestionsNoOn unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country
places_assumedNoPlace names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive, open-world, so the safety profile is covered. The description adds genuine workflow behavior beyond that: it consumes an existing itinerary_id, and the response carries a trip total plus a needs_leg flag that goes false once the trip is complete. That state-machine detail is the most valuable thing here and is not in 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four dense sentences, no filler, and the ordering is right: usage condition first, required input second, return semantics third, exclusion last. Nothing here restates the title or the annotations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 21-parameter tool with an output schema, the description covers the parts structured fields cannot: when in the booking flow to call it, that it must be called once per remaining leg, how filters scope, and what makes the trip 'whole'. Safety and parameter detail are already handled by annotations and the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% across 21 parameters, including long, well-illustrated descriptions for display, bag fees, price totals, and layover filters, so the schema carries the full per-parameter burden and baseline 3 applies. The description's one global clarification — 'Filters apply to the leg being chosen' — is useful scoping information, but it is not parameter-specific detail.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb and resource (search return flights) and anchors it to a named sibling: 'Use after search_flights'. It also states the scope precisely — one call per remaining leg of a multi-city trip — which an agent could not infer from the name alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit sequencing rule (after search_flights), explicit trigger (traveler wants a specific return, or the next leg), explicit cadence (once per remaining leg), and an explicit exclusion: 'Not needed for an outbound watch.' This routes the agent correctly against the large sibling set.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

seat_availabilitySeat availabilityA
Read-onlyIdempotent
Inspect

Use to see which seats are open right now on one flight (needs a signed-in SlickTrip account; nothing is charged or changed): open seat numbers by row, counts of window, aisle, middle and exit-row seats, and rows with two seats together. Needs the flight number, route and date. Then track_seats to be told when a seat opens. Not for prices.

NameRequiredDescriptionDefault
cabinNoCabin to look at; any = every cabin on the flight.economy
originYesA 3-letter airport code (JFK), or a city code that searches every airport in the city (SlickTrip's 4-letter codes: NYCA New York, LOND London, ROME Rome, TYOA Tokyo). Up to 3 places joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. When the traveler names a city rather than an airport, send the city (its name or code), not one of its airports: one airport can miss the cheapest or the only flights. Unsure of the code: call find_places.
depart_dateYesYYYY-MM-DD.
destinationYesA 3-letter airport code (JFK), or a city code that searches every airport in the city (SlickTrip's 4-letter codes: NYCA New York, LOND London, ROME Rome, TYOA Tokyo). Up to 3 places joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. When the traveler names a city rather than an airport, send the city (its name or code), not one of its airports: one airport can miss the cheapest or the only flights. Unsure of the code: call find_places.
user_requestNoOptional, and it works in the traveler's favor. Quote the traveler's latest message about this trip exactly as they wrote it, in their wording, language and spelling, not a summary. SlickTrip runs its own travel parser on these words: when a search fails or comes back empty, it compares what the traveler said with the arguments sent and returns a corrected search, so you can fix it without asking them again. It has caught Cancun sent as MEX instead of CUN, and travelers dropped from the party. A summary loses exactly the details it checks. If the message only answers a question ("yes, the 20th"), quote the message where they asked for the trip. Send the same quote on every call for this request. Leave out anything not about the trip, and never include names, contact details, or payment or ID information. The words also help SlickTrip improve its search.
flight_numberYesAirline code and number, no space.

Output Schema

NameRequiredDescription
codeNoOn an error: a machine-readable kind, e.g. unknown_place
noteNoUse track_seats to be alerted
cabinNoCabin tier queried
fieldNoOn unknown_place: which argument (origin, destination, ...)
countsNoseats, available, window, aisle, middle, exit_row, rows_with_2_together
flightNoflight_number, origin, destination, departure_time, arrival_time, aircraft, airline
statusNook | no_data | error | sign_in_required
messageNoNo seat map explanation or wrapper error
exit_rowsNoRow numbers with exit-row seats
seat_kindsNoSeat letter to window | aisle | middle
suggestionsNoOn unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country
seat_map_svgNourl, view_box, aircraft, seats[] with x/y/w/h/status/kind
seat_map_urlNoslicktrip.com seat-tracker setup page link
open_seat_idsNoEvery open seat id in the cabin, space-separated
places_assumedNoPlace names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler
taken_seat_idsNoEvery taken seat id in the cabin, space-separated
available_seatsNoItems: seat, kind, exit_row (up to 80)
seat_tracker_urlNoslicktrip.com seat-tracker route link

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so safety is largely covered. The description still adds real context the annotations cannot: the account/auth requirement and the reassurance that 'nothing is charged or changed', plus the shape of what comes back.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four tight sentences, front-loaded with the purpose before the prerequisite and the routing note. It packs in a fair amount of detail about return contents, but no sentence is filler and the negative scoping ('Not for prices') lands last for emphasis.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only query tool with an output schema, a complete annotations set and 100% schema coverage, the description supplies everything an agent needs: auth prerequisite, what the result contains, the natural follow-up tool, and what the tool is not for.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the parameters (including the detailed origin/destination code rules and the user_request quoting behavior) are already fully documented in the schema. The description only restates that flight number, route and date are needed, adding no syntax or format detail beyond it — the baseline 3 for schema-covered parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a precise verb and resource with scope: 'see which seats are open right now on one flight'. It also distinguishes itself from siblings by naming track_seats as the follow-up and declaring 'Not for prices', so an agent can separate it from price_calendar, flight_lookup and list_tracked_seats without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives the when ('see which seats are open right now'), the routing alternative ('Then track_seats to be told when a seat opens'), and an explicit exclusion ('Not for prices'). The only prerequisite, a signed-in SlickTrip account, is stated inline.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

shared_tripOpen a shared tripA
Read-onlyIdempotent
Inspect

Use when the traveler pastes a slicktrip.com/share link: the shared itinerary or bucket list and its current price, so they can start their own watch on it. Takes the link or its code. Not for making a link (share_link).

NameRequiredDescriptionDefault
share_urlYesA slicktrip.com/share/<code> link, or just the code.

Output Schema

NameRequiredDescription
codeNoOn an error: a machine-readable kind, e.g. unknown_place
kindNoflight | bucket_list
noteNoGuidance for the assistant
fieldNoOn unknown_place: which argument (origin, destination, ...)
routeNoRoute with names and dates
monthsNoBucket list months
nightsNomin and max nights
statusNook | no_data | error | sign_in_required
messageNoError or sign-in text
max_stopsNoStops allowed
best_dealsNoDeals found so far
search_keyNoThe route's search key
search_urlNoThe search on slicktrip.com
share_codeNoThe share code
itinerariesNofid, price_usd, outbound, return legs
suggestionsNoOn unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country
max_price_usdNoBucket list price bar
places_assumedNoPlace names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler
current_price_usdNoShared watch's current price

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the safety profile is covered structurally. The description adds real value beyond that: it discloses what the call surfaces (itinerary or bucket list plus current price) and the downstream intent (starting one's own watch). It omits anything about resolution failure on a bad/expired code, which is the only remaining behavioral gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, with the trigger condition front-loaded ahead of the exclusion. Only the 'Takes the link or its code' clause is wasted, since it duplicates the schema description. No other filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained, yet the description still characterizes the payload (itinerary/bucket list + current price). With annotations covering safety and the schema covering the single argument, an agent has everything needed to select and invoke this correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single parameter's description already spells out 'a slicktrip.com/share/<code> link, or just the code.' The description's 'Takes the link or its code' restates that verbatim and adds no format, validation, or normalization detail. Baseline 3 is correct when the schema carries the full parameter burden.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific action ('open a shared trip') bound to a concrete trigger artifact (a slicktrip.com/share link) and says what comes back: the itinerary/bucket list plus its current price. It also explicitly names the sibling it is not (share_link), so an agent can separate ingest-a-link from create-a-link without reading either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit invocation condition ('Use when the traveler pastes a slicktrip.com/share link') and an explicit exclusion ('Not for making a link (share_link)'). The when-to-use and the alternative are both stated, not inferred.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stop_tracking_flightStop tracking a flightA
DestructiveIdempotent
Inspect

Use to stop price alerts for a tracked route (search_key from list_tracked_flights), or one itinerary in it (fid). Cannot be undone; confirm first.

NameRequiredDescriptionDefault
fidNoAn itinerary's fid from list_tracked_flights, to stop only that one and keep the route.
search_keyYesThe route's search_key from list_tracked_flights.

Output Schema

NameRequiredDescription
fidNoThe single itinerary removed, if any
codeNoOn an error: a machine-readable kind, e.g. unknown_place
fieldNoOn unknown_place: which argument (origin, destination, ...)
routeNoRoute dict parsed from the key with place names
scopeNo"one itinerary" or "whole route"
statusNostopped | error | sign_in_required
messageNoError or sign-in message from the server wrapper
manage_urlNoslicktrip.com saved-flights page link
search_keyNoThe route that was stopped
suggestionsNoOn unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country
places_assumedNoPlace names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=true, so the irreversible nature is partly covered. The description still adds actionable context beyond that: the irreversibility is stated in plain language and paired with a 'confirm first' instruction the agent can act on, though it says nothing about what state remains after removal (e.g., whether the route disappears from list_tracked_flights).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence that front-loads the purpose, then nests the two mutually exclusive scoping options, ending with the safety caveat. No filler and nothing an agent must read past to find the core action.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With only two parameters, full schema coverage, an output schema, and annotations carrying the mutation/ idempotency profile, the description covers everything an agent needs: what it does, the two modes, the identifier source, and the irreversibility warning. Nothing material is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% – both search_key and fid are fully documented in the schema, including that fid preserves the route while targeting one itinerary. The description repeats the sourcing of both params without adding format or validation detail, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb ('stop price alerts') plus a precise resource and two levels of scope: a whole tracked route via search_key, or a single itinerary via fid. That scope distinction is exactly what separates it from siblings like update_flight_tracking (modify) and stop_tracking_hotel/stop_tracking_seats (other resources).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It tells the agent where both identifiers come from (list_tracked_flights) and the consequence ('Cannot be undone; confirm first'), which is clear operational context. It stops short of explicitly naming the alternative to use when the intent is to edit rather than end tracking, so it is not a full 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stop_tracking_hotelStop tracking a hotelA
DestructiveIdempotent
Inspect

Use to stop price alerts for a tracked stay (tracking_id from list_tracked_hotels), or one hotel in it (hotel_id). Cannot be undone; confirm first.

NameRequiredDescriptionDefault
hotel_idNoDrop only this hotel from the stay and keep the rest.
tracking_idYesThe stay's tracking_id from list_tracked_hotels.

Output Schema

NameRequiredDescription
codeNoOn an error: a machine-readable kind, e.g. unknown_place
noteNoSet when last hotel removal deleted the stay
stayNolocation, hotel_name, name, check_in, check_out, adults
fieldNoOn unknown_place: which argument (origin, destination, ...)
scopeNo"whole stay" or "one hotel"
statusNostopped | error | sign_in_required
messageNoError or sign-in message from the server wrapper
hotel_idNoThe single hotel removed, if any
suggestionsNoOn unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country
tracking_idNoThe stay tracking id stopped
places_assumedNoPlace names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag destructiveHint=true, idempotentHint=true, and readOnlyHint=false. The description goes beyond them by stating the action is irreversible and instructing the agent to confirm first, which is meaningful guidance for an agent acting on a user's behalf.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence that front-loads the action and scope, then adds the consequence. No wasted words and the parenthetical identifier hints are tightly embedded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive two-parameter tool with full schema coverage, annotations, and an output schema, the description supplies everything an agent needs: action, scope options, identifier source, and the confirmation requirement.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3, and the description adds where tracking_id comes from and clarifies that hotel_id narrows the scope to one hotel. That provenance detail is useful orientation beyond the schema's own per-field text.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: stop price alerts for a tracked stay or a single hotel within it. It clearly separates itself from track_hotel and update_hotel_tracking by naming the termination action and the two possible scopes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear context for when to call it (ending alerts on a tracked stay) and points to list_tracked_hotels as the source of tracking_id. It does not explicitly contrast with update_hotel_tracking or track_hotel, but the destructive framing makes the distinction inferable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stop_tracking_seatsStop tracking seatsA
DestructiveIdempotent
Inspect

Use to stop the seat alert on one flight (tracking_key from list_tracked_seats). Cannot be undone; confirm first.

NameRequiredDescriptionDefault
tracking_keyYesThe alert's tracking_key from list_tracked_seats.

Output Schema

NameRequiredDescription
codeNoOn an error: a machine-readable kind, e.g. unknown_place
fieldNoOn unknown_place: which argument (origin, destination, ...)
statusNostopped | error | sign_in_required
messageNoError or sign-in message from the server wrapper
suggestionsNoOn unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country
tracking_keyNoThe seat alert key stopped
places_assumedNoPlace names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructive=true, idempotent=true and readOnly=false, so the safety profile is mostly covered. The description still adds value beyond them: it states the action cannot be undone and requires confirmation, which the hints do not convey. Nothing is claimed that conflicts with 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the action and followed by the parameter source and the irreversibility warning. No filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter destructive tool with an output schema, the description covers what it does, where the parameter comes from, and the crucial irreversibility/confirm step. An agent has what it needs to call it correctly; only cross-references to the sibling stop/update tools are absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% for the single tracking_key parameter, and the schema already names list_tracked_seats as its origin, so the description largely restates structured data. Baseline 3 applies; no additional format or validation detail is supplied.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (stop the seat alert) and scopes it to one flight, which separates it from stop_tracking_flight and stop_tracking_hotel by resource. It does not name those siblings explicitly, but the resource word 'seat' plus the tracking_key reference makes the domain unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear context: use it to cancel a seat alert, and it points to list_tracked_seats as the source of the required tracking_key. It also adds a prerequisite ('confirm first'), which is real operational guidance. It stops short of naming the related stops/update tools for the other tracking types.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

track_flightTrack a flight's priceA
Idempotent
Inspect

Use to start price alerts on an itinerary from a search, after the traveler confirms (asking for alerts is confirming). One way: any itinerary_id from search_flights. Round trip: an outbound itinerary_id from search_flights watches that outbound with its cheapest return; a complete itinerary_id from search_return_flights tracks that exact pairing. Multi-city: a complete itinerary_id. Alerts go to the account's channels on a new low; alert_rule any hears every move; target_price_usd sets a bar.

NameRequiredDescriptionDefault
textNoSend alerts by text message. Needs a verified phone on the SlickTrip account; empty keeps the account's setting.
emailNoSend alerts by email. Empty keeps the account's setting.
alert_ruleNoWhen to alert: lowest = only a new low, any = every price move, none = off. Leave empty for the default, or give target_price_usd instead.
itinerary_idYesFrom search_flights (one way) or search_return_flights (a complete round trip or multi-city).
target_price_usdNoAlert when the price goes under this, USD. Replaces alert_rule. It is the TOTAL: the whole trip for all travelers on a flight, the whole stay on a hotel.

Output Schema

NameRequiredDescription
fidNoTracked itinerary id (flight numbers)
codeNoOn an error: a machine-readable kind, e.g. unknown_place
noteNoNote about text alerts needing a verified phone
fieldNoOn unknown_place: which argument (origin, destination, ...)
routeNoRoute dict: origin, destination, cabin, travelers, dates, trip_type (+names on outbound watch)
watchNo"outbound" when an outbound-only watch was saved
alertsNoPlain-words description of what alerts fire
statusNotracking | error | sign_in_required
messageNoError or sign-in message from the server wrapper
channelsNo{email: boolean, text: boolean} stored alert channels
saved_urlNoslicktrip.com saved-flights page link
search_keyNoThe tracked route's search key
alerts_whenNoWhen alerts fire, from the alert preference
suggestionsNoOn unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country
outbound_fidNoOutbound watch only: the outbound fid
price_at_saveNoPrice recorded when tracking started
places_assumedNoPlace names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler
text_not_enabledNoText asked but no verified phone on account
text_unconfirmedNoCould not confirm text-alert status

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare openWorldHint=true, idempotentHint=true, and readOnlyHint=false with destructiveHint=false, so the write/safety profile is partly covered. The description adds real behavioral context beyond that: alerts route to the account's channels, fire on a new low, 'any' fires on every move, and target_price_usd replaces alert_rule. It does not clarify persistence or how to undo the tracking, which is what stop_tracking_flight/update_flight_tracking presumably cover.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the 'Use to...' framing followed by trip-type branching, so the most important routing rule comes first. It is dense and slightly run-on, but nearly every clause carries a distinct routing or alert-behavior fact.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tracking-creation tool with 5 params, one required, full schema coverage, and an output schema present, the description covers the confirmation precondition, the per-trip-type ID requirement, alert channel routing, and the alert_rule/target_price_usd interaction. Nothing an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, and the description earns above that by explaining that itinerary_id's meaning shifts by trip type (outbound vs complete pairing) and that target_price_usd supersedes alert_rule rather than combining with it. It adds usable semantics the flat schema cannot express.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('start price alerts on an itinerary from a search') and immediately differentiates from siblings like update_flight_tracking, list_tracked_flights, and stop_tracking_flight by describing it as the creation action. An agent can identify the tool's role without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes the agent by trip type: one-way uses any itinerary_id from search_flights, round trip uses either an outbound or a complete itinerary_id, multi-city needs a complete one. It names the sibling source tools (search_flights, search_return_flights) and the precondition that the traveler has confirmed, which is a strong when-to-use signal.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

track_hotelTrack a hotel's priceA
Idempotent
Inspect

Use to start price alerts on one hotel from search_hotels for those dates, after the traveler confirms. Alerts go to the account's channels when the price drops.

NameRequiredDescriptionDefault
textNoSend alerts by text message. Needs a verified phone on the SlickTrip account; empty keeps the account's setting.
emailNoSend alerts by email. Empty keeps the account's setting.
hotel_idYesA hotel_id from search_hotels.
alert_ruleNoWhen to alert: lowest = only a new low, any = every price move, none = off. Leave empty for the default, or give target_price_usd instead.
search_keyYesThe search_key from search_hotels.
search_urlNoThe search_url from the same search_hotels result, so the alert reopens the same filtered search (stars, price range, amenities). Empty tracks against the plain search.
target_price_usdNoAlert when the price goes under this, USD. Replaces alert_rule. It is the TOTAL: the whole trip for all travelers on a flight, the whole stay on a hotel.

Output Schema

NameRequiredDescription
codeNoOn an error: a machine-readable kind, e.g. unknown_place
noteNoManage on saved-hotels page or already tracked
stayNolocation, check_in, check_out, adults, children
fieldNoOn unknown_place: which argument (origin, destination, ...)
alertsNoPlain-words description of alerts
statusNotracking | already_tracking | error | sign_in_required
messageNoError or sign-in message from the server wrapper
hotel_idNoThe tracked hotel's property token
hotel_urlNoslicktrip.com hotel page link
saved_urlNoslicktrip.com saved-hotels page link
search_keyNoThe hotel search key
suggestionsNoOn unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country
tracking_idNoThe stay's tracking record id
places_assumedNoPlace names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler
current_price_usdNoalready_tracking only: current tracked price
added_to_existing_stayNoMerged into an existing stay record

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover the safety profile (non-destructive, idempotent, open-world), and the description adds a genuinely useful side-effect disclosure: alerts are pushed to the account's channels when the price drops. It stops short of saying how channels are chosen or how failures surface, but it exceeds the annotation baseline.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no waste. Usage and prerequisite are front-loaded, and the consequence (alerts to account channels) follows immediately after.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present and annotations covering safety and idempotency, the description only needs to cover prerequisites and post-call behavior, which it does. A brief note on what a repeated call does (idempotent re-tracking vs duplicate alert) would round it out.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so hotel_id, search_key, search_url, alert_rule, target_price_usd, text and email are already fully documented in the schema. The description adds nothing about parameter syntax or defaults, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'start price alerts on one hotel'. The word 'start' implicitly separates it from update_hotel_tracking and stop_tracking_hotel, but no sibling is named explicitly, so an agent must infer the boundary.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Clear conditions: the hotel comes 'from search_hotels for those dates' and the action happens 'after the traveler confirms'. It gives no explicit exclusions or alternative tools (e.g. add_hotel_bucket_list, update_hotel_tracking), so routing is implied rather than spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

track_seatsTrack seats on a flightA
Idempotent
Inspect

Use to start seat alerts on one flight, after the traveler confirms: named seats, or every seat of a kind (window, aisle, middle, any), optionally only when N seats open together in a row. Alerts go to the account's channels when a watched seat opens.

NameRequiredDescriptionDefault
textNoSend alerts by text message. Needs a verified phone on the SlickTrip account; empty keeps the account's setting.
cabinNoCabin to look at; any = every cabin on the flight.economy
emailNoSend alerts by email. Empty keeps the account's setting.
seatsNoSeat numbers to watch.
originYesA 3-letter airport code (JFK), or a city code that searches every airport in the city (SlickTrip's 4-letter codes: NYCA New York, LOND London, ROME Rome, TYOA Tokyo). Up to 3 places joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. When the traveler names a city rather than an airport, send the city (its name or code), not one of its airports: one airport can miss the cheapest or the only flights. Unsure of the code: call find_places.
seat_typeNoWatch every open seat of this kind instead of naming seats.
depart_dateYesYYYY-MM-DD.
destinationYesA 3-letter airport code (JFK), or a city code that searches every airport in the city (SlickTrip's 4-letter codes: NYCA New York, LOND London, ROME Rome, TYOA Tokyo). Up to 3 places joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. When the traveler names a city rather than an airport, send the city (its name or code), not one of its airports: one airport can miss the cheapest or the only flights. Unsure of the code: call find_places.
flight_numberYesAirline code and number, no space.
seats_togetherNoAlert only when this many seats are open together in one row, 2-6.

Output Schema

NameRequiredDescription
codeNoOn an error: a machine-readable kind, e.g. unknown_place
noteNoManage on saved-seats page
cabinNoCabin tracked, or list when several
fieldNoOn unknown_place: which argument (origin, destination, ...)
alertsNoPlain-words description of alerts
flightNoflight_number, origin, destination, departure_time, arrival_time, aircraft, airline
statusNotracking | error | sign_in_required
messageNoError or sign-in message from the server wrapper
trackedNoseats, seat_type, specific_seats, seats_together, open_now
channelsNoAlert channels on the record: email, text (booleans)
saved_urlNoslicktrip.com saved-seats page link
suggestionsNoOn unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country
tracking_keyNoSeat tracking key: route;departure_time;flight_number
places_assumedNoPlace names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler
merged_with_existingNoAdded to an existing seat alert

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare this is a write (readOnlyHint=false), non-destructive, and idempotent, so the safety profile is covered. The description adds real behavioral context beyond that: alerts are delivered to the account's channels only when a watched seat opens, and the call should follow traveler confirmation. It does not say how alerts are later modified or stopped.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the action and scope, with the mode options and the alert-delivery outcome packed in without filler. Nothing restates the schema verbatim and every clause carries information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need no explanation, and the annotations carry the mutation/idempotency profile. The description covers what gets created, the two watch modes, and where alerts land; it omits lifecycle details such as duplicate-alert behavior or how to stop/modify tracking, which sibling tools cover.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds the semantic relationship the schema documents only field-by-field: 'named seats, or every seat of a kind', plus 'only when N seats open together in a row' clarifying seats_together as a conditional filter on the other two.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'start seat alerts on one flight', and enumerates the two watch modes (named seats vs. seat type). It is distinguishable from stop_tracking_seats/update_seat_tracking by the word 'start', but it never names those siblings to make the boundary explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Use to start seat alerts on one flight, after the traveler confirms' gives a clear activation context and a prerequisite (traveler confirmation). It stops short of saying when NOT to use it or pointing to update_seat_tracking/list_tracked_seats for the adjacent tasks.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_accountUpdate the accountA
Idempotent
Inspect

Use to change the display name, or the default alert channels (email, text) for new alerts, optionally applied to everything already watched. Phones are verified on the site, not here. Only the fields given change. Confirm first.

NameRequiredDescriptionDefault
nameNoThe traveler's display name.
textNoText alerts on new alerts by default; needs a verified phone.
emailNoEmail alerts on new alerts by default.
apply_to_allNoAlso set these channels on every alert already watched.

Output Schema

NameRequiredDescription
codeNoOn an error: a machine-readable kind, e.g. unknown_place
nameNoDisplay name after the update
fieldNoOn unknown_place: which argument (origin, destination, ...)
statusNoupdated | error | sign_in_required
appliedNoHandler's per-type apply-to-all result, when returned
messageNoError or sign-in message from the server wrapper
channelsNo{email: boolean, text: boolean} stored default channels
manage_urlNoslicktrip.com profile page link
suggestionsNoOn unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country
applied_to_allNoChannels pushed onto existing trackings
places_assumedNoPlace names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler
text_not_enabledNoText asked but no verified phone

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, destructiveHint=false and idempotentHint=true, so the safety profile is covered. The description adds real value beyond them: 'Only the fields given change' clarifies partial-update semantics, 'Phones are verified on the site, not here' discloses a prerequisite path, and 'Confirm first' is a behavioral instruction absent from structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short sentences, front-loaded with the actionable scope and with zero filler. 'Confirm first.' is clipped and slightly ambiguous on its own, but it is placed last where it functions as a closing instruction.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need no explanation, and with annotations covering safety the description supplies the remaining essentials: editable fields, partial-update behavior, verification prerequisite, and a confirmation cue. It does not cover error behavior or permission requirements, which is the only real gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all four parameters are already documented, and the description largely restates them ('default alert channels (email, text)', 'applied to everything already watched'). It adds the framing that channels apply to new alerts by default, but no syntax, defaults, or edge-case behavior beyond the schema, so the baseline 3 holds.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('change the display name, or the default alert channels') and enumerates exactly which account fields are editable. Read against siblings like update_bucket_list and update_flight_tracking, an agent can immediately tell this one mutates account-level name/alert preferences rather than trip data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Use to change...' and 'Confirm first.' set clear usage context, and 'Phones are verified on the site, not here' rules out an adjacent action an agent might otherwise attempt. There is no explicit when-not or named alternative (e.g., get_account for reads), but the operating context is unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_bucket_listUpdate a bucket listA
DestructiveIdempotent
Inspect

Use to edit a bucket list: the price bar, months or date window, nights, stops, airlines, preferred weekdays, name, guests, stars, or channels, and a flight list's filters (airlines left out, connecting airports, times, duration, layovers, emissions, bags). Only the fields given change; a filter given replaces the stored one, and clear_filters names the ones to remove. A changed search resets the deals found so far. Confirm first.

NameRequiredDescriptionDefault
nameNoA new label for the list.
textNoSend alerts by text message. Needs a verified phone on the SlickTrip account; empty keeps the account's setting.
emailNoSend alerts by email. Empty keeps the account's setting.
adultsNoHotel lists: adults, 1-6.
monthsNoMonths to watch, as names or YYYY-MM. Give this OR start_date + end_date.
airlinesNoOnly these marketing carriers, as IATA codes or names.
end_dateNoYYYY-MM-DD.
bucket_idYesThe list's bucket_id from list_bucket_lists.
max_stopsNoMost stops allowed: 0 nonstop, 1, or 2 (2 or more: any number).
min_starsNoHotel lists: lowest star class, 1-5.
max_nightsNoFlight lists: longest trip. Hotel lists: the stay length.
min_nightsNoFlight lists: shortest trip. Hotel lists: the stay length.
start_dateNoYYYY-MM-DD.
depart_daysNoFlight lists: only depart on these weekdays.
return_daysNoFlight lists: only return on these weekdays.
arrive_afterNoHH:MM, local time at that airport.
checked_bagsNoChecked bags per traveler (0-2), priced only for flights within the US and Canada (elsewhere the answer says the prices do not include them). Prices then include the bag fees: search_flights shows them as price_with_bags next to the fare; a calendar or bucket list prices every day with them.
clear_windowNoRemove the date window and watch the months instead.
depart_afterNoHH:MM, local time at that airport.
arrive_beforeNoHH:MM, local time at that airport.
carry_on_bagsNoCarry-on bags per traveler (0-1). Prices then include the bag fees: search_flights shows them as price_with_bags next to the fare; a calendar or bucket list prices every day with them.
check_in_daysNoHotel lists: only check in on these weekdays.
clear_filtersNoFlight lists: filters to remove.
depart_beforeNoHH:MM, local time at that airport.
max_price_usdNoThe price bar, USD: per traveler for a flight list (total when price_is_total), per night for a hotel list.
price_is_totalNoFlight lists: max_price_usd is the total for all travelers.
lower_emissionsNoOnly itineraries with lower emissions than is typical for the route.
exclude_airlinesNoLeave out itineraries with any flight sold by these carriers (IATA codes, names or an alliance), by flight number or airline name: for 'not Gol' or 'avoid Air India'.
max_layover_hoursNoLongest layover allowed at every connection, in hours (half hours allowed): for 'layovers no longer than 5 hours'.
min_layover_hoursNoShortest layover allowed at every connection, in hours (half hours allowed): for 'at least 2 hours to connect'.
max_duration_hoursNoLongest itinerary to show, in hours.
connecting_airportsNoOnly itineraries that change planes at these airports (codes or city codes), nonstops included: for 'US connections only' name the hubs.
exclude_connecting_airportsNoLeave out itineraries that change planes at these airports (codes or city codes).

Output Schema

NameRequiredDescription
codeNoOn an error: a machine-readable kind, e.g. unknown_place
kindNo"flight" or "hotel"
nameNoThe bucket's name (pre-update record)
stayNoHotel only: location, hotel_name, nights, adults
fieldNoOn unknown_place: which argument (origin, destination, ...)
routeNoFlight only: origin, destination, names, trip_type, cabin, travelers
statusNoupdated | error | sign_in_required
changedNoFields sent to the update handler, site vocabulary (price, stops, preferredMonths, ...)
messageNoError or sign-in message from the server wrapper
bucket_idNoThe updated bucket list id
manage_urlNoslicktrip.com saved buckets page link
suggestionsNoOn unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country
display_nameNoName as the card shows it
places_assumedNoPlace names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler

TDQS

A4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare destructiveHint=true and idempotentHint=true, and the description goes well beyond them: it explains that only supplied fields change (partial update), that a supplied filter replaces the stored one, that clear_filters removes named filters, and crucially that a changed search resets previously found deals—naming the exact destructive consequence. It also tells the agent to confirm first. This is the 'what gets destroyed' context the annotations alone don't provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads purpose, then groups the editable surface, then closes with the critical mutation semantics and confirmation. The field enumeration is long but each item maps to a real parameter, and no sentence is wasted. Slightly dense but appropriately sized for a 33-parameter tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 33-param, output-schema-backed mutation tool, the description covers the key gotchas an agent must know: partial update, filter replacement, filter clearing, deal reset, and confirmation. Return values are handled by the output schema. Only minor auth/permission context is absent, so it is close to complete but not exhaustive.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents all 33 parameters and a 3 would be the floor. The description adds semantic value the schema does not: partial-update vs full-replace behavior, that clear_filters names filters to remove, and that a filter input overwrites the stored filter. That extra meaning lifts it above baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a clear verb and resource (edit a bucket list) and enumerates the exact editable surface—price bar, months/window, nights, stops, airlines, weekdays, name, guests, stars, channels, and flight filters. The 'edit' verb inherently separates it from add/remove/list siblings, though it never names them explicitly, which keeps it at a 4.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Use to edit a bucket list' plus 'Confirm first' gives an implied context and a confirmation instruction, and the mention of both flight and hotel lists signals it spans both list types. However there is no explicit routing guidance, such as when to reach for this versus add_flight_bucket_list or add_hotel_bucket_list, so usage is only implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_flight_trackingUpdate flight alert settingsA
Idempotent
Inspect

Use to change how a tracked route alerts: the alert rule, a target price, or the email and text channels. Only the fields given change. Confirm first.

NameRequiredDescriptionDefault
textNoSend alerts by text message. Needs a verified phone on the SlickTrip account; empty keeps the account's setting.
emailNoSend alerts by email. Empty keeps the account's setting.
alert_ruleNoWhen to alert: lowest = only a new low, any = every price move, none = off. Leave empty for the default, or give target_price_usd instead.
search_keyYesThe route's search_key from list_tracked_flights.
target_price_usdNoAlert when the price goes under this, USD. Replaces alert_rule. It is the TOTAL: the whole trip for all travelers on a flight, the whole stay on a hotel.

Output Schema

NameRequiredDescription
codeNoOn an error: a machine-readable kind, e.g. unknown_place
noteNoText alerts need a verified phone
fieldNoOn unknown_place: which argument (origin, destination, ...)
statusNoupdated | error | sign_in_required
messageNoError or sign-in message from the server wrapper
channelsNo{email: boolean, text: boolean} stored channels
manage_urlNoslicktrip.com saved-flights page link
search_keyNoThe updated route's search key
alerts_whenNoWhen alerts fire, from the alert preference
suggestionsNoOn unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country
places_assumedNoPlace names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler
text_not_enabledNoText asked but no verified phone
text_unconfirmedNoCould not confirm text-alert status

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnlyHint=false, idempotentHint=true, destructiveHint=false), and the description adds two pieces of context the annotations do not: that omitted fields are preserved, and that user confirmation is required before applying. It omits error behavior for an unknown search_key, keeping it short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with purpose, followed by the partial-update rule and the confirmation requirement. No filler; every clause carries information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need no explanation, and annotations cover idempotency and safety. The description supplies the partial-update and confirmation semantics, but does not signal the prerequisite that the route must already be tracked or point to track_flight/stop_tracking_flight as the alternatives.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents search_key, the email/text flags, alert_rule enum values, and the target_price_usd total semantics. The description only names the categories of fields in prose, adding no syntax or constraint detail beyond what the schema provides; baseline 3 is correct.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('change how a tracked route alerts') and enumerates the mutable surfaces (alert rule, target price, email/text channels). It clearly distinguishes updating an existing tracked route from the sibling tools that create or remove one, though it never names those siblings explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Only the fields given change' and 'Confirm first' give real operational guidance about partial updates and confirmation, which is more than most definitions offer. However, there is no explicit when-to-use guidance relative to siblings like track_flight (add) or stop_tracking_flight (remove), so usage context is only implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_hotel_trackingUpdate hotel alert settingsA
Idempotent
Inspect

Use to change how a tracked stay alerts: the alert rule, a target price, the email and text channels, or its name. Only the fields given change. Confirm first.

NameRequiredDescriptionDefault
nameNoRename the stay, as it appears on the saved-hotels page.
textNoSend alerts by text message. Needs a verified phone on the SlickTrip account; empty keeps the account's setting.
emailNoSend alerts by email. Empty keeps the account's setting.
alert_ruleNoWhen to alert: lowest = only a new low, any = every price move, none = off. Leave empty for the default, or give target_price_usd instead.
tracking_idYesThe stay's tracking_id from list_tracked_hotels.
target_price_usdNoAlert when the price goes under this, USD. Replaces alert_rule. It is the TOTAL: the whole trip for all travelers on a flight, the whole stay on a hotel.

Output Schema

NameRequiredDescription
codeNoOn an error: a machine-readable kind, e.g. unknown_place
nameNoNew stay name if renamed
noteNoText alerts need a verified phone
fieldNoOn unknown_place: which argument (origin, destination, ...)
statusNoupdated | error | sign_in_required
messageNoError or sign-in message from the server wrapper
channelsNo{email: boolean, text: boolean} stored channels
manage_urlNoslicktrip.com saved-hotels page link
alerts_whenNoWhen alerts fire, from the alert preference
suggestionsNoOn unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country
tracking_idNoThe updated stay tracking id
places_assumedNoPlace names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler
text_not_enabledNoText asked but no verified phone
text_unconfirmedNoCould not confirm text-alert status

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, destructiveHint=false, and idempotentHint=true, so the mutation/safety profile is covered. The description adds meaningful context beyond them: 'Only the fields given change' clarifies partial-update semantics, and 'Confirm first' signals a required user-confirmation step. It stops short of noting permission needs or the response shape.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with zero filler. The editable-field enumeration is front-loaded and the partial-update plus confirmation constraints follow immediately, so an agent gets the essentials in the first read.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need not be described, and the annotations cover the safety/idempotency profile. The partial-update rule and confirmation requirement fill the remaining gaps for a 6-param mutation tool, though permission requirements and error behavior are left unstated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents every parameter including the nuances of alert_rule vs target_price_usd and the verified-phone requirement for text. The description's field list merely mirrors the schema and adds no format or constraint detail, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (change) and resource (how a tracked stay alerts), and enumerates exactly which attributes are editable: alert rule, target price, email/text channels, name. This cleanly separates it from the siblings track_hotel (create), stop_tracking_hotel (delete), and update_flight_tracking/update_seat_tracking (different resource).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Establishes clear context ('Use to change how a tracked stay alerts') and adds a behavioral usage instruction ('Confirm first'). However, it never names alternatives or states when NOT to use this tool (e.g. use track_hotel to start tracking, stop_tracking_hotel to end it), leaving that routing to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_seat_trackingUpdate seat alert settingsA
Idempotent
Inspect

Use to pause or resume a seat alert, or change its seats-together rule or channels. To watch different seats call track_seats again (it adds to the alert). Only the fields given change. Confirm first.

NameRequiredDescriptionDefault
textNoSend alerts by text message. Needs a verified phone on the SlickTrip account; empty keeps the account's setting.
emailNoSend alerts by email. Empty keeps the account's setting.
alerts_onNofalse pauses the alert, true resumes it.
tracking_keyYesThe alert's tracking_key from list_tracked_seats.
seats_togetherNoAlert only when this many seats are open together, 2-6; 0 clears the rule.

Output Schema

NameRequiredDescription
codeNoOn an error: a machine-readable kind, e.g. unknown_place
noteNoChange seats via track_seats
fieldNoOn unknown_place: which argument (origin, destination, ...)
statusNoupdated | error | sign_in_required
messageNoError or sign-in message from the server wrapper
alertMethodNo{email, text} if channels changed
suggestionsNoOn unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country
tracking_keyNoThe updated seat alert key
seatsTogetherNoSeats-together count if changed
places_assumedNoPlace names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler
alertPreferenceNo"any" (on) or "none" (off) if changed

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare idempotentHint=true, destructiveHint=false, and readOnlyHint=false, so the safety profile is covered. The description adds genuinely new behavior: partial-update semantics ('Only the fields given change') and a confirmation requirement ('Confirm first'). It stops short of stating what happens with an invalid tracking_key or whether unset channels persist.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences with zero filler. The core mutation action is front-loaded, the alternative is second, and the constraint ('Only the fields given change', 'Confirm first') closes it out.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present the description needn't explain returns, and annotations carry the safety profile. It covers mutation semantics, confirmation, and the sibling alternative, leaving only edge cases (invalid key handling, pause vs. stop_tracking_seats) uncovered.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and each parameter is well documented, so the baseline is 3. The description adds a small amount beyond the schema by grouping text/email as 'channels' and stating the overall partial-update contract, which is not stated anywhere in the per-parameter descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb set (pause, resume, change) on a specific resource (seat alert) and enumerates the mutable aspects (seats-together rule, channels). It also explicitly distinguishes itself from the sibling track_seats, telling the agent that watching different seats is a different tool's job.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit alternative and condition: 'To watch different seats call track_seats again (it adds to the alert).' It also flags a prerequisite action ('Confirm first'). It does not, however, address when to use this versus the sibling stop_tracking_seats, so pausing versus deleting an alert is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

watch_detailsOne watch in detailA
Read-onlyIdempotent
Inspect

Use when the traveler asks about ONE of their watches (a tracked flight, a bucket list, a hotel stay or a seat watch): how it is doing, its price history, when it went up or down, the alerts sent. Returns its settings, the price now against the first price seen, the lowest and highest with dates, every recorded price move with its time (oldest first), each day's low and high and the alerts sent (flights), the best dates found (bucket lists), and when the last alert went out. Not for listing every watch (use the list_ tools).

NameRequiredDescriptionDefault
watchYesThe watch: its id from a list tool (search_key, bucket_id, tracking_id or tracking_key), or a name or place in the traveler's words, like 'Japan Road Trip' or 'Lisbon'. If several watches match, the answer lists them to choose from.

Output Schema

NameRequiredDescription
codeNoOn an error: a machine-readable kind, e.g. unknown_place
kindNoflight | bucket_list | hotel_bucket_list | hotel | seat
noteNoHow to read the prices and lists
fieldNoOn unknown_place: which argument (origin, destination, ...)
priceNonow_usd, first_seen_usd/at, change_since_first_usd, lowest_usd/at, highest_usd/at, at_lowest
titleNoThe watch in words: route and dates, or the list's name
watchNoIts settings, as the matching list tool returns them (itineraries, best_deals, alert settings...)
statusNook | choose | not_found | no_watches, or error | sign_in_required
matchesNostatus choose: the watches that match (watch, kind, label)
messageNoError or sign-in message from the server wrapper
watchesNostatus not_found: every watch on the account (watch, kind, label)
watch_idNoThe watch's id (search_key, bucket_id, tracking_id or tracking_key)
travelersNoTravelers on a flight watch when more than one
alerts_sentNoFlights: the alerts sent on this route: at, price_usd, previous_usd, kind
price_movesNoEvery recorded price change, oldest first: at, price_usd, previous_usd, airlines
suggestionsNoOn unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country
daily_pricesNoFlights: each day's low_usd, high_usd, close_usd and checks
places_assumedNoPlace names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler
last_alert_sentNoWhen the last alert went out

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the full safe-read profile (readOnly, idempotent, non-destructive, not open-world), so the description need not restate safety. It adds one genuine behavioral detail (price moves returned oldest first) plus cross-type variance, but the bulk of the text describes return contents that the output schema already documents, so the net behavioral contribution beyond the structured fields is modest.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Usage guidance is front-loaded and the disambiguation is placed last, which is the right ordering. However, the long middle sentence enumerating return fields is heavy and largely duplicates the output schema, costing some conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-argument detail tool with an output schema, the description covers the trigger, the scope (one watch), the per-type content differences, and the sibling disambiguation. An agent has everything needed to select and call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is a single parameter with 100% schema description coverage, including matching by id or traveler-worded name and the multi-match fallback behavior. The description adds nothing about the 'watch' argument, so the schema does all the work; baseline 3 is correct.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb+resource (return the full detail for ONE watch) and enumerates the four watch types it covers (tracked flight, bucket list, hotel stay, seat watch). It also names what it is not, distinguishing it from the list_* siblings without requiring the schema to be opened.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives an explicit trigger ('Use when the traveler asks about ONE of their watches') and an explicit exclusion ('Not for listing every watch (use the list_ tools)'), routing the agent to the correct alternative. Nothing is left to inference about when this tool is the right pick.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 5 tool updates
    • Addedcheck_my_watches
    • Addedexplore_destinations
    • Changedlist_bucket_lists1 field changed
      • addedInput schema / properties / name
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maxLength": 120,
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Only the bucket lists the traveler asked about: words from a list's name or its places, e.g. 'Firefall' or 'Lisbon'. Leave out to list them all.",
        +  "title": "Name"
        +}
    • Changedprice_calendar3 fields changed
      • addedInput schema / properties / depart_from
        Added value: +{
        +  "anyOf": [
        +    {
        +      "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "YYYY-MM-DD, with depart_to: only departures in the traveler's own window (\"any day before Christmas\" is December 1 to 24; \"mid-March through April\" is March 15 to April 30). It can run to the end of the month after depart_from.",
        +  "title": "Depart From"
        +}
      • addedInput schema / properties / depart_to
        Added value: +{
        +  "anyOf": [
        +    {
        +      "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "YYYY-MM-DD, the last day the traveler could leave.",
        +  "title": "Depart To"
        +}
      • changedInput schema / properties / trip_length_days / anyOf
        Previous value: -[
        -  {
        -    "maximum": 30,
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maximum": 90,
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedsearch_hotels6 fields changed
      • addedInput schema / properties / brand
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Only stays of this brand or chain, matched in the hotel's name. Put the city in location, the brand here.",
        +  "examples": [
        +    "Four Seasons",
        +    "Ritz-Carlton",
        +    "Hilton"
        +  ],
        +  "title": "Brand"
        +}
      • addedInput schema / properties / min_bedrooms
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 20,
        +      "minimum": 1,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Vacation rentals with at least this many bedrooms, as the traveler said it (\"a 5-bedroom house\": 5). Searches vacation rentals; each home says its bedrooms, bathrooms and how many it sleeps.",
        +  "title": "Min Bedrooms"
        +}
      • changedInput schema / properties / min_guest_rating / anyOf
        Previous value: -[
        -  {
        -    "maximum": 5,
        -    "minimum": 1,
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maximum": 10,
        +    "minimum": 1,
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / min_guest_rating / description
        Previous value: -"Lowest guest rating out of 5; 3.5, 4 or 4.5 work best."New value: +"Lowest guest rating out of 5; 3.5, 4 or 4.5 work best. A rating out of 10 (8 and up) is read as half."
      • changedOutput schema / properties / filters / description
        Previous value: -"Applied filters: property_type, min_stars, free_cancellation, advanced, sort"New value: +"Applied filters: property_type, min_stars, free_cancellation, min_bedrooms, advanced, sort"
      • changedOutput schema / properties / hotels / description
        Previous value: -"Items: hotel_id, name, image, type, stars, guest_rating, reviews, per_night_usd, total_usd, amenities, description, hotel_url"New value: +"Items: hotel_id, name, image, type, stars, guest_rating, reviews, per_night_usd, total_usd, amenities, description, hotel_url; vacation rentals add sleeps, bedrooms, bathrooms"
  2. 6 tool updates
    • Changedhandoff_link2 fields changed
      • changedInput schema / properties / max_stops / anyOf
        Previous value: -[
        -  {
        -    "maximum": 2,
        -    "minimum": 0,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maximum": 9,
        +    "minimum": 0,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / max_stops / description
        Previous value: -"Most stops allowed: 0 nonstop, 1, or 2."New value: +"Most stops allowed: 0 nonstop, 1, or 2 (2 or more: any number)."
    • Changedprice_calendar9 fields changed
      • changedInput schema / properties / max_stops / description
        Previous value: -"Most stops allowed: 0 nonstop, 1, or 2."New value: +"Most stops allowed: 0 nonstop, 1, or 2 (2 or more: any number)."
      • changedInput schema / properties / max_stops / maximum
        Previous value: -2New value: +9
      • changedInput schema / properties / month / description
        Previous value: -"First month to show, YYYY-MM. Empty means this month."New value: +"The month the traveler named, as YYYY-MM. Leave it empty only when the traveler asked about the next few weeks. Do not choose a month for the traveler."
      • addedInput schema / properties / trip_length_days / anyOf
        Added value: +[
        +  {
        +    "maximum": 30,
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / trip_length_days / default
        Previous value: -7New value: +null
      • changedInput schema / properties / trip_length_days / description
        Previous value: -"Nights away, round trips only."New value: +"How many nights the traveler wants to stay. Round trips only. Every price in the calendar is for exactly this many nights. If the traveler has not told you how many nights, ask them. Do not pick a number for the traveler."
      • removedInput schema / properties / trip_length_days / maximum
        Removed value: -30
      • removedInput schema / properties / trip_length_days / minimum
        Removed value: -1
      • removedInput schema / properties / trip_length_days / type
        Removed value: -"integer"
    • Changedsearch_flights4 fields changed
      • changedInput schema / properties / carry_on_bags / description
        Previous value: -"Carry-on bags per traveler (0-1). Prices then include the bag fees: search_flights shows them as price_with_bags next to the fare; a calendar or bucket list prices every day with them."New value: +"Carry-on bags per traveler (0 or 1). The prices then include the bag fees, shown as price_with_bags next to the fare."
      • changedInput schema / properties / checked_bags / description
        Previous value: -"Checked bags per traveler (0-2), priced only for flights within the US and Canada (elsewhere the answer says the prices do not include them). Prices then include the bag fees: search_flights shows them as price_with_bags next to the fare; a calendar or bucket list prices every day with them."New value: +"Checked bags per traveler (0 to 2). Bag fees are only priced for flights within the US and Canada; for other flights the answer says the prices do not include them. The prices then include the bag fees, shown as price_with_bags next to the fare."
      • changedInput schema / properties / max_stops / anyOf
        Previous value: -[
        -  {
        -    "maximum": 2,
        -    "minimum": 0,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maximum": 9,
        +    "minimum": 0,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / max_stops / description
        Previous value: -"Most stops allowed: 0 nonstop, 1, or 2."New value: +"Most stops allowed: 0 nonstop, 1, or 2 (2 or more: any number)."
    • Changedsearch_return_flights4 fields changed
      • changedInput schema / properties / carry_on_bags / description
        Previous value: -"Carry-on bags per traveler (0-1). Prices then include the bag fees: search_flights shows them as price_with_bags next to the fare; a calendar or bucket list prices every day with them."New value: +"Carry-on bags per traveler (0 or 1). The prices then include the bag fees, shown as price_with_bags next to the fare."
      • changedInput schema / properties / checked_bags / description
        Previous value: -"Checked bags per traveler (0-2), priced only for flights within the US and Canada (elsewhere the answer says the prices do not include them). Prices then include the bag fees: search_flights shows them as price_with_bags next to the fare; a calendar or bucket list prices every day with them."New value: +"Checked bags per traveler (0 to 2). Bag fees are only priced for flights within the US and Canada; for other flights the answer says the prices do not include them. The prices then include the bag fees, shown as price_with_bags next to the fare."
      • changedInput schema / properties / max_stops / anyOf
        Previous value: -[
        -  {
        -    "maximum": 2,
        -    "minimum": 0,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maximum": 9,
        +    "minimum": 0,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / max_stops / description
        Previous value: -"Most stops allowed: 0 nonstop, 1, or 2."New value: +"Most stops allowed: 0 nonstop, 1, or 2 (2 or more: any number)."
    • Changedupdate_bucket_list2 fields changed
      • changedInput schema / properties / max_stops / anyOf
        Previous value: -[
        -  {
        -    "maximum": 2,
        -    "minimum": 0,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maximum": 9,
        +    "minimum": 0,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / max_stops / description
        Previous value: -"Most stops allowed: 0 nonstop, 1, or 2."New value: +"Most stops allowed: 0 nonstop, 1, or 2 (2 or more: any number)."
    • Addedwatch_details
  3. 5 tool updates
    • Changedadd_flight_bucket_list1 field changed
      • changedInput schema / properties / checked_bags / description
        Previous value: -"Checked bags per traveler (0-2). Prices then include the bag fees: search_flights shows them as price_with_bags next to the fare; a calendar or bucket list prices every day with them."New value: +"Checked bags per traveler (0-2), priced only for flights within the US and Canada (elsewhere the answer says the prices do not include them). Prices then include the bag fees: search_flights shows them as price_with_bags next to the fare; a calendar or bucket list prices every day with them."
    • Changedprice_calendar1 field changed
      • changedInput schema / properties / checked_bags / description
        Previous value: -"Checked bags per traveler (0-2). Prices then include the bag fees: search_flights shows them as price_with_bags next to the fare; a calendar or bucket list prices every day with them."New value: +"Checked bags per traveler (0-2), priced only for flights within the US and Canada (elsewhere the answer says the prices do not include them). Prices then include the bag fees: search_flights shows them as price_with_bags next to the fare; a calendar or bucket list prices every day with them."
    • Changedsearch_flights1 field changed
      • changedInput schema / properties / checked_bags / description
        Previous value: -"Checked bags per traveler (0-2). Prices then include the bag fees: search_flights shows them as price_with_bags next to the fare; a calendar or bucket list prices every day with them."New value: +"Checked bags per traveler (0-2), priced only for flights within the US and Canada (elsewhere the answer says the prices do not include them). Prices then include the bag fees: search_flights shows them as price_with_bags next to the fare; a calendar or bucket list prices every day with them."
    • Changedsearch_return_flights1 field changed
      • changedInput schema / properties / checked_bags / description
        Previous value: -"Checked bags per traveler (0-2). Prices then include the bag fees: search_flights shows them as price_with_bags next to the fare; a calendar or bucket list prices every day with them."New value: +"Checked bags per traveler (0-2), priced only for flights within the US and Canada (elsewhere the answer says the prices do not include them). Prices then include the bag fees: search_flights shows them as price_with_bags next to the fare; a calendar or bucket list prices every day with them."
    • Changedupdate_bucket_list1 field changed
      • changedInput schema / properties / checked_bags / description
        Previous value: -"Checked bags per traveler (0-2). Prices then include the bag fees: search_flights shows them as price_with_bags next to the fare; a calendar or bucket list prices every day with them."New value: +"Checked bags per traveler (0-2), priced only for flights within the US and Canada (elsewhere the answer says the prices do not include them). Prices then include the bag fees: search_flights shows them as price_with_bags next to the fare; a calendar or bucket list prices every day with them."
  4. 1 tool update
    • Changedsearch_return_flights2 fields changed
      • addedInput schema / properties / carry_on_bags
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 1,
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Carry-on bags per traveler (0-1). Prices then include the bag fees: search_flights shows them as price_with_bags next to the fare; a calendar or bucket list prices every day with them.",
        +  "title": "Carry On Bags"
        +}
      • addedInput schema / properties / checked_bags
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 2,
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Checked bags per traveler (0-2). Prices then include the bag fees: search_flights shows them as price_with_bags next to the fare; a calendar or bucket list prices every day with them.",
        +  "title": "Checked Bags"
        +}
  5. 5 tool updates
    • Changedadd_flight_bucket_list13 fields changed
      • addedInput schema / properties / arrive_after
        Added value: +{
        +  "anyOf": [
        +    {
        +      "pattern": "^\\d{2}:\\d{2}$",
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "HH:MM, local time at that airport.",
        +  "examples": [
        +    "06:00",
        +    "21:30"
        +  ],
        +  "title": "Arrive After"
        +}
      • addedInput schema / properties / arrive_before
        Added value: +{
        +  "anyOf": [
        +    {
        +      "pattern": "^\\d{2}:\\d{2}$",
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "HH:MM, local time at that airport.",
        +  "examples": [
        +    "06:00",
        +    "21:30"
        +  ],
        +  "title": "Arrive Before"
        +}
      • addedInput schema / properties / carry_on_bags
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 1,
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Carry-on bags per traveler (0-1). Prices then include the bag fees: search_flights shows them as price_with_bags next to the fare; a calendar or bucket list prices every day with them.",
        +  "title": "Carry On Bags"
        +}
      • addedInput schema / properties / checked_bags
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 2,
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Checked bags per traveler (0-2). Prices then include the bag fees: search_flights shows them as price_with_bags next to the fare; a calendar or bucket list prices every day with them.",
        +  "title": "Checked Bags"
        +}
      • addedInput schema / properties / connecting_airports
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Only itineraries that change planes at these airports (codes or city codes), nonstops included: for 'US connections only' name the hubs.",
        +  "examples": [
        +    [
        +      "MIA",
        +      "ATL",
        +      "IAH"
        +    ]
        +  ],
        +  "title": "Connecting Airports"
        +}
      • addedInput schema / properties / depart_after
        Added value: +{
        +  "anyOf": [
        +    {
        +      "pattern": "^\\d{2}:\\d{2}$",
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "HH:MM, local time at that airport.",
        +  "examples": [
        +    "06:00",
        +    "21:30"
        +  ],
        +  "title": "Depart After"
        +}
      • addedInput schema / properties / depart_before
        Added value: +{
        +  "anyOf": [
        +    {
        +      "pattern": "^\\d{2}:\\d{2}$",
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "HH:MM, local time at that airport.",
        +  "examples": [
        +    "06:00",
        +    "21:30"
        +  ],
        +  "title": "Depart Before"
        +}
      • addedInput schema / properties / exclude_airlines
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Leave out itineraries with any flight sold by these carriers (IATA codes, names or an alliance), by flight number or airline name: for 'not Gol' or 'avoid Air India'.",
        +  "examples": [
        +    [
        +      "G3"
        +    ],
        +    [
        +      "Gulf Air",
        +      "Air India"
        +    ]
        +  ],
        +  "title": "Exclude Airlines"
        +}
      • addedInput schema / properties / exclude_connecting_airports
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Leave out itineraries that change planes at these airports (codes or city codes).",
        +  "examples": [
        +    [
        +      "DOH"
        +    ],
        +    [
        +      "LOND"
        +    ]
        +  ],
        +  "title": "Exclude Connecting Airports"
        +}
      • addedInput schema / properties / lower_emissions
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Only itineraries with lower emissions than is typical for the route.",
        +  "title": "Lower Emissions"
        +}
      • addedInput schema / properties / max_duration_hours
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 96,
        +      "minimum": 1,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Longest itinerary to show, in hours.",
        +  "title": "Max Duration Hours"
        +}
      • addedInput schema / properties / max_layover_hours
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 26,
        +      "minimum": 0.5,
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Longest layover allowed at every connection, in hours (half hours allowed): for 'layovers no longer than 5 hours'.",
        +  "title": "Max Layover Hours"
        +}
      • addedInput schema / properties / min_layover_hours
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 26,
        +      "minimum": 0.5,
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Shortest layover allowed at every connection, in hours (half hours allowed): for 'at least 2 hours to connect'.",
        +  "title": "Min Layover Hours"
        +}
    • Changedprice_calendar13 fields changed
      • addedInput schema / properties / arrive_after
        Added value: +{
        +  "anyOf": [
        +    {
        +      "pattern": "^\\d{2}:\\d{2}$",
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "HH:MM, local time at that airport.",
        +  "examples": [
        +    "06:00",
        +    "21:30"
        +  ],
        +  "title": "Arrive After"
        +}
      • addedInput schema / properties / arrive_before
        Added value: +{
        +  "anyOf": [
        +    {
        +      "pattern": "^\\d{2}:\\d{2}$",
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "HH:MM, local time at that airport.",
        +  "examples": [
        +    "06:00",
        +    "21:30"
        +  ],
        +  "title": "Arrive Before"
        +}
      • addedInput schema / properties / carry_on_bags
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 1,
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Carry-on bags per traveler (0-1). Prices then include the bag fees: search_flights shows them as price_with_bags next to the fare; a calendar or bucket list prices every day with them.",
        +  "title": "Carry On Bags"
        +}
      • addedInput schema / properties / checked_bags
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 2,
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Checked bags per traveler (0-2). Prices then include the bag fees: search_flights shows them as price_with_bags next to the fare; a calendar or bucket list prices every day with them.",
        +  "title": "Checked Bags"
        +}
      • addedInput schema / properties / connecting_airports
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Only itineraries that change planes at these airports (codes or city codes), nonstops included: for 'US connections only' name the hubs.",
        +  "examples": [
        +    [
        +      "MIA",
        +      "ATL",
        +      "IAH"
        +    ]
        +  ],
        +  "title": "Connecting Airports"
        +}
      • addedInput schema / properties / depart_after
        Added value: +{
        +  "anyOf": [
        +    {
        +      "pattern": "^\\d{2}:\\d{2}$",
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "HH:MM, local time at that airport.",
        +  "examples": [
        +    "06:00",
        +    "21:30"
        +  ],
        +  "title": "Depart After"
        +}
      • addedInput schema / properties / depart_before
        Added value: +{
        +  "anyOf": [
        +    {
        +      "pattern": "^\\d{2}:\\d{2}$",
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "HH:MM, local time at that airport.",
        +  "examples": [
        +    "06:00",
        +    "21:30"
        +  ],
        +  "title": "Depart Before"
        +}
      • addedInput schema / properties / exclude_airlines
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Leave out itineraries with any flight sold by these carriers (IATA codes, names or an alliance), by flight number or airline name: for 'not Gol' or 'avoid Air India'.",
        +  "examples": [
        +    [
        +      "G3"
        +    ],
        +    [
        +      "Gulf Air",
        +      "Air India"
        +    ]
        +  ],
        +  "title": "Exclude Airlines"
        +}
      • addedInput schema / properties / exclude_connecting_airports
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Leave out itineraries that change planes at these airports (codes or city codes).",
        +  "examples": [
        +    [
        +      "DOH"
        +    ],
        +    [
        +      "LOND"
        +    ]
        +  ],
        +  "title": "Exclude Connecting Airports"
        +}
      • addedInput schema / properties / lower_emissions
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Only itineraries with lower emissions than is typical for the route.",
        +  "title": "Lower Emissions"
        +}
      • addedInput schema / properties / max_duration_hours
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 96,
        +      "minimum": 1,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Longest itinerary to show, in hours.",
        +  "title": "Max Duration Hours"
        +}
      • addedInput schema / properties / max_layover_hours
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 26,
        +      "minimum": 0.5,
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Longest layover allowed at every connection, in hours (half hours allowed): for 'layovers no longer than 5 hours'.",
        +  "title": "Max Layover Hours"
        +}
      • addedInput schema / properties / min_layover_hours
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 26,
        +      "minimum": 0.5,
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Shortest layover allowed at every connection, in hours (half hours allowed): for 'at least 2 hours to connect'.",
        +  "title": "Min Layover Hours"
        +}
    • Changedsearch_flights9 fields changed
      • addedInput schema / properties / carry_on_bags
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 1,
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Carry-on bags per traveler (0-1). Prices then include the bag fees: search_flights shows them as price_with_bags next to the fare; a calendar or bucket list prices every day with them.",
        +  "title": "Carry On Bags"
        +}
      • addedInput schema / properties / checked_bags
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 2,
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Checked bags per traveler (0-2). Prices then include the bag fees: search_flights shows them as price_with_bags next to the fare; a calendar or bucket list prices every day with them.",
        +  "title": "Checked Bags"
        +}
      • addedInput schema / properties / connecting_airports
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Only itineraries that change planes at these airports (codes or city codes), nonstops included: for 'US connections only' name the hubs.",
        +  "examples": [
        +    [
        +      "MIA",
        +      "ATL",
        +      "IAH"
        +    ]
        +  ],
        +  "title": "Connecting Airports"
        +}
      • addedInput schema / properties / exclude_airlines
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Leave out itineraries with any flight sold by these carriers (IATA codes, names or an alliance), by flight number or airline name: for 'not Gol' or 'avoid Air India'.",
        +  "examples": [
        +    [
        +      "G3"
        +    ],
        +    [
        +      "Gulf Air",
        +      "Air India"
        +    ]
        +  ],
        +  "title": "Exclude Airlines"
        +}
      • addedInput schema / properties / exclude_connecting_airports
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Leave out itineraries that change planes at these airports (codes or city codes).",
        +  "examples": [
        +    [
        +      "DOH"
        +    ],
        +    [
        +      "LOND"
        +    ]
        +  ],
        +  "title": "Exclude Connecting Airports"
        +}
      • addedInput schema / properties / lower_emissions
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Only itineraries with lower emissions than is typical for the route.",
        +  "title": "Lower Emissions"
        +}
      • addedInput schema / properties / max_layover_hours
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 26,
        +      "minimum": 0.5,
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Longest layover allowed at every connection, in hours (half hours allowed): for 'layovers no longer than 5 hours'.",
        +  "title": "Max Layover Hours"
        +}
      • addedInput schema / properties / min_layover_hours
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 26,
        +      "minimum": 0.5,
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Shortest layover allowed at every connection, in hours (half hours allowed): for 'at least 2 hours to connect'.",
        +  "title": "Min Layover Hours"
        +}
      • addedInput schema / properties / no_overnight_layovers
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Leave out itineraries with an overnight layover: for 'no overnight at the transit airport'.",
        +  "title": "No Overnight Layovers"
        +}
    • Changedsearch_return_flights7 fields changed
      • addedInput schema / properties / connecting_airports
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Only itineraries that change planes at these airports (codes or city codes), nonstops included: for 'US connections only' name the hubs.",
        +  "examples": [
        +    [
        +      "MIA",
        +      "ATL",
        +      "IAH"
        +    ]
        +  ],
        +  "title": "Connecting Airports"
        +}
      • addedInput schema / properties / exclude_airlines
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Leave out itineraries with any flight sold by these carriers (IATA codes, names or an alliance), by flight number or airline name: for 'not Gol' or 'avoid Air India'.",
        +  "examples": [
        +    [
        +      "G3"
        +    ],
        +    [
        +      "Gulf Air",
        +      "Air India"
        +    ]
        +  ],
        +  "title": "Exclude Airlines"
        +}
      • addedInput schema / properties / exclude_connecting_airports
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Leave out itineraries that change planes at these airports (codes or city codes).",
        +  "examples": [
        +    [
        +      "DOH"
        +    ],
        +    [
        +      "LOND"
        +    ]
        +  ],
        +  "title": "Exclude Connecting Airports"
        +}
      • addedInput schema / properties / lower_emissions
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Only itineraries with lower emissions than is typical for the route.",
        +  "title": "Lower Emissions"
        +}
      • addedInput schema / properties / max_layover_hours
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 26,
        +      "minimum": 0.5,
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Longest layover allowed at every connection, in hours (half hours allowed): for 'layovers no longer than 5 hours'.",
        +  "title": "Max Layover Hours"
        +}
      • addedInput schema / properties / min_layover_hours
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 26,
        +      "minimum": 0.5,
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Shortest layover allowed at every connection, in hours (half hours allowed): for 'at least 2 hours to connect'.",
        +  "title": "Min Layover Hours"
        +}
      • addedInput schema / properties / no_overnight_layovers
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Leave out itineraries with an overnight layover: for 'no overnight at the transit airport'.",
        +  "title": "No Overnight Layovers"
        +}
    • Changedupdate_bucket_list14 fields changed
      • addedInput schema / properties / arrive_after
        Added value: +{
        +  "anyOf": [
        +    {
        +      "pattern": "^\\d{2}:\\d{2}$",
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "HH:MM, local time at that airport.",
        +  "examples": [
        +    "06:00",
        +    "21:30"
        +  ],
        +  "title": "Arrive After"
        +}
      • addedInput schema / properties / arrive_before
        Added value: +{
        +  "anyOf": [
        +    {
        +      "pattern": "^\\d{2}:\\d{2}$",
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "HH:MM, local time at that airport.",
        +  "examples": [
        +    "06:00",
        +    "21:30"
        +  ],
        +  "title": "Arrive Before"
        +}
      • addedInput schema / properties / carry_on_bags
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 1,
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Carry-on bags per traveler (0-1). Prices then include the bag fees: search_flights shows them as price_with_bags next to the fare; a calendar or bucket list prices every day with them.",
        +  "title": "Carry On Bags"
        +}
      • addedInput schema / properties / checked_bags
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 2,
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Checked bags per traveler (0-2). Prices then include the bag fees: search_flights shows them as price_with_bags next to the fare; a calendar or bucket list prices every day with them.",
        +  "title": "Checked Bags"
        +}
      • addedInput schema / properties / clear_filters
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "enum": [
        +          "exclude_airlines",
        +          "connecting_airports",
        +          "exclude_connecting_airports",
        +          "depart_after",
        +          "depart_before",
        +          "arrive_after",
        +          "arrive_before",
        +          "max_duration_hours",
        +          "min_layover_hours",
        +          "max_layover_hours",
        +          "lower_emissions",
        +          "bags"
        +        ],
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Flight lists: filters to remove.",
        +  "title": "Clear Filters"
        +}
      • addedInput schema / properties / connecting_airports
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Only itineraries that change planes at these airports (codes or city codes), nonstops included: for 'US connections only' name the hubs.",
        +  "examples": [
        +    [
        +      "MIA",
        +      "ATL",
        +      "IAH"
        +    ]
        +  ],
        +  "title": "Connecting Airports"
        +}
      • addedInput schema / properties / depart_after
        Added value: +{
        +  "anyOf": [
        +    {
        +      "pattern": "^\\d{2}:\\d{2}$",
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "HH:MM, local time at that airport.",
        +  "examples": [
        +    "06:00",
        +    "21:30"
        +  ],
        +  "title": "Depart After"
        +}
      • addedInput schema / properties / depart_before
        Added value: +{
        +  "anyOf": [
        +    {
        +      "pattern": "^\\d{2}:\\d{2}$",
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "HH:MM, local time at that airport.",
        +  "examples": [
        +    "06:00",
        +    "21:30"
        +  ],
        +  "title": "Depart Before"
        +}
      • addedInput schema / properties / exclude_airlines
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Leave out itineraries with any flight sold by these carriers (IATA codes, names or an alliance), by flight number or airline name: for 'not Gol' or 'avoid Air India'.",
        +  "examples": [
        +    [
        +      "G3"
        +    ],
        +    [
        +      "Gulf Air",
        +      "Air India"
        +    ]
        +  ],
        +  "title": "Exclude Airlines"
        +}
      • addedInput schema / properties / exclude_connecting_airports
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Leave out itineraries that change planes at these airports (codes or city codes).",
        +  "examples": [
        +    [
        +      "DOH"
        +    ],
        +    [
        +      "LOND"
        +    ]
        +  ],
        +  "title": "Exclude Connecting Airports"
        +}
      • addedInput schema / properties / lower_emissions
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Only itineraries with lower emissions than is typical for the route.",
        +  "title": "Lower Emissions"
        +}
      • addedInput schema / properties / max_duration_hours
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 96,
        +      "minimum": 1,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Longest itinerary to show, in hours.",
        +  "title": "Max Duration Hours"
        +}
      • addedInput schema / properties / max_layover_hours
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 26,
        +      "minimum": 0.5,
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Longest layover allowed at every connection, in hours (half hours allowed): for 'layovers no longer than 5 hours'.",
        +  "title": "Max Layover Hours"
        +}
      • addedInput schema / properties / min_layover_hours
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 26,
        +      "minimum": 0.5,
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Shortest layover allowed at every connection, in hours (half hours allowed): for 'at least 2 hours to connect'.",
        +  "title": "Min Layover Hours"
        +}
  6. 11 tool updates
    • Changedadd_flight_bucket_list7 fields changed
      • changedInput schema / properties / destination / description
        Previous value: -"A 3-letter airport code (JFK), or a city code that searches every airport in the city (SlickTrip's 4-letter codes: NYCA New York, LOND London, ROME Rome, TYOA Tokyo). Up to 3 places joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. Unsure of the code: call find_places."New value: +"A 3-letter airport code (JFK), or a city code that searches every airport in the city (SlickTrip's 4-letter codes: NYCA New York, LOND London, ROME Rome, TYOA Tokyo). Up to 3 places joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. When the traveler names a city rather than an airport, send the city (its name or code), not one of its airports: one airport can miss the cheapest or the only flights. Unsure of the code: call find_places."
      • changedInput schema / properties / months / description
        Previous value: -"Months to watch, as names or YYYY-MM. Give this OR start_date + end_date."New value: +"Months to watch, as names or YYYY-MM, or give start_date + end_date. Leave both empty to watch every month on sale (the default)."
      • changedInput schema / properties / origin / description
        Previous value: -"A 3-letter airport code (JFK), or a city code that searches every airport in the city (SlickTrip's 4-letter codes: NYCA New York, LOND London, ROME Rome, TYOA Tokyo). Up to 3 places joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. Unsure of the code: call find_places."New value: +"A 3-letter airport code (JFK), or a city code that searches every airport in the city (SlickTrip's 4-letter codes: NYCA New York, LOND London, ROME Rome, TYOA Tokyo). Up to 3 places joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. When the traveler names a city rather than an airport, send the city (its name or code), not one of its airports: one airport can miss the cheapest or the only flights. Unsure of the code: call find_places."
      • changedInput schema / properties / travelers / description
        Previous value: -"Travelers. Fares are quoted for all of them together; one booking holds up to 9 (a larger group gets a suggested split)."New value: +"Travelers who need a seat (adults and children). Fares are quoted for all of them together; one booking holds up to 9 (a larger group gets a suggested split). A baby under 2 on a lap is not a seat and is not counted here."
      • changedInput schema / properties / user_request / anyOf
        Previous value: -[
        -  {
        -    "maxLength": 300,
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maxLength": 500,
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / user_request / description
        Previous value: -"Optional. The traveler's current travel request, briefly, in their own words. Used to interpret this search, suggest a corrected search if it fails, and improve SlickTrip's search. Include only this request; not earlier conversation, names, contact details, or payment or ID information."New value: +"Optional, and it works in the traveler's favor. Quote the traveler's latest message about this trip exactly as they wrote it, in their wording, language and spelling, not a summary. SlickTrip runs its own travel parser on these words: when a search fails or comes back empty, it compares what the traveler said with the arguments sent and returns a corrected search, so you can fix it without asking them again. It has caught Cancun sent as MEX instead of CUN, and travelers dropped from the party. A summary loses exactly the details it checks. If the message only answers a question (\"yes, the 20th\"), quote the message where they asked for the trip. Send the same quote on every call for this request. Leave out anything not about the trip, and never include names, contact details, or payment or ID information. The words also help SlickTrip improve its search."
      • changedInput schema / properties / user_request / examples
        Previous value: -[
        -  "cheap nonstop to Lisbon early May",
        -  "family of 8 in Albufeira, 4 nights mid November"
        -]New value: +[
        +  "we're 6 friends from madrid, want somewhere cheap and fun in europe dec 20-24, morning flights pls",
        +  "necesito llevar a mi mamá de Calgary a Kolkata a fines de octubre, no puede hacer escala en Estados Unidos"
        +]
    • Changedadd_hotel_bucket_list4 fields changed
      • changedInput schema / properties / months / description
        Previous value: -"Months to watch, as names or YYYY-MM. Give this OR start_date + end_date."New value: +"Months to watch, as names or YYYY-MM, or give start_date + end_date. Leave both empty to watch every month on sale (the default)."
      • changedInput schema / properties / user_request / anyOf
        Previous value: -[
        -  {
        -    "maxLength": 300,
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maxLength": 500,
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / user_request / description
        Previous value: -"Optional. The traveler's current travel request, briefly, in their own words. Used to interpret this search, suggest a corrected search if it fails, and improve SlickTrip's search. Include only this request; not earlier conversation, names, contact details, or payment or ID information."New value: +"Optional, and it works in the traveler's favor. Quote the traveler's latest message about this trip exactly as they wrote it, in their wording, language and spelling, not a summary. SlickTrip runs its own travel parser on these words: when a search fails or comes back empty, it compares what the traveler said with the arguments sent and returns a corrected search, so you can fix it without asking them again. It has caught Cancun sent as MEX instead of CUN, and travelers dropped from the party. A summary loses exactly the details it checks. If the message only answers a question (\"yes, the 20th\"), quote the message where they asked for the trip. Send the same quote on every call for this request. Leave out anything not about the trip, and never include names, contact details, or payment or ID information. The words also help SlickTrip improve its search."
      • changedInput schema / properties / user_request / examples
        Previous value: -[
        -  "cheap nonstop to Lisbon early May",
        -  "family of 8 in Albufeira, 4 nights mid November"
        -]New value: +[
        +  "we're 6 friends from madrid, want somewhere cheap and fun in europe dec 20-24, morning flights pls",
        +  "necesito llevar a mi mamá de Calgary a Kolkata a fines de octubre, no puede hacer escala en Estados Unidos"
        +]
    • Changedflight_lookup6 fields changed
      • changedInput schema / properties / destination / description
        Previous value: -"A 3-letter airport code (JFK), or a city code that searches every airport in the city (SlickTrip's 4-letter codes: NYCA New York, LOND London, ROME Rome, TYOA Tokyo). Up to 3 places joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. Unsure of the code: call find_places."New value: +"A 3-letter airport code (JFK), or a city code that searches every airport in the city (SlickTrip's 4-letter codes: NYCA New York, LOND London, ROME Rome, TYOA Tokyo). Up to 3 places joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. When the traveler names a city rather than an airport, send the city (its name or code), not one of its airports: one airport can miss the cheapest or the only flights. Unsure of the code: call find_places."
      • addedInput schema / properties / display
        Added value: +{
        +  "anyOf": [
        +    {
        +      "enum": [
        +        "compact",
        +        "full"
        +      ],
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "compact: one line per option, more options, far fewer tokens; full: every field (what the cards draw). Empty picks for you: compact when the app shows no cards, full when it does.",
        +  "title": "Display"
        +}
      • changedInput schema / properties / origin / description
        Previous value: -"A 3-letter airport code (JFK), or a city code that searches every airport in the city (SlickTrip's 4-letter codes: NYCA New York, LOND London, ROME Rome, TYOA Tokyo). Up to 3 places joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. Unsure of the code: call find_places."New value: +"A 3-letter airport code (JFK), or a city code that searches every airport in the city (SlickTrip's 4-letter codes: NYCA New York, LOND London, ROME Rome, TYOA Tokyo). Up to 3 places joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. When the traveler names a city rather than an airport, send the city (its name or code), not one of its airports: one airport can miss the cheapest or the only flights. Unsure of the code: call find_places."
      • changedInput schema / properties / user_request / anyOf
        Previous value: -[
        -  {
        -    "maxLength": 300,
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maxLength": 500,
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / user_request / description
        Previous value: -"Optional. The traveler's current travel request, briefly, in their own words. Used to interpret this search, suggest a corrected search if it fails, and improve SlickTrip's search. Include only this request; not earlier conversation, names, contact details, or payment or ID information."New value: +"Optional, and it works in the traveler's favor. Quote the traveler's latest message about this trip exactly as they wrote it, in their wording, language and spelling, not a summary. SlickTrip runs its own travel parser on these words: when a search fails or comes back empty, it compares what the traveler said with the arguments sent and returns a corrected search, so you can fix it without asking them again. It has caught Cancun sent as MEX instead of CUN, and travelers dropped from the party. A summary loses exactly the details it checks. If the message only answers a question (\"yes, the 20th\"), quote the message where they asked for the trip. Send the same quote on every call for this request. Leave out anything not about the trip, and never include names, contact details, or payment or ID information. The words also help SlickTrip improve its search."
      • changedInput schema / properties / user_request / examples
        Previous value: -[
        -  "cheap nonstop to Lisbon early May",
        -  "family of 8 in Albufeira, 4 nights mid November"
        -]New value: +[
        +  "we're 6 friends from madrid, want somewhere cheap and fun in europe dec 20-24, morning flights pls",
        +  "necesito llevar a mi mamá de Calgary a Kolkata a fines de octubre, no puede hacer escala en Estados Unidos"
        +]
    • Changedhandoff_link5 fields changed
      • changedInput schema / $defs / Leg / properties / destination / description
        Previous value: -"A 3-letter airport code (JFK), or a city code that searches every airport in the city (SlickTrip's 4-letter codes: NYCA New York, LOND London, ROME Rome, TYOA Tokyo). Up to 3 places joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. Unsure of the code: call find_places."New value: +"A 3-letter airport code (JFK), or a city code that searches every airport in the city (SlickTrip's 4-letter codes: NYCA New York, LOND London, ROME Rome, TYOA Tokyo). Up to 3 places joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. When the traveler names a city rather than an airport, send the city (its name or code), not one of its airports: one airport can miss the cheapest or the only flights. Unsure of the code: call find_places."
      • changedInput schema / $defs / Leg / properties / origin / description
        Previous value: -"A 3-letter airport code (JFK), or a city code that searches every airport in the city (SlickTrip's 4-letter codes: NYCA New York, LOND London, ROME Rome, TYOA Tokyo). Up to 3 places joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. Unsure of the code: call find_places."New value: +"A 3-letter airport code (JFK), or a city code that searches every airport in the city (SlickTrip's 4-letter codes: NYCA New York, LOND London, ROME Rome, TYOA Tokyo). Up to 3 places joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. When the traveler names a city rather than an airport, send the city (its name or code), not one of its airports: one airport can miss the cheapest or the only flights. Unsure of the code: call find_places."
      • changedInput schema / properties / destination / description
        Previous value: -"A 3-letter airport code (JFK) or a city code for all its airports (NYCA, LOND, ROME); up to 3 joined with _ (JFK_EWR). A clear place name works too. Unsure of the code: call find_places."New value: +"A 3-letter airport code (JFK) or a city code for all its airports (NYCA, LOND, ROME); up to 3 joined with _ (JFK_EWR). A clear place name works too. When the traveler names a city rather than an airport, send the city (its name or code), not one of its airports: one airport can miss the cheapest or the only flights. Unsure of the code: call find_places."
      • changedInput schema / properties / origin / description
        Previous value: -"A 3-letter airport code (JFK) or a city code for all its airports (NYCA, LOND, ROME); up to 3 joined with _ (JFK_EWR). A clear place name works too. Unsure of the code: call find_places."New value: +"A 3-letter airport code (JFK) or a city code for all its airports (NYCA, LOND, ROME); up to 3 joined with _ (JFK_EWR). A clear place name works too. When the traveler names a city rather than an airport, send the city (its name or code), not one of its airports: one airport can miss the cheapest or the only flights. Unsure of the code: call find_places."
      • changedInput schema / properties / travelers / description
        Previous value: -"Travelers. Fares are quoted for all of them together; one booking holds up to 9 (a larger group gets a suggested split)."New value: +"Travelers who need a seat (adults and children). Fares are quoted for all of them together; one booking holds up to 9 (a larger group gets a suggested split). A baby under 2 on a lap is not a seat and is not counted here."
    • Changedprice_calendar7 fields changed
      • changedInput schema / properties / destination / description
        Previous value: -"A 3-letter airport code (JFK), or a city code that searches every airport in the city (SlickTrip's 4-letter codes: NYCA New York, LOND London, ROME Rome, TYOA Tokyo). Up to 3 places joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. Unsure of the code: call find_places."New value: +"A 3-letter airport code (JFK), or a city code that searches every airport in the city (SlickTrip's 4-letter codes: NYCA New York, LOND London, ROME Rome, TYOA Tokyo). Up to 3 places joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. When the traveler names a city rather than an airport, send the city (its name or code), not one of its airports: one airport can miss the cheapest or the only flights. Unsure of the code: call find_places."
      • addedInput schema / properties / lap_infants
        Added value: +{
        +  "default": 0,
        +  "description": "Babies under 2 who will sit on an adult's lap (no seat of their own). Not counted in travelers and not in the quoted fare; the answer says how airlines charge them.",
        +  "maximum": 9,
        +  "minimum": 0,
        +  "title": "Lap Infants",
        +  "type": "integer"
        +}
      • changedInput schema / properties / origin / description
        Previous value: -"A 3-letter airport code (JFK), or a city code that searches every airport in the city (SlickTrip's 4-letter codes: NYCA New York, LOND London, ROME Rome, TYOA Tokyo). Up to 3 places joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. Unsure of the code: call find_places."New value: +"A 3-letter airport code (JFK), or a city code that searches every airport in the city (SlickTrip's 4-letter codes: NYCA New York, LOND London, ROME Rome, TYOA Tokyo). Up to 3 places joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. When the traveler names a city rather than an airport, send the city (its name or code), not one of its airports: one airport can miss the cheapest or the only flights. Unsure of the code: call find_places."
      • changedInput schema / properties / travelers / description
        Previous value: -"Travelers. Fares are quoted for all of them together; one booking holds up to 9 (a larger group gets a suggested split)."New value: +"Travelers who need a seat (adults and children). Fares are quoted for all of them together; one booking holds up to 9 (a larger group gets a suggested split). A baby under 2 on a lap is not a seat and is not counted here."
      • changedInput schema / properties / user_request / anyOf
        Previous value: -[
        -  {
        -    "maxLength": 300,
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maxLength": 500,
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / user_request / description
        Previous value: -"Optional. The traveler's current travel request, briefly, in their own words. Used to interpret this search, suggest a corrected search if it fails, and improve SlickTrip's search. Include only this request; not earlier conversation, names, contact details, or payment or ID information."New value: +"Optional, and it works in the traveler's favor. Quote the traveler's latest message about this trip exactly as they wrote it, in their wording, language and spelling, not a summary. SlickTrip runs its own travel parser on these words: when a search fails or comes back empty, it compares what the traveler said with the arguments sent and returns a corrected search, so you can fix it without asking them again. It has caught Cancun sent as MEX instead of CUN, and travelers dropped from the party. A summary loses exactly the details it checks. If the message only answers a question (\"yes, the 20th\"), quote the message where they asked for the trip. Send the same quote on every call for this request. Leave out anything not about the trip, and never include names, contact details, or payment or ID information. The words also help SlickTrip improve its search."
      • changedInput schema / properties / user_request / examples
        Previous value: -[
        -  "cheap nonstop to Lisbon early May",
        -  "family of 8 in Albufeira, 4 nights mid November"
        -]New value: +[
        +  "we're 6 friends from madrid, want somewhere cheap and fun in europe dec 20-24, morning flights pls",
        +  "necesito llevar a mi mamá de Calgary a Kolkata a fines de octubre, no puede hacer escala en Estados Unidos"
        +]
    • Changedroute_airlines2 fields changed
      • changedInput schema / properties / destination / description
        Previous value: -"A 3-letter airport code (JFK), or a city code that searches every airport in the city (SlickTrip's 4-letter codes: NYCA New York, LOND London, ROME Rome, TYOA Tokyo). Up to 3 places joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. Unsure of the code: call find_places."New value: +"A 3-letter airport code (JFK), or a city code that searches every airport in the city (SlickTrip's 4-letter codes: NYCA New York, LOND London, ROME Rome, TYOA Tokyo). Up to 3 places joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. When the traveler names a city rather than an airport, send the city (its name or code), not one of its airports: one airport can miss the cheapest or the only flights. Unsure of the code: call find_places."
      • changedInput schema / properties / origin / description
        Previous value: -"A 3-letter airport code (JFK), or a city code that searches every airport in the city (SlickTrip's 4-letter codes: NYCA New York, LOND London, ROME Rome, TYOA Tokyo). Up to 3 places joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. Unsure of the code: call find_places."New value: +"A 3-letter airport code (JFK), or a city code that searches every airport in the city (SlickTrip's 4-letter codes: NYCA New York, LOND London, ROME Rome, TYOA Tokyo). Up to 3 places joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. When the traveler names a city rather than an airport, send the city (its name or code), not one of its airports: one airport can miss the cheapest or the only flights. Unsure of the code: call find_places."
    • Changedsearch_flights10 fields changed
      • changedInput schema / $defs / Leg / properties / destination / description
        Previous value: -"A 3-letter airport code (JFK), or a city code that searches every airport in the city (SlickTrip's 4-letter codes: NYCA New York, LOND London, ROME Rome, TYOA Tokyo). Up to 3 places joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. Unsure of the code: call find_places."New value: +"A 3-letter airport code (JFK), or a city code that searches every airport in the city (SlickTrip's 4-letter codes: NYCA New York, LOND London, ROME Rome, TYOA Tokyo). Up to 3 places joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. When the traveler names a city rather than an airport, send the city (its name or code), not one of its airports: one airport can miss the cheapest or the only flights. Unsure of the code: call find_places."
      • changedInput schema / $defs / Leg / properties / origin / description
        Previous value: -"A 3-letter airport code (JFK), or a city code that searches every airport in the city (SlickTrip's 4-letter codes: NYCA New York, LOND London, ROME Rome, TYOA Tokyo). Up to 3 places joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. Unsure of the code: call find_places."New value: +"A 3-letter airport code (JFK), or a city code that searches every airport in the city (SlickTrip's 4-letter codes: NYCA New York, LOND London, ROME Rome, TYOA Tokyo). Up to 3 places joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. When the traveler names a city rather than an airport, send the city (its name or code), not one of its airports: one airport can miss the cheapest or the only flights. Unsure of the code: call find_places."
      • changedInput schema / properties / destination / description
        Previous value: -"A 3-letter airport code (JFK) or a city code for all its airports (NYCA, LOND, ROME); up to 3 joined with _ (JFK_EWR). A clear place name works too. Unsure of the code: call find_places."New value: +"A 3-letter airport code (JFK) or a city code for all its airports (NYCA, LOND, ROME); up to 3 joined with _ (JFK_EWR). A clear place name works too. When the traveler names a city rather than an airport, send the city (its name or code), not one of its airports: one airport can miss the cheapest or the only flights. Unsure of the code: call find_places."
      • addedInput schema / properties / display
        Added value: +{
        +  "anyOf": [
        +    {
        +      "enum": [
        +        "compact",
        +        "full"
        +      ],
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "compact: one line per option, more options, far fewer tokens; full: every field (what the cards draw). Empty picks for you: compact when the app shows no cards, full when it does.",
        +  "title": "Display"
        +}
      • addedInput schema / properties / lap_infants
        Added value: +{
        +  "default": 0,
        +  "description": "Babies under 2 who will sit on an adult's lap (no seat of their own). Not counted in travelers and not in the quoted fare; the answer says how airlines charge them.",
        +  "maximum": 9,
        +  "minimum": 0,
        +  "title": "Lap Infants",
        +  "type": "integer"
        +}
      • changedInput schema / properties / origin / description
        Previous value: -"A 3-letter airport code (JFK) or a city code for all its airports (NYCA, LOND, ROME); up to 3 joined with _ (JFK_EWR). A clear place name works too. Unsure of the code: call find_places."New value: +"A 3-letter airport code (JFK) or a city code for all its airports (NYCA, LOND, ROME); up to 3 joined with _ (JFK_EWR). A clear place name works too. When the traveler names a city rather than an airport, send the city (its name or code), not one of its airports: one airport can miss the cheapest or the only flights. Unsure of the code: call find_places."
      • changedInput schema / properties / travelers / description
        Previous value: -"Travelers. Fares are quoted for all of them together; one booking holds up to 9 (a larger group gets a suggested split)."New value: +"Travelers who need a seat (adults and children). Fares are quoted for all of them together; one booking holds up to 9 (a larger group gets a suggested split). A baby under 2 on a lap is not a seat and is not counted here."
      • changedInput schema / properties / user_request / anyOf
        Previous value: -[
        -  {
        -    "maxLength": 300,
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maxLength": 500,
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / user_request / description
        Previous value: -"Optional. The traveler's current travel request, briefly, in their own words. Used to interpret this search, suggest a corrected search if it fails, and improve SlickTrip's search. Include only this request; not earlier conversation, names, contact details, or payment or ID information."New value: +"Optional, and it works in the traveler's favor. Quote the traveler's latest message about this trip exactly as they wrote it, in their wording, language and spelling, not a summary. SlickTrip runs its own travel parser on these words: when a search fails or comes back empty, it compares what the traveler said with the arguments sent and returns a corrected search, so you can fix it without asking them again. It has caught Cancun sent as MEX instead of CUN, and travelers dropped from the party. A summary loses exactly the details it checks. If the message only answers a question (\"yes, the 20th\"), quote the message where they asked for the trip. Send the same quote on every call for this request. Leave out anything not about the trip, and never include names, contact details, or payment or ID information. The words also help SlickTrip improve its search."
      • changedInput schema / properties / user_request / examples
        Previous value: -[
        -  "cheap nonstop to Lisbon early May",
        -  "family of 8 in Albufeira, 4 nights mid November"
        -]New value: +[
        +  "we're 6 friends from madrid, want somewhere cheap and fun in europe dec 20-24, morning flights pls",
        +  "necesito llevar a mi mamá de Calgary a Kolkata a fines de octubre, no puede hacer escala en Estados Unidos"
        +]
    • Changedsearch_hotels3 fields changed
      • changedInput schema / properties / user_request / anyOf
        Previous value: -[
        -  {
        -    "maxLength": 300,
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maxLength": 500,
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / user_request / description
        Previous value: -"Optional. The traveler's current travel request, briefly, in their own words. Used to interpret this search, suggest a corrected search if it fails, and improve SlickTrip's search. Include only this request; not earlier conversation, names, contact details, or payment or ID information."New value: +"Optional, and it works in the traveler's favor. Quote the traveler's latest message about this trip exactly as they wrote it, in their wording, language and spelling, not a summary. SlickTrip runs its own travel parser on these words: when a search fails or comes back empty, it compares what the traveler said with the arguments sent and returns a corrected search, so you can fix it without asking them again. It has caught Cancun sent as MEX instead of CUN, and travelers dropped from the party. A summary loses exactly the details it checks. If the message only answers a question (\"yes, the 20th\"), quote the message where they asked for the trip. Send the same quote on every call for this request. Leave out anything not about the trip, and never include names, contact details, or payment or ID information. The words also help SlickTrip improve its search."
      • changedInput schema / properties / user_request / examples
        Previous value: -[
        -  "cheap nonstop to Lisbon early May",
        -  "family of 8 in Albufeira, 4 nights mid November"
        -]New value: +[
        +  "we're 6 friends from madrid, want somewhere cheap and fun in europe dec 20-24, morning flights pls",
        +  "necesito llevar a mi mamá de Calgary a Kolkata a fines de octubre, no puede hacer escala en Estados Unidos"
        +]
    • Changedsearch_return_flights1 field changed
      • addedInput schema / properties / display
        Added value: +{
        +  "anyOf": [
        +    {
        +      "enum": [
        +        "compact",
        +        "full"
        +      ],
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "compact: one line per option, more options, far fewer tokens; full: every field (what the cards draw). Empty picks for you: compact when the app shows no cards, full when it does.",
        +  "title": "Display"
        +}
    • Changedseat_availability5 fields changed
      • changedInput schema / properties / destination / description
        Previous value: -"A 3-letter airport code (JFK), or a city code that searches every airport in the city (SlickTrip's 4-letter codes: NYCA New York, LOND London, ROME Rome, TYOA Tokyo). Up to 3 places joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. Unsure of the code: call find_places."New value: +"A 3-letter airport code (JFK), or a city code that searches every airport in the city (SlickTrip's 4-letter codes: NYCA New York, LOND London, ROME Rome, TYOA Tokyo). Up to 3 places joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. When the traveler names a city rather than an airport, send the city (its name or code), not one of its airports: one airport can miss the cheapest or the only flights. Unsure of the code: call find_places."
      • changedInput schema / properties / origin / description
        Previous value: -"A 3-letter airport code (JFK), or a city code that searches every airport in the city (SlickTrip's 4-letter codes: NYCA New York, LOND London, ROME Rome, TYOA Tokyo). Up to 3 places joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. Unsure of the code: call find_places."New value: +"A 3-letter airport code (JFK), or a city code that searches every airport in the city (SlickTrip's 4-letter codes: NYCA New York, LOND London, ROME Rome, TYOA Tokyo). Up to 3 places joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. When the traveler names a city rather than an airport, send the city (its name or code), not one of its airports: one airport can miss the cheapest or the only flights. Unsure of the code: call find_places."
      • changedInput schema / properties / user_request / anyOf
        Previous value: -[
        -  {
        -    "maxLength": 300,
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maxLength": 500,
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / user_request / description
        Previous value: -"Optional. The traveler's current travel request, briefly, in their own words. Used to interpret this search, suggest a corrected search if it fails, and improve SlickTrip's search. Include only this request; not earlier conversation, names, contact details, or payment or ID information."New value: +"Optional, and it works in the traveler's favor. Quote the traveler's latest message about this trip exactly as they wrote it, in their wording, language and spelling, not a summary. SlickTrip runs its own travel parser on these words: when a search fails or comes back empty, it compares what the traveler said with the arguments sent and returns a corrected search, so you can fix it without asking them again. It has caught Cancun sent as MEX instead of CUN, and travelers dropped from the party. A summary loses exactly the details it checks. If the message only answers a question (\"yes, the 20th\"), quote the message where they asked for the trip. Send the same quote on every call for this request. Leave out anything not about the trip, and never include names, contact details, or payment or ID information. The words also help SlickTrip improve its search."
      • changedInput schema / properties / user_request / examples
        Previous value: -[
        -  "cheap nonstop to Lisbon early May",
        -  "family of 8 in Albufeira, 4 nights mid November"
        -]New value: +[
        +  "we're 6 friends from madrid, want somewhere cheap and fun in europe dec 20-24, morning flights pls",
        +  "necesito llevar a mi mamá de Calgary a Kolkata a fines de octubre, no puede hacer escala en Estados Unidos"
        +]
    • Changedtrack_seats2 fields changed
      • changedInput schema / properties / destination / description
        Previous value: -"A 3-letter airport code (JFK), or a city code that searches every airport in the city (SlickTrip's 4-letter codes: NYCA New York, LOND London, ROME Rome, TYOA Tokyo). Up to 3 places joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. Unsure of the code: call find_places."New value: +"A 3-letter airport code (JFK), or a city code that searches every airport in the city (SlickTrip's 4-letter codes: NYCA New York, LOND London, ROME Rome, TYOA Tokyo). Up to 3 places joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. When the traveler names a city rather than an airport, send the city (its name or code), not one of its airports: one airport can miss the cheapest or the only flights. Unsure of the code: call find_places."
      • changedInput schema / properties / origin / description
        Previous value: -"A 3-letter airport code (JFK), or a city code that searches every airport in the city (SlickTrip's 4-letter codes: NYCA New York, LOND London, ROME Rome, TYOA Tokyo). Up to 3 places joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. Unsure of the code: call find_places."New value: +"A 3-letter airport code (JFK), or a city code that searches every airport in the city (SlickTrip's 4-letter codes: NYCA New York, LOND London, ROME Rome, TYOA Tokyo). Up to 3 places joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. When the traveler names a city rather than an airport, send the city (its name or code), not one of its airports: one airport can miss the cheapest or the only flights. Unsure of the code: call find_places."
  7. 12 tool updates
    • Changedadd_flight_bucket_list4 fields changed
      • changedInput schema / properties / destination / description
        Previous value: -"A 3-letter airport code (JFK), or a city code that searches every airport in the city (NYC, LON, ROM, TYO). Up to 3 airports joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. Unsure of the code: call find_places."New value: +"A 3-letter airport code (JFK), or a city code that searches every airport in the city (SlickTrip's 4-letter codes: NYCA New York, LOND London, ROME Rome, TYOA Tokyo). Up to 3 places joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. Unsure of the code: call find_places."
      • changedInput schema / properties / destination / examples
        Previous value: -[
        -  "JFK",
        -  "ROM",
        -  "JFK_EWR"
        -]New value: +[
        +  "JFK",
        +  "NYCA",
        +  "JFK_EWR"
        +]
      • changedInput schema / properties / origin / description
        Previous value: -"A 3-letter airport code (JFK), or a city code that searches every airport in the city (NYC, LON, ROM, TYO). Up to 3 airports joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. Unsure of the code: call find_places."New value: +"A 3-letter airport code (JFK), or a city code that searches every airport in the city (SlickTrip's 4-letter codes: NYCA New York, LOND London, ROME Rome, TYOA Tokyo). Up to 3 places joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. Unsure of the code: call find_places."
      • changedInput schema / properties / origin / examples
        Previous value: -[
        -  "JFK",
        -  "ROM",
        -  "JFK_EWR"
        -]New value: +[
        +  "JFK",
        +  "NYCA",
        +  "JFK_EWR"
        +]
    • Changedflight_lookup4 fields changed
      • changedInput schema / properties / destination / description
        Previous value: -"A 3-letter airport code (JFK), or a city code that searches every airport in the city (NYC, LON, ROM, TYO). Up to 3 airports joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. Unsure of the code: call find_places."New value: +"A 3-letter airport code (JFK), or a city code that searches every airport in the city (SlickTrip's 4-letter codes: NYCA New York, LOND London, ROME Rome, TYOA Tokyo). Up to 3 places joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. Unsure of the code: call find_places."
      • changedInput schema / properties / destination / examples
        Previous value: -[
        -  "JFK",
        -  "ROM",
        -  "JFK_EWR"
        -]New value: +[
        +  "JFK",
        +  "NYCA",
        +  "JFK_EWR"
        +]
      • changedInput schema / properties / origin / description
        Previous value: -"A 3-letter airport code (JFK), or a city code that searches every airport in the city (NYC, LON, ROM, TYO). Up to 3 airports joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. Unsure of the code: call find_places."New value: +"A 3-letter airport code (JFK), or a city code that searches every airport in the city (SlickTrip's 4-letter codes: NYCA New York, LOND London, ROME Rome, TYOA Tokyo). Up to 3 places joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. Unsure of the code: call find_places."
      • changedInput schema / properties / origin / examples
        Previous value: -[
        -  "JFK",
        -  "ROM",
        -  "JFK_EWR"
        -]New value: +[
        +  "JFK",
        +  "NYCA",
        +  "JFK_EWR"
        +]
    • Changedhandoff_link8 fields changed
      • changedInput schema / $defs / Leg / properties / destination / description
        Previous value: -"A 3-letter airport code (JFK), or a city code that searches every airport in the city (NYC, LON, ROM, TYO). Up to 3 airports joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. Unsure of the code: call find_places."New value: +"A 3-letter airport code (JFK), or a city code that searches every airport in the city (SlickTrip's 4-letter codes: NYCA New York, LOND London, ROME Rome, TYOA Tokyo). Up to 3 places joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. Unsure of the code: call find_places."
      • changedInput schema / $defs / Leg / properties / destination / examples
        Previous value: -[
        -  "JFK",
        -  "ROM",
        -  "JFK_EWR"
        -]New value: +[
        +  "JFK",
        +  "NYCA",
        +  "JFK_EWR"
        +]
      • changedInput schema / $defs / Leg / properties / origin / description
        Previous value: -"A 3-letter airport code (JFK), or a city code that searches every airport in the city (NYC, LON, ROM, TYO). Up to 3 airports joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. Unsure of the code: call find_places."New value: +"A 3-letter airport code (JFK), or a city code that searches every airport in the city (SlickTrip's 4-letter codes: NYCA New York, LOND London, ROME Rome, TYOA Tokyo). Up to 3 places joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. Unsure of the code: call find_places."
      • changedInput schema / $defs / Leg / properties / origin / examples
        Previous value: -[
        -  "JFK",
        -  "ROM",
        -  "JFK_EWR"
        -]New value: +[
        +  "JFK",
        +  "NYCA",
        +  "JFK_EWR"
        +]
      • changedInput schema / properties / destination / description
        Previous value: -"A 3-letter airport code (JFK) or a city code for all its airports (NYC, LON, ROM); up to 3 joined with _ (JFK_EWR). A clear place name works too. Unsure of the code: call find_places."New value: +"A 3-letter airport code (JFK) or a city code for all its airports (NYCA, LOND, ROME); up to 3 joined with _ (JFK_EWR). A clear place name works too. Unsure of the code: call find_places."
      • changedInput schema / properties / destination / examples
        Previous value: -[
        -  "JFK",
        -  "ROM",
        -  "JFK_EWR"
        -]New value: +[
        +  "JFK",
        +  "NYCA",
        +  "JFK_EWR"
        +]
      • changedInput schema / properties / origin / description
        Previous value: -"A 3-letter airport code (JFK) or a city code for all its airports (NYC, LON, ROM); up to 3 joined with _ (JFK_EWR). A clear place name works too. Unsure of the code: call find_places."New value: +"A 3-letter airport code (JFK) or a city code for all its airports (NYCA, LOND, ROME); up to 3 joined with _ (JFK_EWR). A clear place name works too. Unsure of the code: call find_places."
      • changedInput schema / properties / origin / examples
        Previous value: -[
        -  "JFK",
        -  "ROM",
        -  "JFK_EWR"
        -]New value: +[
        +  "JFK",
        +  "NYCA",
        +  "JFK_EWR"
        +]
    • Changedprice_calendar4 fields changed
      • changedInput schema / properties / destination / description
        Previous value: -"A 3-letter airport code (JFK), or a city code that searches every airport in the city (NYC, LON, ROM, TYO). Up to 3 airports joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. Unsure of the code: call find_places."New value: +"A 3-letter airport code (JFK), or a city code that searches every airport in the city (SlickTrip's 4-letter codes: NYCA New York, LOND London, ROME Rome, TYOA Tokyo). Up to 3 places joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. Unsure of the code: call find_places."
      • changedInput schema / properties / destination / examples
        Previous value: -[
        -  "JFK",
        -  "ROM",
        -  "JFK_EWR"
        -]New value: +[
        +  "JFK",
        +  "NYCA",
        +  "JFK_EWR"
        +]
      • changedInput schema / properties / origin / description
        Previous value: -"A 3-letter airport code (JFK), or a city code that searches every airport in the city (NYC, LON, ROM, TYO). Up to 3 airports joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. Unsure of the code: call find_places."New value: +"A 3-letter airport code (JFK), or a city code that searches every airport in the city (SlickTrip's 4-letter codes: NYCA New York, LOND London, ROME Rome, TYOA Tokyo). Up to 3 places joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. Unsure of the code: call find_places."
      • changedInput schema / properties / origin / examples
        Previous value: -[
        -  "JFK",
        -  "ROM",
        -  "JFK_EWR"
        -]New value: +[
        +  "JFK",
        +  "NYCA",
        +  "JFK_EWR"
        +]
    • Changedroute_airlines4 fields changed
      • changedInput schema / properties / destination / description
        Previous value: -"A 3-letter airport code (JFK), or a city code that searches every airport in the city (NYC, LON, ROM, TYO). Up to 3 airports joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. Unsure of the code: call find_places."New value: +"A 3-letter airport code (JFK), or a city code that searches every airport in the city (SlickTrip's 4-letter codes: NYCA New York, LOND London, ROME Rome, TYOA Tokyo). Up to 3 places joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. Unsure of the code: call find_places."
      • changedInput schema / properties / destination / examples
        Previous value: -[
        -  "JFK",
        -  "ROM",
        -  "JFK_EWR"
        -]New value: +[
        +  "JFK",
        +  "NYCA",
        +  "JFK_EWR"
        +]
      • changedInput schema / properties / origin / description
        Previous value: -"A 3-letter airport code (JFK), or a city code that searches every airport in the city (NYC, LON, ROM, TYO). Up to 3 airports joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. Unsure of the code: call find_places."New value: +"A 3-letter airport code (JFK), or a city code that searches every airport in the city (SlickTrip's 4-letter codes: NYCA New York, LOND London, ROME Rome, TYOA Tokyo). Up to 3 places joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. Unsure of the code: call find_places."
      • changedInput schema / properties / origin / examples
        Previous value: -[
        -  "JFK",
        -  "ROM",
        -  "JFK_EWR"
        -]New value: +[
        +  "JFK",
        +  "NYCA",
        +  "JFK_EWR"
        +]
    • Changedsearch_flights8 fields changed
      • changedInput schema / $defs / Leg / properties / destination / description
        Previous value: -"A 3-letter airport code (JFK), or a city code that searches every airport in the city (NYC, LON, ROM, TYO). Up to 3 airports joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. Unsure of the code: call find_places."New value: +"A 3-letter airport code (JFK), or a city code that searches every airport in the city (SlickTrip's 4-letter codes: NYCA New York, LOND London, ROME Rome, TYOA Tokyo). Up to 3 places joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. Unsure of the code: call find_places."
      • changedInput schema / $defs / Leg / properties / destination / examples
        Previous value: -[
        -  "JFK",
        -  "ROM",
        -  "JFK_EWR"
        -]New value: +[
        +  "JFK",
        +  "NYCA",
        +  "JFK_EWR"
        +]
      • changedInput schema / $defs / Leg / properties / origin / description
        Previous value: -"A 3-letter airport code (JFK), or a city code that searches every airport in the city (NYC, LON, ROM, TYO). Up to 3 airports joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. Unsure of the code: call find_places."New value: +"A 3-letter airport code (JFK), or a city code that searches every airport in the city (SlickTrip's 4-letter codes: NYCA New York, LOND London, ROME Rome, TYOA Tokyo). Up to 3 places joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. Unsure of the code: call find_places."
      • changedInput schema / $defs / Leg / properties / origin / examples
        Previous value: -[
        -  "JFK",
        -  "ROM",
        -  "JFK_EWR"
        -]New value: +[
        +  "JFK",
        +  "NYCA",
        +  "JFK_EWR"
        +]
      • changedInput schema / properties / destination / description
        Previous value: -"A 3-letter airport code (JFK) or a city code for all its airports (NYC, LON, ROM); up to 3 joined with _ (JFK_EWR). A clear place name works too. Unsure of the code: call find_places."New value: +"A 3-letter airport code (JFK) or a city code for all its airports (NYCA, LOND, ROME); up to 3 joined with _ (JFK_EWR). A clear place name works too. Unsure of the code: call find_places."
      • changedInput schema / properties / destination / examples
        Previous value: -[
        -  "JFK",
        -  "ROM",
        -  "JFK_EWR"
        -]New value: +[
        +  "JFK",
        +  "NYCA",
        +  "JFK_EWR"
        +]
      • changedInput schema / properties / origin / description
        Previous value: -"A 3-letter airport code (JFK) or a city code for all its airports (NYC, LON, ROM); up to 3 joined with _ (JFK_EWR). A clear place name works too. Unsure of the code: call find_places."New value: +"A 3-letter airport code (JFK) or a city code for all its airports (NYCA, LOND, ROME); up to 3 joined with _ (JFK_EWR). A clear place name works too. Unsure of the code: call find_places."
      • changedInput schema / properties / origin / examples
        Previous value: -[
        -  "JFK",
        -  "ROM",
        -  "JFK_EWR"
        -]New value: +[
        +  "JFK",
        +  "NYCA",
        +  "JFK_EWR"
        +]
    • Changedseat_availability4 fields changed
      • changedInput schema / properties / destination / description
        Previous value: -"A 3-letter airport code (JFK), or a city code that searches every airport in the city (NYC, LON, ROM, TYO). Up to 3 airports joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. Unsure of the code: call find_places."New value: +"A 3-letter airport code (JFK), or a city code that searches every airport in the city (SlickTrip's 4-letter codes: NYCA New York, LOND London, ROME Rome, TYOA Tokyo). Up to 3 places joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. Unsure of the code: call find_places."
      • changedInput schema / properties / destination / examples
        Previous value: -[
        -  "JFK",
        -  "ROM",
        -  "JFK_EWR"
        -]New value: +[
        +  "JFK",
        +  "NYCA",
        +  "JFK_EWR"
        +]
      • changedInput schema / properties / origin / description
        Previous value: -"A 3-letter airport code (JFK), or a city code that searches every airport in the city (NYC, LON, ROM, TYO). Up to 3 airports joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. Unsure of the code: call find_places."New value: +"A 3-letter airport code (JFK), or a city code that searches every airport in the city (SlickTrip's 4-letter codes: NYCA New York, LOND London, ROME Rome, TYOA Tokyo). Up to 3 places joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. Unsure of the code: call find_places."
      • changedInput schema / properties / origin / examples
        Previous value: -[
        -  "JFK",
        -  "ROM",
        -  "JFK_EWR"
        -]New value: +[
        +  "JFK",
        +  "NYCA",
        +  "JFK_EWR"
        +]
    • Changedtrack_flight1 field changed
      • changedInput schema / properties / target_price_usd / description
        Previous value: -"Alert when the price goes under this, USD. Replaces alert_rule."New value: +"Alert when the price goes under this, USD. Replaces alert_rule. It is the TOTAL: the whole trip for all travelers on a flight, the whole stay on a hotel."
    • Changedtrack_hotel1 field changed
      • changedInput schema / properties / target_price_usd / description
        Previous value: -"Alert when the price goes under this, USD. Replaces alert_rule."New value: +"Alert when the price goes under this, USD. Replaces alert_rule. It is the TOTAL: the whole trip for all travelers on a flight, the whole stay on a hotel."
    • Changedtrack_seats4 fields changed
      • changedInput schema / properties / destination / description
        Previous value: -"A 3-letter airport code (JFK), or a city code that searches every airport in the city (NYC, LON, ROM, TYO). Up to 3 airports joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. Unsure of the code: call find_places."New value: +"A 3-letter airport code (JFK), or a city code that searches every airport in the city (SlickTrip's 4-letter codes: NYCA New York, LOND London, ROME Rome, TYOA Tokyo). Up to 3 places joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. Unsure of the code: call find_places."
      • changedInput schema / properties / destination / examples
        Previous value: -[
        -  "JFK",
        -  "ROM",
        -  "JFK_EWR"
        -]New value: +[
        +  "JFK",
        +  "NYCA",
        +  "JFK_EWR"
        +]
      • changedInput schema / properties / origin / description
        Previous value: -"A 3-letter airport code (JFK), or a city code that searches every airport in the city (NYC, LON, ROM, TYO). Up to 3 airports joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. Unsure of the code: call find_places."New value: +"A 3-letter airport code (JFK), or a city code that searches every airport in the city (SlickTrip's 4-letter codes: NYCA New York, LOND London, ROME Rome, TYOA Tokyo). Up to 3 places joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. Unsure of the code: call find_places."
      • changedInput schema / properties / origin / examples
        Previous value: -[
        -  "JFK",
        -  "ROM",
        -  "JFK_EWR"
        -]New value: +[
        +  "JFK",
        +  "NYCA",
        +  "JFK_EWR"
        +]
    • Changedupdate_flight_tracking1 field changed
      • changedInput schema / properties / target_price_usd / description
        Previous value: -"Alert when the price goes under this, USD. Replaces alert_rule."New value: +"Alert when the price goes under this, USD. Replaces alert_rule. It is the TOTAL: the whole trip for all travelers on a flight, the whole stay on a hotel."
    • Changedupdate_hotel_tracking1 field changed
      • changedInput schema / properties / target_price_usd / description
        Previous value: -"Alert when the price goes under this, USD. Replaces alert_rule."New value: +"Alert when the price goes under this, USD. Replaces alert_rule. It is the TOTAL: the whole trip for all travelers on a flight, the whole stay on a hotel."
  8. 35 tool updates
    • First observedadd_flight_bucket_list
    • First observedadd_hotel_bucket_list
    • First observedbooking_options
    • First observedfind_places
    • First observedflight_lookup
    • First observedget_account
    • First observedhandoff_link
    • First observedhotel_booking_options
    • First observedhotel_details
    • First observedhotel_price_calendar
    • First observedlist_bucket_lists
    • First observedlist_tracked_flights
    • First observedlist_tracked_hotels
    • First observedlist_tracked_seats
    • First observedprice_calendar
    • First observedrecent_deals
    • First observedremove_bucket_list
    • First observedroute_airlines
    • First observedsearch_flights
    • First observedsearch_hotels
    • First observedsearch_return_flights
    • First observedseat_availability
    • First observedshare_link
    • First observedshared_trip
    • First observedstop_tracking_flight
    • First observedstop_tracking_hotel
    • First observedstop_tracking_seats
    • First observedtrack_flight
    • First observedtrack_hotel
    • First observedtrack_seats
    • First observedupdate_account
    • First observedupdate_bucket_list
    • First observedupdate_flight_tracking
    • First observedupdate_hotel_tracking
    • First observedupdate_seat_tracking

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    C
    maintenance
    Enables finding and comparing cash and award flights, with seat maps and trip planning, ranking options by user-defined per-mile valuations.
    6
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Enables real-time flight fare searches across date ranges and multiple destinations, with historical price insights and booking links. Provides one-way and round-trip search tools through MCP.
    4
    1
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources