Skip to main content
Glama

Price calendar

price_calendar
Read-onlyIdempotent

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

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

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

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

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

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

Input Schema

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

Output Schema

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

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed3 schema fields changed
    • addedInput schema / properties / depart_from
      Added value: +{
      +  "anyOf": [
      +    {
      +      "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "YYYY-MM-DD, with depart_to: only departures in the traveler's own window (\"any day before Christmas\" is December 1 to 24; \"mid-March through April\" is March 15 to April 30). It can run to the end of the month after depart_from.",
      +  "title": "Depart From"
      +}
    • addedInput schema / properties / depart_to
      Added value: +{
      +  "anyOf": [
      +    {
      +      "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "YYYY-MM-DD, the last day the traveler could leave.",
      +  "title": "Depart To"
      +}
    • changedInput schema / properties / trip_length_days / anyOf
      Previous value: -[
      -  {
      -    "maximum": 30,
      -    "minimum": 1,
      -    "type": "integer"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "maximum": 90,
      +    "minimum": 1,
      +    "type": "integer"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
  2. Changed9 schema fields changed
    • changedInput schema / properties / max_stops / description
      Previous value: -"Most stops allowed: 0 nonstop, 1, or 2."New value: +"Most stops allowed: 0 nonstop, 1, or 2 (2 or more: any number)."
    • changedInput schema / properties / max_stops / maximum
      Previous value: -2New value: +9
    • changedInput schema / properties / month / description
      Previous value: -"First month to show, YYYY-MM. Empty means this month."New value: +"The month the traveler named, as YYYY-MM. Leave it empty only when the traveler asked about the next few weeks. Do not choose a month for the traveler."
    • addedInput schema / properties / trip_length_days / anyOf
      Added value: +[
      +  {
      +    "maximum": 30,
      +    "minimum": 1,
      +    "type": "integer"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / trip_length_days / default
      Previous value: -7New value: +null
    • changedInput schema / properties / trip_length_days / description
      Previous value: -"Nights away, round trips only."New value: +"How many nights the traveler wants to stay. Round trips only. Every price in the calendar is for exactly this many nights. If the traveler has not told you how many nights, ask them. Do not pick a number for the traveler."
    • removedInput schema / properties / trip_length_days / maximum
      Removed value: -30
    • removedInput schema / properties / trip_length_days / minimum
      Removed value: -1
    • removedInput schema / properties / trip_length_days / type
      Removed value: -"integer"
  3. Changed1 schema field changed
    • changedInput schema / properties / checked_bags / description
      Previous value: -"Checked bags per traveler (0-2). Prices then include the bag fees: search_flights shows them as price_with_bags next to the fare; a calendar or bucket list prices every day with them."New value: +"Checked bags per traveler (0-2), priced only for flights within the US and Canada (elsewhere the answer says the prices do not include them). Prices then include the bag fees: search_flights shows them as price_with_bags next to the fare; a calendar or bucket list prices every day with them."
  4. Changed13 schema fields changed
    • addedInput schema / properties / arrive_after
      Added value: +{
      +  "anyOf": [
      +    {
      +      "pattern": "^\\d{2}:\\d{2}$",
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "HH:MM, local time at that airport.",
      +  "examples": [
      +    "06:00",
      +    "21:30"
      +  ],
      +  "title": "Arrive After"
      +}
    • addedInput schema / properties / arrive_before
      Added value: +{
      +  "anyOf": [
      +    {
      +      "pattern": "^\\d{2}:\\d{2}$",
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "HH:MM, local time at that airport.",
      +  "examples": [
      +    "06:00",
      +    "21:30"
      +  ],
      +  "title": "Arrive Before"
      +}
    • addedInput schema / properties / carry_on_bags
      Added value: +{
      +  "anyOf": [
      +    {
      +      "maximum": 1,
      +      "minimum": 0,
      +      "type": "integer"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Carry-on bags per traveler (0-1). Prices then include the bag fees: search_flights shows them as price_with_bags next to the fare; a calendar or bucket list prices every day with them.",
      +  "title": "Carry On Bags"
      +}
    • addedInput schema / properties / checked_bags
      Added value: +{
      +  "anyOf": [
      +    {
      +      "maximum": 2,
      +      "minimum": 0,
      +      "type": "integer"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Checked bags per traveler (0-2). Prices then include the bag fees: search_flights shows them as price_with_bags next to the fare; a calendar or bucket list prices every day with them.",
      +  "title": "Checked Bags"
      +}
    • addedInput schema / properties / connecting_airports
      Added value: +{
      +  "anyOf": [
      +    {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Only itineraries that change planes at these airports (codes or city codes), nonstops included: for 'US connections only' name the hubs.",
      +  "examples": [
      +    [
      +      "MIA",
      +      "ATL",
      +      "IAH"
      +    ]
      +  ],
      +  "title": "Connecting Airports"
      +}
    • addedInput schema / properties / depart_after
      Added value: +{
      +  "anyOf": [
      +    {
      +      "pattern": "^\\d{2}:\\d{2}$",
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "HH:MM, local time at that airport.",
      +  "examples": [
      +    "06:00",
      +    "21:30"
      +  ],
      +  "title": "Depart After"
      +}
    • addedInput schema / properties / depart_before
      Added value: +{
      +  "anyOf": [
      +    {
      +      "pattern": "^\\d{2}:\\d{2}$",
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "HH:MM, local time at that airport.",
      +  "examples": [
      +    "06:00",
      +    "21:30"
      +  ],
      +  "title": "Depart Before"
      +}
    • addedInput schema / properties / exclude_airlines
      Added value: +{
      +  "anyOf": [
      +    {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Leave out itineraries with any flight sold by these carriers (IATA codes, names or an alliance), by flight number or airline name: for 'not Gol' or 'avoid Air India'.",
      +  "examples": [
      +    [
      +      "G3"
      +    ],
      +    [
      +      "Gulf Air",
      +      "Air India"
      +    ]
      +  ],
      +  "title": "Exclude Airlines"
      +}
    • addedInput schema / properties / exclude_connecting_airports
      Added value: +{
      +  "anyOf": [
      +    {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Leave out itineraries that change planes at these airports (codes or city codes).",
      +  "examples": [
      +    [
      +      "DOH"
      +    ],
      +    [
      +      "LOND"
      +    ]
      +  ],
      +  "title": "Exclude Connecting Airports"
      +}
    • addedInput schema / properties / lower_emissions
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "boolean"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Only itineraries with lower emissions than is typical for the route.",
      +  "title": "Lower Emissions"
      +}
    • addedInput schema / properties / max_duration_hours
      Added value: +{
      +  "anyOf": [
      +    {
      +      "maximum": 96,
      +      "minimum": 1,
      +      "type": "integer"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Longest itinerary to show, in hours.",
      +  "title": "Max Duration Hours"
      +}
    • addedInput schema / properties / max_layover_hours
      Added value: +{
      +  "anyOf": [
      +    {
      +      "maximum": 26,
      +      "minimum": 0.5,
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Longest layover allowed at every connection, in hours (half hours allowed): for 'layovers no longer than 5 hours'.",
      +  "title": "Max Layover Hours"
      +}
    • addedInput schema / properties / min_layover_hours
      Added value: +{
      +  "anyOf": [
      +    {
      +      "maximum": 26,
      +      "minimum": 0.5,
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Shortest layover allowed at every connection, in hours (half hours allowed): for 'at least 2 hours to connect'.",
      +  "title": "Min Layover Hours"
      +}
  5. Changed7 schema fields changed
    • changedInput schema / properties / destination / description
      Previous value: -"A 3-letter airport code (JFK), or a city code that searches every airport in the city (SlickTrip's 4-letter codes: NYCA New York, LOND London, ROME Rome, TYOA Tokyo). Up to 3 places joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. Unsure of the code: call find_places."New value: +"A 3-letter airport code (JFK), or a city code that searches every airport in the city (SlickTrip's 4-letter codes: NYCA New York, LOND London, ROME Rome, TYOA Tokyo). Up to 3 places joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. When the traveler names a city rather than an airport, send the city (its name or code), not one of its airports: one airport can miss the cheapest or the only flights. Unsure of the code: call find_places."
    • addedInput schema / properties / lap_infants
      Added value: +{
      +  "default": 0,
      +  "description": "Babies under 2 who will sit on an adult's lap (no seat of their own). Not counted in travelers and not in the quoted fare; the answer says how airlines charge them.",
      +  "maximum": 9,
      +  "minimum": 0,
      +  "title": "Lap Infants",
      +  "type": "integer"
      +}
    • changedInput schema / properties / origin / description
      Previous value: -"A 3-letter airport code (JFK), or a city code that searches every airport in the city (SlickTrip's 4-letter codes: NYCA New York, LOND London, ROME Rome, TYOA Tokyo). Up to 3 places joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. Unsure of the code: call find_places."New value: +"A 3-letter airport code (JFK), or a city code that searches every airport in the city (SlickTrip's 4-letter codes: NYCA New York, LOND London, ROME Rome, TYOA Tokyo). Up to 3 places joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. When the traveler names a city rather than an airport, send the city (its name or code), not one of its airports: one airport can miss the cheapest or the only flights. Unsure of the code: call find_places."
    • changedInput schema / properties / travelers / description
      Previous value: -"Travelers. Fares are quoted for all of them together; one booking holds up to 9 (a larger group gets a suggested split)."New value: +"Travelers who need a seat (adults and children). Fares are quoted for all of them together; one booking holds up to 9 (a larger group gets a suggested split). A baby under 2 on a lap is not a seat and is not counted here."
    • changedInput schema / properties / user_request / anyOf
      Previous value: -[
      -  {
      -    "maxLength": 300,
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "maxLength": 500,
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / user_request / description
      Previous value: -"Optional. The traveler's current travel request, briefly, in their own words. Used to interpret this search, suggest a corrected search if it fails, and improve SlickTrip's search. Include only this request; not earlier conversation, names, contact details, or payment or ID information."New value: +"Optional, and it works in the traveler's favor. Quote the traveler's latest message about this trip exactly as they wrote it, in their wording, language and spelling, not a summary. SlickTrip runs its own travel parser on these words: when a search fails or comes back empty, it compares what the traveler said with the arguments sent and returns a corrected search, so you can fix it without asking them again. It has caught Cancun sent as MEX instead of CUN, and travelers dropped from the party. A summary loses exactly the details it checks. If the message only answers a question (\"yes, the 20th\"), quote the message where they asked for the trip. Send the same quote on every call for this request. Leave out anything not about the trip, and never include names, contact details, or payment or ID information. The words also help SlickTrip improve its search."
    • changedInput schema / properties / user_request / examples
      Previous value: -[
      -  "cheap nonstop to Lisbon early May",
      -  "family of 8 in Albufeira, 4 nights mid November"
      -]New value: +[
      +  "we're 6 friends from madrid, want somewhere cheap and fun in europe dec 20-24, morning flights pls",
      +  "necesito llevar a mi mamá de Calgary a Kolkata a fines de octubre, no puede hacer escala en Estados Unidos"
      +]
  6. Changed4 schema fields changed
    • changedInput schema / properties / destination / description
      Previous value: -"A 3-letter airport code (JFK), or a city code that searches every airport in the city (NYC, LON, ROM, TYO). Up to 3 airports joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. Unsure of the code: call find_places."New value: +"A 3-letter airport code (JFK), or a city code that searches every airport in the city (SlickTrip's 4-letter codes: NYCA New York, LOND London, ROME Rome, TYOA Tokyo). Up to 3 places joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. Unsure of the code: call find_places."
    • changedInput schema / properties / destination / examples
      Previous value: -[
      -  "JFK",
      -  "ROM",
      -  "JFK_EWR"
      -]New value: +[
      +  "JFK",
      +  "NYCA",
      +  "JFK_EWR"
      +]
    • changedInput schema / properties / origin / description
      Previous value: -"A 3-letter airport code (JFK), or a city code that searches every airport in the city (NYC, LON, ROM, TYO). Up to 3 airports joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. Unsure of the code: call find_places."New value: +"A 3-letter airport code (JFK), or a city code that searches every airport in the city (SlickTrip's 4-letter codes: NYCA New York, LOND London, ROME Rome, TYOA Tokyo). Up to 3 places joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. Unsure of the code: call find_places."
    • changedInput schema / properties / origin / examples
      Previous value: -[
      -  "JFK",
      -  "ROM",
      -  "JFK_EWR"
      -]New value: +[
      +  "JFK",
      +  "NYCA",
      +  "JFK_EWR"
      +]
  7. First observed

TDQS

A4.8/5.0
Behavior5/5

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

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

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

Conciseness4/5

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

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

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

Completeness5/5

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

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

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

Parameters4/5

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

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

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

Purpose5/5

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

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

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

Usage Guidelines5/5

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

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

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources