Google Flights

io.github.ThiagoJacobLannesPublished by GitHub account ThiagoJacobLannesv0.1.0Updated Nov 1, 2026

Search Google Flights prices, cheapest travel dates and airport codes.

Overview

AI-generated overview

Searches Google Flights for fares, schedules and cheapest travel dates, and resolves city or airport names to IATA codes.

What you can do
  • Search flights by origin, destination, dates, passengers, cabin class, currency, stops and sort order, returning price-ranked options with airline, times, duration and a Google Flights link
  • Find the cheapest departure days inside a date window (up to 21 days), price-calendar style
  • Resolve a city or airport name to IATA codes using an offline airport dataset
When to use it
Useful when you want an assistant to compare flight prices and schedules, or to scan a range of dates for the cheapest day to fly, without opening a browser. Also handy for looking up airport codes before a search.
Requirements
Runs locally over stdio, typically via uvx from PyPI (Python 3.11+ and uv). No API key needed for the default scraper; setting SERPAPI_KEY switches to SerpApi for flight numbers, layover detail and emissions. Optional GOOGLE_FLIGHTS_DEFAULT_ORIGIN and GOOGLE_FLIGHTS_DEFAULT_CURRENCY. Network access to Google Flights is required.
Before you install
The default provider scrapes Google Flights' internal search API, which can break if Google changes it; in EU/UK regions it auto-submits the cookie-consent "Reject all" option. Round-trip results show outbound options with an estimated total, not a separately priced return leg. cheapest_dates runs one search per day, so it is slower. If you set SERPAPI_KEY, that key is stored in the client config and queries go to SerpApi. Exposing the optional HTTP mode beyond localhost needs your own proxy…

Installation

In SourceWeft

  1. Open Google Flights in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

google-flights-mcp

MCP server for searching Google Flights prices and schedules from Claude.

Two interchangeable data sources behind one interface (google_flights_mcp/providers/base.py):

  • fast-flights (default) — scrapes Google Flights' internal protobuf search API directly. No API key, works out of the box.
  • SerpApi — used automatically when a SERPAPI_KEY environment variable is set. Adds flight numbers, layover detail, and carbon emissions.

Tools

  • search_flights — origin (default LIS), destination, departure_date, optional return_date, passenger counts, cabin_class, currency (default EUR), max_stops, sort_by. Returns a price-ranked list: price, airline(s), departure/arrival times, duration, stops, and a Google Flights link.
  • cheapest_dates — cheapest day(s) to fly in a date window (max 21 days), price-calendar style. Runs one search per day — see "Known limitations" below.
  • airport_search — resolve a city or airport name ("Lisbon") to an IATA code (LIS), backed by the offline airportsdata package.

Known limitations

  • Round trips: for return_date searches, both providers return outbound flight options annotated with an estimated round-trip total price (paired with the cheapest matching return) — not a separately priced return leg. stops/duration/legs describe the outbound flight only. Open the result's booking_link on Google Flights to pick the exact return.
  • cheapest_dates: neither fast-flights nor SerpApi's Google Flights engine expose a real bulk price-calendar endpoint, so this runs one search_flights call per candidate day. Capped at a 21-day window to keep that bounded.
  • EU/UK cookie-consent wall: Google shows a cookie-consent interstitial to requests from those regions before returning real results. The fast-flights provider detects this and auto-submits "Reject all" (the privacy-preserving option) before retrying — see providers/fast_flights_provider.py if this ever needs updating for a change on Google's side.

Install

Quickest (needs uv): no clone needed, it runs straight from PyPI.

bash
claude mcp add google-flights -- uvx google-flights-search-mcp

For Claude Desktop, use "command": "uvx", "args": ["google-flights-search-mcp"].

From source:

Requires Python 3.11+ and uv.

bash
git clone https://github.com/ThiagoJacobLannes/google-flights-mcpcd google-flights-mcpuv sync --extra dev

On Windows, if you keep code in a cloud-synced folder (Google Drive, OneDrive), create the venv outside it — sync clients drop desktop.ini marker files into folders, which can crash packages on startup:

bash
uv venv C:\dev\google-flights-mcp-venvuv pip install --python C:\dev\google-flights-mcp-venv -e ".[dev]"

