Google Flights Search (Real-Time Fares)
Server Details
Real-time Google Flights: one-way and round-trip fares over date ranges, with price verdicts.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP
- URL
- Repository
- mtnrabi/travel-agent-skills
- GitHub Stars
- 0
Available Tools
2 toolssearch_oneway_flightsSearch one-way flightsARead-onlyInspect
Search real-time one-way flights on Google Flights. Input: origin and destination IATA codes (destination may be a list) plus either one departure date or a date range. Returns each flight's price, airline, duration, stops, a bookable buy_link, and Google's historical price range (price_insights_low / price_insights_high) so you can say whether a fare is actually a good deal.
Use it for any one-way fare question, including open-ended ones. For a flexible search make ONE call with a date range and/or several destinations -- do NOT call it once per date. 'Cheapest flight to Sri Lanka anywhere in October' is one call, not thirty.
Each date/destination combination is one billed request; the count and the plan's remaining quota come back in api_usage.
Requires the caller's own RapidAPI key for the Google Flights Live API. Get one (free tier available) at https://rapidapi.com/mtnrabi/api/google-flights-live-api, then pass it as an x-rapidapi-key header (preferred), a ?rapidapi_key= query parameter on the server URL, or your client's own API key field -- first non-empty wins. Usage counts against the caller's own RapidAPI plan, not ours; every response reports what it spent and what is left in api_usage.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum flights to return, after merging and sorting. | |
| sort_by | No | "best", "price", or "duration". Applied across all results. | best |
| currency | No | ISO currency code, default "usd". | usd |
| max_price | No | Only return flights at or below this price. | |
| max_stops | No | Maximum stops per flight. 0 means non-stop only. | |
| seat_type | No | 1 economy, 2 premium economy, 3 business, 4 first. | |
| passengers | No | Passenger counts as [adults, children, infants]. | |
| to_airport | Yes | Destination IATA code, or a list of them to compare. | |
| from_airport | Yes | Origin IATA code, e.g. "TLV". | |
| max_searches | No | Cap the billed requests this call may make. Lower it to spend less of the plan's quota on a wide search; the range is then sampled evenly rather than cut short. | |
| use_fallback | No | Leave unset. Switches the search to a second, independent flight data source instead of the usual Google Flights page read. Unset already escalates to that source once, automatically, after a search's retries have failed. true forces it inline on every attempt -- much slower, and it can time out. false disables it entirely, that automatic retry included. | |
| airline_codes | No | Restrict to these airline codes, e.g. ["LY"]. | |
| departure_date | No | Single departure date, "YYYY-MM-DD". | |
| arrival_time_max | No | Latest arrival hour, 0-23. | |
| arrival_time_min | No | Earliest arrival hour, 0-23. | |
| departure_date_to | No | Last date of a departure range. | |
| departure_time_max | No | Latest departure hour, 0-23. | |
| departure_time_min | No | Earliest departure hour, 0-23. | |
| departure_date_from | No | First date of a departure range. | |
| exclude_airline_codes | No | Exclude these airline codes. |
Output Schema
| Name | Required | Description |
|---|---|---|
| message | No | Present when there is something the model must relay to the user rather than silently absorb -- no results, a degraded search, a missing key or a spent quota. |
| partial | No | Present when some searches failed but others succeeded. Plain text saying how much of the request the results cover. |
| results | Yes | The itineraries or properties found, already sorted and deduplicated. An empty array is only meaningful when search_status is 'empty'. |
| api_usage | No | What this call cost the caller's own RapidAPI plan, and what remains on it. Present on every response that reached the upstream, including a degraded one -- a search that failed was still billed. |
| signup_url | No | Where the caller subscribes or changes plan. |
| result_count | No | |
| needs_api_key | No | True when no usable RapidAPI key arrived with the call, or the upstream rejected the one that did. No search was run and nothing was billed; signup_url and message say how to fix it. |
| search_status | No | Whether the underlying search actually completed, read from the backend's X-Search-Status header. 'ok': every combination searched returned results. 'empty': the search completed and Google genuinely has no itineraries for it -- a real answer, not a failure. 'partial': some combinations returned results and some failed, so the list is incomplete. 'degraded': every combination failed, so the search did not happen and an empty list means nothing; this case is also flagged with isError: true and is safe to retry. |
| quota_exhausted | No | True when the caller's RapidAPI plan has no requests left for the current period. |
| search_coverage | No | What was actually searched. Present whether or not the request was truncated, so a model can state honestly what its answer rests on. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint/destructiveHint annotations, the description discloses substantial behavioral context: each date/destination combination is a billed request against the caller's own RapidAPI plan, quota status is returned in api_usage, and an external API key is required with exact passing methods. It also reveals output behavior (price_insights_low/high for deal judgement) that annotations cannot express. No contradiction with the read-only, open-world hints.
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 front-loaded with purpose and return values, then moves to usage batching, billing, and auth. Every sentence carries unique operational information for a complex 20-parameter tool with an external API dependency. The auth paragraph is dense, but the detail is actionable; only slight tightening would make it fully optimal.
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?
For a tool with 20 parameters, an external API key, and per-request billing, the description covers everything non-obvious needed to call it correctly: input shape, return values (with output schema available for detail), flexible-search batching, quota accounting, and key provisioning. The fallback behavior lives in the use_fallback parameter description, which is an appropriate place. Nothing an agent needs to invoke it safely is missing.
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 the baseline is 3, but the description adds meaningful parameter-level context: that destination lists and date ranges combine into a single billed call rather than separate calls, and that max_searches caps quota spend. This cross-parameter cost model is not inferable from the schema alone, pushing it above baseline.
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 opening sentence uses a specific verb + resource: 'Search real-time one-way flights on Google Flights.' The 'one-way' qualifier distinguishes it directly from the sibling search_roundtrip_flights, and the description states what it returns (price, airline, duration, stops, buy_link, price insights). An agent can tell exactly what this tool does without opening the schema.
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 explicitly says 'Use it for any one-way fare question, including open-ended ones' and gives strong batching guidance: one call with a date range and/or multiple destinations, not one call per date, with the concrete example 'Cheapest flight to Sri Lanka anywhere in October.' It does not explicitly name the round-trip sibling as the alternative or state a when-not condition, but the one-way framing makes the boundary clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_roundtrip_flightsSearch round-trip flightsARead-onlyInspect
Search real-time round-trip flights on Google Flights, priced as paired legs rather than two separate one-ways. Input: origin and destination IATA codes (destination may be a list), a departure date or range, and either a return date or a trip length in nights. Returns the total price for both legs, per-leg airline, stops and duration, and a single bookable buy_link for the trip.
Use it for any return-trip fare question. For a flexible search make ONE call: pass departure_date_from / departure_date_to for the outbound range and nights instead of return_date to compare trip lengths -- '5 to 7 nights in Rome sometime in May' is one call.
Each date/destination combination is one billed request; the count and the plan's remaining quota come back in api_usage.
Requires the caller's own RapidAPI key for the Google Flights Live API. Get one (free tier available) at https://rapidapi.com/mtnrabi/api/google-flights-live-api, then pass it as an x-rapidapi-key header (preferred), a ?rapidapi_key= query parameter on the server URL, or your client's own API key field -- first non-empty wins. Usage counts against the caller's own RapidAPI plan, not ours; every response reports what it spent and what is left in api_usage.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum trips to return, after merging and sorting. | |
| nights | No | Trip length in nights; a number, or a list like [5, 6, 7]. The return date is derived from each departure date. | |
| sort_by | No | "best", "price", or "duration". Applied across all results. | best |
| currency | No | ISO currency code, default "usd". | usd |
| max_price | No | Only return trips at or below this total price. | |
| seat_type | No | 1 economy, 2 premium economy, 3 business, 4 first. | |
| passengers | No | Passenger counts as [adults, children, infants]. | |
| to_airport | Yes | Destination IATA code, or a list of them to compare. | |
| return_date | No | Fixed return date. Use this OR nights, not both. | |
| from_airport | Yes | Origin IATA code, e.g. "TLV". | |
| max_searches | No | Cap the billed requests this call may make. Lower it to spend less of the plan's quota on a wide search; the range is then sampled evenly rather than cut short. | |
| use_fallback | No | Leave unset. Switches the search to a second, independent flight data source instead of the usual Google Flights page read. Unset already escalates to that source once, automatically, after a search's retries have failed. true forces it inline on every attempt -- much slower, and it can time out. false disables it entirely, that automatic retry included. | |
| departure_date | No | Single outbound date, "YYYY-MM-DD". | |
| max_return_stops | No | Maximum stops on the return leg. | |
| departure_date_to | No | Last date of an outbound range. | |
| departure_date_from | No | First date of an outbound range. | |
| max_departure_stops | No | Maximum stops on the outbound leg. | |
| return_airline_codes | No | Restrict the return leg to these airlines. | |
| departure_airline_codes | No | Restrict the outbound leg to these airlines. |
Output Schema
| Name | Required | Description |
|---|---|---|
| message | No | Present when there is something the model must relay to the user rather than silently absorb -- no results, a degraded search, a missing key or a spent quota. |
| partial | No | Present when some searches failed but others succeeded. Plain text saying how much of the request the results cover. |
| results | Yes | The itineraries or properties found, already sorted and deduplicated. An empty array is only meaningful when search_status is 'empty'. |
| api_usage | No | What this call cost the caller's own RapidAPI plan, and what remains on it. Present on every response that reached the upstream, including a degraded one -- a search that failed was still billed. |
| signup_url | No | Where the caller subscribes or changes plan. |
| result_count | No | |
| needs_api_key | No | True when no usable RapidAPI key arrived with the call, or the upstream rejected the one that did. No search was run and nothing was billed; signup_url and message say how to fix it. |
| search_status | No | Whether the underlying search actually completed, read from the backend's X-Search-Status header. 'ok': every combination searched returned results. 'empty': the search completed and Google genuinely has no itineraries for it -- a real answer, not a failure. 'partial': some combinations returned results and some failed, so the list is incomplete. 'degraded': every combination failed, so the search did not happen and an empty list means nothing; this case is also flagged with isError: true and is safe to retry. |
| quota_exhausted | No | True when the caller's RapidAPI plan has no requests left for the current period. |
| search_coverage | No | What was actually searched. Present whether or not the request was truncated, so a model can state honestly what its answer rests on. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark readOnlyHint=true and destructiveHint=false, so the description's additional context about billing (each date/destination combo is one billed request), quota reporting in api_usage, and the required RapidAPI key adds substantial value. It also discloses fallback behavior and auth key precedence. No contradiction with 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?
The description is dense but well-structured into three paragraphs: core function, usage patterns, and billing/auth. Every sentence earns its place, with no filler. The length is justified by the tool's 19 parameters, external API integration, and auth requirements.
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?
For a tool with this complexity, the description covers input formats, output essentials, auth requirements, billing behavior, and fallback logic. With an output schema present, it doesn't need to enumerate full return fields. The sibling distinction is implied through the round-trip focus and is sufficient for correct tool selection.
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 adds meaning by explaining that destination may be a list, that departure can be a range via departure_date_from/to, and that nights is an alternative to return_date. It also clarifies max_searches' sampling behavior and the use_fallback escalation logic, going beyond the schema's own 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?
States a specific verb and resource: 'Search real-time round-trip flights on Google Flights.' Contrasts with 'priced as paired legs rather than two separate one-ways', which directly differentiates it from the one-way sibling. The description also lists inputs and outputs, leaving no ambiguity about what the tool does.
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 says 'Use it for any return-trip fare question', giving a clear when-to-use. Provides a concrete flexible-search example showing how to combine date ranges and nights in one call. Does not explicitly name the sibling or say 'do not use for one-way', but the round-trip focus is strong enough to guide an agent.
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.
2 tool updates
- Changed
search_oneway_flights4 fields changed- added
Output schema / descriptionAdded value: +"A completed flight search. Read search_status before reading results: an empty array means 'no flights' only when search_status is 'empty'." - added
Output schema / propertiesAdded value: +{ + "api_usage": { + "additionalProperties": true, + "description": "What this call cost the caller's own RapidAPI plan, and what remains on it. Present on every response that reached the upstream, including a degraded one -- a search that failed was still billed.", + "properties": { + "note": { + "description": "The same figures as a sentence, for the model to relay.", + "type": "string" + }, + "plan_requests_limit": { + "type": "integer" + }, + "plan_requests_remaining": { + "type": "integer" + }, + "requests_used_by_this_call": { + "minimum": 0, + "type": "integer" + } + }, + "type": "object" + }, + "message": { + "description": "Present when there is something the model must relay to the user rather than silently absorb -- no results, a degraded search, a missing key or a spent quota.", + "type": "string" + }, + "needs_api_key": { + "description": "True when no usable RapidAPI key arrived with the call, or the upstream rejected the one that did. No search was run and nothing was billed; signup_url and message say how to fix it.", + "type": "boolean" + }, + "partial": { + "description": "Present when some searches failed but others succeeded. Plain text saying how much of the request the results cover.", + "type": "string" + }, + "quota_exhausted": { + "description": "True when the caller's RapidAPI plan has no requests left for the current period.", + "type": "boolean" + }, + "result_count": { + "minimum": 0, + "type": "integer" + }, + "results": { + "description": "The itineraries or properties found, already sorted and deduplicated. An empty array is only meaningful when search_status is 'empty'.", + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": "array" + }, + "search_coverage": { + "additionalProperties": true, + "description": "What was actually searched. Present whether or not the request was truncated, so a model can state honestly what its answer rests on.", + "properties": { + "departure_dates_searched": { + "items": { + "type": "string" + }, + "type": "array" + }, + "destinations_searched": { + "items": { + "type": "string" + }, + "type": "array" + }, + "max_searches_per_request": { + "minimum": 1, + "type": "integer" + }, + "note": { + "type": "string" + }, + "requested_combinations": { + "minimum": 0, + "type": "integer" + }, + "searched_combinations": { + "minimum": 0, + "type": "integer" + }, + "truncated": { + "description": "True when the request expanded past this call's spend ceiling and was sampled. A date absent from departure_dates_searched was never searched, which is not the same as having no flights.", + "type": "boolean" + } + }, + "type": "object" + }, + "search_status": { + "description": "Whether the underlying search actually completed, read from the backend's X-Search-Status header. 'ok': every combination searched returned results. 'empty': the search completed and Google genuinely has no itineraries for it -- a real answer, not a failure. 'partial': some combinations returned results and some failed, so the list is incomplete. 'degraded': every combination failed, so the search did not happen and an empty list means nothing; this case is also flagged with isError: true and is safe to retry.", + "enum": [ + "ok", + "empty", + "partial", + "degraded" + ], + "type": "string" + }, + "signup_url": { + "description": "Where the caller subscribes or changes plan.", + "type": "string" + } +} - added
Output schema / requiredAdded value: +[ + "results" +] - added
Output schema / titleAdded value: +"Flight search result"
- Changed
search_roundtrip_flights4 fields changed- added
Output schema / descriptionAdded value: +"A completed flight search. Read search_status before reading results: an empty array means 'no flights' only when search_status is 'empty'." - added
Output schema / propertiesAdded value: +{ + "api_usage": { + "additionalProperties": true, + "description": "What this call cost the caller's own RapidAPI plan, and what remains on it. Present on every response that reached the upstream, including a degraded one -- a search that failed was still billed.", + "properties": { + "note": { + "description": "The same figures as a sentence, for the model to relay.", + "type": "string" + }, + "plan_requests_limit": { + "type": "integer" + }, + "plan_requests_remaining": { + "type": "integer" + }, + "requests_used_by_this_call": { + "minimum": 0, + "type": "integer" + } + }, + "type": "object" + }, + "message": { + "description": "Present when there is something the model must relay to the user rather than silently absorb -- no results, a degraded search, a missing key or a spent quota.", + "type": "string" + }, + "needs_api_key": { + "description": "True when no usable RapidAPI key arrived with the call, or the upstream rejected the one that did. No search was run and nothing was billed; signup_url and message say how to fix it.", + "type": "boolean" + }, + "partial": { + "description": "Present when some searches failed but others succeeded. Plain text saying how much of the request the results cover.", + "type": "string" + }, + "quota_exhausted": { + "description": "True when the caller's RapidAPI plan has no requests left for the current period.", + "type": "boolean" + }, + "result_count": { + "minimum": 0, + "type": "integer" + }, + "results": { + "description": "The itineraries or properties found, already sorted and deduplicated. An empty array is only meaningful when search_status is 'empty'.", + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": "array" + }, + "search_coverage": { + "additionalProperties": true, + "description": "What was actually searched. Present whether or not the request was truncated, so a model can state honestly what its answer rests on.", + "properties": { + "departure_dates_searched": { + "items": { + "type": "string" + }, + "type": "array" + }, + "destinations_searched": { + "items": { + "type": "string" + }, + "type": "array" + }, + "max_searches_per_request": { + "minimum": 1, + "type": "integer" + }, + "note": { + "type": "string" + }, + "requested_combinations": { + "minimum": 0, + "type": "integer" + }, + "searched_combinations": { + "minimum": 0, + "type": "integer" + }, + "truncated": { + "description": "True when the request expanded past this call's spend ceiling and was sampled. A date absent from departure_dates_searched was never searched, which is not the same as having no flights.", + "type": "boolean" + } + }, + "type": "object" + }, + "search_status": { + "description": "Whether the underlying search actually completed, read from the backend's X-Search-Status header. 'ok': every combination searched returned results. 'empty': the search completed and Google genuinely has no itineraries for it -- a real answer, not a failure. 'partial': some combinations returned results and some failed, so the list is incomplete. 'degraded': every combination failed, so the search did not happen and an empty list means nothing; this case is also flagged with isError: true and is safe to retry.", + "enum": [ + "ok", + "empty", + "partial", + "degraded" + ], + "type": "string" + }, + "signup_url": { + "description": "Where the caller subscribes or changes plan.", + "type": "string" + } +} - added
Output schema / requiredAdded value: +[ + "results" +] - added
Output schema / titleAdded value: +"Flight search result"
2 tool updates
- Changed
search_oneway_flights23 fields changed- added
Input schema / properties / airline_codes / descriptionAdded value: +"Restrict to these airline codes, e.g. [\"LY\"]." - added
Input schema / properties / arrival_time_max / descriptionAdded value: +"Latest arrival hour, 0-23." - added
Input schema / properties / arrival_time_min / descriptionAdded value: +"Earliest arrival hour, 0-23." - added
Input schema / properties / currency / descriptionAdded value: +"ISO currency code, default \"usd\"." - added
Input schema / properties / departure_date / descriptionAdded value: +"Single departure date, \"YYYY-MM-DD\"." - added
Input schema / properties / departure_date_from / descriptionAdded value: +"First date of a departure range." - added
Input schema / properties / departure_date_to / descriptionAdded value: +"Last date of a departure range." - added
Input schema / properties / departure_time_max / descriptionAdded value: +"Latest departure hour, 0-23." - added
Input schema / properties / departure_time_min / descriptionAdded value: +"Earliest departure hour, 0-23." - added
Input schema / properties / exclude_airline_codes / descriptionAdded value: +"Exclude these airline codes." - added
Input schema / properties / from_airport / descriptionAdded value: +"Origin IATA code, e.g. \"TLV\"." - added
Input schema / properties / limit / descriptionAdded value: +"Maximum flights to return, after merging and sorting." - added
Input schema / properties / max_price / descriptionAdded value: +"Only return flights at or below this price." - added
Input schema / properties / max_searches / descriptionAdded value: +"Cap the billed requests this call may make. Lower it to spend less of the plan's quota on a wide search; the range is then sampled evenly rather than cut short." - added
Input schema / properties / max_stops / descriptionAdded value: +"Maximum stops per flight. 0 means non-stop only." - added
Input schema / properties / passengers / descriptionAdded value: +"Passenger counts as [adults, children, infants]." - added
Input schema / properties / seat_type / descriptionAdded value: +"1 economy, 2 premium economy, 3 business, 4 first." - added
Input schema / properties / sort_by / descriptionAdded value: +"\"best\", \"price\", or \"duration\". Applied across all results." - added
Input schema / properties / to_airport / descriptionAdded value: +"Destination IATA code, or a list of them to compare." - added
Input schema / properties / use_fallback / anyOfAdded value: +[ + { + "type": "boolean" + }, + { + "type": "null" + } +] - changed
Input schema / properties / use_fallback / defaultPrevious value: -falseNew value: +null - added
Input schema / properties / use_fallback / descriptionAdded value: +"Leave unset. Switches the search to a second, independent flight data source instead of the usual Google Flights page read. Unset already escalates to that source once, automatically, after a search's retries have failed. true forces it inline on every attempt -- much slower, and it can time out. false disables it entirely, that automatic retry included." - removed
Input schema / properties / use_fallback / typeRemoved value: -"boolean"
- Changed
search_roundtrip_flights22 fields changed- added
Input schema / properties / currency / descriptionAdded value: +"ISO currency code, default \"usd\"." - added
Input schema / properties / departure_airline_codes / descriptionAdded value: +"Restrict the outbound leg to these airlines." - added
Input schema / properties / departure_date / descriptionAdded value: +"Single outbound date, \"YYYY-MM-DD\"." - added
Input schema / properties / departure_date_from / descriptionAdded value: +"First date of an outbound range." - added
Input schema / properties / departure_date_to / descriptionAdded value: +"Last date of an outbound range." - added
Input schema / properties / from_airport / descriptionAdded value: +"Origin IATA code, e.g. \"TLV\"." - added
Input schema / properties / limit / descriptionAdded value: +"Maximum trips to return, after merging and sorting." - added
Input schema / properties / max_departure_stops / descriptionAdded value: +"Maximum stops on the outbound leg." - added
Input schema / properties / max_price / descriptionAdded value: +"Only return trips at or below this total price." - added
Input schema / properties / max_return_stops / descriptionAdded value: +"Maximum stops on the return leg." - added
Input schema / properties / max_searches / descriptionAdded value: +"Cap the billed requests this call may make. Lower it to spend less of the plan's quota on a wide search; the range is then sampled evenly rather than cut short." - added
Input schema / properties / nights / descriptionAdded value: +"Trip length in nights; a number, or a list like [5, 6, 7]. The return date is derived from each departure date." - added
Input schema / properties / passengers / descriptionAdded value: +"Passenger counts as [adults, children, infants]." - added
Input schema / properties / return_airline_codes / descriptionAdded value: +"Restrict the return leg to these airlines." - added
Input schema / properties / return_date / descriptionAdded value: +"Fixed return date. Use this OR nights, not both." - added
Input schema / properties / seat_type / descriptionAdded value: +"1 economy, 2 premium economy, 3 business, 4 first." - added
Input schema / properties / sort_by / descriptionAdded value: +"\"best\", \"price\", or \"duration\". Applied across all results." - added
Input schema / properties / to_airport / descriptionAdded value: +"Destination IATA code, or a list of them to compare." - added
Input schema / properties / use_fallback / anyOfAdded value: +[ + { + "type": "boolean" + }, + { + "type": "null" + } +] - changed
Input schema / properties / use_fallback / defaultPrevious value: -falseNew value: +null - added
Input schema / properties / use_fallback / descriptionAdded value: +"Leave unset. Switches the search to a second, independent flight data source instead of the usual Google Flights page read. Unset already escalates to that source once, automatically, after a search's retries have failed. true forces it inline on every attempt -- much slower, and it can time out. false disables it entirely, that automatic retry included." - removed
Input schema / properties / use_fallback / typeRemoved value: -"boolean"
2 tool updates
- First observed
search_oneway_flights - First observed
search_roundtrip_flights
Frequently Asked Questions
Claiming proves that you control a remote MCP connector. It does not move, proxy, or interrupt the server.
Open the connector listing, choose Claim ownership, and sign in to Glama.
Complete one verification method:
GitHub identity — fastest for official registry listings. For a namespace such as
io.github.alice/server, link the matching GitHub user, then choose Claim with GitHub. An organization namespace such asio.github.acme/serveralso needs that organization to have installed the Glama AI GitHub App and approved its permissions, because GitHub discloses organization membership only to apps it has installed. Use HTTP or DNS when it has not.HTTP challenge — works when you can deploy a public file. Generate a token, publish the exact JSON Glama shows at
/.well-known/glama.jsonon the same origin as the connector, then choose Check HTTP challenge.DNS challenge — works when you control DNS but cannot change the server. Generate a token, create the exact TXT record Glama shows, wait for it to propagate, then choose Check DNS challenge.
After verification, Glama sends a confirmation email and gives you access to listing details, thumbnails, health checks, and analytics. Keep the HTTP file or DNS record in place: Glama periodically checks it and ownership remains verified while the token is discoverable.
The HTTP ownership file has this structure:
{
"$schema": "https://glama.ai/mcp/schemas/connector.json",
"claim": "glama_claim_..."
}Claim tokens are opaque, stable, and bound to the signed-in Glama account. They contain no email address or other personal information. If Glama can no longer discover a verified HTTP or DNS token, it starts a seven-day grace period before removing claim-based access. Restore the same token during that period to keep ownership verified. Never publish an email address, Glama session token, GitHub token, or connector credential as ownership proof.
If verification fails, confirm that you copied the current token exactly. The HTTP file must be public, return valid JSON with a successful HTTP response, and stay on the connector's origin. DNS changes may need more time to propagate. A claim cannot transfer to a different origin or hostname: if the connector target changes, Glama starts the grace period and the new target must be claimed separately after the previous claim is released.
For a connector linked to the official MCP Registry, registry updates continue to replace its name, description, and URL by default. After claiming, open Manage connector and enable Use Glama listing details as the source of truth if edits made on Glama should be preserved. Categories and thumbnails are always managed on Glama; registry linkage and technical connection settings continue to sync.
Control your server's listing on Glama, including description and metadata
Access analytics and receive server usage reports
Get monitoring and health status updates for your server
Feature your server to boost visibility and reach more users
To improve your MCP server's ranking:
Claim ownership of the server listing
Complete the server profile with an accurate description and thumbnail
Provide a test profile so Glama can connect to and evaluate the server
Keep tool definitions clear and complete to earn a high Tool Definition Quality Score (TDQS)
Route real usage through the Glama Gateway; more recorded successful server uses also improve the ranking
For users:
Full audit trail – every tool call is logged with inputs and outputs for compliance and debugging
Granular tool control – enable or disable individual tools per connector to limit what your AI agents can do
Centralized credential management – store and rotate API keys and OAuth tokens in one place
Change alerts – get notified when a connector changes its schema, adds or removes tools, or updates tool definitions, so nothing breaks silently
For server owners:
Proven adoption – public usage metrics on your listing show real-world traction and build trust with prospective users
Tool-level analytics – see which tools are being used most, helping you prioritize development and documentation
Direct user feedback – users can report issues and suggest improvements through the listing, giving you a channel you would not have otherwise
The connector status is unhealthy when Glama is unable to successfully connect to the server. This can happen for several reasons:
The server is experiencing an outage
The URL of the server is wrong
Credentials required to access the server are missing or invalid
If you are the owner of this MCP connector and would like to make modifications to the listing, including providing test credentials for accessing the server, please contact support@glama.ai.
Discussions
No comments yet. Be the first to start the discussion!
Related MCP Connectors
Live Google Flights search: stopover itineraries, country sweeps, explore anywhere, booking links
Google Flights itineraries with fares, legs, carbon emissions and price history, as JSON.
Google Flights search data: fares, routes, stops, and price insights via a hosted MCP server.
Flight Intelligence MCP — search, cheapest dates, multi-city, airline compare via Google Flights
Related MCP Servers
- AlicenseAqualityCmaintenanceEnables users to find the cheapest dates to fly a route via Google Flights, supporting one-way and round-trip searches through multiple backends. It provides a tool that can search date ranges, filter by nonstop, seat, currency, and force a particular backend.1MIT
- AlicenseNot gradedqualityAmaintenanceEnables real-time flight fare searches across date ranges and multiple destinations, with historical price insights and booking links. Provides one-way and round-trip search tools through MCP.MIT
- AlicenseAqualityBmaintenanceSearch Google Flights for one-way, round-trip and multi-city fares, with offline airport lookup and nearby-airport resolution.6MIT
- AlicenseNot gradedqualityBmaintenanceFlight search for AI agents: flexible-date cheapest round-trips with a good-price verdict from historical data. Hosted remote MCP, free, no key.3MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.
TDQS
The two tools are clearly differentiated by trip type: one-way versus round-trip. There is no realistic ambiguity about which tool to select for a given query.
Both tools follow the exact same verb_noun pattern: search_oneway_flights and search_roundtrip_flights. The naming is predictable and instantly signals the search mode.
With only two tools the surface is thin, but each covers a core flight-search mode and supports flexible date/destination lists within a single call. The count is slightly under the typical well-scoped range but not inadequate.
The two tools cover the primary one-way and round-trip fare-search workflows, including flexible dates and multiple destinations. Multi-city or more advanced itinerary types are absent, but the core Google Flights search surface is functionally complete.