SlickTrip
Server Details
Live flight, hotel and seat prices, cheapest-day calendars, and price-drop alerts.
- Status
- Healthy
- Uptime
- 100.0% over 26 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 38 tools
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.
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.
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.
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 toolsadd_flight_bucket_listAdd a flight bucket listAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | A 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. | |
| cabin | No | Cabin class. | economy |
| months | No | 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). | |
| origin | Yes | 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. | |
| airlines | No | Only these marketing carriers, as IATA codes or names. | |
| end_date | No | Last travel date, YYYY-MM-DD. | |
| max_stops | No | Most stops allowed: 0 nonstop, 1, or 2. | |
| travelers | No | 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. | |
| trip_type | No | Round trip or one way. | roundtrip |
| max_nights | No | Longest trip, nights (round trips). | |
| min_nights | No | Shortest trip, nights (round trips). | |
| start_date | No | First travel date, YYYY-MM-DD. Give with end_date instead of months. | |
| depart_days | No | Only depart on these weekdays. | |
| destination | Yes | 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. | |
| return_days | No | Only return on these weekdays. | |
| arrive_after | No | HH:MM, local time at that airport. | |
| checked_bags | No | 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. | |
| depart_after | No | HH:MM, local time at that airport. | |
| user_request | No | 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. | |
| arrive_before | No | HH:MM, local time at that airport. | |
| carry_on_bags | No | 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. | |
| depart_before | No | HH:MM, local time at that airport. | |
| max_price_usd | No | The price bar, USD per traveler (or the trip total when price_is_total). | |
| price_is_total | No | max_price_usd is the total for all travelers. | |
| lower_emissions | No | Only itineraries with lower emissions than is typical for the route. | |
| exclude_airlines | No | 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'. | |
| max_layover_hours | No | Longest layover allowed at every connection, in hours (half hours allowed): for 'layovers no longer than 5 hours'. | |
| min_layover_hours | No | Shortest layover allowed at every connection, in hours (half hours allowed): for 'at least 2 hours to connect'. | |
| max_duration_hours | No | Longest itinerary to show, in hours. | |
| connecting_airports | No | Only itineraries that change planes at these airports (codes or city codes), nonstops included: for 'US connections only' name the hubs. | |
| exclude_connecting_airports | No | Leave out itineraries that change planes at these airports (codes or city codes). |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | On an error: a machine-readable kind, e.g. unknown_place |
| kind | No | Always "flight" |
| name | No | Custom name if given |
| note | No | First results timing |
| field | No | On unknown_place: which argument (origin, destination, ...) |
| route | No | origin, destination, names, destination_image, trip_type, cabin, travelers |
| alerts | No | Plain-words description of alerts |
| months | No | Month names watched |
| nights | No | [min_nights, max_nights] for round trips |
| status | No | watching | error | sign_in_required |
| window | No | {start, end} date window |
| message | No | Error or sign-in message from the server wrapper |
| airlines | No | IATA carrier codes |
| channels | No | Alert channels on the record: email, text (booleans) |
| bucket_id | No | The new bucket list record id |
| max_stops | No | Stop limit 0-2 |
| saved_url | No | slicktrip.com saved-buckets page link |
| handoff_url | No | Bucket-list autosave link on slicktrip.com |
| suggestions | No | On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country |
| display_name | No | Name as the card shows it |
| max_price_usd | No | Price bar |
| places_assumed | No | Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler |
TDQS
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.
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.
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.
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.
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.
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 listAIdempotentInspect
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).
| Name | Required | Description | Default |
|---|---|---|---|
| adults | No | Adults. A hotel room prices up to 6 guests in all; vacation rentals up to 16. | |
| months | No | 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). | |
| nights | Yes | Nights, 1-30. | |
| end_date | No | Latest check-in, YYYY-MM-DD. | |
| location | Yes | A city, area or landmark. | |
| min_stars | No | Lowest star class to show, 1-5. | |
| hotel_name | No | Pin one exact hotel instead of the whole area. | |
| start_date | No | Earliest check-in, YYYY-MM-DD. Give with end_date instead of months. | |
| user_request | No | 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. | |
| check_in_days | No | Only check in on these weekdays. | |
| max_price_per_night | No | The price bar, USD per night. |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | On an error: a machine-readable kind, e.g. unknown_place |
| kind | No | Always "hotel" |
| note | No | First results timing |
| stay | No | location, hotel_name, nights, adults |
| field | No | On unknown_place: which argument (origin, destination, ...) |
| alerts | No | Plain-words description of alerts |
| months | No | Month names watched |
| status | No | watching | error | sign_in_required |
| window | No | {start, end} date window |
| message | No | Error or sign-in message from the server wrapper |
| channels | No | Alert channels on the record: email, text (booleans) |
| bucket_id | No | The new bucket list record id |
| min_stars | No | Minimum star rating |
| saved_url | No | slicktrip.com saved hotel-buckets link |
| suggestions | No | On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country |
| places_assumed | No | Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler |
| max_price_per_night_usd | No | Nightly price bar |
TDQS
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.
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.
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.
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.
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.
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 itineraryARead-onlyIdempotentInspect
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).
| Name | Required | Description | Default |
|---|---|---|---|
| itinerary_id | Yes | A complete itinerary_id from search_flights (one way) or search_return_flights (round trip). |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | On an error: a machine-readable kind, e.g. unknown_place |
| note | No | Links open seller checkout; last a day |
| field | No | On unknown_place: which argument (origin, destination, ...) |
| status | No | ok | book_on_site | needs_return | unavailable | error | sign_in_required |
| message | No | Explanation for non-ok statuses or wrapper errors |
| sellers | No | Items: seller, price_usd, airline_direct, separate_tickets, book_url |
| outbound | No | On needs_return: the outbound leg (airlines, segments, layovers) the answer is about |
| search_key | No | The search key of the itinerary |
| search_url | No | slicktrip.com search page link |
| suggestions | No | On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country |
| itinerary_id | No | The itinerary the sellers are for |
| flight_numbers | No | Strings: flight numbers of every segment |
| places_assumed | No | Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler |
| trip_total_usd | No | The itinerary's searched total price |
TDQS
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.
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.
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.
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.
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.
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 watchARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| since_hours | No | How far back to look, in hours: 24 for a daily check (the default), up to 168. |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | On an error: a machine-readable kind, e.g. unknown_place |
| note | No | How to report the check |
| field | No | On unknown_place: which argument (origin, destination, ...) |
| moved | No | Watches that moved or sent an alert: watch, kind, title, now_usd, was_usd, change_usd, lowest_seen, alerts_sent, price_check |
| status | No | ok | no_watches, or error | sign_in_required |
| steady | No | Watches with no move: watch, kind, title, now_usd |
| message | No | Error or sign-in message from the server wrapper |
| summary | No | Counts: watches, dropped, rose, new_low, alerts_sent, off_sale |
| since_hours | No | The window checked, in hours |
| suggestions | No | On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country |
| places_assumed | No | Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and closed-world, so 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.
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.
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.
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.
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.
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 goARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| cabin | No | Cabin class. | economy |
| abroad | No | Only places outside the origin's country, when the traveler says out of the country, abroad or international. | |
| origin | Yes | 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. | |
| nonstop | No | Nonstop flights only. | |
| travelers | No | 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. | |
| trip_type | No | Round trip or one way. | roundtrip |
| depart_date | No | YYYY-MM-DD: price every place on this day (the traveler's own). Empty: each on its own cheapest dates. | |
| max_results | No | How many destinations to list. | |
| return_date | No | YYYY-MM-DD, with depart_date, for a round trip. | |
| user_request | No | 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. | |
| max_price_usd | No | Only fares at or under this total, in US dollars. | |
| country_or_region | No | Only destinations in this country or region, as the traveler said it. |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | On an error: a machine-readable kind, e.g. unknown_place |
| note | No | How to read and use the list |
| field | No | On unknown_place: which argument (origin, destination, ...) |
| search | No | origin, trip_type, travelers, cabin, nonstop, country_or_region, max_price_usd |
| status | No | ok | no_data | error | sign_in_required |
| message | No | What went wrong, when status is error |
| suggestions | No | On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country |
| total_found | No | Destinations that fit, before max_results |
| destinations | No | city, country, airport, price_usd (total), per_traveler_usd, depart_date, return_date, airline, stops, duration_minutes, search_url |
| places_assumed | No | Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler |
TDQS
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.
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.
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.
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.
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.
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 codesARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Most matches to return. | |
| query | Yes | A city or airport name, or a code to check. |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | On an error: a machine-readable kind, e.g. unknown_place |
| note | No | How to use the code, or no-match hint |
| field | No | On unknown_place: which argument (origin, destination, ...) |
| places | No | Items: code, name, kind, country, plus airports[] (city) or city (airport) |
| status | No | error | sign_in_required (absent on success) |
| message | No | Error or sign-in message from the server wrapper |
| suggestions | No | On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country |
| places_assumed | No | Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler |
TDQS
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.
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.
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.
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.
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.
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 dayARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| origin | Yes | 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. | |
| display | No | 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. | |
| depart_date | Yes | YYYY-MM-DD. | |
| destination | Yes | 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. | |
| user_request | No | 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. | |
| flight_number | No | Only this flight, like AA100. |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | On an error: a machine-readable kind, e.g. unknown_place |
| note | No | Guidance for the assistant |
| field | No | On unknown_place: which argument (origin, destination, ...) |
| search | No | origin, destination, depart_date with names |
| status | No | ok | no_data | error | sign_in_required |
| flights | No | Scheduled flights: flight_numbers, aircraft, airlines, stops, duration_minutes, segments |
| message | No | Error or sign-in text |
| suggestions | No | On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country |
| places_assumed | No | Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler |
| seat_tracker_url | No | The seat tracker on slicktrip.com |
TDQS
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.
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.
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.
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.
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.
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 accountARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | On an error: a machine-readable kind, e.g. unknown_place |
| name | No | Display name on the account |
| note | No | Text alerts need verified phone, when unverified |
| plan | No | "premium" or "free" |
| No | Signed-in email | |
| field | No | On unknown_place: which argument (origin, destination, ...) |
| status | No | ok | error | sign_in_required |
| message | No | Error or sign-in message from the server wrapper |
| channels | No | email, text, text_available booleans |
| watching | No | Counts: flights, hotels, seats, bucket_lists |
| manage_url | No | slicktrip.com profile page link |
| suggestions | No | On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country |
| member_since | No | Account creation date YYYY-MM-DD |
| places_assumed | No | Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler |
| free_limit_per_type | No | Free-tier tracking cap; null on premium |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description adds genuinely 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.
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.
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.
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.
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.
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.
handoff_linkLink into SlickTripARead-onlyIdempotentInspect
Use when the traveler wants to continue on slicktrip.com, wants to send a flights or hotels search to someone (a bucket_list link saves the list for whoever opens it, so never send one), or the account is not connected: builds a link that lands them fully configured without running a search (a flights search with a track_url that starts tracking on arrival, a bucket list that saves on arrival, a hotel search, or the seat tracker).
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | Which page to land on. | |
| legs | No | Multi-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. | |
| cabin | No | Cabin class; several joined with + to compare them (economy+business). | economy |
| adults | No | Adults. A hotel room prices up to 6 guests in all; vacation rentals up to 16. | |
| months | No | Months to watch, as names or YYYY-MM. Give this OR start_date + end_date. | |
| origin | No | 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. | |
| airlines | No | Only these marketing carriers, as IATA codes or names. | |
| check_in | No | YYYY-MM-DD. | |
| end_date | No | YYYY-MM-DD. | |
| hotel_id | No | hotels: open this one hotel from search_hotels. | |
| location | No | hotels: a city, area, landmark or hotel name. | |
| check_out | No | YYYY-MM-DD. | |
| max_stops | No | Most stops allowed: 0 nonstop, 1, or 2 (2 or more: any number). | |
| min_stars | No | Lowest star class to show, 1-5. | |
| travelers | No | 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. | |
| max_nights | No | Nights, 1-30. | |
| min_nights | No | Nights, 1-30. | |
| start_date | No | YYYY-MM-DD. | |
| depart_date | No | YYYY-MM-DD. A second date joined with _ searches both as flexible dates (2026-11-03_2026-11-04); at most 2 per direction. | |
| destination | No | 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. | |
| return_date | No | YYYY-MM-DD. | |
| children_ages | No | One age per child, 1-17. | |
| flight_number | No | seats: the flight to open in the seat tracker. | |
| max_price_usd | No | bucket_list: the price bar, USD. | |
| flight_numbers | No | flights: the itinerary's flight numbers, connections joined with +; adds a track_url that starts tracking on arrival. | |
| max_price_per_night | No | Highest price per night to show, USD. |
Output Schema
| Name | Required | Description |
|---|---|---|
| url | No | The slicktrip.com landing link |
| code | No | On an error: a machine-readable kind, e.g. unknown_place |
| kind | No | flights | bucket_list | hotels | seats |
| note | No | What the links do on arrival |
| field | No | On unknown_place: which argument (origin, destination, ...) |
| status | No | error | sign_in_required (absent on success) |
| message | No | Error or sign-in message from the server wrapper |
| setup_url | No | seats with flight_number: seat setup page link |
| track_url | No | flights with flight_numbers: autosave tracking link |
| search_key | No | flights/hotels: the search key built |
| prefill_url | No | bucket_list: form pre-filled, not saved |
| suggestions | No | On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country |
| places_assumed | No | Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds useful behavior beyond annotations: the link lands preconfigured without a search, flights links can include a track_url that starts tracking on arrival, and bucket lists save on arrival.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is a single front-loaded sentence with no obvious filler, which is efficient. However, the nested parenthetical about bucket_list links saving the list for whoever opens it and 'so never send one' is ambiguous and makes the routing condition harder to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity, full schema coverage, annotations, and an output schema, the description covers the main link kinds and the key no-search landing behavior adequately. Its main remaining gap is weak differentiation from sharing siblings, not missing operational details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the 26 parameters are already richly documented by the schema itself. The description adds a useful kind-to-page mapping and explains the track_url effect for flights, but it does not add parameter syntax or constraints beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific action: builds a link that lands the traveler fully configured without running a search, and enumerates flights, bucket_list, hotels, and seats variants. It is clear what the tool does, but it does not distinguish itself from sharing-related siblings such as share_link or shared_trip.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use conditions: continuing on slicktrip.com, sending a flights or hotels search, or when the account is not connected. However, it never names share_link/shared_trip as alternatives, and the warning about bucket_list links ('so never send one') is ambiguous, leaving routing among sharing tools unclear.
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 hotelARead-onlyIdempotentInspect
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).
| Name | Required | Description | Default |
|---|---|---|---|
| hotel_id | Yes | The hotel_id from search_hotels. | |
| search_key | Yes | The search_key from search_hotels. |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | On an error: a machine-readable kind, e.g. unknown_place |
| name | No | Hotel name |
| note | No | Links open seller checkout; last a day |
| field | No | On unknown_place: which argument (origin, destination, ...) |
| status | No | ok | unavailable | error | sign_in_required |
| message | No | Explanation for unavailable or wrapper errors |
| sellers | No | Items: seller, total_usd, per_night_usd, hotel_direct, free_cancellation, book_url |
| hotel_id | No | The hotel's property token |
| hotel_url | No | slicktrip.com hotel page link |
| search_key | No | The hotel search key |
| suggestions | No | On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country |
| places_assumed | No | Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler |
TDQS
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.
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.
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.
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.
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.
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 detailsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| hotel_id | Yes | The hotel_id from search_hotels. | |
| search_key | Yes | The search_key from search_hotels. |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | On an error: a machine-readable kind, e.g. unknown_place |
| name | No | Hotel name |
| note | No | Guidance for the assistant |
| stay | No | location, check_in, check_out, adults, children |
| field | No | On unknown_place: which argument (origin, destination, ...) |
| rooms | No | Rooms: name, seller, total_usd, free_cancellation |
| stars | No | Star class |
| images | No | Photo URLs |
| nights | No | Nights in the stay |
| status | No | ok | no_data | error | sign_in_required |
| address | No | Street address |
| message | No | Error or sign-in text |
| reviews | No | Review count |
| sellers | No | Stay total by seller, cheapest first: seller, total_usd, per_night_usd, hotel_direct, free_cancellation |
| hotel_id | No | Hotel id |
| amenities | No | Amenity names |
| hotel_url | No | The hotel on slicktrip.com |
| total_usd | No | Cheapest room stay total |
| search_key | No | The hotel search key |
| description | No | Hotel description |
| suggestions | No | On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country |
| guest_rating | No | Guest rating out of 5 |
| check_in_time | No | Check-in time |
| per_night_usd | No | Cheapest room per night |
| check_out_time | No | Check-out time |
| places_assumed | No | Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler |
TDQS
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.
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.
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.
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.
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.
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 calendarARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| hotel_id | Yes | A hotel_id from search_hotels. | |
| end_month | No | Last month, as a name or YYYY-MM. Empty means next month. | |
| hotel_name | No | The hotel's name from search_hotels, for the card's title. | |
| start_month | No | First month, as a name or YYYY-MM. Empty means this month. |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | On an error: a machine-readable kind, e.g. unknown_place |
| days | No | Items: check_in, per_night_usd, day_of_week |
| note | No | Per-night semantics and next step |
| field | No | On unknown_place: which argument (origin, destination, ...) |
| months | No | [start_month_name, end_month_name] |
| status | No | ok | no_data | error | sign_in_required |
| message | No | No-data explanation or wrapper error |
| summary | No | priced_days, cheapest_per_night_usd, cheapest_check_in, median_per_night_usd, first_date, last_date |
| hotel_id | No | The hotel property token |
| hotel_name | No | The hotel name as given by the caller |
| suggestions | No | On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country |
| places_assumed | No | Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler |
TDQS
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.
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.
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.
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.
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.
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 listsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | 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. | |
| limit | No | How many to return, newest first, 1-200. |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | On an error: a machine-readable kind, e.g. unknown_place |
| note | No | How to remove; price semantics |
| count | No | Number of bucket lists returned |
| field | No | On unknown_place: which argument (origin, destination, ...) |
| status | No | error | sign_in_required (absent on success) |
| message | No | Error or sign-in message from the server wrapper |
| manage_url | No | slicktrip.com saved-buckets page link |
| suggestions | No | On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country |
| bucket_lists | No | Flight items (bucket_id, kind, route fields, months, window, nights, price, best_deals...) and hotel items (location, nights, adults, months, best_deals...) |
| places_assumed | No | Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler |
TDQS
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.
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.
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.
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.
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.
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 flightsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | How many to return, newest first, 1-200. |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | On an error: a machine-readable kind, e.g. unknown_place |
| note | No | How to stop a tracking |
| count | No | Number of flight trackings on the account |
| field | No | On unknown_place: which argument (origin, destination, ...) |
| status | No | error | sign_in_required (absent on success) |
| message | No | Error or sign-in message from the server wrapper |
| trackings | No | Items: route fields, search_key, alert_preference, alert_method, prices, last_alert_sent, itineraries[], manage_url |
| manage_url | No | slicktrip.com saved-flights page link |
| suggestions | No | On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country |
| places_assumed | No | Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, and closed-world, so the safety profile is covered. The description adds 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.
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.
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.
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.
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.
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 hotelsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | How many to return, newest first, 1-200. |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | On an error: a machine-readable kind, e.g. unknown_place |
| note | No | How to stop a tracking |
| count | No | Number of hotel stays tracked |
| field | No | On unknown_place: which argument (origin, destination, ...) |
| status | No | error | sign_in_required (absent on success) |
| message | No | Error or sign-in message from the server wrapper |
| trackings | No | Items: tracking_id, name, check_in, check_out, adults, children, alert settings, prices, hotels[], manage_url |
| manage_url | No | slicktrip.com saved-hotels page link |
| suggestions | No | On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country |
| places_assumed | No | Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler |
TDQS
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.
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.
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.
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.
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.
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 seatsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | How many to return, newest first, 1-200. |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | On an error: a machine-readable kind, e.g. unknown_place |
| note | No | How to stop a seat alert |
| count | No | Number of seat alerts on the account |
| field | No | On unknown_place: which argument (origin, destination, ...) |
| status | No | error | sign_in_required (absent on success) |
| message | No | Error or sign-in message from the server wrapper |
| trackings | No | Items: tracking_key, flight_number, origin, destination, departure_time, aircraft, cabins, seats_together, tracked_seats, open_now, alert_method, created_at, manage_url |
| manage_url | No | slicktrip.com saved-seats page link |
| suggestions | No | On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country |
| places_assumed | No | Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and closed-world, so 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.
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.
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.
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.
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.
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 calendarARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| cabin | No | Cabin class. | economy |
| month | No | 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. | |
| origin | Yes | 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. | |
| airlines | No | Up to 3 carriers as IATA codes, or one alliance: star alliance, oneworld, skyteam. | |
| depart_to | No | YYYY-MM-DD, the last day the traveler could leave. | |
| max_stops | No | Most stops allowed: 0 nonstop, 1, or 2 (2 or more: any number). | |
| travelers | No | 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. | |
| trip_type | No | Round trip or one way. | roundtrip |
| depart_from | No | 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. | |
| destination | Yes | 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. | |
| lap_infants | No | 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. | |
| arrive_after | No | HH:MM, local time at that airport. | |
| checked_bags | No | 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. | |
| depart_after | No | HH:MM, local time at that airport. | |
| user_request | No | 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. | |
| arrive_before | No | HH:MM, local time at that airport. | |
| carry_on_bags | No | 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. | |
| depart_before | No | HH:MM, local time at that airport. | |
| lower_emissions | No | Only itineraries with lower emissions than is typical for the route. | |
| exclude_airlines | No | 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'. | |
| trip_length_days | No | 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. | |
| max_layover_hours | No | Longest layover allowed at every connection, in hours (half hours allowed): for 'layovers no longer than 5 hours'. | |
| min_layover_hours | No | Shortest layover allowed at every connection, in hours (half hours allowed): for 'at least 2 hours to connect'. | |
| max_duration_hours | No | Longest itinerary to show, in hours. | |
| connecting_airports | No | Only itineraries that change planes at these airports (codes or city codes), nonstops included: for 'US connections only' name the hubs. | |
| exclude_connecting_airports | No | Leave out itineraries that change planes at these airports (codes or city codes). |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | On an error: a machine-readable kind, e.g. unknown_place |
| days | No | Items: depart_date, return_date, price_usd, day_of_week, low_price |
| note | No | Next-step guidance or why no data |
| field | No | On unknown_place: which argument (origin, destination, ...) |
| query | No | The calendar query: origin, destination, cabin, travelers, trip_type, stops, month, airlines |
| status | No | ok | no_data | error | sign_in_required |
| message | No | Error or sign-in message from the server wrapper |
| summary | No | Partner grid summary stats for the window |
| search_url | No | slicktrip.com flights tab link |
| suggestions | No | On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country |
| places_assumed | No | Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler |
TDQS
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.
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.
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.
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.
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.
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 dealsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | On an error: a machine-readable kind, e.g. unknown_place |
| note | No | These are real alerts sent recently |
| site | No | slicktrip.com homepage link with attribution |
| field | No | On unknown_place: which argument (origin, destination, ...) |
| alerts | No | Category name to array of recent alert items (route, price, prevPrice, dates, url, ...) |
| status | No | error | sign_in_required (absent on success) |
| message | No | Error or sign-in message from the server wrapper |
| suggestions | No | On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country |
| places_assumed | No | Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler |
TDQS
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.
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.
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.
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.
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.
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 listADestructiveIdempotentInspect
Use to stop a bucket list (bucket_id from list_bucket_lists). Cannot be undone; confirm first.
| Name | Required | Description | Default |
|---|---|---|---|
| bucket_id | Yes | The list's bucket_id from list_bucket_lists. |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | On an error: a machine-readable kind, e.g. unknown_place |
| kind | No | "flight" or "hotel" |
| name | No | The bucket's name |
| stay | No | Hotel only: location, hotel_name, nights, adults |
| field | No | On unknown_place: which argument (origin, destination, ...) |
| route | No | Flight only: origin, destination, names, trip_type, cabin, travelers |
| status | No | removed | error | sign_in_required |
| message | No | Error or sign-in message from the server wrapper |
| bucket_id | No | The removed bucket list id |
| manage_url | No | slicktrip.com saved buckets page link |
| suggestions | No | On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country |
| display_name | No | Name as the card shows it |
| places_assumed | No | Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler |
TDQS
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.
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.
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.
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.
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.
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 routeARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| origin | Yes | 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. | |
| destination | Yes | 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | On an error: a machine-readable kind, e.g. unknown_place |
| note | No | Guidance for the assistant |
| field | No | On unknown_place: which argument (origin, destination, ...) |
| origin | No | Origin code |
| status | No | ok | no_data | error | sign_in_required |
| message | No | Error or sign-in text |
| airlines | No | code, name, nonstop |
| destination | No | Destination code |
| suggestions | No | On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country |
| places_assumed | No | Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler |
TDQS
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.
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.
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.
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.
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.
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 flightsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| legs | No | Multi-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. | |
| sort | No | Order of results. | price |
| cabin | No | Cabin class. | economy |
| query | No | The traveler's request in their own words, used to fill any field left empty. | |
| origin | No | 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. | |
| display | No | 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. | |
| airlines | No | Only these marketing carriers, as IATA codes or names. | |
| max_stops | No | Most stops allowed: 0 nonstop, 1, or 2 (2 or more: any number). | |
| travelers | No | 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. | |
| depart_date | No | YYYY-MM-DD. A second date joined with _ searches both as flexible dates (2026-11-03_2026-11-04); at most 2 per direction. | |
| destination | No | 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. | |
| lap_infants | No | 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. | |
| max_results | No | How many results to return, 1-50. | |
| return_date | No | YYYY-MM-DD for a round trip; empty for one way. | |
| arrive_after | No | HH:MM, local time at that airport. | |
| checked_bags | No | 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. | |
| depart_after | No | HH:MM, local time at that airport. | |
| user_request | No | 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. | |
| arrive_before | No | HH:MM, local time at that airport. | |
| carry_on_bags | No | Carry-on bags per traveler (0 or 1). The prices then include the bag fees, shown as price_with_bags next to the fare. | |
| depart_before | No | HH:MM, local time at that airport. | |
| max_price_usd | No | Highest 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_emissions | No | Only itineraries with lower emissions than is typical for the route. | |
| exclude_airlines | No | 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'. | |
| max_layover_hours | No | Longest layover allowed at every connection, in hours (half hours allowed): for 'layovers no longer than 5 hours'. | |
| min_layover_hours | No | Shortest layover allowed at every connection, in hours (half hours allowed): for 'at least 2 hours to connect'. | |
| max_duration_hours | No | Longest itinerary to show, in hours. | |
| connecting_airports | No | Only itineraries that change planes at these airports (codes or city codes), nonstops included: for 'US connections only' name the hubs. | |
| no_overnight_layovers | No | Leave out itineraries with an overnight layover: for 'no overnight at the transit airport'. | |
| exclude_connecting_airports | No | Leave out itineraries that change planes at these airports (codes or city codes). |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | On an error: a machine-readable kind, e.g. unknown_place |
| note | No | Guidance on trip type or why empty |
| field | No | On unknown_place: which argument (origin, destination, ...) |
| counts | No | priced, matching_filters, returned integers |
| search | No | Route dict: origin, destination, names, destination_image, cabin, travelers, dates, trip_type, legs (multi-city), search_key, served_from, retrieved_at |
| status | No | ok | no_data | error | sign_in_required |
| filters | No | Filters as the caller gave them (max_stops, airlines, max_price_usd, ...) |
| message | No | Error or sign-in message from the server wrapper |
| highlights | No | The spread over every matching fare: cheapest, cheapest_nonstop, fastest, earliest, latest; each with itinerary_id, price, airlines, stops, duration_minutes, departs_at |
| search_url | No | slicktrip.com search page link with attribution |
| itineraries | No | Items: itinerary_id, price {total_usd, per_traveler_usd}, outbound leg, needs_leg, track_url, optional depart_date + search_key |
| searched_as | No | What the search assumed: trip type, travelers, cabin |
| suggestions | No | On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country |
| places_assumed | No | Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler |
TDQS
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.
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.
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.
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.
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.
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 hotelsARead-onlyIdempotentInspect
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).
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Cheapest first, or best rated first. | price |
| brand | No | Only stays of this brand or chain, matched in the hotel's name. Put the city in location, the brand here. | |
| adults | No | Adults. A hotel room prices up to 6 guests in all; vacation rentals up to 16. | |
| check_in | Yes | YYYY-MM-DD. | |
| location | Yes | A city, neighbourhood, landmark or hotel name. | |
| amenities | No | Hotels: 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_out | Yes | YYYY-MM-DD. | |
| min_stars | No | Lowest star class to show, 1-5. | |
| max_results | No | How many results to return, 1-50. | |
| min_bedrooms | No | 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. | |
| user_request | No | 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. | |
| children_ages | No | One age per child, 1-17. | |
| property_type | No | Hotels, or vacation rentals. | hotel |
| property_kinds | No | Hotels: 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_rating | No | 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. | |
| free_cancellation | No | Only stays with free cancellation. | |
| max_price_per_night | No | Highest price per night to show, USD. | |
| min_price_per_night | No | Lowest price per night to show, USD. |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | On an error: a machine-readable kind, e.g. unknown_place |
| note | No | Prices are whole-stay; how to track |
| field | No | On unknown_place: which argument (origin, destination, ...) |
| hotels | No | 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 |
| search | No | location, check_in, check_out, adults, children_ages, nights, search_key |
| status | No | ok | no_data | error | sign_in_required |
| filters | No | Applied filters: property_type, min_stars, free_cancellation, min_bedrooms, advanced, sort |
| message | No | Error or sign-in message from the server wrapper |
| highlights | No | The 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_url | No | slicktrip.com hotels search link |
| searched_as | No | What the search assumed: guests, hotels or vacation rentals |
| suggestions | No | On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country |
| total_found | No | Total hotels found before max_results cut |
| places_assumed | No | Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler |
TDQS
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.
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.
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.
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.
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.
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 flightsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Order of results. | price |
| display | No | 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. | |
| airlines | No | Only these marketing carriers, as IATA codes or names. | |
| max_stops | No | Most stops allowed: 0 nonstop, 1, or 2 (2 or more: any number). | |
| max_results | No | How many results to return, 1-50. | |
| arrive_after | No | HH:MM, local time at that airport. | |
| checked_bags | No | 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. | |
| depart_after | No | HH:MM, local time at that airport. | |
| itinerary_id | Yes | An outbound (or partial multi-city) itinerary_id from search_flights or a previous call. | |
| arrive_before | No | HH:MM, local time at that airport. | |
| carry_on_bags | No | Carry-on bags per traveler (0 or 1). The prices then include the bag fees, shown as price_with_bags next to the fare. | |
| depart_before | No | HH:MM, local time at that airport. | |
| max_price_usd | No | Highest 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_emissions | No | Only itineraries with lower emissions than is typical for the route. | |
| exclude_airlines | No | 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'. | |
| max_layover_hours | No | Longest layover allowed at every connection, in hours (half hours allowed): for 'layovers no longer than 5 hours'. | |
| min_layover_hours | No | Shortest layover allowed at every connection, in hours (half hours allowed): for 'at least 2 hours to connect'. | |
| max_duration_hours | No | Longest itinerary to show, in hours. | |
| connecting_airports | No | Only itineraries that change planes at these airports (codes or city codes), nonstops included: for 'US connections only' name the hubs. | |
| no_overnight_layovers | No | Leave out itineraries with an overnight layover: for 'no overnight at the transit airport'. | |
| exclude_connecting_airports | No | Leave out itineraries that change planes at these airports (codes or city codes). |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | On an error: a machine-readable kind, e.g. unknown_place |
| note | No | Guidance on totals and next step |
| field | No | On unknown_place: which argument (origin, destination, ...) |
| counts | No | priced, matching_filters, returned integers |
| search | No | Route dict plus search_key, outbound_itinerary_id; multi-city adds leg_number, legs_total |
| status | No | ok | no_data | error | sign_in_required |
| filters | No | Filters as the caller gave them |
| message | No | Error or sign-in message from the server wrapper |
| outbound | No | Leg shape: airlines, stops, duration_minutes, segments, layovers |
| track_url | No | Outbound handoff tracking link (round-trip path only) |
| highlights | No | The spread over every matching return: cheapest, cheapest_nonstop, fastest, earliest, latest |
| search_url | No | slicktrip.com search page link |
| itineraries | No | Items: itinerary_id, price, return (round trip) or next_leg (multi-city) leg object, needs_leg |
| legs_chosen | No | Multi-city only: leg objects chosen so far |
| suggestions | No | On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country |
| places_assumed | No | Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler |
TDQS
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.
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.
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.
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.
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.
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 availabilityARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| cabin | No | Cabin to look at; any = every cabin on the flight. | economy |
| origin | Yes | 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. | |
| depart_date | Yes | YYYY-MM-DD. | |
| destination | Yes | 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. | |
| user_request | No | 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. | |
| flight_number | Yes | Airline code and number, no space. |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | On an error: a machine-readable kind, e.g. unknown_place |
| note | No | Use track_seats to be alerted |
| cabin | No | Cabin tier queried |
| field | No | On unknown_place: which argument (origin, destination, ...) |
| counts | No | seats, available, window, aisle, middle, exit_row, rows_with_2_together |
| flight | No | flight_number, origin, destination, departure_time, arrival_time, aircraft, airline |
| status | No | ok | no_data | error | sign_in_required |
| message | No | No seat map explanation or wrapper error |
| exit_rows | No | Row numbers with exit-row seats |
| seat_kinds | No | Seat letter to window | aisle | middle |
| suggestions | No | On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country |
| seat_map_svg | No | url, view_box, aircraft, seats[] with x/y/w/h/status/kind |
| seat_map_url | No | slicktrip.com seat-tracker setup page link |
| open_seat_ids | No | Every open seat id in the cabin, space-separated |
| places_assumed | No | Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler |
| taken_seat_ids | No | Every taken seat id in the cabin, space-separated |
| available_seats | No | Items: seat, kind, exit_row (up to 80) |
| seat_tracker_url | No | slicktrip.com seat-tracker route link |
TDQS
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.
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.
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.
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.
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.
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.
stop_tracking_flightStop tracking a flightADestructiveIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| fid | No | An itinerary's fid from list_tracked_flights, to stop only that one and keep the route. | |
| search_key | Yes | The route's search_key from list_tracked_flights. |
Output Schema
| Name | Required | Description |
|---|---|---|
| fid | No | The single itinerary removed, if any |
| code | No | On an error: a machine-readable kind, e.g. unknown_place |
| field | No | On unknown_place: which argument (origin, destination, ...) |
| route | No | Route dict parsed from the key with place names |
| scope | No | "one itinerary" or "whole route" |
| status | No | stopped | error | sign_in_required |
| message | No | Error or sign-in message from the server wrapper |
| manage_url | No | slicktrip.com saved-flights page link |
| search_key | No | The route that was stopped |
| suggestions | No | On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country |
| places_assumed | No | Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler |
TDQS
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.
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.
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.
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.
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.
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 hotelADestructiveIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| hotel_id | No | Drop only this hotel from the stay and keep the rest. | |
| tracking_id | Yes | The stay's tracking_id from list_tracked_hotels. |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | On an error: a machine-readable kind, e.g. unknown_place |
| note | No | Set when last hotel removal deleted the stay |
| stay | No | location, hotel_name, name, check_in, check_out, adults |
| field | No | On unknown_place: which argument (origin, destination, ...) |
| scope | No | "whole stay" or "one hotel" |
| status | No | stopped | error | sign_in_required |
| message | No | Error or sign-in message from the server wrapper |
| hotel_id | No | The single hotel removed, if any |
| suggestions | No | On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country |
| tracking_id | No | The stay tracking id stopped |
| places_assumed | No | Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler |
TDQS
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.
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.
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.
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.
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.
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 seatsADestructiveIdempotentInspect
Use to stop the seat alert on one flight (tracking_key from list_tracked_seats). Cannot be undone; confirm first.
| Name | Required | Description | Default |
|---|---|---|---|
| tracking_key | Yes | The alert's tracking_key from list_tracked_seats. |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | On an error: a machine-readable kind, e.g. unknown_place |
| field | No | On unknown_place: which argument (origin, destination, ...) |
| status | No | stopped | error | sign_in_required |
| message | No | Error or sign-in message from the server wrapper |
| suggestions | No | On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country |
| tracking_key | No | The seat alert key stopped |
| places_assumed | No | Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler |
TDQS
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.
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.
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.
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.
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.
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 priceAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | Send alerts by text message. Needs a verified phone on the SlickTrip account; empty keeps the account's setting. | |
| No | Send alerts by email. Empty keeps the account's setting. | ||
| alert_rule | No | When 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_id | Yes | From search_flights (one way) or search_return_flights (a complete round trip or multi-city). | |
| target_price_usd | No | 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| fid | No | Tracked itinerary id (flight numbers) |
| code | No | On an error: a machine-readable kind, e.g. unknown_place |
| note | No | Note about text alerts needing a verified phone |
| field | No | On unknown_place: which argument (origin, destination, ...) |
| route | No | Route dict: origin, destination, cabin, travelers, dates, trip_type (+names on outbound watch) |
| watch | No | "outbound" when an outbound-only watch was saved |
| alerts | No | Plain-words description of what alerts fire |
| status | No | tracking | error | sign_in_required |
| message | No | Error or sign-in message from the server wrapper |
| channels | No | {email: boolean, text: boolean} stored alert channels |
| saved_url | No | slicktrip.com saved-flights page link |
| search_key | No | The tracked route's search key |
| alerts_when | No | When alerts fire, from the alert preference |
| suggestions | No | On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country |
| outbound_fid | No | Outbound watch only: the outbound fid |
| price_at_save | No | Price recorded when tracking started |
| places_assumed | No | Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler |
| text_not_enabled | No | Text asked but no verified phone on account |
| text_unconfirmed | No | Could not confirm text-alert status |
TDQS
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.
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.
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.
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.
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.
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 priceAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | Send alerts by text message. Needs a verified phone on the SlickTrip account; empty keeps the account's setting. | |
| No | Send alerts by email. Empty keeps the account's setting. | ||
| hotel_id | Yes | A hotel_id from search_hotels. | |
| alert_rule | No | When 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_key | Yes | The search_key from search_hotels. | |
| search_url | No | The 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_usd | No | 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | On an error: a machine-readable kind, e.g. unknown_place |
| note | No | Manage on saved-hotels page or already tracked |
| stay | No | location, check_in, check_out, adults, children |
| field | No | On unknown_place: which argument (origin, destination, ...) |
| alerts | No | Plain-words description of alerts |
| status | No | tracking | already_tracking | error | sign_in_required |
| message | No | Error or sign-in message from the server wrapper |
| hotel_id | No | The tracked hotel's property token |
| hotel_url | No | slicktrip.com hotel page link |
| saved_url | No | slicktrip.com saved-hotels page link |
| search_key | No | The hotel search key |
| suggestions | No | On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country |
| tracking_id | No | The stay's tracking record id |
| places_assumed | No | Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler |
| current_price_usd | No | already_tracking only: current tracked price |
| added_to_existing_stay | No | Merged into an existing stay record |
TDQS
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.
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.
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.
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.
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.
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 flightAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | Send alerts by text message. Needs a verified phone on the SlickTrip account; empty keeps the account's setting. | |
| cabin | No | Cabin to look at; any = every cabin on the flight. | economy |
| No | Send alerts by email. Empty keeps the account's setting. | ||
| seats | No | Seat numbers to watch. | |
| origin | Yes | 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. | |
| seat_type | No | Watch every open seat of this kind instead of naming seats. | |
| depart_date | Yes | YYYY-MM-DD. | |
| destination | Yes | 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. | |
| flight_number | Yes | Airline code and number, no space. | |
| seats_together | No | Alert only when this many seats are open together in one row, 2-6. |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | On an error: a machine-readable kind, e.g. unknown_place |
| note | No | Manage on saved-seats page |
| cabin | No | Cabin tracked, or list when several |
| field | No | On unknown_place: which argument (origin, destination, ...) |
| alerts | No | Plain-words description of alerts |
| flight | No | flight_number, origin, destination, departure_time, arrival_time, aircraft, airline |
| status | No | tracking | error | sign_in_required |
| message | No | Error or sign-in message from the server wrapper |
| tracked | No | seats, seat_type, specific_seats, seats_together, open_now |
| channels | No | Alert channels on the record: email, text (booleans) |
| saved_url | No | slicktrip.com saved-seats page link |
| suggestions | No | On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country |
| tracking_key | No | Seat tracking key: route;departure_time;flight_number |
| places_assumed | No | Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler |
| merged_with_existing | No | Added to an existing seat alert |
TDQS
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.
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.
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.
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.
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.
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 accountAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | The traveler's display name. | |
| text | No | Text alerts on new alerts by default; needs a verified phone. | |
| No | Email alerts on new alerts by default. | ||
| apply_to_all | No | Also set these channels on every alert already watched. |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | On an error: a machine-readable kind, e.g. unknown_place |
| name | No | Display name after the update |
| field | No | On unknown_place: which argument (origin, destination, ...) |
| status | No | updated | error | sign_in_required |
| applied | No | Handler's per-type apply-to-all result, when returned |
| message | No | Error or sign-in message from the server wrapper |
| channels | No | {email: boolean, text: boolean} stored default channels |
| manage_url | No | slicktrip.com profile page link |
| suggestions | No | On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country |
| applied_to_all | No | Channels pushed onto existing trackings |
| places_assumed | No | Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler |
| text_not_enabled | No | Text asked but no verified phone |
TDQS
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.
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.
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.
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.
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.
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 listADestructiveIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | A new label for the list. | |
| text | No | Send alerts by text message. Needs a verified phone on the SlickTrip account; empty keeps the account's setting. | |
| No | Send alerts by email. Empty keeps the account's setting. | ||
| adults | No | Hotel lists: adults, 1-6. | |
| months | No | Months to watch, as names or YYYY-MM. Give this OR start_date + end_date. | |
| airlines | No | Only these marketing carriers, as IATA codes or names. | |
| end_date | No | YYYY-MM-DD. | |
| bucket_id | Yes | The list's bucket_id from list_bucket_lists. | |
| max_stops | No | Most stops allowed: 0 nonstop, 1, or 2 (2 or more: any number). | |
| min_stars | No | Hotel lists: lowest star class, 1-5. | |
| max_nights | No | Flight lists: longest trip. Hotel lists: the stay length. | |
| min_nights | No | Flight lists: shortest trip. Hotel lists: the stay length. | |
| start_date | No | YYYY-MM-DD. | |
| depart_days | No | Flight lists: only depart on these weekdays. | |
| return_days | No | Flight lists: only return on these weekdays. | |
| arrive_after | No | HH:MM, local time at that airport. | |
| checked_bags | No | 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. | |
| clear_window | No | Remove the date window and watch the months instead. | |
| depart_after | No | HH:MM, local time at that airport. | |
| arrive_before | No | HH:MM, local time at that airport. | |
| carry_on_bags | No | 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. | |
| check_in_days | No | Hotel lists: only check in on these weekdays. | |
| clear_filters | No | Flight lists: filters to remove. | |
| depart_before | No | HH:MM, local time at that airport. | |
| max_price_usd | No | The price bar, USD: per traveler for a flight list (total when price_is_total), per night for a hotel list. | |
| price_is_total | No | Flight lists: max_price_usd is the total for all travelers. | |
| lower_emissions | No | Only itineraries with lower emissions than is typical for the route. | |
| exclude_airlines | No | 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'. | |
| max_layover_hours | No | Longest layover allowed at every connection, in hours (half hours allowed): for 'layovers no longer than 5 hours'. | |
| min_layover_hours | No | Shortest layover allowed at every connection, in hours (half hours allowed): for 'at least 2 hours to connect'. | |
| max_duration_hours | No | Longest itinerary to show, in hours. | |
| connecting_airports | No | Only itineraries that change planes at these airports (codes or city codes), nonstops included: for 'US connections only' name the hubs. | |
| exclude_connecting_airports | No | Leave out itineraries that change planes at these airports (codes or city codes). |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | On an error: a machine-readable kind, e.g. unknown_place |
| kind | No | "flight" or "hotel" |
| name | No | The bucket's name (pre-update record) |
| stay | No | Hotel only: location, hotel_name, nights, adults |
| field | No | On unknown_place: which argument (origin, destination, ...) |
| route | No | Flight only: origin, destination, names, trip_type, cabin, travelers |
| status | No | updated | error | sign_in_required |
| changed | No | Fields sent to the update handler, site vocabulary (price, stops, preferredMonths, ...) |
| message | No | Error or sign-in message from the server wrapper |
| bucket_id | No | The updated bucket list id |
| manage_url | No | slicktrip.com saved buckets page link |
| suggestions | No | On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country |
| display_name | No | Name as the card shows it |
| places_assumed | No | Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler |
TDQS
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.
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.
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.
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.
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.
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 settingsAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | Send alerts by text message. Needs a verified phone on the SlickTrip account; empty keeps the account's setting. | |
| No | Send alerts by email. Empty keeps the account's setting. | ||
| alert_rule | No | When 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_key | Yes | The route's search_key from list_tracked_flights. | |
| target_price_usd | No | 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | On an error: a machine-readable kind, e.g. unknown_place |
| note | No | Text alerts need a verified phone |
| field | No | On unknown_place: which argument (origin, destination, ...) |
| status | No | updated | error | sign_in_required |
| message | No | Error or sign-in message from the server wrapper |
| channels | No | {email: boolean, text: boolean} stored channels |
| manage_url | No | slicktrip.com saved-flights page link |
| search_key | No | The updated route's search key |
| alerts_when | No | When alerts fire, from the alert preference |
| suggestions | No | On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country |
| places_assumed | No | Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler |
| text_not_enabled | No | Text asked but no verified phone |
| text_unconfirmed | No | Could not confirm text-alert status |
TDQS
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.
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.
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.
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.
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.
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 settingsAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Rename the stay, as it appears on the saved-hotels page. | |
| text | No | Send alerts by text message. Needs a verified phone on the SlickTrip account; empty keeps the account's setting. | |
| No | Send alerts by email. Empty keeps the account's setting. | ||
| alert_rule | No | When 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_id | Yes | The stay's tracking_id from list_tracked_hotels. | |
| target_price_usd | No | 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | On an error: a machine-readable kind, e.g. unknown_place |
| name | No | New stay name if renamed |
| note | No | Text alerts need a verified phone |
| field | No | On unknown_place: which argument (origin, destination, ...) |
| status | No | updated | error | sign_in_required |
| message | No | Error or sign-in message from the server wrapper |
| channels | No | {email: boolean, text: boolean} stored channels |
| manage_url | No | slicktrip.com saved-hotels page link |
| alerts_when | No | When alerts fire, from the alert preference |
| suggestions | No | On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country |
| tracking_id | No | The updated stay tracking id |
| places_assumed | No | Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler |
| text_not_enabled | No | Text asked but no verified phone |
| text_unconfirmed | No | Could not confirm text-alert status |
TDQS
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.
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.
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.
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.
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.
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 settingsAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | Send alerts by text message. Needs a verified phone on the SlickTrip account; empty keeps the account's setting. | |
| No | Send alerts by email. Empty keeps the account's setting. | ||
| alerts_on | No | false pauses the alert, true resumes it. | |
| tracking_key | Yes | The alert's tracking_key from list_tracked_seats. | |
| seats_together | No | Alert only when this many seats are open together, 2-6; 0 clears the rule. |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | On an error: a machine-readable kind, e.g. unknown_place |
| note | No | Change seats via track_seats |
| field | No | On unknown_place: which argument (origin, destination, ...) |
| status | No | updated | error | sign_in_required |
| message | No | Error or sign-in message from the server wrapper |
| alertMethod | No | {email, text} if channels changed |
| suggestions | No | On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country |
| tracking_key | No | The updated seat alert key |
| seatsTogether | No | Seats-together count if changed |
| places_assumed | No | Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler |
| alertPreference | No | "any" (on) or "none" (off) if changed |
TDQS
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.
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.
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.
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.
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.
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 detailARead-onlyIdempotentInspect
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).
| Name | Required | Description | Default |
|---|---|---|---|
| watch | Yes | The 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
| Name | Required | Description |
|---|---|---|
| code | No | On an error: a machine-readable kind, e.g. unknown_place |
| kind | No | flight | bucket_list | hotel_bucket_list | hotel | seat |
| note | No | How to read the prices and lists |
| field | No | On unknown_place: which argument (origin, destination, ...) |
| price | No | now_usd, first_seen_usd/at, change_since_first_usd, lowest_usd/at, highest_usd/at, at_lowest |
| title | No | The watch in words: route and dates, or the list's name |
| watch | No | Its settings, as the matching list tool returns them (itineraries, best_deals, alert settings...) |
| status | No | ok | choose | not_found | no_watches, or error | sign_in_required |
| matches | No | status choose: the watches that match (watch, kind, label) |
| message | No | Error or sign-in message from the server wrapper |
| watches | No | status not_found: every watch on the account (watch, kind, label) |
| watch_id | No | The watch's id (search_key, bucket_id, tracking_id or tracking_key) |
| travelers | No | Travelers on a flight watch when more than one |
| alerts_sent | No | Flights: the alerts sent on this route: at, price_usd, previous_usd, kind |
| price_moves | No | Every recorded price change, oldest first: at, price_usd, previous_usd, airlines |
| suggestions | No | On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country |
| daily_prices | No | Flights: each day's low_usd, high_usd, close_usd and checks |
| places_assumed | No | Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler |
| last_alert_sent | No | When the last alert went out |
TDQS
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.
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.
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.
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.
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.
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.
5 tool updates
- Added
check_my_watches - Added
explore_destinations - Changed
list_bucket_lists1 field changed- added
Input schema / properties / nameAdded 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" +}
- Changed
price_calendar3 fields changed- added
Input schema / properties / depart_fromAdded 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" +} - added
Input schema / properties / depart_toAdded 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" +} - changed
Input schema / properties / trip_length_days / anyOfPrevious value: -[ - { - "maximum": 30, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "maximum": 90, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +]
- Changed
search_hotels6 fields changed- added
Input schema / properties / brandAdded 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" +} - added
Input schema / properties / min_bedroomsAdded 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" +} - changed
Input schema / properties / min_guest_rating / anyOfPrevious value: -[ - { - "maximum": 5, - "minimum": 1, - "type": "number" - }, - { - "type": "null" - } -]New value: +[ + { + "maximum": 10, + "minimum": 1, + "type": "number" + }, + { + "type": "null" + } +] - changed
Input schema / properties / min_guest_rating / descriptionPrevious 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." - changed
Output schema / properties / filters / descriptionPrevious 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" - changed
Output schema / properties / hotels / descriptionPrevious 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"
6 tool updates
- Changed
handoff_link2 fields changed- changed
Input schema / properties / max_stops / anyOfPrevious value: -[ - { - "maximum": 2, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "maximum": 9, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / max_stops / descriptionPrevious value: -"Most stops allowed: 0 nonstop, 1, or 2."New value: +"Most stops allowed: 0 nonstop, 1, or 2 (2 or more: any number)."
- Changed
price_calendar9 fields changed- changed
Input schema / properties / max_stops / descriptionPrevious value: -"Most stops allowed: 0 nonstop, 1, or 2."New value: +"Most stops allowed: 0 nonstop, 1, or 2 (2 or more: any number)." - changed
Input schema / properties / max_stops / maximumPrevious value: -2New value: +9 - changed
Input schema / properties / month / descriptionPrevious 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." - added
Input schema / properties / trip_length_days / anyOfAdded value: +[ + { + "maximum": 30, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / trip_length_days / defaultPrevious value: -7New value: +null - changed
Input schema / properties / trip_length_days / descriptionPrevious 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." - removed
Input schema / properties / trip_length_days / maximumRemoved value: -30 - removed
Input schema / properties / trip_length_days / minimumRemoved value: -1 - removed
Input schema / properties / trip_length_days / typeRemoved value: -"integer"
- Changed
search_flights4 fields changed- changed
Input schema / properties / carry_on_bags / descriptionPrevious 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." - changed
Input schema / properties / checked_bags / descriptionPrevious 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." - changed
Input schema / properties / max_stops / anyOfPrevious value: -[ - { - "maximum": 2, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "maximum": 9, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / max_stops / descriptionPrevious value: -"Most stops allowed: 0 nonstop, 1, or 2."New value: +"Most stops allowed: 0 nonstop, 1, or 2 (2 or more: any number)."
- Changed
search_return_flights4 fields changed- changed
Input schema / properties / carry_on_bags / descriptionPrevious 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." - changed
Input schema / properties / checked_bags / descriptionPrevious 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." - changed
Input schema / properties / max_stops / anyOfPrevious value: -[ - { - "maximum": 2, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "maximum": 9, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / max_stops / descriptionPrevious value: -"Most stops allowed: 0 nonstop, 1, or 2."New value: +"Most stops allowed: 0 nonstop, 1, or 2 (2 or more: any number)."
- Changed
update_bucket_list2 fields changed- changed
Input schema / properties / max_stops / anyOfPrevious value: -[ - { - "maximum": 2, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "maximum": 9, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / max_stops / descriptionPrevious value: -"Most stops allowed: 0 nonstop, 1, or 2."New value: +"Most stops allowed: 0 nonstop, 1, or 2 (2 or more: any number)."
- Added
watch_details
5 tool updates
- Changed
add_flight_bucket_list1 field changed- changed
Input schema / properties / checked_bags / descriptionPrevious 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."
- Changed
price_calendar1 field changed- changed
Input schema / properties / checked_bags / descriptionPrevious 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."
- Changed
search_flights1 field changed- changed
Input schema / properties / checked_bags / descriptionPrevious 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."
- Changed
search_return_flights1 field changed- changed
Input schema / properties / checked_bags / descriptionPrevious 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."
- Changed
update_bucket_list1 field changed- changed
Input schema / properties / checked_bags / descriptionPrevious 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."
1 tool update
- Changed
search_return_flights2 fields changed- added
Input schema / properties / carry_on_bagsAdded 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" +} - added
Input schema / properties / checked_bagsAdded 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 tool updates
- Changed
add_flight_bucket_list13 fields changed- added
Input schema / properties / arrive_afterAdded 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" +} - added
Input schema / properties / arrive_beforeAdded 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" +} - added
Input schema / properties / carry_on_bagsAdded 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" +} - added
Input schema / properties / checked_bagsAdded 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" +} - added
Input schema / properties / connecting_airportsAdded 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" +} - added
Input schema / properties / depart_afterAdded 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" +} - added
Input schema / properties / depart_beforeAdded 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" +} - added
Input schema / properties / exclude_airlinesAdded 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" +} - added
Input schema / properties / exclude_connecting_airportsAdded 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" +} - added
Input schema / properties / lower_emissionsAdded value: +{ + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Only itineraries with lower emissions than is typical for the route.", + "title": "Lower Emissions" +} - added
Input schema / properties / max_duration_hoursAdded value: +{ + "anyOf": [ + { + "maximum": 96, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Longest itinerary to show, in hours.", + "title": "Max Duration Hours" +} - added
Input schema / properties / max_layover_hoursAdded 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" +} - added
Input schema / properties / min_layover_hoursAdded 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" +}
- Changed
price_calendar13 fields changed- added
Input schema / properties / arrive_afterAdded 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" +} - added
Input schema / properties / arrive_beforeAdded 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" +} - added
Input schema / properties / carry_on_bagsAdded 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" +} - added
Input schema / properties / checked_bagsAdded 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" +} - added
Input schema / properties / connecting_airportsAdded 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" +} - added
Input schema / properties / depart_afterAdded 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" +} - added
Input schema / properties / depart_beforeAdded 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" +} - added
Input schema / properties / exclude_airlinesAdded 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" +} - added
Input schema / properties / exclude_connecting_airportsAdded 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" +} - added
Input schema / properties / lower_emissionsAdded value: +{ + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Only itineraries with lower emissions than is typical for the route.", + "title": "Lower Emissions" +} - added
Input schema / properties / max_duration_hoursAdded value: +{ + "anyOf": [ + { + "maximum": 96, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Longest itinerary to show, in hours.", + "title": "Max Duration Hours" +} - added
Input schema / properties / max_layover_hoursAdded 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" +} - added
Input schema / properties / min_layover_hoursAdded 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" +}
- Changed
search_flights9 fields changed- added
Input schema / properties / carry_on_bagsAdded 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" +} - added
Input schema / properties / checked_bagsAdded 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" +} - added
Input schema / properties / connecting_airportsAdded 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" +} - added
Input schema / properties / exclude_airlinesAdded 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" +} - added
Input schema / properties / exclude_connecting_airportsAdded 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" +} - added
Input schema / properties / lower_emissionsAdded value: +{ + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Only itineraries with lower emissions than is typical for the route.", + "title": "Lower Emissions" +} - added
Input schema / properties / max_layover_hoursAdded 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" +} - added
Input schema / properties / min_layover_hoursAdded 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" +} - added
Input schema / properties / no_overnight_layoversAdded 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" +}
- Changed
search_return_flights7 fields changed- added
Input schema / properties / connecting_airportsAdded 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" +} - added
Input schema / properties / exclude_airlinesAdded 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" +} - added
Input schema / properties / exclude_connecting_airportsAdded 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" +} - added
Input schema / properties / lower_emissionsAdded value: +{ + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Only itineraries with lower emissions than is typical for the route.", + "title": "Lower Emissions" +} - added
Input schema / properties / max_layover_hoursAdded 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" +} - added
Input schema / properties / min_layover_hoursAdded 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" +} - added
Input schema / properties / no_overnight_layoversAdded 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" +}
- Changed
update_bucket_list14 fields changed- added
Input schema / properties / arrive_afterAdded 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" +} - added
Input schema / properties / arrive_beforeAdded 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" +} - added
Input schema / properties / carry_on_bagsAdded 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" +} - added
Input schema / properties / checked_bagsAdded 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" +} - added
Input schema / properties / clear_filtersAdded 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" +} - added
Input schema / properties / connecting_airportsAdded 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" +} - added
Input schema / properties / depart_afterAdded 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" +} - added
Input schema / properties / depart_beforeAdded 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" +} - added
Input schema / properties / exclude_airlinesAdded 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" +} - added
Input schema / properties / exclude_connecting_airportsAdded 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" +} - added
Input schema / properties / lower_emissionsAdded value: +{ + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Only itineraries with lower emissions than is typical for the route.", + "title": "Lower Emissions" +} - added
Input schema / properties / max_duration_hoursAdded value: +{ + "anyOf": [ + { + "maximum": 96, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Longest itinerary to show, in hours.", + "title": "Max Duration Hours" +} - added
Input schema / properties / max_layover_hoursAdded 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" +} - added
Input schema / properties / min_layover_hoursAdded 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" +}
11 tool updates
- Changed
add_flight_bucket_list7 fields changed- changed
Input schema / properties / destination / descriptionPrevious 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." - changed
Input schema / properties / months / descriptionPrevious 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)." - changed
Input schema / properties / origin / descriptionPrevious 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." - changed
Input schema / properties / travelers / descriptionPrevious 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." - changed
Input schema / properties / user_request / anyOfPrevious value: -[ - { - "maxLength": 300, - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "maxLength": 500, + "type": "string" + }, + { + "type": "null" + } +] - changed
Input schema / properties / user_request / descriptionPrevious 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." - changed
Input schema / properties / user_request / examplesPrevious 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" +]
- Changed
add_hotel_bucket_list4 fields changed- changed
Input schema / properties / months / descriptionPrevious 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)." - changed
Input schema / properties / user_request / anyOfPrevious value: -[ - { - "maxLength": 300, - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "maxLength": 500, + "type": "string" + }, + { + "type": "null" + } +] - changed
Input schema / properties / user_request / descriptionPrevious 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." - changed
Input schema / properties / user_request / examplesPrevious 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" +]
- Changed
flight_lookup6 fields changed- changed
Input schema / properties / destination / descriptionPrevious 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." - added
Input schema / properties / displayAdded 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" +} - changed
Input schema / properties / origin / descriptionPrevious 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." - changed
Input schema / properties / user_request / anyOfPrevious value: -[ - { - "maxLength": 300, - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "maxLength": 500, + "type": "string" + }, + { + "type": "null" + } +] - changed
Input schema / properties / user_request / descriptionPrevious 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." - changed
Input schema / properties / user_request / examplesPrevious 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" +]
- Changed
handoff_link5 fields changed- changed
Input schema / $defs / Leg / properties / destination / descriptionPrevious 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." - changed
Input schema / $defs / Leg / properties / origin / descriptionPrevious 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." - changed
Input schema / properties / destination / descriptionPrevious 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." - changed
Input schema / properties / origin / descriptionPrevious 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." - changed
Input schema / properties / travelers / descriptionPrevious 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."
- Changed
price_calendar7 fields changed- changed
Input schema / properties / destination / descriptionPrevious 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." - added
Input schema / properties / lap_infantsAdded 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" +} - changed
Input schema / properties / origin / descriptionPrevious 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." - changed
Input schema / properties / travelers / descriptionPrevious 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." - changed
Input schema / properties / user_request / anyOfPrevious value: -[ - { - "maxLength": 300, - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "maxLength": 500, + "type": "string" + }, + { + "type": "null" + } +] - changed
Input schema / properties / user_request / descriptionPrevious 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." - changed
Input schema / properties / user_request / examplesPrevious 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" +]
- Changed
route_airlines2 fields changed- changed
Input schema / properties / destination / descriptionPrevious 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." - changed
Input schema / properties / origin / descriptionPrevious 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."
- Changed
search_flights10 fields changed- changed
Input schema / $defs / Leg / properties / destination / descriptionPrevious 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." - changed
Input schema / $defs / Leg / properties / origin / descriptionPrevious 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." - changed
Input schema / properties / destination / descriptionPrevious 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." - added
Input schema / properties / displayAdded 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" +} - added
Input schema / properties / lap_infantsAdded 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" +} - changed
Input schema / properties / origin / descriptionPrevious 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." - changed
Input schema / properties / travelers / descriptionPrevious 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." - changed
Input schema / properties / user_request / anyOfPrevious value: -[ - { - "maxLength": 300, - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "maxLength": 500, + "type": "string" + }, + { + "type": "null" + } +] - changed
Input schema / properties / user_request / descriptionPrevious 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." - changed
Input schema / properties / user_request / examplesPrevious 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" +]
- Changed
search_hotels3 fields changed- changed
Input schema / properties / user_request / anyOfPrevious value: -[ - { - "maxLength": 300, - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "maxLength": 500, + "type": "string" + }, + { + "type": "null" + } +] - changed
Input schema / properties / user_request / descriptionPrevious 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." - changed
Input schema / properties / user_request / examplesPrevious 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" +]
- Changed
search_return_flights1 field changed- added
Input schema / properties / displayAdded 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" +}
- Changed
seat_availability5 fields changed- changed
Input schema / properties / destination / descriptionPrevious 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." - changed
Input schema / properties / origin / descriptionPrevious 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." - changed
Input schema / properties / user_request / anyOfPrevious value: -[ - { - "maxLength": 300, - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "maxLength": 500, + "type": "string" + }, + { + "type": "null" + } +] - changed
Input schema / properties / user_request / descriptionPrevious 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." - changed
Input schema / properties / user_request / examplesPrevious 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" +]
- Changed
track_seats2 fields changed- changed
Input schema / properties / destination / descriptionPrevious 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." - changed
Input schema / properties / origin / descriptionPrevious 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."
12 tool updates
- Changed
add_flight_bucket_list4 fields changed- changed
Input schema / properties / destination / descriptionPrevious 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." - changed
Input schema / properties / destination / examplesPrevious value: -[ - "JFK", - "ROM", - "JFK_EWR" -]New value: +[ + "JFK", + "NYCA", + "JFK_EWR" +] - changed
Input schema / properties / origin / descriptionPrevious 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." - changed
Input schema / properties / origin / examplesPrevious value: -[ - "JFK", - "ROM", - "JFK_EWR" -]New value: +[ + "JFK", + "NYCA", + "JFK_EWR" +]
- Changed
flight_lookup4 fields changed- changed
Input schema / properties / destination / descriptionPrevious 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." - changed
Input schema / properties / destination / examplesPrevious value: -[ - "JFK", - "ROM", - "JFK_EWR" -]New value: +[ + "JFK", + "NYCA", + "JFK_EWR" +] - changed
Input schema / properties / origin / descriptionPrevious 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." - changed
Input schema / properties / origin / examplesPrevious value: -[ - "JFK", - "ROM", - "JFK_EWR" -]New value: +[ + "JFK", + "NYCA", + "JFK_EWR" +]
- Changed
handoff_link8 fields changed- changed
Input schema / $defs / Leg / properties / destination / descriptionPrevious 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." - changed
Input schema / $defs / Leg / properties / destination / examplesPrevious value: -[ - "JFK", - "ROM", - "JFK_EWR" -]New value: +[ + "JFK", + "NYCA", + "JFK_EWR" +] - changed
Input schema / $defs / Leg / properties / origin / descriptionPrevious 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." - changed
Input schema / $defs / Leg / properties / origin / examplesPrevious value: -[ - "JFK", - "ROM", - "JFK_EWR" -]New value: +[ + "JFK", + "NYCA", + "JFK_EWR" +] - changed
Input schema / properties / destination / descriptionPrevious 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." - changed
Input schema / properties / destination / examplesPrevious value: -[ - "JFK", - "ROM", - "JFK_EWR" -]New value: +[ + "JFK", + "NYCA", + "JFK_EWR" +] - changed
Input schema / properties / origin / descriptionPrevious 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." - changed
Input schema / properties / origin / examplesPrevious value: -[ - "JFK", - "ROM", - "JFK_EWR" -]New value: +[ + "JFK", + "NYCA", + "JFK_EWR" +]
- Changed
price_calendar4 fields changed- changed
Input schema / properties / destination / descriptionPrevious 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." - changed
Input schema / properties / destination / examplesPrevious value: -[ - "JFK", - "ROM", - "JFK_EWR" -]New value: +[ + "JFK", + "NYCA", + "JFK_EWR" +] - changed
Input schema / properties / origin / descriptionPrevious 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." - changed
Input schema / properties / origin / examplesPrevious value: -[ - "JFK", - "ROM", - "JFK_EWR" -]New value: +[ + "JFK", + "NYCA", + "JFK_EWR" +]
- Changed
route_airlines4 fields changed- changed
Input schema / properties / destination / descriptionPrevious 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." - changed
Input schema / properties / destination / examplesPrevious value: -[ - "JFK", - "ROM", - "JFK_EWR" -]New value: +[ + "JFK", + "NYCA", + "JFK_EWR" +] - changed
Input schema / properties / origin / descriptionPrevious 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." - changed
Input schema / properties / origin / examplesPrevious value: -[ - "JFK", - "ROM", - "JFK_EWR" -]New value: +[ + "JFK", + "NYCA", + "JFK_EWR" +]
- Changed
search_flights8 fields changed- changed
Input schema / $defs / Leg / properties / destination / descriptionPrevious 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." - changed
Input schema / $defs / Leg / properties / destination / examplesPrevious value: -[ - "JFK", - "ROM", - "JFK_EWR" -]New value: +[ + "JFK", + "NYCA", + "JFK_EWR" +] - changed
Input schema / $defs / Leg / properties / origin / descriptionPrevious 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." - changed
Input schema / $defs / Leg / properties / origin / examplesPrevious value: -[ - "JFK", - "ROM", - "JFK_EWR" -]New value: +[ + "JFK", + "NYCA", + "JFK_EWR" +] - changed
Input schema / properties / destination / descriptionPrevious 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." - changed
Input schema / properties / destination / examplesPrevious value: -[ - "JFK", - "ROM", - "JFK_EWR" -]New value: +[ + "JFK", + "NYCA", + "JFK_EWR" +] - changed
Input schema / properties / origin / descriptionPrevious 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." - changed
Input schema / properties / origin / examplesPrevious value: -[ - "JFK", - "ROM", - "JFK_EWR" -]New value: +[ + "JFK", + "NYCA", + "JFK_EWR" +]
- Changed
seat_availability4 fields changed- changed
Input schema / properties / destination / descriptionPrevious 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." - changed
Input schema / properties / destination / examplesPrevious value: -[ - "JFK", - "ROM", - "JFK_EWR" -]New value: +[ + "JFK", + "NYCA", + "JFK_EWR" +] - changed
Input schema / properties / origin / descriptionPrevious 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." - changed
Input schema / properties / origin / examplesPrevious value: -[ - "JFK", - "ROM", - "JFK_EWR" -]New value: +[ + "JFK", + "NYCA", + "JFK_EWR" +]
- Changed
track_flight1 field changed- changed
Input schema / properties / target_price_usd / descriptionPrevious 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."
- Changed
track_hotel1 field changed- changed
Input schema / properties / target_price_usd / descriptionPrevious 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."
- Changed
track_seats4 fields changed- changed
Input schema / properties / destination / descriptionPrevious 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." - changed
Input schema / properties / destination / examplesPrevious value: -[ - "JFK", - "ROM", - "JFK_EWR" -]New value: +[ + "JFK", + "NYCA", + "JFK_EWR" +] - changed
Input schema / properties / origin / descriptionPrevious 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." - changed
Input schema / properties / origin / examplesPrevious value: -[ - "JFK", - "ROM", - "JFK_EWR" -]New value: +[ + "JFK", + "NYCA", + "JFK_EWR" +]
- Changed
update_flight_tracking1 field changed- changed
Input schema / properties / target_price_usd / descriptionPrevious 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."
- Changed
update_hotel_tracking1 field changed- changed
Input schema / properties / target_price_usd / descriptionPrevious 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."
35 tool updates
- First observed
add_flight_bucket_list - First observed
add_hotel_bucket_list - First observed
booking_options - First observed
find_places - First observed
flight_lookup - First observed
get_account - First observed
handoff_link - First observed
hotel_booking_options - First observed
hotel_details - First observed
hotel_price_calendar - First observed
list_bucket_lists - First observed
list_tracked_flights - First observed
list_tracked_hotels - First observed
list_tracked_seats - First observed
price_calendar - First observed
recent_deals - First observed
remove_bucket_list - First observed
route_airlines - First observed
search_flights - First observed
search_hotels - First observed
search_return_flights - First observed
seat_availability - First observed
share_link - First observed
shared_trip - First observed
stop_tracking_flight - First observed
stop_tracking_hotel - First observed
stop_tracking_seats - First observed
track_flight - First observed
track_hotel - First observed
track_seats - First observed
update_account - First observed
update_bucket_list - First observed
update_flight_tracking - First observed
update_hotel_tracking - First observed
update_seat_tracking
Related MCP Connectors
Flight search, airfare analytics, flexible destinations
Best-time-to-book verdicts, live last-minute hotel deals, and city price calendars, from data.
Google Flights fares and price calendar, Google Hotels rates by date, US/Canada gas station prices.
Live flight prices and working booking links for AI agents and travel apps.
Related MCP Servers
AlicenseNot gradedqualityDmaintenanceEnables AI assistants to search, price-track, and book flights across ~300 airlines, with traveler profiles, preferences, and email fare-drop alerts.78MIT- AlicenseBqualityCmaintenanceEnables finding and comparing cash and award flights, with seat maps and trip planning, ranking options by user-defined per-mile valuations.6MIT
- AlicenseNot gradedqualityCmaintenanceProvides real-time flight status, airport weather, delays, cheap flight deals, and TSA wait times without requiring an API key.19 npmMIT
- AlicenseAqualityBmaintenanceEnables 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.41MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.