Skip to main content
Glama

Find door-to-door trips

find_trips
Read-onlyIdempotent

Finds the best round trips from where someone lives, not just from one airport: it adds the train or bus to every airport they can reach and ranks all options door to door, by price, by total travel time, or balanced. Use it when someone wants flights from their home town, could fly from several airports, or asks for the cheapest or fastest way to get somewhere, e.g. "I live in New Haven: should I fly to Lisbon from JFK, Newark, Boston or Hartford?" Not for a search from one airport already chosen. For a one-way trip set one_way (the trip length is then ignored). Multi-city: search each leg as one_way only when the user gave dates for it; otherwise ask for the dates. Set mode only when the user says how they get to the airport (car, train, bus, any): by default a home in the US compares driving, a taxi to a near airport and public transport, and a home elsewhere uses the train or bus. A named departure airport is an ordinary search: pass it as from_airports, with the home town the user gave. A month or holiday without a year means the next one coming; don't ask which year, and don't ask for the trip length or to confirm a town: search, and the answer says what it assumed; when it has confirm, ask its question after showing the results. Any town or village works. The first search from a town we haven't seen takes about 20 seconds while we look up its train and bus connections; tell the user you're checking the connections from their town to each airport. Later searches from that town take a second or two. Give the home town and where to: airport, city or country codes, a list of them, or a region such as "Iberia" or "Southeast Asia". For "anywhere", a continent ("Asia") or "somewhere warm" it finds the cheapest places itself: pass "anywhere", "abroad" (another country) or the continent, or for warm, sunny or a beach the countries that fit the season with anywhere true; it searches the best 6 cities door to door. Dates are optional, but dates says where they came from: use "assumed" when the user gave none and you picked them (or left them out). Without them it searches departures in the next 3 months at 2-14 nights and says so. If the user gave no hint of when at all, one quick question about timing is fine. Example call: {"home": "New Haven", "destinations": ["LIS"], "dates": "from_user", "depart_from": "2027-03-01", "depart_to": "2027-03-31", "nights_min": 5, "nights_max": 9, "travellers": 2}. Show the answer's rows as a table with the airports each trip flies from and to, and give every booking link exactly as returned, as a clickable link (don't shorten or rewrite it); show every row of the answer, the picks first (it is already cut to what fits), and relay the answer's notes. Airports more than 8.5 hours from the door are left out and named in the answer (max_ground_hours changes that: set it only if the user says how far they would travel). Say when a ground leg is an estimate. If the answer's status isn't "ok", tell the user plainly what its note says and don't invent prices. Keep the user's own dates, trip length and places: if nothing is found, say so and offer to widen them, instead of widening on your own. Prices are in the traveller's home currency unless currency is given, per person; use the totals the answer gives for a party and don't convert or add up prices yourself. Prices come from recent searches on Aviasales and can change. Booking links are affiliate links: Doorfarer may earn a commission if you book, at no extra cost to you. Say so when you show them, and only then. When the user picks a trip, trip_details gives it step by step with a calendar file; when they ask which month is cheapest, price_calendar answers first, instantly. If an answer is wrong or confusing, report it with send_feedback.

Input Schema

