Skip to main content
Glama
HaroldLeo

Google Flights MCP Server

by HaroldLeo

title: Google Flights MCP emoji: ✈️ colorFrom: blue colorTo: indigo sdk: docker pinned: false

Google Flights MCP Server

A Model Context Protocol (MCP) server for intelligent flight search and travel planning

Python Version MCP License


Related MCP server: Google Flights MCP Server

Overview

Integrates Google Flights data directly into your AI workflow with natural language searches, intelligent price comparisons, and automated travel planning.

Data Sources:

  • fast-flights (Primary): Free, no API key required

  • SerpAPI (Fallback): Richer data including flight numbers, layovers, carbon emissions, and multi-seller booking options — used when SERPAPI_API_KEY is set (250 free searches/month)


Tools

Tool

Description

search_one_way_flights

One-way flights for a specific date

search_round_trip_flights

Round-trip flights with fixed dates (supports max_stops)

search_round_trips_in_date_range

Search all round-trip combinations within a date range

search_flights_by_airline

Filter flights by airline codes or alliance (STAR_ALLIANCE, SKYTEAM, ONEWORLD)

get_travel_dates

Calculate travel dates relative to today

generate_google_flights_url

Generate a shareable Google Flights search link

Resources

  • airports://all — Browse available airports

  • airports://{code} — Get info for a specific airport (e.g. airports://LAX)

Prompts

10 built-in travel planning prompts: find_best_deal, weekend_getaway, last_minute_travel, business_trip, family_vacation, budget_backpacker, loyalty_program_optimizer, holiday_peak_travel, long_haul_international, stopover_explorer.


Quick Start

Option 1: Install from PyPI

uvx mcp-server-google-flights

Option 2: Run from source

git clone https://github.com/HaroldLeo/google-flights-mcp.git
cd google-flights-mcp
python -m venv .venv
source .venv/bin/activate
pip install -e .

Configuration

Claude Desktop

{
  "mcpServers": {
    "google-flights": {
      "command": "uvx",
      "args": ["mcp-server-google-flights"],
      "env": {
        "SERPAPI_API_KEY": "your_serpapi_key_here"
      }
    }
  }
}

From source

{
  "mcpServers": {
    "google-flights": {
      "command": "/absolute/path/to/.venv/bin/python",
      "args": ["/absolute/path/to/google-flights-mcp/src/mcp_server_google_flights/server.py"],
      "env": {
        "SERPAPI_API_KEY": "your_serpapi_key_here"
      }
    }
  }
}

Get a free SerpAPI key: serpapi.com/users/sign_up (250 free searches/month)


Remote Deployment (Hugging Face Spaces)

This server supports remote deployment as an SSE MCP server.

Deploy to HF Spaces

  1. Create a new Space at huggingface.co/new-space with Docker SDK

  2. Push this repository to the Space

  3. (Optional) Add SERPAPI_API_KEY as a Space secret

The Dockerfile and transport switching are already configured — set MCP_TRANSPORT=sse (done automatically in the Dockerfile) to run in SSE mode.

Connect to a deployed Space

{
  "mcpServers": {
    "google-flights": {
      "url": "https://YOUR-USERNAME-google-flights-mcp.hf.space/sse"
    }
  }
}

Environment Variables

Variable

Description

SERPAPI_API_KEY

SerpAPI key for richer flight data (optional)

MCP_TRANSPORT

stdio (default) or sse for remote deployment

HOST

Host for SSE mode (default: 0.0.0.0)

PORT

Port for SSE mode (default: 7860)


Troubleshooting

No flights found: Try a different date or route. Google Flights rate-limits scraping — SerpAPI fallback is more reliable.

401 error: Update to the latest version. Older versions used a remote Playwright service that now requires auth.

Slow searches: search_round_trips_in_date_range is limited to 30 date combinations to avoid rate limiting. Narrow your date range or use min_stay_days/max_stay_days.


License

MIT — see LICENSE

Available Tools

9 tools
generate_google_flights_urlA
Generate a Google Flights search URL that opens in the browser.
Creates search URLs using natural language queries.

Args:
    origin: Origin airport code (e.g., "SFO").
    destination: Destination airport code (e.g., "JFK").
    departure_date: Departure date (YYYY-MM-DD format).
    return_date: Return date for round-trip (YYYY-MM-DD format, optional).
    adults: Number of adult passengers (default: 1).
    children: Number of children (default: 0).
    seat_type: Fare class - economy/premium_economy/business/first (default: "economy").

Returns:
    JSON with the Google Flights URL.

Example Args:
    {"origin": "SFO", "destination": "JFK", "departure_date": "2025-07-20"}
    {"origin": "SFO", "destination": "JFK", "departure_date": "2025-07-20", "return_date": "2025-07-27"}
ParametersJSON Schema
NameRequiredDescriptionDefault
originYes
destinationYes
departure_dateYes
return_dateNo
adultsNo
childrenNo
seat_typeNoeconomy

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It discloses that the tool generates URLs for browser use and handles natural language queries, which is useful behavioral context. However, it doesn't mention potential limitations like URL length constraints, error handling, or authentication needs, leaving gaps for a mutation-like tool (URL generation).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear sections (purpose, args, returns, examples) and uses bullet-like formatting for parameters. It's appropriately sized, though the example args could be integrated more seamlessly. Every sentence adds value, with no redundant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (7 parameters, no annotations, but with output schema), the description is largely complete. It explains parameters thoroughly, states the return format (JSON with URL), and provides examples. The output schema handles return values, so the description doesn't need to detail them further. Minor gaps include lack of error case explanations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description coverage is 0%, so the description must compensate fully. It provides detailed parameter semantics in the 'Args' section, explaining each parameter's purpose, format (e.g., airport codes, YYYY-MM-DD), defaults, and optionality. This adds significant value beyond the bare schema, making parameters clear and actionable.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Generate a Google Flights search URL that opens in the browser' and 'Creates search URLs using natural language queries.' It specifies the verb ('generate'), resource ('Google Flights search URL'), and distinguishes it from sibling tools that perform actual flight searches rather than URL generation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage context by mentioning 'natural language queries' and the browser opening, but it doesn't explicitly state when to use this tool versus the sibling flight search tools. No alternatives or exclusions are provided, leaving the agent to infer based on tool names.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_multi_city_flightsA
Fetches multi-city/multi-stop itineraries for complex trip planning.

⚠️  IMPORTANT: Multi-city flight scraping is not fully supported by the underlying fast-flights
library. This function will generate a valid Google Flights URL with your search parameters,
but may not be able to parse the results. If parsing fails, you'll receive a direct link to
view the flights on Google Flights.

💡 RECOMMENDATION FOR AI AGENTS: Instead of using this function, consider using the
get_one_way_flights() function multiple times (once for each leg of the journey) and
combining the results. This approach is more reliable and provides detailed flight
information for each segment, which you can then present together as a complete itinerary.

Args:
    flight_segments: JSON string of flight segments. Each segment should have "date", "from", and "to" fields.
                    Example: '[{"date": "2025-07-01", "from": "SFO", "to": "NYC"}, {"date": "2025-07-05", "from": "NYC", "to": "MIA"}, {"date": "2025-07-10", "from": "MIA", "to": "SFO"}]'
    adults: Number of adult passengers (default: 1).
    seat_type: Fare class (e.g., "economy", "business", default: "economy").
    return_cheapest_only: If True, returns only the cheapest option (default: False).

Example Args:
    {"flight_segments": '[{"date": "2025-07-01", "from": "SFO", "to": "NYC"}, {"date": "2025-07-05", "from": "NYC", "to": "MIA"}]'}
ParametersJSON Schema
NameRequiredDescriptionDefault
flight_segmentsYes
adultsNo
seat_typeNoeconomy
return_cheapest_onlyNo
max_resultsNo
compact_modeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It does an excellent job explaining key behavioral traits: it warns that 'multi-city flight scraping is not fully supported,' explains what happens when parsing fails (returns a direct link), and describes the reliability issues. It doesn't cover all possible behavioral aspects like rate limits or authentication needs, but for a tool with no annotations, this provides substantial behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is perfectly structured and concise. It starts with the core purpose, immediately provides critical warnings and recommendations, then details parameters with clear examples. Every sentence serves a purpose - there's no fluff or repetition. The use of emojis and clear sectioning makes it easy to parse while maintaining professional clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (6 parameters, no annotations, but has output schema), the description does an excellent job covering the most important aspects. It explains the tool's purpose, when to avoid it, key behavioral limitations, and parameter usage. The presence of an output schema means it doesn't need to explain return values. The main gap is not covering all parameters, but for a complex tool with no annotations, this is quite comprehensive.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description must compensate. It provides detailed explanations for 4 of the 6 parameters (flight_segments, adults, seat_type, return_cheapest_only), including examples and default values. It doesn't cover max_results or compact_mode, but the coverage of the most complex parameter (flight_segments) with a JSON example adds significant value beyond what the bare schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Fetches multi-city/multi-stop itineraries for complex trip planning.' It specifies both the action ('fetches') and the resource ('multi-city/multi-stop itineraries'), and the mention of 'complex trip planning' distinguishes it from simpler flight search tools. This is specific and immediately tells the agent what this tool does differently from its siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance on when NOT to use this tool and recommends an alternative approach. It states: 'Instead of using this function, consider using the get_one_way_flights() function multiple times... This approach is more reliable.' This gives the agent clear direction about when to avoid this tool and what to use instead, which is exactly what usage guidelines should provide.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_travel_datesB
Calculate suggested travel dates based on current date.
Helpful for planning future trips.

Args:
    days_from_now: Number of days from today for departure (default: 30).
    trip_length: Length of trip in days (default: 7).

Returns:
    JSON with suggested departure and return dates.

Example Args:
    {"days_from_now": 45, "trip_length": 10}
ParametersJSON Schema
NameRequiredDescriptionDefault
days_from_nowNo
trip_lengthNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses that the tool calculates dates based on the current date and returns JSON, but lacks details on behavioral traits such as error handling, rate limits, or whether it's a read-only operation. It doesn't contradict annotations, but offers minimal behavioral context beyond the basic operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear sections for purpose, args, returns, and an example. It's appropriately sized and front-loaded, with the core purpose stated first. Minor improvements could include removing redundant phrasing, but overall it's efficient and earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's low complexity, 2 parameters, and the presence of an output schema (which handles return values), the description is mostly complete. It covers the purpose, parameters, and return format adequately. However, it lacks usage guidelines and some behavioral details, preventing a perfect score.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds significant meaning beyond the input schema, which has 0% description coverage. It explains that 'days_from_now' is the 'Number of days from today for departure' and 'trip_length' is the 'Length of trip in days,' including default values and an example. This compensates well for the low schema coverage, though it doesn't cover all possible edge cases.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Calculate suggested travel dates based on current date. Helpful for planning future trips.' It specifies the verb ('calculate') and resource ('suggested travel dates'), though it doesn't explicitly differentiate from sibling tools like date-range search tools, which is why it doesn't reach a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It mentions it's 'helpful for planning future trips,' but doesn't specify scenarios, prerequisites, or exclusions compared to sibling tools like search_round_trip_flights or search_round_trips_in_date_range, which might overlap in functionality.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_direct_flightsA
Search for direct flights only (no stops). Supports both one-way and round-trip.

Args:
    origin: Origin airport code (e.g., "SFO").
    destination: Destination airport code (e.g., "JFK").
    date: Departure date (YYYY-MM-DD format).
    is_round_trip: If True, search round-trip flights (default: False).
    return_date: Return date for round-trips (YYYY-MM-DD format, required if is_round_trip=True).
    adults: Number of adult passengers (default: 1).
    children: Number of children (2-11 years, default: 0).
    infants_in_seat: Number of infants in seat (under 2 years, default: 0).
    infants_on_lap: Number of infants on lap (under 2 years, default: 0).
    seat_type: Fare class - economy/premium_economy/business/first (default: "economy").
    return_cheapest_only: If True, returns only the cheapest flight (default: False).

Example Args:
    {"origin": "SFO", "destination": "JFK", "date": "2025-07-20"}
    {"origin": "SFO", "destination": "JFK", "date": "2025-07-20", "is_round_trip": true, "return_date": "2025-07-27"}
ParametersJSON Schema
NameRequiredDescriptionDefault
originYes
destinationYes
dateYes
is_round_tripNo
return_dateNo
adultsNo
childrenNo
infants_in_seatNo
infants_on_lapNo
seat_typeNoeconomy
return_cheapest_onlyNo
max_resultsNo
compact_modeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden but only states basic functionality. It doesn't disclose important behavioral traits like rate limits, authentication requirements, error conditions, response format, or what happens with invalid parameters. The example args are helpful but don't cover behavioral aspects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with a clear purpose statement followed by detailed parameter documentation and examples. While comprehensive, it's appropriately sized for a 13-parameter tool. Every sentence adds value, though the parameter section is lengthy but necessary given the complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (13 parameters, no annotations) but with an output schema present, the description provides strong parameter semantics and clear purpose. It covers the core functionality well but lacks behavioral context about limitations, errors, or performance characteristics that would be helpful for an agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description provides excellent parameter documentation with clear explanations, examples, defaults, and constraints for all 13 parameters. With 0% schema description coverage, the description fully compensates by explaining each parameter's purpose, format, and usage conditions beyond what the bare schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool searches for direct flights only (no stops) and supports both one-way and round-trip options. It distinguishes itself from siblings like search_flights_with_max_stops and search_one_way_flights by specifying the 'direct only' constraint and dual trip type support.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for direct flight searches but doesn't explicitly state when to use this tool versus alternatives like search_one_way_flights or search_round_trip_flights. It mentions 'direct flights only' which differentiates from tools allowing stops, but lacks clear guidance on trip type selection among siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_flights_by_airlineA
Search flights filtered by specific airlines or alliances.

💡 TIP: Default max_stops=2 provides more reliable scraping for round-trip searches.

Args:
    origin: Origin airport code (e.g., "SFO").
    destination: Destination airport code (e.g., "JFK").
    date: Departure date (YYYY-MM-DD format).
    airlines: Airline code(s) or alliance name. Can be either:
             - Single airline: "UA" or "AA" or "DL" (2-letter codes)
             - Multiple airlines: ["UA", "AA", "DL"] (JSON array)
             - Alliance: "STAR_ALLIANCE" or "SKYTEAM" or "ONEWORLD"
    is_round_trip: If True, search round-trip flights (default: False).
    return_date: Return date for round-trips (YYYY-MM-DD format).
    adults: Number of adult passengers (default: 1).
    seat_type: Fare class (default: "economy").
    max_stops: Maximum number of stops (0=direct, 1=one stop, 2=two stops, default: 2).
    return_cheapest_only: If True, returns only the cheapest flight (default: False).

Example Args:
    {"origin": "SFO", "destination": "TYO", "date": "2026-02-20", "airlines": "UA"}
    {"origin": "SFO", "destination": "JFK", "date": "2025-07-20", "airlines": "["UA", "AA"]"}
    {"origin": "SFO", "destination": "JFK", "date": "2025-07-20", "airlines": "STAR_ALLIANCE", "max_stops": 0}
ParametersJSON Schema
NameRequiredDescriptionDefault
originYes
destinationYes
dateYes
airlinesYes
is_round_tripNo
return_dateNo
adultsNo
seat_typeNoeconomy
max_stopsNo
return_cheapest_onlyNo
max_resultsNo
compact_modeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden for behavioral disclosure. It adds valuable context beyond basic functionality: the scraping reliability tip, default behaviors (max_stops=2, return_cheapest_only=False), and format examples. It doesn't mention rate limits, authentication needs, or error handling, but provides substantial operational guidance.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with purpose statement, tip, parameter explanations, and examples. Every sentence earns its place by adding value. It could be slightly more front-loaded by moving the examples to the end, but overall it's efficiently organized without wasted content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (12 parameters, 0% schema coverage) and presence of an output schema, the description provides substantial context. It thoroughly documents parameters and usage patterns. The main gap is lack of explicit guidance on when to choose this tool versus sibling alternatives, but otherwise it's quite complete for a search tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description fully compensates by providing detailed parameter explanations. It clarifies the 'airlines' parameter's three possible formats (single code, array, alliance name), explains defaults for 5 parameters, provides format requirements (YYYY-MM-DD), and gives concrete examples. This adds significant meaning beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose as 'Search flights filtered by specific airlines or alliances,' which is a specific verb+resource combination. It distinguishes itself from siblings like 'search_direct_flights' or 'search_round_trip_flights' by emphasizing airline/alliance filtering as the primary differentiator.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for usage through the tip about max_stops=2 for reliable round-trip scraping and the examples showing different airline filtering scenarios. However, it doesn't explicitly state when to use this tool versus alternatives like 'search_direct_flights' or 'search_round_trip_flights' from the sibling list.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_flights_with_max_stopsB
Search flights with a maximum number of stops (0=direct, 1=one stop, 2=two stops).

Args:
    origin: Origin airport code (e.g., "SFO").
    destination: Destination airport code (e.g., "JFK").
    date: Departure date (YYYY-MM-DD format).
    max_stops: Maximum number of stops (0, 1, or 2).
    is_round_trip: If True, search round-trip flights (default: False).
    return_date: Return date for round-trips (YYYY-MM-DD format).
    adults: Number of adult passengers (default: 1).
    seat_type: Fare class (default: "economy").
    return_cheapest_only: If True, returns only the cheapest flight (default: False).

Example Args:
    {"origin": "SFO", "destination": "JFK", "date": "2025-07-20", "max_stops": 1}
    {"origin": "SFO", "destination": "JFK", "date": "2025-07-20", "max_stops": 0, "is_round_trip": true, "return_date": "2025-07-27"}
ParametersJSON Schema
NameRequiredDescriptionDefault
originYes
destinationYes
dateYes
max_stopsYes
is_round_tripNo
return_dateNo
adultsNo
seat_typeNoeconomy
return_cheapest_onlyNo
max_resultsNo
compact_modeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden but lacks critical behavioral details. It doesn't mention whether this is a read-only operation, what authentication is required, rate limits, pagination behavior (though max_results parameter exists), or what happens when no flights match criteria.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well-structured with clear sections (description, args list, examples). The description is front-loaded with the core purpose. Some redundancy exists (e.g., 'Args:' section repeats what's in the schema), but overall efficient for an 11-parameter tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (11 parameters, no annotations) and the presence of an output schema, the description is partially complete. It excels at parameter documentation but lacks behavioral context and usage guidance. The output schema existence reduces the need to describe return values, but other gaps remain significant.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description provides excellent parameter semantics beyond the schema. It explains max_stops values (0=direct, 1=one stop, 2=two stops), provides format examples for dates and airport codes, clarifies defaults for multiple parameters, and includes example arguments. This fully compensates for the 0% schema description coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool searches flights with a maximum stop constraint, distinguishing it from siblings like search_direct_flights or search_round_trip_flights. However, it doesn't explicitly differentiate from search_one_way_flights or search_flights_by_airline, which may also support stop limits.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives like search_direct_flights or search_round_trip_flights. The description mentions max_stops parameter but doesn't provide context for choosing between this and sibling tools with similar functionality.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_one_way_flightsA
Fetches available one-way flights for a specific date between two airports.
Can optionally return only the cheapest flight found.

Args:
    origin: Origin airport code (e.g., "DEN").
    destination: Destination airport code (e.g., "LAX").
    date: The specific date to search (YYYY-MM-DD format).
    adults: Number of adult passengers (default: 1).
    children: Number of children (2-11 years, default: 0).
    infants_in_seat: Number of infants in seat (under 2 years, default: 0).
    infants_on_lap: Number of infants on lap (under 2 years, default: 0).
    seat_type: Fare class - economy/premium_economy/business/first (default: "economy").
    return_cheapest_only: If True, returns only the cheapest flight (default: False).

Example Args:
    {"origin": "SFO", "destination": "JFK", "date": "2025-07-20"}
    {"origin": "SFO", "destination": "JFK", "date": "2025-07-20", "adults": 2, "children": 1}
    {"origin": "SFO", "destination": "JFK", "date": "2025-07-20", "return_cheapest_only": true}
ParametersJSON Schema
NameRequiredDescriptionDefault
originYes
destinationYes
dateYes
adultsNo
childrenNo
infants_in_seatNo
infants_on_lapNo
seat_typeNoeconomy
return_cheapest_onlyNo
max_resultsNo
compact_modeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It mentions the tool 'fetches available one-way flights' and can 'optionally return only the cheapest flight,' which covers basic behavior. However, it lacks details on rate limits, error handling, authentication needs, response format, or what happens with no results. For an 11-parameter tool with no annotations, this is a significant gap in behavioral disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is appropriately sized and well-structured, with a clear opening sentence stating the purpose, followed by a detailed 'Args' section and example usage. Every sentence adds value, though the example section could be slightly more concise. It's front-loaded with the core functionality.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (11 parameters, no annotations, but with an output schema), the description is mostly complete. It thoroughly documents parameters and provides usage examples. Since an output schema exists, the description doesn't need to explain return values. However, it could improve by adding more behavioral context, such as error handling or performance expectations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds substantial meaning beyond the input schema, which has 0% schema description coverage. It provides clear explanations for all parameters listed in the 'Args' section (e.g., 'Origin airport code (e.g., "DEN")', 'Number of adult passengers (default: 1)'), including examples and default values. This fully compensates for the lack of schema descriptions, making parameters well-understood.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('fetches available one-way flights') and resource ('for a specific date between two airports'), with the optional behavior of returning only the cheapest flight. It distinguishes from siblings by focusing on one-way flights specifically, unlike round-trip or multi-city tools in the sibling list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage context through the tool name and description, suggesting it should be used for one-way flight searches. However, it doesn't explicitly state when to use this tool versus alternatives like 'search_round_trip_flights' or 'search_direct_flights' from the sibling list, nor does it mention any prerequisites or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_round_trip_flightsA
Fetches available round-trip flights for specific departure and return dates.
Can optionally return only the cheapest flight found.

💡 TIP: Default max_stops=2 provides more reliable scraping. For direct flights only,
use search_direct_flights() with is_round_trip=True instead.

Args:
    origin: Origin airport code (e.g., "DEN").
    destination: Destination airport code (e.g., "LAX").
    departure_date: The specific departure date (YYYY-MM-DD format).
    return_date: The specific return date (YYYY-MM-DD format).
    adults: Number of adult passengers (default: 1).
    children: Number of children (2-11 years, default: 0).
    infants_in_seat: Number of infants in seat (under 2 years, default: 0).
    infants_on_lap: Number of infants on lap (under 2 years, default: 0).
    seat_type: Fare class - economy/premium_economy/business/first (default: "economy").
    max_stops: Maximum number of stops (0=direct, 1=one stop, 2=two stops, default: 2).
               Lower values = more reliable scraping. Set higher if needed, but may reduce reliability.
    return_cheapest_only: If True, returns only the cheapest flight (default: False).

Example Args:
    {"origin": "DEN", "destination": "LAX", "departure_date": "2025-08-01", "return_date": "2025-08-08"}
    {"origin": "DEN", "destination": "LAX", "departure_date": "2025-08-01", "return_date": "2025-08-08", "adults": 2, "children": 2}
    {"origin": "DEN", "destination": "LAX", "departure_date": "2025-08-01", "return_date": "2025-08-08", "max_stops": 0}
ParametersJSON Schema
NameRequiredDescriptionDefault
originYes
destinationYes
departure_dateYes
return_dateYes
adultsNo
childrenNo
infants_in_seatNo
infants_on_lapNo
seat_typeNoeconomy
max_stopsNo
return_cheapest_onlyNo
max_resultsNo
compact_modeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden and does well by disclosing important behavioral traits: it mentions scraping reliability implications of max_stops values, explains the return_cheapest_only option, and provides practical usage tips. However, it doesn't cover rate limits, authentication needs, or error conditions that would be valuable for a flight search tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is efficiently structured with purpose statement upfront, usage tip, parameter explanations, and examples. Every sentence adds value with no redundancy. The bullet-point style for parameters and clear sectioning makes it easy to parse while maintaining comprehensive coverage.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex 13-parameter tool with no annotations but with an output schema, the description provides excellent coverage of inputs, usage context, and sibling tool relationships. It explains all parameters thoroughly and gives practical guidance. The presence of an output schema reduces the need to describe return values, making this nearly complete for agent usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Given 0% schema description coverage, the description compensates well by explaining all 13 parameters with clear semantics, examples, and defaults. It adds meaningful context beyond schema titles, such as age ranges for children/infants, fare class options for seat_type, and reliability implications for max_stops. The example args provide concrete usage patterns.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose with specific verbs ('fetches available round-trip flights') and distinguishes it from sibling tools by mentioning 'search_direct_flights()' as an alternative for direct flights. It explicitly identifies the resource (flights) and scope (round-trip with specific dates).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance on when to use this tool versus alternatives, stating 'For direct flights only, use search_direct_flights() with is_round_trip=True instead.' It also offers a tip about max_stops defaults and reliability implications, giving clear context for decision-making.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_round_trips_in_date_rangeA
Finds available round-trip flights within a specified date range.
Can optionally return only the cheapest flight found for each date pair.

⚠️ RATE LIMIT WARNING: This function makes multiple Google Flights scraping requests.
Each date pair combination = 1 request. The function is LIMITED to a MAXIMUM of 30
requests to prevent rate limiting and IP blocking.

Example request counts:
- 7 day range with 5-7 day stays: ~10-15 requests (Safe)
- 14 day range with no limits: ~105 requests (WILL BE REJECTED)
- 30 day range: ~465 requests (WILL BE REJECTED)

💡 TIP: Use min_stay_days and max_stay_days to reduce combinations.
Set return_cheapest_only=true for faster results.

Args:
    origin: Origin airport code (e.g., "DEN").
    destination: Destination airport code (e.g., "LAX").
    start_date_str: Start date of the search range (YYYY-MM-DD format).
    end_date_str: End date of the search range (YYYY-MM-DD format).
    min_stay_days: Minimum number of days for the stay (optional).
    max_stay_days: Maximum number of days for the stay (optional).
    adults: Number of adult passengers (default: 1).
    seat_type: Fare class (e.g., "economy", "business", default: "economy").
    max_stops: Maximum number of stops (0=direct, 1=one stop, 2=two stops, default: 2).
    return_cheapest_only: If True, returns only the cheapest flight for each date pair (default: False).
    max_results: Maximum number of results to return (default: 10). Set to 0 or -1 for unlimited.
    offset: Number of results to skip (for pagination, default: 0).
    compact_mode: If True, return only essential fields (saves ~40% tokens, default: False).
    limit: Maximum number of date pairs to process (for pagination, default: 20).

Example Args:
    {"origin": "JFK", "destination": "MIA", "start_date_str": "2025-09-10", "end_date_str": "2025-09-20", "min_stay_days": 5}
    {"origin": "JFK", "destination": "MIA", "start_date_str": "2025-09-10", "end_date_str": "2025-09-20", "min_stay_days": 5, "return_cheapest_only": true}
ParametersJSON Schema
NameRequiredDescriptionDefault
originYes
destinationYes
start_date_strYes
end_date_strYes
min_stay_daysNo
max_stay_daysNo
adultsNo
seat_typeNoeconomy
max_stopsNo
return_cheapest_onlyNo
max_resultsNo
offsetNo
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden and excels by disclosing critical behavioral traits: rate limits (30 request maximum), scraping methodology (Google Flights), request calculation logic, rejection conditions for excessive ranges, and performance optimization tips. This goes far beyond basic functionality.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well-structured with clear sections (purpose, warnings, tips, args, examples) but could be more front-loaded. The rate limit warning with detailed examples is valuable but somewhat lengthy. Every sentence earns its place by adding practical guidance.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex 13-parameter tool with no annotations, the description provides exceptional completeness: purpose, behavioral constraints, parameter semantics, usage examples, and optimization strategies. The presence of an output schema means return values don't need explanation here.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Despite 0% schema description coverage, the description provides comprehensive parameter documentation with examples, format specifications (YYYY-MM-DD), default values, and practical explanations of how parameters interact (e.g., min_stay_days reducing combinations). The example args demonstrate real usage patterns.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('Finds available round-trip flights') and resource ('within a specified date range'), distinguishing it from siblings like 'search_one_way_flights' and 'search_direct_flights' by focusing on round-trips with date range filtering.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit guidance is provided on when to use this tool vs. alternatives through the rate limit warnings and practical examples showing safe vs. rejected scenarios. The tip about using min_stay_days/max_stay_days and return_cheapest_only provides clear optimization strategies.

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.

  1. 9 tool updates
    • First observedgenerate_google_flights_url
    • First observedget_multi_city_flights
    • First observedget_travel_dates
    • First observedsearch_direct_flights
    • First observedsearch_flights_by_airline
    • First observedsearch_flights_with_max_stops
    • First observedsearch_one_way_flights
    • First observedsearch_round_trip_flights
    • First observedsearch_round_trips_in_date_range

TDQS

A3.9/5.0

Scored across 9 tools

Disambiguation3/5

The tools have overlapping purposes that could cause confusion, such as search_one_way_flights and search_direct_flights for one-way trips, and search_round_trip_flights and search_direct_flights for round-trips. However, descriptions provide some guidance to differentiate them, like the tip in search_round_trip_flights suggesting to use search_direct_flights for direct flights. This overlap reduces clarity but is partially mitigated by the documentation.

Naming Consistency5/5

All tool names follow a consistent snake_case pattern with a verb_noun structure, such as generate_google_flights_url, get_multi_city_flights, and search_direct_flights. This uniformity makes the tool set predictable and easy to understand, with no deviations in naming conventions.

Tool Count4/5

With 9 tools, the count is reasonable for a flight search server, covering various search types and utilities. It is well-scoped but slightly heavy due to some overlapping tools, like multiple search functions that could potentially be consolidated, though each serves a distinct niche.

Completeness5/5

The tool set provides comprehensive coverage for flight search, including one-way, round-trip, multi-city, direct flights, airline filters, date range searches, and utilities like URL generation and date suggestions. There are no obvious gaps; it supports full lifecycle planning from search to results, with clear workflows and no dead ends.

Maintenance

ActivityInactive
ResponsivenessNo issues

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

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables flight search and fare calendar exploration by interacting with Google Flights' API, supporting detailed filters for origin, destination, dates, cabin class, airlines, and more.
    3,138
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to search for real-time flights between airports using the SearchAPI.io Google Flights API, returning prices, schedules, airlines, and carbon emissions.
    -