Live Google Flights fares: search routes, discover cheap deals from an origin.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Discover cheap flight destinations from an origin via SerpAPI's Google Flights Deals engine (google_flights_deals). Unlike google_flights_search there is no arrival_id — the engine explores destinations for you — and there are no pagination or navigation tokens. Dates accept a single YYYY-MM-DD or a 'start,end' range (e.g. '2026-06-27,2026-07-03') to widen the window. Supports round trip (type=1, needs return_date) and one way (type=2). Prices are in `currency` (default USD). Result shape: { source, fetchedAt, query, search_metadata, search_parameters, departure_informations, deals: [...] } — the list key is `deals` (there are no best_flights/other_flights here). Each deal: { destination_id, name, country, price, average_price, discount_percentage, flight_link, serpapi_flight_link, thumbnail, outbound_date, return_date, departure_airport_code, arrival_airport_code, flight_duration, stops, airline, airline_code, description, highlights }. The dates are `outbound_date` / `return_date` (YYYY-MM-DD) — the live engine returns those, not the `start_date`/`end_date` of SerpAPI's docs — and a deal carries NO departure or return time.
Country code for the search, e.g. 'us', 'uk', 'de'.
Language code, e.g. 'en', 'es', 'fr'.
Trip type: 1 = round trip (default, needs return_date), 2 = one way.
Max stops: 0 = any (default), 1 = nonstop only, 2 = 1 stop or fewer, 3 = 2 stops or fewer.
Number of adults. Default 1.
Number of children. Default 0.
Currency of returned prices (ISO code, e.g. 'USD', 'EUR'). Default USD.
Force a fresh SerpAPI fetch and bypass this server's result cache. Default false.
Maximum ticket price in the selected currency.
Enterprise-only ZeroTrace mode: don't store search params/metadata on SerpAPI. Default false.
Return date as a single YYYY-MM-DD, or a 'start,end' range. Required when type=1 (round trip). When outbound_date is a range it must be a 'start,end' range too (or drop it and use trip_length/travel_duration).
Trip length in days: a single number, or a 'min,max' day range (e.g. '3,5').
Departure AIRPORT IATA code(s) (3-letter, uppercase, e.g. 'WAW' or 'WAW,WMI') or a Google location kgmid (/m/… or /g/…). Comma-separate multiple. NOT a city/metro code (NYC, LON, PAR return no results — list the airports). No arrival_id: the deals engine discovers destinations for you.
Maximum total trip duration in minutes (e.g. 1500 for 25h).
Travel class: 1 = economy (default), 2 = premium economy, 3 = business, 4 = first.
Outbound date as a single YYYY-MM-DD, or a 'start,end' range (e.g. '2026-06-27,2026-07-03') to search a window.
Number of infants on lap. Default 0.
Number of infants in seat. Default 0.
Travel duration preset: 1 = one week, 2 = weekend, 3 = two weeks.
Exclude these airlines: comma-separated 2-letter IATA codes, or an alliance (STAR_ALLIANCE, SKYTEAM, ONEWORLD). Mutually exclusive with include_airlines.
Only these airlines: comma-separated 2-letter IATA codes, or an alliance: STAR_ALLIANCE, SKYTEAM, ONEWORLD. Mutually exclusive with exclude_airlines.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
claude mcp add --transport http google-flights https://mcp.wondel.ai/google-flights/mcp
Discover cheap flight destinations from an origin via SerpAPI's Google Flights Deals engine (google_flights_deals). Unlike google_flights_search there is no arrival_id — the engine explores destinations for you — and there are no pagination or navigation tokens. Dates accept a single YYYY-MM-DD or a 'start,end' range (e.g. '2026-06-27,2026-07-03') to widen the window. Supports round trip (type=1, needs return_date) and one way (type=2). Prices are in `currency` (default USD). Result shape: { source, fetchedAt, query, search_metadata, search_parameters, departure_informations, deals: [...] } — the list key is `deals` (there are no best_flights/other_flights here). Each deal: { destination_id, name, country, price, average_price, discount_percentage, flight_link, serpapi_flight_link, thumbnail, outbound_date, return_date, departure_airport_code, arrival_airport_code, flight_duration, stops, airline, airline_code, description, highlights }. The dates are `outbound_date` / `return_date` (YYYY-MM-DD) — the live engine returns those, not the `start_date`/`end_date` of SerpAPI's docs — and a deal carries NO departure or return time.
| Argument | Type | Description |
|---|---|---|
| gl | string | Country code for the search, e.g. 'us', 'uk', 'de'. |
| hl | string | Language code, e.g. 'en', 'es', 'fr'. |
| type | integer | Trip type: 1 = round trip (default, needs return_date), 2 = one way. |
| stops | integer | Max stops: 0 = any (default), 1 = nonstop only, 2 = 1 stop or fewer, 3 = 2 stops or fewer. |
| adults | integer | Number of adults. Default 1. |
| children | integer | Number of children. Default 0. |
| currency | string | Currency of returned prices (ISO code, e.g. 'USD', 'EUR'). Default USD. |
| no_cache | boolean | Force a fresh SerpAPI fetch and bypass this server's result cache. Default false. |
| max_price | integer | Maximum ticket price in the selected currency. |
| zero_trace | boolean | Enterprise-only ZeroTrace mode: don't store search params/metadata on SerpAPI. Default false. |
| return_date | string | Return date as a single YYYY-MM-DD, or a 'start,end' range. Required when type=1 (round trip). When outbound_date is a range it must be a 'start,end' range too (or drop it and use trip_length/travel_duration). |
| trip_length | any | Trip length in days: a single number, or a 'min,max' day range (e.g. '3,5'). |
| departure_id | string | Departure AIRPORT IATA code(s) (3-letter, uppercase, e.g. 'WAW' or 'WAW,WMI') or a Google location kgmid (/m/… or /g/…). Comma-separate multiple. NOT a city/metro code (NYC, LON, PAR return no results — list the airports). No arrival_id: the deals engine discovers destinations for you. |
| max_duration | integer | Maximum total trip duration in minutes (e.g. 1500 for 25h). |
| travel_class | integer | Travel class: 1 = economy (default), 2 = premium economy, 3 = business, 4 = first. |
| outbound_date | string | Outbound date as a single YYYY-MM-DD, or a 'start,end' range (e.g. '2026-06-27,2026-07-03') to search a window. |
| infants_on_lap | integer | Number of infants on lap. Default 0. |
| infants_in_seat | integer | Number of infants in seat. Default 0. |
| travel_duration | integer | Travel duration preset: 1 = one week, 2 = weekend, 3 = two weeks. |
| exclude_airlines | string | Exclude these airlines: comma-separated 2-letter IATA codes, or an alliance (STAR_ALLIANCE, SKYTEAM, ONEWORLD). Mutually exclusive with include_airlines. |
| include_airlines | string | Only these airlines: comma-separated 2-letter IATA codes, or an alliance: STAR_ALLIANCE, SKYTEAM, ONEWORLD. Mutually exclusive with exclude_airlines. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"gl": {
"type": "string",
"maxLength": 2,
"minLength": 2,
"description": "Country code for the search, e.g. 'us', 'uk', 'de'."
},
"hl": {
"type": "string",
"maxLength": 2,
"minLength": 2,
"description": "Language code, e.g. 'en', 'es', 'fr'."
},
"type": {
"type": "integer",
"maximum": 2,
"minimum": 1,
"description": "Trip type: 1 = round trip (default, needs return_date), 2 = one way."
},
"stops": {
"type": "integer",
"maximum": 3,
"minimum": 0,
"description": "Max stops: 0 = any (default), 1 = nonstop only, 2 = 1 stop or fewer, 3 = 2 stops or fewer."
},
"adults": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Number of adults. Default 1."
},
"children": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Number of children. Default 0."
},
"currency": {
"type": "string",
"description": "Currency of returned prices (ISO code, e.g. 'USD', 'EUR'). Default USD."
},
"no_cache": {
"type": "boolean",
"description": "Force a fresh SerpAPI fetch and bypass this server's result cache. Default false."
},
"max_price": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Maximum ticket price in the selected currency."
},
"zero_trace": {
"type": "boolean",
"description": "Enterprise-only ZeroTrace mode: don't store search params/metadata on SerpAPI. Default false."
},
"return_date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}(,\\d{4}-\\d{2}-\\d{2})?$",
"description": "Return date as a single YYYY-MM-DD, or a 'start,end' range. Required when type=1 (round trip). When outbound_date is a range it must be a 'start,end' range too (or drop it and use trip_length/travel_duration)."
},
"trip_length": {
"anyOf": [
{
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1
},
{
"type": "string",
"pattern": "^\\d+,\\d+$"
}
],
"description": "Trip length in days: a single number, or a 'min,max' day range (e.g. '3,5')."
},
"departure_id": {
"type": "string",
"description": "Departure AIRPORT IATA code(s) (3-letter, uppercase, e.g. 'WAW' or 'WAW,WMI') or a Google location kgmid (/m/… or /g/…). Comma-separate multiple. NOT a city/metro code (NYC, LON, PAR return no results — list the airports). No arrival_id: the deals engine discovers destinations for you."
},
"max_duration": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Maximum total trip duration in minutes (e.g. 1500 for 25h)."
},
"travel_class": {
"type": "integer",
"maximum": 4,
"minimum": 1,
"description": "Travel class: 1 = economy (default), 2 = premium economy, 3 = business, 4 = first."
},
"outbound_date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}(,\\d{4}-\\d{2}-\\d{2})?$",
"description": "Outbound date as a single YYYY-MM-DD, or a 'start,end' range (e.g. '2026-06-27,2026-07-03') to search a window."
},
"infants_on_lap": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Number of infants on lap. Default 0."
},
"infants_in_seat": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Number of infants in seat. Default 0."
},
"travel_duration": {
"type": "integer",
"maximum": 3,
"minimum": 1,
"description": "Travel duration preset: 1 = one week, 2 = weekend, 3 = two weeks."
},
"exclude_airlines": {
"type": "string",
"description": "Exclude these airlines: comma-separated 2-letter IATA codes, or an alliance (STAR_ALLIANCE, SKYTEAM, ONEWORLD). Mutually exclusive with include_airlines."
},
"include_airlines": {
"type": "string",
"description": "Only these airlines: comma-separated 2-letter IATA codes, or an alliance: STAR_ALLIANCE, SKYTEAM, ONEWORLD. Mutually exclusive with exclude_airlines."
}
}
}Search Google Flights live via SerpAPI. Returns best_flights and other_flights (each with legs, airlines, times, duration, layovers, price and carbon emissions), plus price_insights and airport info. Supports round trip (type=1, needs return_date), one way (type=2) and multi-city (type=3 via multi_city_json). Two-step flows: pass a departure_token from a prior result to get the returning flights / next leg, or a booking_token to get booking options — re-send the original search params alongside either token. Prices are in `currency` (default USD). IDs are AIRPORT codes, never city/metro codes: TYO, NYC, LON, PAR, MIL, ROM, OSA, CHI, WAS return NO results (live-verified) — send the airports instead (TYO → 'HND,NRT'; NYC → 'JFK,EWR,LGA'; LON → 'LHR,LGW,STN,LTN'; PAR → 'CDG,ORY'; MIL → 'MXP,LIN,BGY'; ROM → 'FCO,CIA') or the city's Google kgmid (e.g. '/m/07dfk' for Tokyo). Result shape: { note?, source, fetchedAt, query, search_metadata: { google_flights_url }, search_parameters, best_flights: [...], other_flights: [...], price_insights, airports } — the two itinerary lists are `best_flights` and `other_flights` (there is no `flights` or `deals` key at the top level, and an itinerary is never a bare flight). Each itinerary: { flights: [{ departure_airport: { name, id, time }, arrival_airport: { name, id, time }, duration, airplane, airline, airline_logo, travel_class, flight_number, legroom, extensions }], layovers: [{ duration, name, id, overnight }], total_duration, carbon_emissions, price, type, airline_logo, departure_token, booking_token } — `price` is the whole-itinerary price in `currency`, `duration`/`total_duration` are minutes, and the per-leg times are local 'YYYY-MM-DD HH:MM' strings. Feed `departure_token` back for the return leg and `booking_token` for booking options. A top-level `note` appears only when stops=1 found no nonstop flight and the server retried without the stop filter: the itineraries are then connecting flights, and their tokens need the same params re-sent without `stops` — tell the user that no direct flights were found and connecting flights are shown.
| Argument | Type | Description |
|---|---|---|
| gl | string | Country code for the search, e.g. 'us', 'uk', 'de'. |
We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Nov 2, 2026.
No readOnlyHint / destructiveHint annotations, so clients can't tell a read from a write without asking.
Fix: Add annotations to each tool, e.g. { readOnlyHint: true } for tools that only read.
| hl | string | Language code, e.g. 'en', 'es', 'fr'. |
| bags | integer | Number of carry-on bags. Default 0. |
| type | integer | Trip type: 1 = round trip (default), 2 = one way, 3 = multi-city. |
| stops | integer | Max stops: 0 = any (default), 1 = nonstop only, 2 = 1 stop or fewer, 3 = 2 stops or fewer. When stops=1 finds no nonstop flight, the server automatically retries without the filter and returns connecting flights with a `note`; send a departure_token/booking_token from those with the same params but no stops. |
| adults | integer | Number of adults. Default 1. |
| sort_by | integer | Sort order: 1 = top flights (default), 2 = price, 3 = departure time, 4 = arrival time, 5 = duration, 6 = emissions. |
| children | integer | Number of children. Default 0. |
| currency | string | Currency of returned prices (ISO code, e.g. 'USD', 'EUR'). Default USD. |
| no_cache | boolean | Force a fresh SerpAPI fetch and bypass this server's result cache. Default false. |
| emissions | integer | Emissions filter: 1 = less emissions only. Omit for no filter. |
| max_price | integer | Maximum ticket price in the selected currency. |
| arrival_id | string | Arrival AIRPORT IATA code(s) (e.g. 'HND,NRT') or a Google location kgmid (e.g. '/m/07dfk' for Tokyo). Comma-separate multiple. NOT a city/metro code — TYO, LON, PAR, MIL, ROM, OSA return no results; list the airports instead. |
| zero_trace | boolean | Enterprise-only ZeroTrace mode: don't store search params/metadata on SerpAPI. Default false. |
| deep_search | boolean | Run a deeper search that matches the Google Flights browser results more closely (slower). Default false. |
| return_date | string | Return date, YYYY-MM-DD. Required when type=1 (round trip). |
| show_hidden | boolean | Include hidden flight results. Default false. |
| departure_id | string | Departure AIRPORT IATA code(s) (3-letter, uppercase, e.g. 'WAW' or 'WAW,WMI') or a Google location kgmid (/m/… or /g/…). Comma-separate multiple. NOT a city/metro code — TYO, NYC, LON, PAR, MIL, ROM return no results; list the airports instead (NYC → 'JFK,EWR,LGA'). Used for type 1/2; for multi-city (type 3) use multi_city_json instead. |
| max_duration | integer | Maximum total trip duration in minutes (e.g. 1500 for 25h). |
| return_times | string | Return time window, same format as outbound_times. Only valid when type=1. |
| travel_class | integer | Travel class: 1 = economy (default), 2 = premium economy, 3 = business, 4 = first. |
| booking_token | string | Token from a prior result, used to fetch booking options for a selected itinerary. Re-send the same search params alongside it. Mutually exclusive with departure_token. |
| exclude_basic | boolean | Exclude basic-economy fares. Only for domestic US flights with travel_class=1. Default false. |
| exclude_conns | string | Connecting airports to exclude: comma-separated 3-letter IATA codes (e.g. 'CDG,LHR'). |
| outbound_date | string | Outbound date, YYYY-MM-DD. |
| infants_on_lap | integer | Number of infants on lap. Default 0. |
| outbound_times | string | Outbound time window as comma-separated hours (0-23). 2 values = departure range 'min,max' (e.g. '4,18'); 4 values add an arrival range (e.g. '4,18,3,19'). |
| departure_token | string | Token from a prior result, used to select an outbound flight and fetch the returning flights (round trip) or the next leg (multi-city). Re-send the same search params alongside it. Mutually exclusive with booking_token. |
| infants_in_seat | integer | Number of infants in seat. Default 0. |
| multi_city_json | string | Multi-city itinerary (required when type=3): a JSON-string array of legs, e.g. '[{"departure_id":"CDG","arrival_id":"NRT","date":"2026-06-27"},{"departure_id":"NRT","arrival_id":"LAX","date":"2026-07-03"}]'. Each leg may include an optional "times" field (same format as outbound_times). |
| exclude_airlines | string | Exclude these airlines: comma-separated 2-letter IATA codes, or an alliance (STAR_ALLIANCE, SKYTEAM, ONEWORLD). Mutually exclusive with include_airlines. |
| include_airlines | string | Only these airlines: comma-separated 2-letter IATA codes, or an alliance: STAR_ALLIANCE, SKYTEAM, ONEWORLD. Mutually exclusive with exclude_airlines. |
| layover_duration | string | Layover duration range in minutes, 'min,max' (e.g. '90,330' for 1.5-5.5h). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"gl": {
"type": "string",
"maxLength": 2,
"minLength": 2,
"description": "Country code for the search, e.g. 'us', 'uk', 'de'."
},
"hl": {
"type": "string",
"maxLength": 2,
"minLength": 2,
"description": "Language code, e.g. 'en', 'es', 'fr'."
},
"bags": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Number of carry-on bags. Default 0."
},
"type": {
"type": "integer",
"maximum": 3,
"minimum": 1,
"description": "Trip type: 1 = round trip (default), 2 = one way, 3 = multi-city."
},
"stops": {
"type": "integer",
"maximum": 3,
"minimum": 0,
"description": "Max stops: 0 = any (default), 1 = nonstop only, 2 = 1 stop or fewer, 3 = 2 stops or fewer. When stops=1 finds no nonstop flight, the server automatically retries without the filter and returns connecting flights with a `note`; send a departure_token/booking_token from those with the same params but no stops."
},
"adults": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Number of adults. Default 1."
},
"sort_by": {
"type": "integer",
"maximum": 6,
"minimum": 1,
"description": "Sort order: 1 = top flights (default), 2 = price, 3 = departure time, 4 = arrival time, 5 = duration, 6 = emissions."
},
"children": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Number of children. Default 0."
},
"currency": {
"type": "string",
"description": "Currency of returned prices (ISO code, e.g. 'USD', 'EUR'). Default USD."
},
"no_cache": {
"type": "boolean",
"description": "Force a fresh SerpAPI fetch and bypass this server's result cache. Default false."
},
"emissions": {
"type": "integer",
"maximum": 1,
"minimum": 1,
"description": "Emissions filter: 1 = less emissions only. Omit for no filter."
},
"max_price": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Maximum ticket price in the selected currency."
},
"arrival_id": {
"type": "string",
"description": "Arrival AIRPORT IATA code(s) (e.g. 'HND,NRT') or a Google location kgmid (e.g. '/m/07dfk' for Tokyo). Comma-separate multiple. NOT a city/metro code — TYO, LON, PAR, MIL, ROM, OSA return no results; list the airports instead."
},
"zero_trace": {
"type": "boolean",
"description": "Enterprise-only ZeroTrace mode: don't store search params/metadata on SerpAPI. Default false."
},
"deep_search": {
"type": "boolean",
"description": "Run a deeper search that matches the Google Flights browser results more closely (slower). Default false."
},
"return_date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Return date, YYYY-MM-DD. Required when type=1 (round trip)."
},
"show_hidden": {
"type": "boolean",
"description": "Include hidden flight results. Default false."
},
"departure_id": {
"type": "string",
"description": "Departure AIRPORT IATA code(s) (3-letter, uppercase, e.g. 'WAW' or 'WAW,WMI') or a Google location kgmid (/m/… or /g/…). Comma-separate multiple. NOT a city/metro code — TYO, NYC, LON, PAR, MIL, ROM return no results; list the airports instead (NYC → 'JFK,EWR,LGA'). Used for type 1/2; for multi-city (type 3) use multi_city_json instead."
},
"max_duration": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Maximum total trip duration in minutes (e.g. 1500 for 25h)."
},
"return_times": {
"type": "string",
"description": "Return time window, same format as outbound_times. Only valid when type=1."
},
"travel_class": {
"type": "integer",
"maximum": 4,
"minimum": 1,
"description": "Travel class: 1 = economy (default), 2 = premium economy, 3 = business, 4 = first."
},
"booking_token": {
"type": "string",
"description": "Token from a prior result, used to fetch booking options for a selected itinerary. Re-send the same search params alongside it. Mutually exclusive with departure_token."
},
"exclude_basic": {
"type": "boolean",
"description": "Exclude basic-economy fares. Only for domestic US flights with travel_class=1. Default false."
},
"exclude_conns": {
"type": "string",
"description": "Connecting airports to exclude: comma-separated 3-letter IATA codes (e.g. 'CDG,LHR')."
},
"outbound_date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Outbound date, YYYY-MM-DD."
},
"infants_on_lap": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Number of infants on lap. Default 0."
},
"outbound_times": {
"type": "string",
"description": "Outbound time window as comma-separated hours (0-23). 2 values = departure range 'min,max' (e.g. '4,18'); 4 values add an arrival range (e.g. '4,18,3,19')."
},
"departure_token": {
"type": "string",
"description": "Token from a prior result, used to select an outbound flight and fetch the returning flights (round trip) or the next leg (multi-city). Re-send the same search params alongside it. Mutually exclusive with booking_token."
},
"infants_in_seat": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Number of infants in seat. Default 0."
},
"multi_city_json": {
"type": "string",
"description": "Multi-city itinerary (required when type=3): a JSON-string array of legs, e.g. '[{\"departure_id\":\"CDG\",\"arrival_id\":\"NRT\",\"date\":\"2026-06-27\"},{\"departure_id\":\"NRT\",\"arrival_id\":\"LAX\",\"date\":\"2026-07-03\"}]'. Each leg may include an optional \"times\" field (same format as outbound_times)."
},
"exclude_airlines": {
"type": "string",
"description": "Exclude these airlines: comma-separated 2-letter IATA codes, or an alliance (STAR_ALLIANCE, SKYTEAM, ONEWORLD). Mutually exclusive with include_airlines."
},
"include_airlines": {
"type": "string",
"description": "Only these airlines: comma-separated 2-letter IATA codes, or an alliance: STAR_ALLIANCE, SKYTEAM, ONEWORLD. Mutually exclusive with exclude_airlines."
},
"layover_duration": {
"type": "string",
"description": "Layover duration range in minutes, 'min,max' (e.g. '90,330' for 1.5-5.5h)."
}
}
}