NameRequiredDescriptionDefault
homeYesThe traveller's home town or village, e.g. "New Haven" or "Hamden, US". Not an airport. Add the country when the name is common.
modeNoHow the user gets to the airport: public (train or bus), train, bus, car (their own, parked at the airport), or any (car, taxi and public compete). Leave out unless the user says: then any for a home in the US, public elsewhere.
datesYes"from_user" whenever the user named any time at all (a month, season, holiday, "next week"); "assumed" only when they named none and you picked dates or left them out.
limitNoRows to return, 1-25. Default: the picks plus the best trip from each airport.
one_wayNoTrue if the user wants one way only: then the trip length is ignored.
anywhereNoTrue to find the cheapest places anywhere in the countries or regions named, instead of searching each one's biggest airports. A continent (Asia, Europe), "anywhere" or "abroad" (outside the home country) in destinations always searches this way. For "somewhere warm" or "a beach", pass the countries that fit the season and set this.
currencyNoISO code (USD, GBP, EUR) to show prices in. Default: the traveller's home currency.
priorityNoWhat matters most: budget (the cheapest door to door), time (the fastest) or balanced. Default balanced; the picks show the cheapest, the fastest and the balanced trip either way.balanced
depart_toNoThe window to leave in: last day. A window of about six months at most, within the next year.
nights_maxNoTrip length in nights: longest. Default 14.
nights_minNoTrip length in nights: shortest. Default 2.
travellersNoAdults travelling together. Default 1.
depart_fromNoThe window to leave in: first day. Leave out with depart_to for the next 3 months. A window of about six months at most, within the next year.
destinationsYesWhere to: airport codes (LIS), city codes (NYC), country codes (PT), a region, a continent (Asia), "anywhere" or "abroad" (outside the home country).
from_airportsNoOnly these departure airports. For narrowing a previous answer.
max_ground_hoursNoThe most hours from the front door to the departure airport, one way. Default 8.5: farther airports are left out and named in the answer. Set it only when the user says how far they would travel to the airport, or to include the far ones the answer names.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed18 schema fields changed
    • changedInput schema / properties / depart_from / description
      Previous value: -"The window to leave in: first day. Leave out with depart_to for the next 3 months. A window of at most 183 days, within the next 12 months."New value: +"The window to leave in: first day. Leave out with depart_to for the next 3 months. A window of about six months at most, within the next year."
    • changedInput schema / properties / depart_to / description
      Previous value: -"The window to leave in: last day. A window of at most 183 days, within the next 12 months."New value: +"The window to leave in: last day. A window of about six months at most, within the next year."
    • changedInput schema / properties / destinations / description
      Previous value: -"Where to: airport codes (LIS), city codes (NYC), country codes (PT), a region, a continent (Asia), \"anywhere\" or \"abroad\" (outside the home country). At most 6."New value: +"Where to: airport codes (LIS), city codes (NYC), country codes (PT), a region, a continent (Asia), \"anywhere\" or \"abroad\" (outside the home country)."
    • addedInput schema / properties / destinations / items / maxLength
      Added value: +80
    • changedInput schema / properties / from_airports / anyOf
      Previous value: -[
      -  {
      -    "items": {
      -      "type": "string"
      -    },
      -    "type": "array"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "items": {
      +      "maxLength": 80,
      +      "type": "string"
      +    },
      +    "maxItems": 8,
      +    "type": "array"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / from_airports / description
      Previous value: -"Only these departure airports. For narrowing a previous answer. At most 8."New value: +"Only these departure airports. For narrowing a previous answer."
    • removedInput schema / properties / from_airports / maxItems
      Removed value: -8
    • changedInput schema / properties / home / description
      Previous value: -"The traveller's home town or village, e.g. \"New Haven\" or \"Hamden, US\". Not an airport. Add the country when the name is common. At most 80 characters."New value: +"The traveller's home town or village, e.g. \"New Haven\" or \"Hamden, US\". Not an airport. Add the country when the name is common."
    • addedInput schema / properties / home / maxLength
      Added value: +80
    • changedInput schema / properties / limit / anyOf
      Previous value: -[
      -  {
      -    "type": "integer"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "maximum": 25,
      +    "minimum": 1,
      +    "type": "integer"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / nights_max / anyOf
      Previous value: -[
      -  {
      -    "type": "integer"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "maximum": 180,
      +    "minimum": 1,
      +    "type": "integer"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / nights_max / description
      Previous value: -"Trip length in nights: longest. Default 14. 1 to 180."New value: +"Trip length in nights: longest. Default 14."
    • changedInput schema / properties / nights_min / anyOf
      Previous value: -[
      -  {
      -    "type": "integer"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "maximum": 180,
      +    "minimum": 1,
      +    "type": "integer"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / nights_min / description
      Previous value: -"Trip length in nights: shortest. Default 2. 1 to 180."New value: +"Trip length in nights: shortest. Default 2."
    • changedInput schema / properties / priority / enum
      Previous value: -[
      -  "budget",
      -  "time",
      -  "balanced"
      -]New value: +[
      +  "budget",
      +  "time",
      +  "balanced",
      +  "cheapest",
      +  "fastest"
      +]
    • changedInput schema / properties / travellers / description
      Previous value: -"Adults travelling together. Default 1. 1 to 9."New value: +"Adults travelling together. Default 1."
    • addedInput schema / properties / travellers / maximum
      Added value: +9
    • addedInput schema / properties / travellers / minimum
      Added value: +1
  2. Changed2 schema fields changed
    • changedInput schema / properties / priority / description
      Previous value: -"What matters most."New value: +"What matters most: budget (the cheapest door to door), time (the fastest) or balanced. Default balanced; the picks show the cheapest, the fastest and the balanced trip either way."
    • changedInput schema / properties / travellers / description
      Previous value: -"Adults travelling together. 1 to 9."New value: +"Adults travelling together. Default 1. 1 to 9."
  3. Changed2 schema fields changed
    • changedInput schema / properties / nights_max / description
      Previous value: -"Trip length in nights: longest. Default 14. 1 to 30."New value: +"Trip length in nights: longest. Default 14. 1 to 180."
    • changedInput schema / properties / nights_min / description
      Previous value: -"Trip length in nights: shortest. Default 2. 1 to 30."New value: +"Trip length in nights: shortest. Default 2. 1 to 180."
  4. First observed

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already cover safety (readOnly, idempotent, non-destructive, open world), yet the description adds substantial operational context: ~20s first-search latency for an unseen town plus caching afterward, a hard 8.5-hour ground-leg cutoff that silently drops airports, price provenance (Aviasales), affiliate-link disclosure duty, and non-ok status handling. It even constrains the agent not to widen dates on its own and not to do currency math.

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: purpose, use case, exclusion, then mechanics, then a worked call and presentation rules. Every rule is operational rather than filler, but it is a dense wall of prose that re-explains several defaults already present in the schema (anywhere, dates, nights), and the example call sits mid-paragraph rather than being visually separated.

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 16-parameter tool with no output schema, it covers what the agent would otherwise have to guess: the shape and ordering of returned rows, that the result is pre-trimmed to top picks, that notes must be relayed, that far-door airports are excluded and named, and that prices are per person in home currency. Nothing needed to call it or present results appears missing.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3; the description earns above that by giving decision rules the schema cannot express, e.g. set mode only when the user says how they reach the airport, with per-country defaults, and how one_way, anywhere, max_ground_hours and the dates enum map to user intent. It restates some enum meanings already in the schema, which keeps it from a 5.

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?

Opens with a specific verb+resource and an unusual differentiator: it builds door-to-door round trips from a home town rather than from a chosen airport. It explicitly contrasts itself with a single-airport search and names siblings (trip_details, price_calendar, send_feedback) by role, so an agent can route correctly without opening schemas.

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

Usage Guidelines5/5

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

Gives explicit when-to-use triggers (home town, multiple airports, cheapest/fastest question), an explicit exclusion ("Not for a search from one airport already chosen"), and concrete branching rules for one-way, multi-city, unknown year, and when a clarifying question is acceptable. It also routes to the right sibling for the follow-up intent (trip_details when a trip is picked, price_calendar for cheapest month).

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