cheapflights-mcp
Allows searching and comparing flight prices using Google Flights API, finding cheapest dates, and suggesting alternative routes and dates.
Click on "Install 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., "@cheapflights-mcpFind cheapest flights from New York to London next month"
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.
๐ซ CheapFlights MCP
An open-source MCP server that helps you find the cheapest flights with smart suggestions.
Features
๐ Search flights โ Find cheapest options for any route
๐ Flexible dates โ See which dates are cheapest across a month
๐ก Smart suggestions โ Nearby airports, date shifts, savings tips
๐จโ๐ฉโ๐งโ๐ฆ Family pricing โ Calculates total for adults + children
โก Fast โ Direct Google Flights API access (no scraping)
Install
# Install dependencies
pipx install flights # provides fli-mcp and fli CLI
# Install this MCP server
pip install cheapflights-mcpUsage with Claude / Kiro / AI Assistants
Add to your MCP config:
{
"mcpServers": {
"cheapflights": {
"command": "cheapflights-mcp"
}
}
}Then ask your AI:
"Find cheapest flights from Melbourne to Tokyo in October for 2 adults and 2 kids"
"What are the cheapest dates to fly Sydney to London in January?"
"Suggest cheaper alternatives for JFK to NRT on Dec 25"
MCP Tools
Tool | Description |
| Compare flight prices, sorted by cheapest |
| Price calendar across a date range |
| Nearby dates, airports, and route alternatives |
Development
git clone https://github.com/YOUR_USERNAME/cheapflights-mcp.git
cd cheapflights-mcp
pip install -e .
cheapflights-mcp # runs on stdioRoadmap
Multi-source: Add Skyscanner, Kiwi.com APIs
Price alerts: Notify when prices drop
Destination discovery: "Where can I fly for $500?"
Price history: "Is this a good deal?"
Booking links: Direct links to book
License
MIT
Available Tools
3 toolsfind_airportsSearch AirportsARead-onlyIdempotent
Search for airports by city name, airport name, or IATA code.
Use this tool to find airport IATA codes before searching for flights. Supports city names (e.g., "new york" returns JFK, LGA, EWR), airport names (e.g., "heathrow" returns LHR), and IATA codes.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | City name, airport name, or IATA code (e.g., 'new york', 'heathrow', 'JFK') | |
| limit | No | Maximum results to return |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint and idempotentHint, confirming safe read operation. Description adds behavioral context by explaining supported query types and providing examples, without contradicting annotations.
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 concise sentences: purpose, usage guidance, and examples. Every sentence adds distinct value with no 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?
Input schema fully described, output schema exists, annotations cover safety. Description covers all user-facing aspects including query types and use case, making it complete for a simple lookup tool.
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 descriptions for both parameters. Description adds value by offering examples for 'query' (e.g., 'new york', 'heathrow', 'JFK') and clarifying search functionality beyond schema 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?
Description clearly states 'Search for airports' and specifies three distinct input types (city name, airport name, IATA code). Differentiates from sibling tools search_dates and search_flights by focusing on airport lookup for flight context.
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?
Explicitly advises using this tool before searching for flights to find IATA codes. Provides clear usage context but does not include when-not or alternative scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_datesSearch DatesARead-onlyIdempotent
Find the cheapest travel dates between two airports within a date range.
Returns a list of dates with their prices, useful for flexible travel planning. Supports both one-way and round-trip searches.
| Name | Required | Description | Default |
|---|---|---|---|
| origin | Yes | Departure airport IATA code(s), comma-separated for multiple (e.g., 'JFK' or 'JFK,LGA') | |
| destination | Yes | Arrival airport IATA code(s), comma-separated for multiple (e.g., 'LHR' or 'LHR,CDG') | |
| start_date | Yes | Start of date range in YYYY-MM-DD format | |
| end_date | Yes | End of date range in YYYY-MM-DD format | |
| trip_duration | No | Trip duration in days for round-trips | |
| is_round_trip | No | Search for round-trip flights | |
| airlines | No | Filter by airline IATA codes (e.g., ['BA', 'AA']) | |
| cabin_class | No | Cabin class: ECONOMY, PREMIUM_ECONOMY, BUSINESS, FIRST | ECONOMY |
| max_stops | No | Maximum stops: ANY, NON_STOP, ONE_STOP, TWO_PLUS_STOPS | ANY |
| departure_window | No | Departure time window in 'HH-HH' 24h format (e.g., '6-20') | |
| sort_by_price | No | Sort results by price (lowest first) | |
| passengers | No | Number of adult passengers |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true. The description adds that it returns a list of dates with prices, which is consistent, but does not disclose additional behavioral traits like rate limits or data freshness.
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 main purpose, no extraneous words. Highly efficient.
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 rich schema (100% coverage), annotations, and output schema, the description adequately covers core functionality and return values. Could mention more about filtering options or result format nuances.
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 only adds context about one-way/round-trip searches, which is already covered by the is_round_trip parameter 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 verb 'find' and resource 'cheapest travel dates between two airports within a date range', differentiating from sibling tools find_airports and 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 implies usage for flexible travel planning and notes support for one-way/round-trip, but does not explicitly guide when to use this tool versus search_flights or provide exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_flightsSearch FlightsARead-onlyIdempotent
Search for flights between two airports on a specific date.
Returns a list of available flights with prices, durations, and leg details. Supports one-way and round-trip searches with various filtering options.
| Name | Required | Description | Default |
|---|---|---|---|
| origin | Yes | Departure airport IATA code(s), comma-separated for multiple (e.g., 'JFK' or 'JFK,LGA') | |
| destination | Yes | Arrival airport IATA code(s), comma-separated for multiple (e.g., 'LHR' or 'LHR,CDG') | |
| departure_date | Yes | Travel date in YYYY-MM-DD format | |
| return_date | No | Return date in YYYY-MM-DD format (omit for one-way) | |
| departure_window | No | Departure time window in 'HH-HH' 24h format (e.g., '6-20') | |
| airlines | No | Filter by airline IATA codes (e.g., ['BA', 'AA']) | |
| cabin_class | No | Cabin class: ECONOMY, PREMIUM_ECONOMY, BUSINESS, FIRST | ECONOMY |
| max_stops | No | Maximum stops: ANY, NON_STOP, ONE_STOP, TWO_PLUS_STOPS | ANY |
| sort_by | No | Sort by: TOP_FLIGHTS, BEST, CHEAPEST, DEPARTURE_TIME, ARRIVAL_TIME, DURATION, EMISSIONS | CHEAPEST |
| passengers | No | Number of adult passengers | |
| exclude_basic_economy | No | Exclude basic economy fares from results | |
| emissions | No | Filter by emissions level: ALL or LESS | ALL |
| checked_bags | No | Number of checked bags to include in price (0, 1, or 2) | |
| carry_on | No | Include carry-on bag fee in displayed price | |
| show_all_results | No | Return all available results instead of curated ~30 |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint as true, so the description's mention of returning a list of flights is consistent. It adds useful context about return fields (prices, durations, leg details) and trip types (one-way, round-trip), going beyond what annotations provide.
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, front-loading the core purpose. Every sentence adds value: the first states the action, the second describes the output, the third notes supported search types and filters. No wasted words.
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 complexity (15 parameters, output schema exists, annotations provided), the description sufficiently covers the main purpose and return format. It does not detail the output schema structure, but that is handled by the output schema itself. Minor gaps in pagination or rate limits are acceptable.
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%, meaning all 15 parameters have descriptions in the schema. The description adds no extra parameter-specific meaning beyond referencing 'various filtering options,' so it meets the baseline without exceeding.
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 'Search for flights between two airports on a specific date,' specifying the verb (search), resource (flights), and scope. Sibling tools find_airports and search_dates handle different tasks (airport lookup and date exploration), so this tool is well-distinguished.
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 does not explicitly state when to use this tool versus alternatives like search_dates. It implies usage for flight search with filtering, but lacks explicit guidance on when not to use or when to consider other tools.
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. Dates show when Glama detected each change.
3 tool updates
v0.1.0- First observed
find_airports - First observed
search_dates - First observed
search_flights
TDQS
Each tool has a distinct purpose: finding airports, exploring cheapest dates, and searching specific flights. No overlap.
All tool names follow a verb_noun pattern with consistent verb choices (find/search), making them predictable.
With only 3 tools, it's slightly minimal but covers the core flight search workflow without unnecessary bloat.
The tool set covers the full flight search lifecycle: locate airports, find optimal dates, and retrieve specific flights. No obvious gaps.
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Google Flights search data: fares, routes, stops, and price insights via a hosted MCP server.
Skiplagged MCP Server for flight search, hotel booking, and travel planning
Geo-based flight search MCP server. Find more flights between any two places on earth
Flight search MCP server providing search, pagination, and itinerary details for AI assistants.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/saikandikatta/cheapflights-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server