SlickTrip
Server Details
Live flight, hotel and seat prices, cheapest-day calendars, and price-drop alerts.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 35 tools
Each tool has a clearly distinct purpose, with descriptions that explicitly differentiate tools that might otherwise be confused (e.g., track_flight vs add_flight_bucket_list, search_flights vs price_calendar, booking_options vs hotel_booking_options). The set provides strong guidance on when to use each tool and when not to.
Names are all snake_case, but they mix verb+noun patterns (e.g., search_flights, update_flight_tracking) with bare noun phrases (e.g., booking_options, flight_lookup, price_calendar, hotel_details). This inconsistency is readable but not fully predictable.
With 35 tools, the set is too large for the apparent scope, exceeding the 25+ threshold that indicates an overabundance. While each tool serves a purpose, the sheer number increases cognitive load and selection complexity.
The tool surface comprehensively covers the travel domain: searching flights (one-way, round-trip, multi-city), hotels, seat availability, price calendars, booking options, tracking (flights, hotels, seats, bucket lists), sharing, account management, and place lookup. CRUD and lifecycle operations are well represented for each entity.
Available Tools
35 toolsadd_flight_bucket_listAdd a flight bucket listAIdempotentInspect
Use for flexible-date watches ('tell me when New York to Tokyo drops under $700 this winter'): SlickTrip keeps searching the chosen months or date window and alerts when a fare clears the price bar. Returns a bucket_id. Confirm first. Not for fixed dates (search_flights, then track_flight).
| 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. Give this OR start_date + end_date. | |
| 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. 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. Fares are quoted for all of them together; one booking holds up to 9 (a larger group gets a suggested split). | |
| 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. Unsure of the code: call find_places. | |
| return_days | No | Only return on these weekdays. | |
| user_request | No | 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. | |
| 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. |
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 readOnlyHint=false, idempotentHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is largely covered. The description adds real behavioral context beyond that: the watch keeps searching and alerts when the fare clears the bar, a bucket_id is returned, and confirmation is required before creating. It doesn't cover how alerts are delivered or any limits on concurrent watches.
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 exact use case and example, followed by the return value, the confirmation requirement, and the exclusion. No filler; every clause carries routing or behavioral 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?
For an 18-parameter creation tool with a full-coverage schema and an output schema (so return values need not be explained), the description covers the core intent, the alternative path for fixed dates, and the confirmation step. It is a little thin on what happens after creation (alert cadence, output schema fields like bucket_id aside), but nothing essential to calling it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all 18 parameters are already documented in the schema, including months vs start_date/end_date and the price bar. The description only gestures at the flexible-date window and price bar, adding no syntax or format detail beyond what the schema provides, 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 gives a concrete verb+resource ('flexible-date watches' / bucket list) and grounds it with a realistic example ('tell me when New York to Tokyo drops under $700 this winter'). It explicitly names the siblings it is not for (search_flights, track_flight with fixed dates), 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?
States when to use it (flexible dates, price-bar alerts over months or a date window), when not to (fixed dates go to search_flights then track_flight), and adds an operational prerequisite ('Confirm first'). Both routing conditions and the alternative path are explicit.
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. Confirm 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. Give this OR start_date + end_date. | |
| 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. 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. | |
| 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?
Annotations cover the safety profile (readOnly=false, destructive=false, idempotent=true, openWorld=true), so the description is free to add the operational behavior: an ongoing search across months/date window that alerts when a stay clears the per-night bar, plus the returned bucket_id and the confirm-first requirement. It stops short of stating alert frequency, duration of the watch, or auth/quota constraints.
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 dense sentences plus a short directive, front-loaded with the use case before the exclusion. Efficient, though the parenthetical sibling pointer and 'Confirm first' fragment make it slightly cluttered.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, yet the description usefully notes it returns a bucket_id. Given annotations plus a fully documented 11-param schema, the definition is essentially complete for correct invocation; only alert cadence and lifetime of the watch are 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 coverage is 100% with 11 well-documented parameters, so the schema carries the burden and a 3 is the baseline. The description adds only light semantics — 'stays of the given length' (nights) and 'the per-night bar' (max_price_per_night) — without clarifying the months-vs-date-window exclusivity that the schema already documents.
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 — creating a flexible-date hotel watch — and immediately scopes it to 'a place or one named hotel'. It distinguishes itself from fixed-date alternatives by naming search_hotels and track_hotel, so an agent can route correctly 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 says when to use it (flexible dates, watch a place or one hotel) and when not to ('Not for fixed dates (search_hotels, then track_hotel)'), naming the exact alternative tools and the sequence. The 'Confirm first' instruction adds a procedural prerequisite.
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.
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
Use when the traveler wants to know which flights operate a route on a date, or needs a flight number for seat_availability or track_seats: departure and arrival times, carrier, aircraft, stops. No fares. Not for prices (search_flights) and not for a whole month (price_calendar).
| 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. 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. Unsure of the code: call find_places. | |
| user_request | No | 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. | |
| 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 readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so safety and idempotency are covered. The description adds 'No fares' and lists returned fields, but does not describe auth needs, rate limits, or other behavioral traits beyond annotations; the added context is minimal and partly redundant with the 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?
Two sentences, front-loaded with the primary use case and immediately followed by output content, exclusions, and alternatives. Every clause earns its place 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?
Given output schema exists and annotations cover the safety profile, the description provides purpose, usage, alternatives, and limitations ('No fares'). An agent has everything needed to call it correctly and distinguish it from siblings.
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 notes that the flight_number parameter (or a route search result) is needed for seat_availability or track_seats, which is usage context, but it adds no syntax or format meaning beyond what the schema already 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 verb and resource: which flights operate a route on a date, and lists the returned attributes (departure/arrival times, carrier, aircraft, stops). Explicitly distinguishes from search_flights (prices) and price_calendar (whole month), so an agent can select it without opening sibling 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?
Gives explicit when-to-use conditions (traveler wants flights on a route/date, or needs a flight number for seat_availability or track_seats) and when-not-to-use conditions (not for prices, not for a whole month) with named alternatives. No guidance 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.
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, 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. 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. | |
| min_stars | No | Lowest star class to show, 1-5. | |
| travelers | No | Travelers. Fares are quoted for all of them together; one booking holds up to 9 (a larger group gets a suggested split). | |
| 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. 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 readOnly/idempotent/openWorld/non-destructive, so the safety profile is covered. The description adds real context beyond them: the link lands the user 'without running a search', the track_url 'starts tracking on arrival', and the bucket list 'saves on arrival' — side effects on the destination site. It does not explain link expiry or auth requirements in detail, hence 4 rather than 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?
A single dense sentence, but front-loaded with the usage condition and then the behavior, so an agent reads the decisive information first. It is longer than ideal and the parenthetical enumeration is heavy, but every clause carries signal.
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 26 parameters, a 100%-covered schema, and an output schema present, the description only needs to cover purpose, trigger, and the net effect of the link. It does all three, so the definition is complete enough to call correctly; minor gaps around what the returned link looks like are covered by 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?
Schema description coverage is 100%, so the baseline is 3, but the description genuinely adds meaning the schema lacks: the `kind` enum is only described as 'Which page to land on' in the schema, while the description explains what each kind produces (a configured flights search, a saved bucket list, etc.). That mapping is not recoverable from the schema alone.
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 ('builds a link that lands them fully configured') and enumerates exactly what the link can target, matching the four values of the `kind` enum: flights search, bucket list, hotel search, seat tracker. An agent can distinguish this from siblings such as share_link or track_flight 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 an explicit triggering condition: 'Use when the traveler wants to continue on slicktrip.com, or the account is not connected.' That is clear when-to-use guidance. It stops short of naming alternatives or when-not (e.g., when the account IS connected and an in-app search is preferred), 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.
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 |
|---|---|---|---|
| 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, idempotentHint and destructiveHint=false, so safety is covered. The description adds value beyond that by disclosing the shape of the result (settings, best deals so far) and, critically, that the bucket_id it returns is the handle consumed by update_bucket_list, remove_bucket_list and share_link. It says nothing about pagination beyond the schema's limit, which is a minor gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, front-loaded with the action and resource, with no filler. Every clause carries information an agent needs: scope, payload, and the id's downstream consumers.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be spelled out, yet the description still sketches them usefully. Combined with annotations covering the safety profile and the schema covering 'limit', the definition is essentially complete; only ordering/pagination nuance is left implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single 'limit' parameter is fully documented there (1-200, newest first). The description mentions no parameters at all, so it adds nothing on top of the schema; baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('see') and resource (flight and hotel bucket lists) scoped to the signed-in account, and enumerates the returned payload (settings, best deals, bucket_id). It also distinguishes itself from update_bucket_list, remove_bucket_list and share_link by naming them as consumers of the id it produces.
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 see ... on the signed-in account' gives a clear condition for invoking it, and pointing at the three sibling tools that take the bucket_id supplies real routing context. There is no competing list tool to exclude, so no explicit when-not guidance is required, but none is offered either.
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 for 'when is it cheapest to fly' on a route: the cheapest fare per departure day across about two months. Then search_flights on the chosen day for bookable itineraries. Not for a specific date.
| Name | Required | Description | Default |
|---|---|---|---|
| cabin | No | Cabin class. | economy |
| month | No | First month to show, YYYY-MM. Empty means this month. | |
| 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. Unsure of the code: call find_places. | |
| airlines | No | Up to 3 carriers as IATA codes, or one alliance: star alliance, oneworld, skyteam. | |
| max_stops | No | Most stops allowed: 0 nonstop, 1, or 2. | |
| travelers | No | Travelers. Fares are quoted for all of them together; one booking holds up to 9 (a larger group gets a suggested split). | |
| trip_type | No | Round trip or one way. | roundtrip |
| 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. Unsure of the code: call find_places. | |
| user_request | No | 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. | |
| trip_length_days | No | Nights away, round trips only. |
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 readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so safety profile is covered. The description adds the two-month scope and the workflow handoff to search_flights, but does not mention pagination or output-shape caveats beyond what the output schema presumably provides.
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 clauses, front-loaded with the use case, followed by the natural next step and the exclusion. 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?
Given 10 parameters, full schema coverage, and an output schema, the description supplies the missing decision context (when to use it vs search_flights) and the scope of results. It leaves raw parameter semantics to the schema, which is acceptable here.
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 parameters (origin/destination syntax, month, cabin, travelers, etc.) are fully documented in the schema. The description adds no parameter-level detail, which is the expected baseline when the schema does all the work.
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 user question ('when is it cheapest to fly') and the concrete output: cheapest fare per departure day across ~two months. Clearly distinguishes itself from search_flights by contrasting the calendar view with bookable itineraries.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent: use this for cheapest-day discovery, then call search_flights for the chosen day, and 'Not for a specific date' gives the negative condition.
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. 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. 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 readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is covered. The description adds behavior annotations do not: results are ordered with nonstop carriers first, and it returns the airline codes that the airline filters consume. It does not discuss result size or pagination, but with an output schema present that gap is minor.
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 usage trigger, then the returned resource, then the exclusion. No filler, nothing 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?
For a two-parameter read-only lookup with full schema coverage and an output schema, the description supplies exactly the missing piece: when to call it and how the output orders carriers. Nothing needed 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 description coverage is 100% and both parameters are richly documented in the schema itself (airport vs city codes, underscore joining, find_places fallback). The description adds no parameter-level meaning beyond what the schema already provides, 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?
States a specific resource ('the carriers on the route') and a clear scope, and explicitly contrasts itself with a fare search. An agent can distinguish it from search_flights, flight_lookup, and booking_options 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 two explicit triggers ('when the traveler asks who flies a route, or before filtering by airline') and one explicit exclusion ('Not a fare search'). This is textbook when-to-use / when-not-to-use guidance.
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
Use when the traveler wants flights for known dates: one way, round trip, flexible dates, several airports, or multi-city. Give origin, destination and depart_date (return_date for a round trip), or pass their own words in query and leave unknown fields empty (nothing is guessed), or legs for multi-city. Returns priced itineraries cheapest first, itinerary_ids for track_flight and search_return_flights, and a search_url. Not for 'when is it cheapest' (price_calendar) or flexible months (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. Unsure of the code: call find_places. | |
| airlines | No | Only these marketing carriers, as IATA codes or names. | |
| max_stops | No | Most stops allowed: 0 nonstop, 1, or 2. | |
| travelers | No | Travelers. Fares are quoted for all of them together; one booking holds up to 9 (a larger group gets a suggested split). | |
| 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. Unsure of the code: call find_places. | |
| 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. | |
| depart_after | No | HH:MM, local time at that airport. | |
| user_request | No | 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. | |
| arrive_before | No | HH:MM, local time at that airport. | |
| 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. | |
| max_duration_hours | No | Longest itinerary to show, in hours. |
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, openWorldHint and destructiveHint=false, so safety is covered. The description still adds real behavioral context: results come back priced cheapest-first, include itinerary_ids consumed by track_flight/search_return_flights and a search_url, and that unknown fields are left empty because 'nothing is guessed'. It stops short of covering pagination or error/empty-result behavior, so not a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences, front-loaded with the usage trigger and ending with the exclusion clause; every clause carries information. It is long but not padded given 19 parameters and multiple modes, though the middle 'or ... or ...' construction takes some parsing.
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 19-parameter, multi-mode search tool with full schema coverage, output schema present, and rich annotations, the description covers the remaining gaps: mode selection, field-population strategy, override precedence, and the return artifact (itinerary_ids, search_url). 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, but the description adds cross-parameter semantics the schema does not: legs overrides origin/destination/dates, and query backfills any empty field while unknown fields stay empty. These interaction rules are genuinely beyond the per-field 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 names the specific verb and resource and enumerates the callable modes (one way, round trip, flexible dates, several airports, multi-city). It also explicitly marks the sibling tools it is not (price_calendar, add_flight_bucket_list), so an agent can distinguish it 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 opens with an explicit 'Use when the traveler wants flights for known dates' trigger, describes how to populate fields for each mode, and closes with explicit exclusions routing to price_calendar and add_flight_bucket_list. This is when-to-use plus when-not-to-use plus named alternatives.
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, sort. Not for flexible months (add_hotel_bucket_list).
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Cheapest first, or best rated first. | price |
| 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. | |
| user_request | No | 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. | |
| 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. | |
| 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 |
| 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, 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 the safe read-only, idempotent, non-destructive profile, so the description is free to add real value: results are ordered 'cheapest first,' filter semantics 'match the site,' and the response carries hotel_ids, a search_key, and a search_url. It stops short of describing pagination or result-count behavior beyond max_results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences, front-loaded with the usage gate and the exclusion, then output shape, then filters. The mid-sentence filter and return enumerations are list-like but each maps to real capability; nothing redundant, though slightly packed.
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 16-parameter search tool with an output schema and full annotation coverage, the description supplies the routing decision, the return contents, and the downstream keys needed to chain into track_hotel and hotel_price_calendar. Nothing an agent needs to select or invoke it 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 including the enum values, amenity lists, and bounds is already documented in the schema. The description's filter summary ('price, stars, guest rating, property kinds, amenities, free cancellation, hotels or vacation rentals, sort') mirrors the schema without adding semantics, 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 (search) and resource (hotels) with an explicit scope gate: 'the traveler wants a place to stay for known dates.' It also names the sibling it is not for (add_hotel_bucket_list for flexible months), so the agent can route 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 when ('known dates') and an explicit when-not with the alternative named ('Not for flexible months (add_hotel_bucket_list)'). The downstream handoff to track_hotel and hotel_price_calendar is also spelled out.
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 |
| airlines | No | Only these marketing carriers, as IATA codes or names. | |
| max_stops | No | Most stops allowed: 0 nonstop, 1, or 2. | |
| max_results | No | How many results to return, 1-50. | |
| arrive_after | No | HH:MM, local time at that airport. | |
| 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. | |
| 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. | |
| max_duration_hours | No | Longest itinerary to show, in hours. |
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 cover the safety profile (readOnly, idempotent, openWorld, non-destructive), so the bar is lower. The description adds stateful behavior beyond that: it consumes an outbound itinerary_id, returns complete itineraries with the trip total, and flips 'needs_leg' to false once the trip is whole, which tells the agent about the tool's role in a multi-step flow.
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 with zero padding. The most important fact (when to call it, and after what) is front-loaded, and each subsequent sentence adds a distinct piece of context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 11-param tool with full schema coverage and an output schema, the description covers sequencing, prerequisites, scope of filters, and the multi-leg flow. Nothing an agent needs to invoke it correctly is missing, and the return-shape mention is a harmless reinforcement of 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?
Schema description coverage is 100%, so the baseline is 3. The description adds value beyond the schema by clarifying filter scope ('Filters apply to the leg being chosen') and characterizing itinerary_id as an outbound or partial multi-city id, which the schema states only generically.
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 return flights') and anchors it to a sibling: 'Use after search_flights'. It distinguishes the tool from the plain flight search by its role as the second leg, so an agent can tell them apart 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 gives explicit sequencing ('Use after search_flights'), conditions for use ('when the traveler wants a specific return, or the next leg of a multi-city trip'), a repetition rule ('once per remaining leg'), and an exclusion ('Not needed for an outbound watch'). When-not guidance is present alongside the when.
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 (signed-in account: the live seat map is a paid lookup): 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. 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. Unsure of the code: call find_places. | |
| user_request | No | 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. | |
| 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 cover the safety profile (readOnly, idempotent, open-world), and the description adds material context beyond them: the live seat map is a paid lookup and requires a signed-in account. Auth and cost prerequisites are exactly the kind of disclosure 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 with the action ('Use to see...'), followed by a dense but useful output list and two short routing sentences. Every sentence earns its place, though the parenthetical about the paid lookup is slightly compressed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be re-explained, and the description still covers purpose, prerequisites, alternatives and exclusions for a 6-parameter tool. Nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so flight_number, origin, destination, depart_date and the cabin enum are already fully documented inline, including fallbacks like find_places. The description only restates 'needs the flight number, route and date', adding no syntax or constraint beyond the schema; 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 with scope: see which seats are open right now on one flight, and it enumerates the returned detail (seat numbers by row, window/aisle/middle/exit counts, pairs). It distinguishes itself from siblings by naming track_seats and explicitly excluding prices.
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 routing: use this for current availability, then use track_seats to be notified when a seat opens, and 'Not for prices' rules out price_calendar. The condition that selects each alternative is stated rather than implied.
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. 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 cover safety (readOnlyHint=false, idempotentHint=true, destructiveHint=false), so the bar is lower; the description still adds real behavioral context: alerts fire to the account's channels, alert_rule=any alerts on every move, and the traveler-confirmation gate. It doesn't state permissions beyond the confirmation requirement or what happens on repeat tracking of the same itinerary.
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 the confirmation gate, then organized by trip type, then alert behavior. It is dense and uses fragments, but every clause carries routing or behavior information; the 'any hears every move' phrasing is slightly compressed at the cost of readability.
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 five parameters and a full output schema, the description supplies the precondition (traveler confirmation), the trip-type routing that determines the required itinerary_id, and the alert-channel semantics. 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 baseline is 3, but the description adds cross-parameter meaning the schema lacks: itinerary_id semantics differ by trip type (a one-way id watches that outbound with its cheapest return, a complete id tracks the exact pairing), and it explains how target_price_usd overrides alert_rule in operational terms.
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') and immediately scopes it with the precondition 'from a search, after the traveler confirms'. It is clearly distinguishable from siblings like update_flight_tracking, stop_tracking_flight, and list_tracked_flights.
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 per-trip-type routing rules for which source tool to pull itinerary_id from (search_flights vs search_return_flights), which is real 'when to use' guidance. It lacks an explicit exclusion such as 'use update_flight_tracking to change an existing alert' or a note on duplicate alerts.
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. 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. 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 readOnlyHint=false, idempotentHint=true, destructiveHint=false, and openWorldHint=true, so the safety and idempotency profile is covered. The description adds genuine context beyond that: alerts are delivered to the account's channels when a watched seat opens, which tells the agent what the tool actually does over time.
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 purpose. The first sentence is long but each clause (modes, seats_together option) carries information; the second earns its place by describing alert delivery. No padding.
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 ten-parameter tracking-creation tool with an output schema, the description covers the action, the confirmation precondition, the seat-selection modes, and the alert behavior. Return values need not be described since an output schema exists. Minor gap: no explicit relationship to sibling tracking tools.
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 ten parameters including seat naming, seat_type, and seats_together. The description restates seats/seat_type/seats_together in prose but adds no syntax or format detail 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 states a specific verb and resource: 'start seat alerts on one flight,' which distinguishes creation from stop_tracking_seats and update_seat_tracking by the word 'start.' It does not name a sibling explicitly, so it falls short of the 5 reserved for explicit sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit precondition ('after the traveler confirms') and describes the two watch modes (named seats vs seat type), which is clear context. However, it never routes the agent away from seat_availability or toward update_seat_tracking, and offers no when-not guidance, so the usage story remains implied rather than complete.
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. Only the fields given change; 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. | |
| 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. | |
| clear_window | No | Remove the date window and watch the months instead. | |
| check_in_days | No | Hotel lists: only check in on these weekdays. | |
| 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. |
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 already flag destructiveHint=true and idempotentHint=true; the description adds the non-obvious side effect that changing the search discards deals found so far, which is genuinely useful beyond the annotations. A confirmation requirement is also surfaced. It does not detail permissions 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?
Front-loaded with the action and a compact enumeration, then two short constraint sentences. Every sentence earns its place; the field enumeration is slightly long but substitutes for scanning 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?
With an output schema present and rich annotations, the description's job is mostly update semantics and side effects, both of which it covers. Missing only explicit routing to sibling tools, which is minor given the dense schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% across 19 parameters, with rich per-field descriptions (units, ranges, flight vs hotel applicability), so the baseline is 3. The description's field list ('price bar, months or date window, nights, stops, airlines, preferred weekdays, name, guests, stars, channels') broadly maps to but does not enrich the schema, and 'guests' loosely corresponds to the 'adults' property.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (edit) and resource (bucket list) and enumerates the editable facets, so the agent knows exactly what this tool mutates. It does not explicitly differentiate from the add_*_bucket_list siblings, relying on 'edit' to imply an existing list, which keeps it just short of a 5.
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 operating context: only supplied fields change, a changed search resets prior deals, and 'Confirm first' signals a prerequisite. It does not name sibling alternatives (e.g., use add_flight_bucket_list to create), so it stops at 4.
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.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
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.
Live flight prices and working booking links for AI agents and travel apps.
Live hotel and flight prices compared across Booking.com, Agoda, Trip.com and Traveloka, in USD.
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.75MIT- 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.13 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.