Google Flights
Two tools over Google Flights, live via SerpAPI. The search tool covers round trips, one-way and multi-city itineraries and returns best_flights and other_flights — each with legs, airlines, times, durations, layovers, price and carbon emissions — plus price_insights. Two-step flows are supported: pass back a departure_token to get returning flights, or a booking_token to get booking options. The deals tool flips the question around: give it only an origin and it discovers cheap destinations for you.
Thirty seconds, any client.
claude mcp add --transport http google-flights https://mcp.wondel.ai/google-flights/mcp One command in your terminal — the server is available in every Claude Code session.
https://mcp.wondel.ai/google-flights/mcp Works on every Claude plan that supports custom connectors.
{
"mcpServers": {
"google-flights": {
"url": "https://mcp.wondel.ai/google-flights/mcp"
}
}
} Add to .cursor/mcp.json, VS Code's mcp.json, or any client that takes an mcpServers map.
npx mcp-remote https://mcp.wondel.ai/google-flights/mcp For stdio-only clients: mcp-remote bridges the remote endpoint to a local process. Streamable HTTP-capable clients can hit the URL directly — a legacy /sse endpoint exists too.
This server works with Claude, Claude Code, Claude Desktop, Claude Cowork, Cursor, VS Code, Windsurf — and any other MCP client. Stdio-only clients connect through npx mcp-remote.
2 tools, fully typed.
Parameters below are transcribed from the server’s own zod schemas — what you see is what the tool validates.
google_flights_search Search Google Flights: best and other flights with legs, prices, durations, layovers, emissions and price insights. Supports round trip, one way and multi-city, plus token-based follow-ups for return legs and booking options.
| Param | Type | Description |
|---|---|---|
| departure_id | string | Departure airport IATA code(s) or Google kgmid; comma-separate multiple. For multi-city use multi_city_json instead. |
| arrival_id | string | Arrival airport IATA code(s) or kgmid; comma-separate multiple. |
| outbound_date | date | Outbound date, YYYY-MM-DD. |
| return_date | date | Return date, YYYY-MM-DD. Required when type=1 (round trip). |
| type | integer = 1 | Trip type: 1 = round trip, 2 = one way, 3 = multi-city. |
| travel_class | integer = 1 | 1 = economy, 2 = premium economy, 3 = business, 4 = first. |
| sort_by | integer = 1 | 1 = top flights, 2 = price, 3 = departure time, 4 = arrival time, 5 = duration, 6 = emissions. |
| multi_city_json | string | Multi-city legs as a JSON-string array (required when type=3), e.g. [{"departure_id":"CDG","arrival_id":"NRT","date":"2026-06-27"}, …]. |
| adults | integer = 1 | Number of adults. |
| children | integer = 0 | Number of children. |
| infants_in_seat | integer = 0 | Infants in seat. |
| infants_on_lap | integer = 0 | Infants on lap. |
| stops | integer = 0 | Max stops: 0 = any, 1 = nonstop only, 2 = up to 1 stop, 3 = up to 2 stops. |
| include_airlines | string | Only these airlines: 2-letter IATA codes (comma-separated) or an alliance (STAR_ALLIANCE, SKYTEAM, ONEWORLD). Mutually exclusive with exclude_airlines. |
| exclude_airlines | string | Exclude these airlines; same format. Mutually exclusive with include_airlines. |
| bags | integer = 0 | Number of carry-on bags. |
| max_price | integer | Maximum ticket price in the selected currency. |
| outbound_times | string | Departure time window as comma-separated hours (0–23): "4,18" = departure range; four values add an arrival range. |
| return_times | string | Return time window, same format. Only valid when type=1. |
| emissions | integer | Set to 1 to show lower-emission flights only. |
| layover_duration | string | Layover duration range in minutes, "min,max" — e.g. "90,330". |
| exclude_conns | string | Connecting airports to exclude: comma-separated IATA codes. |
| max_duration | integer | Maximum total trip duration in minutes. |
| show_hidden | boolean = false | Include hidden flight results. |
| exclude_basic | boolean = false | Exclude basic-economy fares (US domestic, economy only). |
| deep_search | boolean = false | Deeper search matching browser results more closely (slower). |
| departure_token | string | Token from a prior result: selects an outbound flight and fetches return flights / next leg. Re-send the same search params. Mutually exclusive with booking_token. |
| booking_token | string | Token from a prior result: fetches booking options for a chosen itinerary. Mutually exclusive with departure_token. |
| gl | string | Country code for the search, e.g. "us", "de". |
| hl | string | Language code, e.g. "en", "fr". |
| currency | string = USD | Currency of returned prices (ISO code). |
| no_cache | boolean = false | Force a fresh SerpAPI fetch, bypassing this server’s result cache. |
| zero_trace | boolean = false | Enterprise-only ZeroTrace mode — SerpAPI stores no search params or metadata. |
google_flights_deals_search Discover cheap destinations from an origin — no arrival_id, the deals engine explores for you. Dates accept a single day or a "start,end" window.
| Param | Type | Description |
|---|---|---|
| departure_id | string | Departure airport IATA code(s) or kgmid. No arrival_id — destinations are discovered. |
| outbound_date | date | Single YYYY-MM-DD or a "start,end" range to widen the window. |
| return_date | date | Single date or range. Required when type=1 (round trip). |
| type | integer = 1 | 1 = round trip, 2 = one way. |
| travel_class | integer = 1 | 1 = economy, 2 = premium economy, 3 = business, 4 = first. |
| travel_duration | integer | Preset: 1 = one week, 2 = weekend, 3 = two weeks. |
| trip_length | string | Trip length in days: a number or a "min,max" range, e.g. "3,5". |
| adults | integer = 1 | Number of adults. |
| children | integer = 0 | Number of children. |
| infants_in_seat | integer = 0 | Infants in seat. |
| infants_on_lap | integer = 0 | Infants on lap. |
| stops | integer = 0 | Max stops: 0 = any, 1 = nonstop, 2 = up to 1, 3 = up to 2. |
| include_airlines | string | Only these airlines (IATA codes or alliance). Mutually exclusive with exclude_airlines. |
| exclude_airlines | string | Exclude these airlines. Mutually exclusive with include_airlines. |
| max_price | integer | Maximum ticket price in the selected currency. |
| max_duration | integer | Maximum total trip duration in minutes. |
| gl | string | Country code, e.g. "us", "de". |
| hl | string | Language code, e.g. "en". |
| currency | string = USD | Currency of returned prices (ISO code). |
| no_cache | boolean = false | Force a fresh SerpAPI fetch, bypassing this server’s result cache. |
| zero_trace | boolean = false | Enterprise-only ZeroTrace mode — SerpAPI stores no search params or metadata. |
Prompts that just work.
Find the cheapest nonstop round trip from Berlin to Lisbon leaving Friday, back Sunday night.
google_flights_searchWhere can I fly from Warsaw for under $150 in October? Surprise me.
google_flights_deals_searchCompare business-class fares Warsaw → New York for the first week of September, sorted by duration.
google_flights_searchWhat comes back
{
"source": "serpapi/google_flights",
"fetchedAt": "2026-07-02T14:02:11.312Z",
"query": { "departure_id": "BER", "arrival_id": "LIS", "outbound_date": "2026-07-03", … },
"best_flights": [
{
"flights": [{ "airline": "TAP Air Portugal", "flight_number": "TP 533", … }],
"total_duration": 220,
"price": 148,
"carbon_emissions": { "this_flight": 172000, "difference_percent": -8 }
}
],
"price_insights": { "lowest_price": 148, "price_level": "low" }
}
Abridged real response. Every payload carries the same envelope — source says
where the data came from, fetchedAt says when, query echoes what you asked.
Compact JSON in one text block, exactly how agents like it.
Add Google Flights
to your agent.
mcp.wondel.ai/google-flights/mcp Authless · Read-only public data · Streamable HTTP at /mcp, legacy SSE at /google-flights/sse