The command paths below assume that venv location; adjust to wherever yours lives.

Add to Claude Desktop

Merge claude_desktop_config.snippet.json into your Claude Desktop config (%APPDATA%\Claude\claude_desktop_config.json):

json
{  "mcpServers": {    "google-flights": {      "command": "C:\\dev\\google-flights-mcp-venv\\Scripts\\python.exe",      "args": ["-m", "google_flights_mcp.server"]    }  }}

Restart Claude Desktop after editing. To use SerpApi instead of the default scraper, add an env block:

json
{  "mcpServers": {    "google-flights": {      "command": "C:\\dev\\google-flights-mcp-venv\\Scripts\\python.exe",      "args": ["-m", "google_flights_mcp.server"],      "env": { "SERPAPI_KEY": "your-serpapi-key" }    }  }}

Get a key at serpapi.com (free tier available).

Other env vars: GOOGLE_FLIGHTS_DEFAULT_ORIGIN (default LIS), GOOGLE_FLIGHTS_DEFAULT_CURRENCY (default EUR).

Running over HTTP (for a remote connector)

bash
C:\dev\google-flights-mcp-venv\Scripts\python.exe -m google_flights_mcp.server --http

Or set MCP_TRANSPORT=streamable-http. Configure the bind address with MCP_HOST (default 127.0.0.1) and MCP_PORT (default 8000); the server listens at http://<host>:<port>/mcp. Put this behind whatever reverse proxy / auth you use for your other remote connectors before exposing it beyond localhost.

Smoke test

Real network call (no mocks) — searches LIS → GRU about a month out:

bash
C:\dev\google-flights-mcp-venv\Scripts\python.exe tools\google-flights-mcp\examples\smoke_test.py

Tests

bash
C:\dev\google-flights-mcp-venv\Scripts\python.exe -m pytest tools\google-flights-mcp\tests

These are unit tests against the provider abstraction (factory selection, passenger validation, the shared cheapest_dates day-loop, airport resolution) — no network access required.

Source: README.md at commit d0d92f2

Tools

3

search_flights

Search flight prices and options on Google Flights. Args: destination: Destination airport IATA code (e.g. "GRU"). If you only have a city name, call airport_search first. departure_date: Outbound date, YYYY-MM-DD. origin: Origin airport IATA code. Defaults to Lisbon (LIS) if omitted. return_date: Return date YYYY-MM-DD to search a round trip; omit for one-way. For round trips, each result's price is Google's estimated round-trip total for that outbound flight paired with its cheapest matching return — stops/duration/legs describe the outbound only. Open booking_link to pick the exact return flight. adults: Number of adult passengers (default 1). children: Number of child passengers (default 0). infants: Number of lap infants, under 2 with no own seat (default 0). cabin_class: "economy" | "premium" | "business" | "first". currency: ISO currency code. Defaults to EUR. max_stops: Maximum stops to allow (0 = nonstop only, 1 = up to one stop, etc.). Omit to allow any number of stops. sort_by: "price" (default, ascending) or "duration" (ascending).

Parametersadultsorigininfantssort_bychildrencurrencymax_stopscabin_classdestinationrequiredreturn_datedeparture_daterequired

cheapest_dates

Find the cheapest day(s) to fly within a date window (price-calendar style). Runs one search per candidate departure day in the window (capped at 21 days — neither of this server's data sources expose a real bulk price-calendar endpoint) and returns each day's cheapest fare, sorted by price ascending. Args: destination: Destination airport IATA code. start_date: First candidate departure date, YYYY-MM-DD. end_date: Last candidate departure date, YYYY-MM-DD (inclusive; max 21 days after start_date). origin: Origin airport IATA code. Defaults to Lisbon (LIS). trip_length: Nights for a round trip, applied to every departure day in the window. Omit to price one-way fares. adults, children, infants: Passenger counts (see search_flights). cabin_class: "economy" | "premium" | "business" | "first". currency: ISO currency code. Defaults to EUR. max_stops: Maximum stops to allow. Omit to allow any.

Parametersadultsorigininfantschildrencurrencyend_daterequiredmax_stopsstart_daterequiredcabin_classdestinationrequiredtrip_length

Version history

1
  1. v0.1.0LatestNov 1, 2026

Score

90% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts
  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts