flights-mcp
Integrates with Google Flights via SerpAPI to provide real-time flight price searches, destination exploration, multi-city trip planning, open-jaw routing, price insights, and booking links.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@flights-mcpSearch flights from London to Tokyo in May"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
flights-mcp
An MCP server for holiday flight planning powered by Google Flights via SerpAPI. Give any Claude-compatible AI assistant the ability to search real-time flight prices, discover destinations, compare airports, plan multi-country trips, and get booking links.
What it can do
Find airports
Resolve any place name — a city, region, or country — into airport IATA codes. Understands that "Nottingham" means East Midlands (EMA), that "London" covers six airports, that "Argentina" has a dozen options, and that "Patagonia" covers airports across both Argentina and Chile (BRC, USH, FTE, PUQ, NQN, CRD, REL, BBA).
Explore destinations
Open-ended holiday planning: "Where can I fly from East Midlands in June for under £500?" Returns destinations with flight prices, hotel prices, best travel dates, flight duration, and stops — all sourced from Google Travel Explore.
Also works for domestic route discovery: explore from AEP (Buenos Aires domestic) to see all Argentine destinations, or SCL to see Chilean routes.
Can filter by interest:
Beaches (
/m/0b3yr)Outdoors (
/g/11bc58l13w)History (
/m/03g3w)Museums (
/m/09cmq)Skiing (
/m/071k0)
Search flights
Full Google Flights search with every filter available:
One-way, round-trip, or multi-city
Economy through First class
Nonstop only or max stops
Specific airlines or alliances (Star Alliance, SkyTeam, Oneworld)
Departure/arrival time windows
Max price, max duration, layover duration
Low-emission flights only
Basic economy exclusion (US domestic)
Returns full flight details: price, duration, stops, airline, aircraft type, legroom, amenities, carbon emissions, and price insights (lowest price, typical range, price history).
Search across a date range
Find the cheapest day to fly: "When's the cheapest time to fly London to Buenos Aires in April?" Searches every date in a range and returns results sorted by price. Up to 30 days, one API call per date.
Compare departure airports
Find the cheapest airport to fly from: "Should I fly from East Midlands, Birmingham, or Manchester to Buenos Aires?" Looks up all airports near a location and searches from each one in parallel, returning a ranked price comparison.
Plan an open-jaw trip
Fly into one country and out of another without backtracking. Handles the full combination search automatically: finds all nearby departure airports, tries both directions (fly into Argentina/out of Chile vs fly into Chile/out of Argentina), and returns both options ranked by total combined price. Only 4 API credits regardless of how many airports are compared.
Check price insights
Get a quick read on whether prices for a route are currently cheap, typical, or expensive — without retrieving full flight listings. Returns the lowest recorded price, typical price range, price level, and a human-readable verdict (e.g. "Prices are 18% below typical — good time to book."). Uses 1 API credit.
Find cheapest arrival airport
The arrival-side counterpart to "compare departure airports". Resolves a destination like "Tokyo" or "Patagonia" to all nearby airports and searches each in parallel, returning a ranked list by price. Answers "Should I fly into EZE or AEP?" or "Which Patagonia airport is cheapest from London?". Uses one API credit per airport.
Find flights with a stopover
Search for a split itinerary via a hub city for a set number of days. "I want to fly London to Tokyo but spend 3 days in Dubai on the way — what are the cheapest options?" Searches origin → stopover and stopover → destination as separate one-way legs, optionally including a return leg too. Stopover location is resolved to airports automatically. Uses 2 API credits (3 with return).
Search a price calendar
Find the cheapest combination of departure and return dates for a round trip. "What's the cheapest week to fly London to New York in July?" Generates every (outbound, return) date pair from two date ranges and searches them all in parallel, returning results sorted by price with trip duration. Capped at 30 combinations. Uses 1 API credit per combination.
Plan a multi-stop trip
Chain together multiple legs for internal/domestic routing within a multi-country holiday. "I'm flying into Buenos Aires on Oct 17, want to visit Patagonia on Oct 23, then end in Santiago on Oct 28 — what are the cheapest flights for each leg?"
Location names are resolved to airports automatically — "Patagonia" becomes BRC, USH, FTE, PUQ, NQN, CRD, REL, BBA and a single search covers all of them. Returns the cheapest flight per leg plus up to 3 alternatives so you can compare specific airports (e.g. cheapest might be BRC/Bariloche but you can see FTE/El Calafate options for Perito Moreno). Uses N-1 API credits for N stops.
Get return flights
After finding an outbound flight, retrieve matching return options using the departure_token from the outbound result.
Get booking options
Get direct booking links from airlines and OTAs for a specific flight using the booking_token from any search result.
Related MCP server: Google Flights MCP
Tools
Tool | Description |
| Resolve a city/region/country to airport IATA codes |
| Discover where to fly and for how much |
| Full flight search with all filters |
| Find cheapest day to fly across a date range |
| Find cheapest outbound + return date combination |
| Are prices cheap, typical, or expensive right now? |
| Compare prices from all departure airports near a location |
| Compare prices into all arrival airports near a destination |
| Fly into one country, return from another — find cheapest combo |
| Plan internal legs of a multi-country trip |
| Split a long-haul via a stopover city for N days |
| Get return flights for a chosen outbound |
| Get booking links for a specific flight |
Setup
1. Get a SerpAPI key
Sign up at serpapi.com and get your API key. The free tier includes 100 searches/month.
2. Configure the environment
cp .env.example .env
# Edit .env and set your key:
# SERPAPI_KEYS=your_key_hereMultiple keys can be comma-separated for automatic rotation when one hits its quota:
SERPAPI_KEYS=key_one,key_two,key_three3. Build
npm install
npm run build4. Add to Claude Desktop
Edit your Claude Desktop config (~/Library/Application Support/Claude/claude_desktop_config.json on macOS, %APPDATA%\Claude\claude_desktop_config.json on Windows):
{
"mcpServers": {
"flights": {
"command": "node",
"args": ["/absolute/path/to/flights-mcp/build/index.js"],
"env": {
"SERPAPI_KEYS": "your_serpapi_key_here"
}
}
}
}Example workflows
"Where's cheap to fly from Nottingham this summer?"
find_airports("Nottingham")→ EMA, BHX, MAN, LHR, LGW, STNexplore_destinations(departure_id: "EMA,BHX,MAN", month: 7, travel_duration: 2)→ ranked list of destinations with prices
"Cheapest way to get from Nottingham to Buenos Aires"
compare_airport_prices(location: "Nottingham", arrival_id: "EZE", outbound_date: "2026-06-01", return_date: "2026-06-15")→ ranked by price across EMA, BHX, MAN, LHR, LGW
"When's cheapest to fly London to Tokyo in May?"
search_flights_flexible(departure_id: "LHR", arrival_id: "HND,NRT", date_from: "2026-05-01", date_to: "2026-05-31")→ price per day sorted cheapest first
"Nottingham to Argentina and Chile in October, cheapest open-jaw"
plan_open_jaw_trip(departure_location: "Nottingham", destination_a: "Argentina", destination_b: "Chile", outbound_date: "2026-10-17", return_date: "2026-10-31")→ compares EMA/BHX/MAN/LHR/LGW → EZE/AEP vs SCL, returns cheapest of: (UK→Argentina, Chile→UK) and (UK→Chile, Argentina→UK) with total prices
"Are London to Tokyo prices high right now?"
check_price_insights(departure_id: "LHR", arrival_id: "HND,NRT", outbound_date: "2026-07-15", return_date: "2026-07-29")→ price level, typical range, context string
"Which Tokyo airport is cheapest to fly into from London?"
find_cheapest_arrival_airport(departure_id: "LHR", arrival_location: "Tokyo", outbound_date: "2026-07-15", return_date: "2026-07-29")→ ranked comparison of NRT vs HND
"London to Tokyo but stop in Dubai for 3 nights"
find_stopover_flights(departure_id: "LHR", arrival_id: "NRT", outbound_date: "2026-07-15", stopover_location: "Dubai", stopover_days: 3, return_date: "2026-07-29")→ LHR→DXB leg + DXB→NRT leg + NRT→LHR return
"Cheapest week to fly London to New York in July"
search_price_calendar(departure_id: "LHR", arrival_id: "JFK,EWR", outbound_date_from: "2026-07-01", outbound_date_to: "2026-07-14", return_date_from: "2026-07-10", return_date_to: "2026-07-31")→ up to 30 (outbound, return) combinations sorted by price
"Buenos Aires to Patagonia to Santiago — internal legs"
plan_multi_stop_trip(trip: [{location: "Buenos Aires", date: "2026-10-17"}, {location: "Patagonia", date: "2026-10-23"}, {location: "Santiago", date: "2026-10-28"}])→ 2 API calls: AEP/EZE → BRC/USH/FTE/PUQ/NQN/CRD/REL/BBA, then those → SCL. Returns cheapest + alternatives per leg with total price.
"Argentina and Chile full trip"
plan_open_jaw_trip(...)→ find cheapest UK ↔ Argentina/Chile international legsplan_multi_stop_trip(...)→ find cheapest internal legs between citiesget_booking_options(booking_token: "...")→ direct booking links for each flight
Available Tools
13 toolscheck_price_insightsA
Check whether flight prices for a route are currently cheap, typical, or expensive. Returns price_insights data: lowest recorded price, typical price range, price level, and a human-readable context string (e.g. "Prices are 18% below typical — good time to book.").
Auto-detects round-trip vs one-way based on whether return_date is provided. Uses 1 API credit.
| Name | Required | Description | Default |
|---|---|---|---|
| gl | No | Country code (e.g. us, gb) | |
| hl | No | Language code (e.g. en) | |
| adults | No | Number of adults (default 1) | |
| currency | No | Currency code (e.g. USD, GBP, EUR) | |
| arrival_id | Yes | Arrival airport IATA code (e.g. JFK) or Google kgmid | |
| return_date | No | Return date (YYYY-MM-DD). Omit for one-way. | |
| departure_id | Yes | Departure airport IATA code (e.g. LHR) or Google kgmid | |
| travel_class | No | 1=Economy, 2=Premium economy, 3=Business, 4=First | |
| outbound_date | Yes | Outbound date (YYYY-MM-DD) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the return payload (lowest price, typical range, price level, context string), the round-trip auto-detection, and the API credit cost. This goes beyond basic purpose, though edge-case behaviors (e.g., invalid dates, missing data) are not covered.
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 deliver purpose, output details, an example, behavior, and cost. Every clause earns its place; no redundancy or fluff.
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?
Despite 9 parameters and no output schema, the description covers the essential behavioral context: what the tool returns, how round-trip vs one-way is inferred, and resource cost. It complements the schema well and gives the agent a solid understanding of when and how to invoke it.
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. The description adds meaningful context: return_date omission indicates one-way, and 'route' implies departure_id/arrival_id are the key pair. This enriches the parameter semantics without repeating schema details.
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 uses a specific verb+resource ('Check whether flight prices for a route are currently cheap, typical, or expensive') and names the returned data ('price_insights data'). It clearly distinguishes this from sibling flight tools like search_flights or search_price_calendar by focusing on price level assessment of a specific route.
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 intended use case is explicit: determine if prices are cheap, typical, or expensive for a route. It also clarifies behavior for round-trip vs one-way via return_date presence. No explicit alternatives or when-not-to-use are stated, but the sibling list makes the tool's niche clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_airport_pricesA
Find the cheapest departure airport for a trip by searching from all major airports near a location in parallel. Answers "Should I fly from East Midlands, Birmingham, or Manchester to Buenos Aires?".
Uses one API credit per airport searched (default 5, max 10). Results are sorted by cheapest price.
| Name | Required | Description | Default |
|---|---|---|---|
| gl | No | Country code | |
| hl | No | Language code | |
| type | No | 1=Round trip, 2=One way (default) | |
| stops | No | 0=Any, 1=Nonstop only, 2=1 stop or fewer, 3=2 stops or fewer | |
| adults | No | Number of adults | |
| currency | No | Currency code (e.g. GBP, EUR, USD) | |
| location | Yes | Departure city or region to find nearby airports (e.g. 'Nottingham', 'Manchester', 'London') | |
| max_price | No | Maximum ticket price | |
| arrival_id | Yes | Arrival airport IATA code (e.g. EZE, SCL). Comma-separate for multiple. | |
| return_date | No | Return date for round-trips (YYYY-MM-DD) | |
| max_airports | No | How many nearby airports to compare (default 5) | |
| travel_class | No | 1=Economy, 2=Premium economy, 3=Business, 4=First | |
| outbound_date | Yes | Outbound date (YYYY-MM-DD) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It reveals that the tool searches airports in parallel, consumes one API credit per airport, has a default of 5 and max of 10 airports, and sorts results by cheapest price. This is valuable beyond a simple statement of purpose, though it does not describe the return format.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three tight sentences: a clear purpose statement, an illustrative example, and key constraints/behavior. Every sentence earns its place with no redundant prose, and the most important information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (13 parameters, no output schema), the description provides honest selection context: what it does, when to use it, and how cost/sorting behave. It does not describe the result structure, but for choosing the right tool among siblings, the description is sufficiently complete, and the rich schema covers input requirements.
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 description does not need to restate parameter meanings. It does add a link between max_airports and API credit cost ('Uses one API credit per airport searched (default 5, max 10)'), but this is more behavioral than parameter-semantic. Baseline 3 is appropriate since the schema already handles parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Find the cheapest departure airport for a trip by searching from all major airports near a location in parallel.' This clearly distinguishes the tool from siblings like find_cheapest_arrival_airport and search_flights by focusing on departure-airport comparison.
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?
Provides a concrete example of when to use it ('Should I fly from East Midlands, Birmingham, or Manchester to Buenos Aires?') which makes the intended use case clear. It does not explicitly name alternatives or say when not to use it, but the example plus the parallel search concept imply the comparison scenario.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
explore_destinationsA
Discover flight destinations and prices from a departure airport using Google Travel Explore. Ideal for open-ended holiday planning: "Where can I fly from London in June?" or "What's cheap from EMA this summer?".
Returns a list of destinations with flight price, hotel price, best travel dates, flight duration, and stops. Use month + travel_duration for flexible date search, or outbound_date + return_date for specific dates. Filter by interest (beaches, skiing, history, etc.) or region using arrival_area_id.
Also excellent for discovering domestic/internal flights: explore from AEP (Buenos Aires domestic airport) to see all Argentine destinations, or from SCL to see Chilean domestic routes.
| Name | Required | Description | Default |
|---|---|---|---|
| gl | No | Country code (e.g. gb, us) | |
| hl | No | Language code (e.g. en) | |
| bags | No | Number of carry-on bags | |
| type | No | 1=Round trip (default), 2=One way | |
| month | No | Month to travel (1-12). 0 or omit = next 6 months | |
| stops | No | 0=Any, 1=Nonstop only, 2=1 stop or fewer, 3=2 stops or fewer | |
| adults | No | Number of adults (default 1) | |
| children | No | Number of children | |
| currency | No | Currency code (e.g. GBP, EUR, USD) | |
| interest | No | Filter by destination type: /m/0b3yr=Beaches, /m/03g3w=History, /m/071k0=Skiing, /g/11bc58l13w=Outdoors, /m/09cmq=Museums | |
| max_price | No | Maximum ticket price | |
| arrival_id | No | Specific arrival airport/city — omit to explore all destinations | |
| return_date | No | Specific return date (YYYY-MM-DD) | |
| departure_id | Yes | Departure airport IATA code or kgmid (e.g. EMA, LHR, /m/04jpl). Comma-separate for multiple. | |
| max_duration | No | Maximum flight duration in minutes | |
| travel_class | No | 1=Economy, 2=Premium economy, 3=Business, 4=First | |
| outbound_date | No | Specific outbound date (YYYY-MM-DD), overrides month | |
| arrival_area_id | No | Google kgmid for a region or country to limit results (e.g. /m/02j9z for Europe) | |
| travel_duration | No | 1=Weekend, 2=1 week (default), 3=2 weeks | |
| include_airlines | No | Comma-separated airline codes or alliance names (STAR_ALLIANCE, SKYTEAM, ONEWORLD) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states what the tool returns ('a list of destinations with flight price, hotel price, best travel dates, flight duration, and stops') and describes two distinct usage modes. It also gives a concrete example of domestic flight exploration. This goes beyond a simple restatement, though it stops short of mentioning limitations like result size or pagination. Given the read-only nature, this level of transparency is solid.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is moderately long but every sentence contributes useful information. It opens with the core purpose, then describes outputs, then usage modes, then filters, and closes with a practical domestic example. There is no filler or redundancy; it is well-structured and earn its length, though a few sentences could be tightened without loss.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 20 parameters, no output schema, and no annotations, the description provides a strong contextual overlay. It covers return values, flexible vs. specific date usage, filters, and a niche use case. It doesn't explicitly explain all 20 parameters, but the schema handles that. The description is sufficient for an agent to understand when and how to use the tool, especially given the sibling context. It could mention edge cases (e.g., parameter precedence), but this is not a major 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?
Although schema coverage is 100% (baseline 3), the description adds meaningful parameter semantics beyond the schema. It explains parameter combinations: 'Use month + travel_duration for flexible date search, or outbound_date + return_date for specific dates' and gives filter guidance: 'Filter by interest (beaches, skiing, history, etc.) or region using arrival_area_id.' It also provides a concrete example for arrival_id (AEP) to clarify domestic usage. This adds context not present in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Discover flight destinations and prices from a departure airport using Google Travel Explore.' It uses a specific verb (discover) with a clear resource (destinations/prices) and provides concrete examples like 'Where can I fly from London in June?' This distinguishes it from siblings such as search_flights, which would focus on specific flight searches, and it explicitly mentions open-ended holiday planning, making the purpose unmistakable.
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 description gives clear guidance on when to use the tool: 'Ideal for open-ended holiday planning' with examples of queries. It also differentiates between flexible date search (month + travel_duration) and specific dates (outbound_date + return_date), and highlights a special use case for domestic flights. While it doesn't explicitly name alternatives or say 'when not to use,' the context strongly implies the tool is for exploratory discovery rather than specific flight booking, and the sibling list provides natural alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_airportsA
Find airport IATA codes by city, region, country, or airport name. Use this before searching flights to resolve place names to airport codes — especially useful for finding all airports near a city (e.g. 'Nottingham' returns EMA, BHX, MAN, LHR...) or all major airports in a country/region (e.g. 'Argentina' returns EZE, AEP, COR...). Returns IATA code, name, city, country, and any additional cities/regions served.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results to return (default 10) | |
| query | Yes | City, region, country, or airport name/code to search for (e.g. 'Nottingham', 'Argentina', 'London', 'JFK') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses return fields ('IATA code, name, city, country, and any additional cities/regions served') and shows example outputs. It does not cover edge cases like no matches, but for a read-only search tool this is adequate.
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, front-loaded with purpose. Each sentence serves a role: definition, usage context, and return value details. No filler or redundancy.
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?
Despite no output schema, the description explains return content and gives examples of behavior. It covers purpose, usage, and output, which is complete for a low-complexity lookup tool. Minor gap: no mention of limit behavior, but that's in the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for both parameters, providing baseline 3. The description adds meaningful context for 'query' with examples and clarification of accepted input types (city, region, country, airport name), going beyond the schema's generic description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Find airport IATA codes by city, region, country, or airport name.' It clearly scopes the tool's function and distinguishes it from flight-search siblings by positioning it as a pre-flight resolution step.
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 usage guidance is provided: 'Use this before searching flights to resolve place names to airport codes.' It also gives concrete examples (Nottingham, Argentina) that illustrate when it is especially useful, though it does not explicitly mention alternatives or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_cheapest_arrival_airportA
Find the cheapest airport to fly into at a destination by comparing all airports near a location in parallel. The arrival-side counterpart to compare_airport_prices.
Answers "Which Tokyo airport is cheapest to fly into from London?" or "Should I fly into EZE or AEP in Buenos Aires?". Uses one API credit per airport (default 5, max 10). Results sorted by cheapest price.
| Name | Required | Description | Default |
|---|---|---|---|
| gl | No | Country code | |
| hl | No | Language code | |
| type | No | 1=Round trip, 2=One way (default) | |
| stops | No | 0=Any, 1=Nonstop only, 2=1 stop or fewer, 3=2 stops or fewer | |
| adults | No | Number of adults | |
| currency | No | Currency code (e.g. GBP, EUR, USD) | |
| max_price | No | Maximum ticket price | |
| return_date | No | Return date for round-trips (YYYY-MM-DD) | |
| departure_id | Yes | Fixed departure airport IATA code (e.g. LHR). Comma-separate for multiple. | |
| max_airports | No | How many destination airports to compare (default 5) | |
| travel_class | No | 1=Economy, 2=Premium economy, 3=Business, 4=First | |
| outbound_date | Yes | Outbound date (YYYY-MM-DD) | |
| arrival_location | Yes | Destination city, region, or country to compare airports for (e.g. 'Tokyo', 'Patagonia', 'New York') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses that it compares airports in parallel, consumes one API credit per airport (default 5, max 10), and returns results sorted by price. This is useful behavioral context beyond a generic 'search'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences that pack the purpose, use cases, and cost model with no fluff. It is front-loaded with the core function and each sentence adds value.
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 13 parameters and no output schema or annotations, the description provides the essential context: how the tool works, example prompts, cost implications, and result ordering. It doesn't detail return fields, but that's not required given the description's scope. A 4 is appropriate.
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 input schema already documents all 13 parameters thoroughly (100% coverage). The description adds the default/max of max_airports, which is already in the schema, and doesn't introduce additional semantic meaning beyond confirming the use of arrival_location. 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 clearly states the tool finds the cheapest airport to fly into at a destination by comparing airports in parallel. It provides concrete example questions and explicitly names itself as the arrival-side counterpart to compare_airport_prices, distinguishing it from siblings.
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 description frames when to use it via examples and the phrase 'arrival-side counterpart to compare_airport_prices,' implying the primary use case is choosing among arrival airports. It doesn't explicitly list exclusions but gives clear context, warranting a 4.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_stopover_flightsA
Search for a split itinerary via a stopover city — fly into a hub, spend N days, then continue to your final destination. E.g. LHR → Dubai (3 days) → NRT.
Searches: origin → stopover on outbound_date, stopover → destination on outbound_date + stopover_days. Optionally also searches destination → origin on return_date. Stopover location is resolved to airports automatically.
Uses 2 API credits (3 if return_date provided).
| Name | Required | Description | Default |
|---|---|---|---|
| gl | No | Country code | |
| hl | No | Language code | |
| stops | No | Connection stops per leg: 0=Any, 1=Nonstop only, 2=1 or fewer, 3=2 or fewer | |
| adults | No | Number of adults | |
| currency | No | Currency code (e.g. GBP, EUR, USD) | |
| max_price | No | Maximum price per leg | |
| arrival_id | Yes | Final destination airport IATA code (e.g. NRT). Comma-separate for multiple. | |
| return_date | No | Return date (YYYY-MM-DD). If provided, also searches destination → origin return leg. | |
| departure_id | Yes | Origin airport IATA code (e.g. LHR) | |
| travel_class | No | 1=Economy, 2=Premium economy, 3=Business, 4=First | |
| outbound_date | Yes | Date to fly origin → stopover (YYYY-MM-DD) | |
| stopover_days | Yes | Number of days to spend at the stopover (1–14) | |
| stopover_location | Yes | City or country to stop at (e.g. 'Dubai', 'Singapore', 'Bangkok'). Resolved to up to 3 airports automatically. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description discloses API credit costs (2/3 credits), automatic airport resolution, and the precise date scheduling logic. It also notes the optional return leg. There's no mention of response format or error behavior, but the key behavioral traits are covered.
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 paragraphs plus a concise example, with no filler. The most important info (what and how) is upfront.
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 13-param tool with no output schema, the description covers the core workflow, cost, and optional return leg. It doesn't describe result structure, but given the schema's full parameter coverage, the tool's behavior is sufficiently specified.
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?
While schema covers all 13 params, the description adds the temporal relationship (outbound_date + stopover_days) and clarifies the optional return_date behavior. It also emphasizes the auto-resolution of stopover_location, though that's already in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb ('Search') and resource ('a split itinerary via a stopover city'), then illustrates with an example (LHR → Dubai → NRT). It clearly distinguishes from sibling tools like simple search_flights or plan_multi_stop_trip by defining the stopover structure.
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 provides a clear scenario and the structural logic of the search (origin→stopover, stopover→destination, optional return). It doesn't explicitly name alternative tools or when not to use it, but the use case is evident. The example and optional return mention provide context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_booking_optionsA
Get booking links and price breakdown for a specific flight. Pass the booking_token from a search_flights or get_return_flights result. Returns booking options from different airlines/OTAs with direct links.
| Name | Required | Description | Default |
|---|---|---|---|
| gl | No | Country code | |
| hl | No | Language code | |
| currency | No | Currency code | |
| arrival_id | Yes | Original arrival airport IATA code | |
| departure_id | Yes | Original departure airport IATA code | |
| booking_token | Yes | The booking_token from a flight result to get booking options and deep links | |
| outbound_date | Yes | Original outbound date (YYYY-MM-DD) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that the tool returns booking options from different airlines/OTAs with direct links, which is useful. However, it does not mention whether the operation is read-only, any side effects, or requirements like the need to pass all original request parameters (departure_id, arrival_id, outbound_date) alongside the token. The description adds some behavioral context but lacks depth.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the primary purpose, and every sentence earns its place. It clearly states what the tool does, how to use it, and what to expect in return without any 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 the absence of an output schema, the description explains the high-level return content (booking options from airlines/OTAs with direct links and price breakdown). It covers the essential workflow and expected output. It could mention more about the structure of the returned links or any prerequisites, but for a straightforward retrieval tool it is fairly 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%, giving the baseline of 3. The description adds meaningful context by explaining that booking_token originates from a previous flight search and is used to fetch options. This clarifies the role of the token beyond the schema description. It also hints at why the original parameters are needed, adding value beyond the structured definitions.
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 uses a specific verb ('Get') and a clear resource ('booking links and price breakdown for a specific flight'). It explicitly mentions the required input (booking_token) and distinguishes this tool from siblings like search_flights and get_return_flights, which are flight search tools, not booking-option retrieval tools.
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 description clearly instructs when to use this tool: after obtaining a booking_token from search_flights or get_return_flights. It implies the proper workflow without listing exclusions or alternatives, but the context is clear enough. No explicit 'when not to use' is provided, but the usage context is well stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_return_flightsA
After searching one-way outbound flights, use this to get matching return flight options for a selected outbound flight. Pass the departure_token from the outbound search result.
| Name | Required | Description | Default |
|---|---|---|---|
| gl | No | Country code | |
| hl | No | Language code | |
| currency | No | Currency code | |
| arrival_id | Yes | Original arrival airport IATA code | |
| departure_id | Yes | Original departure airport IATA code | |
| outbound_date | Yes | Original outbound date (YYYY-MM-DD) | |
| departure_token | Yes | The departure_token from a search_flights result to get matching return flights |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits itself. It does reveal a key dependency: it must be used after an outbound search with a departure_token. The read-only nature is implied by 'get' but not explicitly stated, and there's no mention of return format, pagination, errors, or rate limits. This meets minimum viability but leaves gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences: the first states purpose and usage context, the second gives the critical input instruction. Every word earns its place, and it's front-loaded with the primary purpose.
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 tool with no output schema and no annotations, the description covers the essential workflow and key parameter. It clearly explains when to use it and what input to pass. However, it doesn't describe the response shape or any caveats about token validity or matching logic, which would be useful for a flight search tool with this many 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?
All parameters have schema descriptions (coverage 100%), so the baseline is 3. The description adds value by explicitly highlighting the departure_token and explaining its role in connecting to the outbound search, which goes beyond the schema's per-field 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?
The description clearly states the tool's function: 'get matching return flight options for a selected outbound flight.' This specific verb+resource structure distinguishes it from sibling tools like search_flights (general search) and plan_multi_stop_trip (itinerary planning).
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 context: 'After searching one-way outbound flights, use this...' and instructs to 'Pass the departure_token from the outbound search result.' This clearly defines the prerequisite workflow. However, it doesn't explicitly mention alternatives or when not to use it, so it lacks the full explicit exclusions that a 5 would require.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
plan_multi_stop_tripA
Plan a multi-leg trip by searching each leg in parallel. Ideal for internal/domestic routing within a multi-country holiday: "I'll be in Buenos Aires on Oct 17, want to visit Patagonia on Oct 23, then end in Santiago on Oct 28 — what are the cheapest flights?"
Each stop is resolved to nearby airports automatically (e.g. "Patagonia" → BRC, USH, FTE, PUQ, BBA). Uses 1 API credit per leg (N-1 credits for N stops). Returns the cheapest flight per leg plus up to 3 alternatives so you can compare specific airport options (e.g. cheapest into Patagonia might be BRC, but you can see FTE/El Calafate options too).
| Name | Required | Description | Default |
|---|---|---|---|
| gl | No | Country code | |
| hl | No | Language code | |
| trip | Yes | Ordered list of stops. Each stop needs a location and a departure date. The last stop is the final destination (its date is unused). | |
| stops | No | Connection stops filter: 0=Any, 1=Nonstop only, 2=1 stop or fewer, 3=2 stops or fewer | |
| adults | No | Number of adults | |
| currency | No | Currency code (e.g. GBP, EUR, USD) | |
| max_price | No | Maximum price per leg | |
| travel_class | No | 1=Economy, 2=Premium economy, 3=Business, 4=First | |
| max_airports_per_stop | No | Max airports to consider per stop when resolving location names (default 4) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description discloses key behaviors: parallel leg search, automatic airport resolution (e.g., 'Patagonia' → BRC, USH, FTE, PUQ, BBA), per-leg API credit usage, and output format (cheapest per leg plus up to 3 alternatives).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact yet dense: purpose, use case, example, credit cost, and output format all in a few sentences without redundancy.
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 no annotations or output schema, the description covers the essential context: what the tool does, when to use it, how it behaves (parallel search, airport resolution, credits), and what it returns (cheapest per leg + alternatives). This is sufficient for an agent to select and invoke 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?
Schema covers 100% of parameters with descriptions, so baseline is 3; the description adds semantic context for the trip parameter (parallel leg search, last stop date unused) and location resolution, justifying a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Plan a multi-leg trip by searching each leg in parallel,' a specific verb+resource, and positions it as 'Ideal for internal/domestic routing within a multi-country holiday,' distinguishing it from sibling tools like search_flights and plan_open_jaw_trip.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context ('Ideal for internal/domestic routing within a multi-country holiday') and a concrete example, implying when to use it instead of single-flight or open-jaw search tools, though it doesn't explicitly name exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
plan_open_jaw_tripA
Plan an open-jaw trip visiting two destinations — fly into one country and out of another without backtracking. Ideal for "Nottingham to Argentina and Chile in October: what's the cheapest combination?".
Searches all nearby departure airports at once and compares two itinerary directions:
Option A: fly into destination_a, return from destination_b
Option B: fly into destination_b, return from destination_a
Returns both options ranked by total combined price (outbound + return), with flight details and booking tokens for each leg. Uses 4 API credits total.
| Name | Required | Description | Default |
|---|---|---|---|
| gl | No | Country code | |
| hl | No | Language code | |
| stops | No | 0=Any, 1=Nonstop only, 2=1 stop or fewer, 3=2 stops or fewer | |
| adults | No | Number of adults | |
| currency | No | Currency code (e.g. GBP, EUR, USD) | |
| max_price | No | Maximum price per person per leg | |
| return_date | Yes | Return departure date (YYYY-MM-DD) | |
| travel_class | No | 1=Economy, 2=Premium economy, 3=Business, 4=First | |
| destination_a | Yes | First destination country or city (e.g. 'Argentina'). The trip will fly into OR out of this destination. | |
| destination_b | Yes | Second destination country or city (e.g. 'Chile'). The trip will fly into OR out of this destination. | |
| outbound_date | Yes | Outbound departure date (YYYY-MM-DD) | |
| departure_location | Yes | Departure city or region (e.g. 'Nottingham', 'London'). All nearby airports will be searched. | |
| max_departure_airports | No | How many nearby UK airports to include (default 5) | |
| max_destination_airports | No | How many airports per destination to include (default 2) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses that it searches all nearby departure airports at once, compares two directions, returns ranked options with flight details and booking tokens, and uses 4 API credits total. These are important behavioral disclosures beyond a simple 'plan a trip' statement.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded, starting with the core purpose, then an example, then the detailed options and output. Every sentence earns its place, and it avoids redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (14 parameters, no output schema), the description provides a good high-level overview of the output (ranked options, flight details, booking tokens) and the cost (4 API credits). It could go deeper into the return structure, but for a planning tool with no output schema, this is a solid summary.
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 detailed parameter descriptions already in the schema. The tool description reiterates the roles of destination_a and destination_b but adds little beyond the schema. The baseline of 3 applies because the description does not significantly enhance parameter understanding beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Plan an open-jaw trip visiting two destinations — fly into one country and out of another without backtracking.' This is a specific verb+resource, and the example ('Nottingham to Argentina and Chile in October') helps distinguish it from sibling tools like search_flights or plan_multi_stop_trip.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context with the ideal use case example and explains the two itinerary directions. It does not explicitly mention when not to use this tool or alternatives, but the example and focus on open-jaw trips give a solid sense of when it is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_flightsA
Search for flights using Google Flights data via SerpAPI. Returns best_flights and other_flights with full details (price, duration, stops, airline, aircraft, legroom, amenities, carbon emissions) plus price_insights (lowest price, typical range, price history).
Each result includes a booking_token (to get booking links) and for one-way results a departure_token (to get matching return flights for round-trips).
Supports one-way, round-trip, and multi-city. Filters include: nonstop only, max price, cabin class, specific airlines, departure/arrival time windows, layover duration, connecting airport exclusions, and emissions.
| Name | Required | Description | Default |
|---|---|---|---|
| gl | No | Country code for results (e.g. us, gb, fr) | |
| hl | No | Language code (e.g. en, es, fr) | |
| bags | No | Number of carry-on bags | |
| type | No | 1=Round trip (default), 2=One way, 3=Multi-city | |
| stops | No | 0=Any stops, 1=Nonstop only, 2=1 stop or fewer, 3=2 stops or fewer | |
| adults | No | Number of adults (default 1) | |
| sort_by | No | 1=Top flights, 2=Price, 3=Departure time, 4=Arrival time, 5=Duration, 6=Emissions | |
| children | No | Number of children | |
| currency | No | Currency code (e.g. USD, GBP, EUR) | |
| emissions | No | Set to 1 to only show low-emission flights | |
| max_price | No | Maximum ticket price | |
| arrival_id | Yes | Arrival airport IATA code (e.g. JFK) or Google kgmid. Comma-separate for multiple. | |
| deep_search | No | Enable deeper search matching browser results (slower) | |
| return_date | No | Return date (YYYY-MM-DD). Required for round-trip. | |
| show_hidden | No | Include hidden/unlisted flight results | |
| departure_id | Yes | Departure airport IATA code (e.g. LHR) or Google kgmid (/m/...) | |
| max_duration | No | Maximum total flight duration in minutes | |
| return_times | No | Return flight time range. Same format as outbound_times. | |
| travel_class | No | 1=Economy, 2=Premium economy, 3=Business, 4=First | |
| exclude_basic | No | Exclude basic economy fares (US domestic only, requires gl=us and economy class) | |
| exclude_conns | No | Comma-separated airport codes to exclude as connections | |
| outbound_date | Yes | Outbound date (YYYY-MM-DD) | |
| infants_on_lap | No | Infants on lap | |
| outbound_times | No | Departure time range as 'min,max' hours (e.g. '6,20') or 'depMin,depMax,arrMin,arrMax' | |
| infants_in_seat | No | Infants in seat | |
| multi_city_json | No | JSON array of legs for multi-city (type=3). Each leg: {"departure_id":"CDG","arrival_id":"LHR","date":"YYYY-MM-DD"} | |
| exclude_airlines | No | Comma-separated airline IATA codes to exclude. Cannot combine with include_airlines. | |
| include_airlines | No | Comma-separated airline IATA codes to include (e.g. BA,AA). Cannot combine with exclude_airlines. | |
| layover_duration | No | Layover duration range in minutes as 'min,max' (e.g. '60,240') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It transparently describes the return payload (best_flights/other_flights, price_insights), the booking_token for booking links, and the departure_token for one-way results, adding context beyond the schema. It does not mention rate limits, error conditions, or pagination, but for a read-only search tool, the core behavioral traits are well disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is organized into three compact paragraphs: purpose and return values, token behavior, and capability summary. It front-loads the core purpose and packs dense information without unnecessary fluff. It is somewhat long but proportional to the tool's complexity, and every sentence contributes meaningful 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?
Given 29 parameters, no output schema, and 12 sibling tools, the description is remarkably complete. It covers the return structure, token handling, supported trip types, and filter options. Missing are explicit caveats like mutual exclusivity (partially in schema), pagination, or route limitations, but these are secondary for initial selection and invocation.
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 schema already provides 100% coverage of all 29 parameters with detailed descriptions and enums, so the additional value is inherently limited. The description adds a high-level filter overview ('nonstop only, max price, cabin class, specific airlines, departure/arrival time windows, layover duration, connecting airport exclusions, and emissions'), helping an agent group related parameters, but it does not introduce new semantic details for individual parameters beyond what the schema already states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Search for flights using Google Flights data via SerpAPI.' It clearly enumerates the return fields (price, duration, stops, etc.) and tokens (booking_token, departure_token), making the tool's function concrete and distinct from generic search tools. However, it does not explicitly contrast with any of the 12 sibling tools, so it stops short of full 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?
The description implies usage scenarios by stating it 'Supports one-way, round-trip, and multi-city' and listing filters, which tells an agent what configurations are possible. However, it provides no explicit guidance on when to choose this tool over siblings like search_flights_flexible or explore_destinations, nor does it mention any exclusions or limitations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_flights_flexibleA
Search for flights across a range of dates to find the cheapest day to fly. Returns one result per date sorted by price — ideal for answering "When's the cheapest time to fly to Tokyo in April?".
Uses one API credit per date searched (capped at 30 days). Failures on individual dates are returned as errors rather than failing the whole request.
| Name | Required | Description | Default |
|---|---|---|---|
| gl | No | Country code | |
| hl | No | Language code | |
| type | No | 1=Round trip, 2=One way (default) | |
| stops | No | 0=Any, 1=Nonstop only, 2=1 stop or fewer, 3=2 stops or fewer | |
| adults | No | Number of adults | |
| date_to | Yes | End of date range to search (YYYY-MM-DD, max 30 days from date_from) | |
| currency | No | Currency code (e.g. GBP, EUR, USD) | |
| date_from | Yes | Start of date range to search (YYYY-MM-DD) | |
| max_price | No | Maximum ticket price | |
| arrival_id | Yes | Arrival airport IATA code (e.g. EZE). Comma-separate for multiple. | |
| return_date | No | Fixed return date (YYYY-MM-DD) for round-trip. Omit for one-way. | |
| departure_id | Yes | Departure airport IATA code (e.g. LHR). Comma-separate for multiple. | |
| travel_class | No | 1=Economy, 2=Premium economy, 3=Business, 4=First |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden and delivers by disclosing API credit cost per date (capped at 30 days), error handling for individual date failures, and the sorted result format. This goes beyond basic safety profiles and gives agents crucial operational detail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short paragraphs, front-loaded with the core purpose and followed by essential cost/error details. Every sentence adds value, with no redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (13 parameters) and lack of output schema, the description covers the key aspects: purpose, use case, cost, error behavior, and result shape. It does not detail the returned result fields, but the schema and sibling tools provide additional context, making this adequate though not exhaustive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description itself does not add significant parameter-level meaning beyond what the schema provides, though it contextualizes the date range and output format. It neither compensates nor detracts from the schema coverage.
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 clearly states the tool searches flights across a range of dates to find the cheapest day, with a specific verb and resource. It also specifies the output (one result per date sorted by price) and provides an example use case, distinguishing it from sibling tools like search_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?
The description provides clear context for when to use this tool via the 'ideal for' phrase, targeting flexible-date searches. It does not explicitly name alternatives or exclusions, but the use case is clear enough for an agent to select it appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_price_calendarA
Search a grid of outbound + return date combinations to find the cheapest week to fly. Answers "What's the cheapest combination of July departure and August return for LHR-JFK?".
Generates all (outbound, return) pairs from two date ranges (return must be after outbound), capped at 30 combinations searched in parallel. Returns results sorted by cheapest price with trip_days calculated.
Uses 1 API credit per date combination (max 30).
| Name | Required | Description | Default |
|---|---|---|---|
| gl | No | Country code | |
| hl | No | Language code | |
| stops | No | 0=Any, 1=Nonstop only, 2=1 stop or fewer, 3=2 stops or fewer | |
| adults | No | Number of adults | |
| currency | No | Currency code (e.g. GBP, EUR, USD) | |
| max_price | No | Maximum ticket price | |
| arrival_id | Yes | Arrival airport IATA code (e.g. JFK). Comma-separate for multiple. | |
| departure_id | Yes | Departure airport IATA code (e.g. LHR). Comma-separate for multiple. | |
| travel_class | No | 1=Economy, 2=Premium economy, 3=Business, 4=First | |
| return_date_to | Yes | End of return date range (YYYY-MM-DD) | |
| outbound_date_to | Yes | End of outbound date range (YYYY-MM-DD) | |
| return_date_from | Yes | Start of return date range (YYYY-MM-DD) | |
| outbound_date_from | Yes | Start of outbound date range (YYYY-MM-DD) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It clearly states behavioral details: return must be after outbound, capped at 30 combinations, searched in parallel, sorted by price, trip_days calculated, and 1 API credit per combination (max 30). This is rich, non-obvious context.
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: purpose, behavior, and cost. Front-loaded with the main verb and resource. No filler or repetition of schema 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?
Despite lacking an output schema, the description covers purpose, input combination logic, constraints, performance limit, cost, and output ordering. This is fully sufficient for an agent to select and invoke the tool 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?
Schema coverage is 100%, so baseline is 3. The description adds value by explaining how the date parameters interact (grid of outbound+return pairs, return must be after outbound, cap of 30 combos) and the output sorting, which goes beyond individual 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?
The description opens with a clear verb and resource: 'Search a grid of outbound + return date combinations to find the cheapest week to fly.' It also gives a concrete example question ('What's the cheapest combination of July departure and August return for LHR-JFK?') that distinguishes it from sibling tools like search_flights or search_flights_flexible.
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 description provides strong contextual cues for when to use this tool (comparing date ranges to find cheapest combination) via the example question. However, it does not explicitly state when NOT to use it or mention alternatives such as search_flights_flexible, leaving some ambiguity.
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.
13 tool updates
v1.0.0- First observed
check_price_insights - First observed
compare_airport_prices - First observed
explore_destinations - First observed
find_airports - First observed
find_cheapest_arrival_airport - First observed
find_stopover_flights - First observed
get_booking_options - First observed
get_return_flights - First observed
plan_multi_stop_trip - First observed
plan_open_jaw_trip - First observed
search_flights - First observed
search_flights_flexible - First observed
search_price_calendar
TDQS
Scored across 13 tools
Every tool has a clearly distinct purpose: search_flights handles standard queries, while flexible, calendar, and stopover variants cover specialized date/route patterns. Follow-up tools (get_return_flights, get_booking_options) chain logically without overlap.
All tools follow a consistent snake_case verb_noun pattern (search_, get_, find_, explore_, compare_, plan_, check_). The naming clearly indicates the action and subject, making the set predictable.
13 tools is well within the ideal range for a flight-search domain. Each tool addresses a distinct user need, from airport lookup to complex multi-city planning, without feeling bloated.
The tool surface covers the full flight planning workflow: resolve airports, search with various flexibility options, compare airports, plan multi-stop/open-jaw itineraries, check price insights, and obtain booking links. No obvious gaps for the stated purpose.
Maintenance
Related MCP Connectors
Flight search MCP server providing search, pagination, and itinerary details for AI assistants.
Geo-based flight search MCP server. Find more flights between any two places on earth
Search and compare flight offers through a cache-aware Streamable HTTP MCP server for AI agents.
Skiplagged MCP Server for flight search, hotel booking, and travel planning
Related MCP Servers
- AlicenseNot gradedqualityNot gradedmaintenanceThis MCP server allows an AI assistants to search for flight information online using Google Flights. It can find flights for specific dates or search through a range of dates to find all options or just the cheapest ones available.27-
- FlicenseNot gradedqualityNot gradedmaintenanceA remote MCP server that searches Google Flights for flight information and airport codes. It enables users to find flights, locate airports, and generate travel dates through natural language interactions.-
- AlicenseAqualityCmaintenanceAn MCP server that finds cheap flights with flexible dates and smart suggestions using the Google Flights API.3MIT
- AlicenseAqualityDmaintenanceMinimal TypeScript MCP server providing real flight and hotel search via SerpApi for a personal travel-planning agent.27 npmMIT