/ Directory / Playground / Fli (Google Flights MCP)
● Community punitarani ⚡ Instant

Fli (Google Flights MCP)

by punitarani · punitarani/fli

Talk to Claude about flights and have it actually search Google Flights — no API key, no scraping headaches, no SkyScanner fees.

Fli wraps Google Flights' internal Protocol Buffers endpoints behind an MCP-compatible Python library and CLI. Claude can run one-way, round-trip, or multi-city searches, filter by airline / stops / price / time-of-day, and pull date-grid pricing for the cheapest day to fly. No login, no rate-limit headaches like with the unofficial scrapers, because it speaks the same protocol the website itself uses.

Why use it

Key features

Live Demo

What it looks like in practice

flights-fli-mcp.replay ▶ ready
0/0

Install

Pick your client

~/Library/Application Support/Claude/claude_desktop_config.json  · Windows: %APPDATA%\Claude\claude_desktop_config.json
{
  "mcpServers": {
    "flights-fli-mcp": {
      "command": "uvx",
      "args": [
        "fli-mcp"
      ]
    }
  }
}

Open Claude Desktop → Settings → Developer → Edit Config. Restart after saving.

~/.cursor/mcp.json · .cursor/mcp.json
{
  "mcpServers": {
    "flights-fli-mcp": {
      "command": "uvx",
      "args": [
        "fli-mcp"
      ]
    }
  }
}

Cursor uses the same mcpServers schema as Claude Desktop. Project config wins over global.

VS Code → Cline → MCP Servers → Edit
{
  "mcpServers": {
    "flights-fli-mcp": {
      "command": "uvx",
      "args": [
        "fli-mcp"
      ]
    }
  }
}

Click the MCP Servers icon in the Cline sidebar, then "Edit Configuration".

~/.codeium/windsurf/mcp_config.json
{
  "mcpServers": {
    "flights-fli-mcp": {
      "command": "uvx",
      "args": [
        "fli-mcp"
      ]
    }
  }
}

Same shape as Claude Desktop. Restart Windsurf to pick up changes.

~/.continue/config.json
{
  "mcpServers": [
    {
      "name": "flights-fli-mcp",
      "command": "uvx",
      "args": [
        "fli-mcp"
      ]
    }
  ]
}

Continue uses an array of server objects rather than a map.

~/.config/zed/settings.json
{
  "context_servers": {
    "flights-fli-mcp": {
      "command": {
        "path": "uvx",
        "args": [
          "fli-mcp"
        ]
      }
    }
  }
}

Add to context_servers. Zed hot-reloads on save.

claude mcp add flights-fli-mcp -- uvx fli-mcp

One-liner. Verify with claude mcp list. Remove with claude mcp remove.

Use Cases

Real-world ways to use Fli (Google Flights MCP)

How to find the cheapest day to fly between two cities with Claude

👤 Travelers with flexible dates ⏱ ~10 min beginner

When to use: You know where and roughly when, but you'd rather move the date than pay $200 more.

Prerequisites
  • fli-mcp installed — uvx fli-mcp (auto-installs from PyPI)
Flow
  1. Ask for a price grid
    Use Fli. Show me the cheapest day to fly SFO → NRT in the second half of June, round-trip, 7-day stay.✓ Copied
    → Date grid table with daily round-trip lows
  2. Drill into the cheapest pair
    For the cheapest date pair, list the actual itineraries — airlines, layovers, total time.✓ Copied
    → 5-10 itineraries sorted by price, with airline + duration
  3. Narrow down
    Filter to non-stop only, max 1 layover, depart after 9am from SFO.✓ Copied
    → Re-filtered list, much shorter

Outcome: A short, real-price flight list you can book directly on the airline site or Google Flights.

Pitfalls
  • Booking site prices differ from what you saw — Google Flights prices are upstream cache; for OTA fees, click through to the airline. Fli matches Google Flights, not the OTA.

Plan a multi-city business trip with Claude doing the searches

👤 Frequent business travelers, EAs ⏱ ~20 min intermediate

When to use: You have 3+ cities to hit and rolling your own search across each leg is tedious.

Flow
  1. Lay out the route
    Plan multi-city: SFO → JFK May 12, JFK → LHR May 15, LHR → SFO May 20. One adult, business class, max 1 stop per leg.✓ Copied
    → Multi-city itinerary with priced legs
  2. Compare alliances
    Re-run with Star Alliance only so I can keep my UA status accruing.✓ Copied
    → Filtered set, possibly higher price — Claude flags the delta
  3. Export
    Save the chosen itinerary to a markdown brief with booking URLs and seat policies.✓ Copied
    → Brief written to disk; URLs work

Outcome: A booked-ready multi-city plan in under 10 minutes instead of 45 min of tab-juggling.

Pitfalls
  • Some airlines are missing from Google Flights (Southwest) — Fli inherits Google Flights' coverage. Southwest must be checked separately.
Combine with: filesystem

Build a flight-deal watchlist Claude refreshes on demand

👤 Hobbyists and digital nomads ⏱ ~25 min intermediate

When to use: You want to track 5–10 routes and get told when a price dips.

Flow
  1. Define the watchlist
    Track these 5 routes for the next 60 days, store each search as JSON in /flights/watch.json.✓ Copied
    → watch.json created with 5 routes
  2. Run the sweep
    Fetch fresh lowest prices for every route in watch.json. Diff against last run, highlight drops > 15%.✓ Copied
    → Diff table; drops bolded

Outcome: A lightweight personal price-drop alert without paying Hopper or Going.

Pitfalls
  • Hammering Google Flights too fast gets temporary blocks — Space the sweep — 1 query per ~3 sec is fine. Run it on a cron not a tight loop.
Combine with: filesystem

Combinations

Pair with other MCPs for X10 leverage

flights-fli-mcp + filesystem

Persist a flight watchlist and price history to /flights/

Run today's watchlist. Save results to /flights/$(date +%Y%m%d).json and append to history.csv.✓ Copied
flights-fli-mcp + google-calendar

Once an itinerary is chosen, drop the legs onto your calendar

Add this round-trip's outbound and return as Calendar events with airport codes in the title.✓ Copied

Tools

What this MCP exposes

ToolInputsWhen to callCost
search_flights origin: str, destination: str, depart_date, return_date?, passengers, cabin Standard one-way or round-trip search 1 Google Flights query
search_date_grid origin, destination, month, trip_length When dates are flexible and you want lowest-day discovery 1 query (heavier)
search_multi_city legs[]: {origin, destination, date} 3+ city itineraries 1 query
filter itineraries, filters: {airlines?, alliance?, max_stops?, time_window?, max_price?} Narrow a result set without a re-query free (post-fetch)

Cost & Limits

What this costs to run

API quota
No formal quota — Google Flights enforces soft per-IP limits (~1 query per few seconds)
Tokens per call
300–2500 tokens per result set
Monetary
Free
Tip
Use search_date_grid sparingly — it's heavier than point queries.

Security

Permissions, secrets, blast radius

Credential storage: None — no API keys
Data egress: All requests go to flights.google.com

Troubleshooting

Common errors and fixes

HTTP 429 / temporary block

You queried too fast. Wait 5–10 minutes and slow your sweep cadence.

Verify: Re-run a single query after the wait
Empty result for valid route

Date may be > 11 months out (Google's max). Pick a date inside that window.

Some airline missing (Southwest etc.)

Google Flights does not index Southwest. Use airline.com directly for those.

Alternatives

Fli (Google Flights MCP) vs others

AlternativeWhen to use it insteadTradeoff
SkyScanner / Amadeus / Duffel APIsYou're building a real product and need TOS-compliant bookingThose need keys + payment. Fli is best for personal automation, not a public app.
Kiwi.com Tequila APIYou need explicit aggregator coverage including budget carriersFree tier limited; Fli has zero quota but Google Flights coverage.

More

Resources

📖 Read the official README on GitHub

🐙 Browse open issues

🔍 Browse all 400+ MCP servers and Skills