seats.aero MCP server
This server provides tools to search and retrieve award flight availability, routes, and trip details from Seats.aero via its partner API.
get_flights: Search cached award flights between airports, filterable by dates, cabin class (economy, premium, business, first), carriers, direct flights, and mileage programs. Supports pagination and ordering by lowest mileage.
get_bulk_avail: Retrieve bulk cached availability for a specific mileage program, optionally filtered by dates, cabin class, and origin/destination regions.
get_routes: List all routes tracked for a specific mileage program.
get_trips: Get flight-level details for a specific availability object (as per README).
live_search: Perform a live search for a specific route, date, and program (slower, consumes API calls; as per README).
Note: Requires a Seats.aero partner API key. Supports 23+ mileage programs including Aeroplan, United, Delta, American, Emirates, Qatar, Singapore Airlines, and more.
Click on "Deploy 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., "@seats.aero MCP serverfind flights from JFK to CDG on June 15 in business class"
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.
seats.aero MCP server
Not affiliated with seats.aero
A minimal TypeScript MCP server for searching award availability through the seats.aero partner API.
You need a seats.aero Partner API key. Eligible seats.aero Pro users can generate one from their seats.aero settings; usage remains subject to the seats.aero terms and API limits.
Endpoint access
Not every endpoint is available to every Partner API user:
live_searchcannot be used with a seats.aero Pro API key. It requires a commercial agreement with seats.aero.refresh_cached_datacannot currently be used by commercial users; the API documentation directs commercial users tolive_searchinstead.
The server cannot determine the type of API key locally, so these restrictions are advertised in its MCP instructions, tool descriptions, and tool metadata.
Related MCP server: Flight Search MCP Server
Setup
Requires Node.js 20 or newer.
pnpm install
pnpm build
pnpm startSet SEATS_API_KEY in your MCP client configuration:
{
"mcpServers": {
"seats": {
"command": "node",
"args": ["/absolute/path/to/seats-mcp/build/index.js"],
"env": {
"SEATS_API_KEY": "YOUR_SEATS_AERO_API_KEY"
}
}
}
}Tools
Tool | seats.aero endpoint | Access | Purpose |
| Partner API | Search cached availability across airports, dates, cabins, carriers, and mileage programs. | |
| Partner API | Retrieve many cached availability objects from one mileage program. | |
| Partner API | List routes tracked for one mileage program. | |
| Partner API | Find airports reachable nonstop from or to one airport and the cheapest raw price per cabin. | |
| Partner API | Retrieve flight-level details for an Availability object. | |
| Pro users; not commercial | Queue or poll refreshes for cached Availability objects. | |
| Commercial agreement only; not Pro | Search a specific route and date live for one mileage program. |
Cached search accepts comma-delimited airport lists (SFO,LAX), cabin lists (economy,business), carrier lists (DL,AA), and source lists (aeroplan,united). Dates use YYYY-MM-DD.
Live searches typically take 5-15 seconds. They can fail when an airline is
unavailable, so callers should limit retries and use exponential backoff. Prefer
get_flights when cached availability is sufficient.
This covers all seven active Partner-Authorization endpoints in the current
seats.aero API reference. OAuth consent, token, and user-info endpoints are not
exposed as tools because they are application authorization flows rather than
award-availability operations; this server authenticates with
SEATS_API_KEY.
Development
pnpm testThe tests build the server and exercise request construction with a mocked seats.aero API.
Releases
Releases follow Semantic Versioning and are managed on GitHub by Release Please:
fix:commits produce a patch release.feat:commits produce a minor release.commits with a
!after the type or aBREAKING CHANGE:footer produce a major release.docs:,test:,chore:, and other non-user-facing commits do not trigger a release by themselves.
After release-worthy commits land on main, GitHub Actions creates or updates
a release PR containing the next version and changelog. Merging that PR creates
the corresponding vX.Y.Z Git tag and published GitHub Release. See
CONTRIBUTING.md for the complete workflow.
Available Tools
7 toolsget_bulk_availBRead-onlyIdempotent
Find bulk availability for a particular source.
| Name | Required | Description | Default |
|---|---|---|---|
| skip | No | ||
| take | No | Maximum results to return (10-1000; default 500). | |
| cursor | No | ||
| source | Yes | Mileage program source to retrieve. | |
| endDate | No | Latest departure date, in YYYY-MM-DD format. | |
| startDate | No | Earliest departure date, in YYYY-MM-DD format. | |
| cabinClass | No | Only return results with this cabin available. | |
| originRegion | No | Only return results originating in this region. | |
| include_filtered | No | Include raw results normally removed by dynamic-price filters. | |
| destinationRegion | No | Only return results arriving in this region. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, and idempotentHint=true, indicating a safe, non-mutating operation. The description adds no behavioral details such as pagination, rate limits, or result completeness, but it also does not contradict the annotations. The annotations carry the transparency burden, so the score is adequate but not enhanced.
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 a single sentence with no redundant words, front-loading the action. However, it is so brief that it verges on under-specification; it could have added useful context while remaining concise.
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?
The tool has 10 parameters, no output schema, and complex sibling tools. The description 'Find bulk availability for a particular source' is too thin to explain what 'bulk availability' means, what the response contains, or how to construct a query. Significant gaps remain for an agent to use the tool correctly.
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 80%, with detailed descriptions for most parameters, so the baseline is 3. The description only adds marginal meaning by implying the 'source' parameter is the key filter ('for a particular source'), but it offers no additional syntax or contextual detail beyond the 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 uses a specific verb 'Find' and resource 'bulk availability' scoped to 'a particular source,' which helps distinguish it from sibling tools like get_flights or get_destinations. However, it does not clarify what 'bulk availability' means (e.g., multi-date or multi-route results), leaving some ambiguity about the tool's exact function.
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 provides no guidance on when to use this tool versus alternatives like live_search or get_flights. There is no mention of use cases, prerequisites, or exclusions, leaving the agent without context for tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_destinationsARead-onlyIdempotent
Find airports reachable nonstop from or to one airport, with the cheapest raw mileage price per cabin.
| Name | Required | Description | Default |
|---|---|---|---|
| originAirport | No | Origin airport or metro code. Returns reachable nonstop destinations. | |
| destinationAirport | No | Destination airport or metro code. Returns nonstop origin airports. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, openWorld, and idempotent hints, so safety is covered. The description adds key behavioral context beyond annotations, such as 'cheapest raw mileage price per cabin' and the directionality of search. However, it does not detail return format or behavior when both params are omitted.
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 a single, well-structured sentence that front-loads the core purpose and includes a meaningful detail. Every word contributes value; there is no redundancy or fluff.
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?
The tool has no output schema, and the description does not explicitly describe the return values or behavior when both optional parameters are provided or omitted. While annotations and schema cover safety and parameter semantics, the description leaves some ambiguity about output structure and edge cases, making it adequate but not fully complete.
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 description coverage is 100%, with each parameter already having a description. The tool description adds no additional parameter meaning beyond what is in the schema, so the baseline 3 is appropriate.
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 tool finds airports reachable nonstop from or to one airport, with a specific detail about pricing (cheapest raw mileage price per cabin). This is a specific verb+resource and distinguishes it from sibling tools like get_routes or get_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 the tool's use case (finding nonstop destinations/origins with price) but does not explicitly state when to use it over alternatives or mention any exclusions. There is no reference to sibling tools or conditions where this tool should not be used.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_flightsARead-onlyIdempotent
Get cached award flights on seats.aero.
| Name | Required | Description | Default |
|---|---|---|---|
| skip | No | Number of already-retrieved results to skip. | |
| take | No | Maximum results to return (10-1000; default 500). | |
| cabins | No | Cabins that must be available, comma-delimited when specifying multiple cabins. | |
| cursor | No | Opaque cursor returned by the first page of this search. | |
| endDate | No | Latest departure date, in YYYY-MM-DD format. | |
| sources | No | Mileage program sources, comma-delimited when specifying multiple. | |
| carriers | No | Two-character carrier codes, comma-delimited (for example, DL,AA). | |
| order_by | No | Set to lowest_mileage to return the cheapest results first. | |
| startDate | No | Earliest departure date, in YYYY-MM-DD format. | |
| cabinClass | No | Deprecated single-cabin alias for cabins. | |
| minify_trips | No | Return fewer trip fields when include_trips is enabled. | |
| departureDate | No | Deprecated single-date alias. When startDate or endDate is omitted, this value is used for that bound. | |
| include_trips | No | Include flight-level trip details in each availability result. | |
| originAirport | Yes | Origin airport codes, comma-delimited when searching multiple airports (for example, SFO,LAX). | |
| include_filtered | No | Include raw results normally removed by dynamic-price filters. | |
| destinationAirport | Yes | Destination airport codes, comma-delimited when searching multiple airports (for example, FRA,LHR). | |
| only_direct_flights | No | Only return results with a direct flight available. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, covering the safety profile. The description adds the 'cached' nature, which signals possibly stale data, but gives no further behavioral details such as pagination or data freshness. With annotations present, the incremental context is moderate.
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?
A single, front-loaded sentence with zero wasted words. It immediately communicates the core action, and the schema handles all technical detail, so this brevity is appropriate.
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?
This tool has 17 parameters and no output schema, yet the description is only one sentence. It does not explain the return shape, pagination, the meaning of cursor, or how include_trips affects results. The schema covers parameter meaning, but the description leaves the agent without essential behavioral context.
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 description coverage is 100% (all 17 parameters have meaningful descriptions), and the tool description adds no parameter-level semantics. The baseline of 3 applies because the schema carries the full burden of parameter explanation.
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 uses a specific verb ('Get') and resource ('cached award flights') on seats.aero, clearly distinguishing it from sibling tools like live_search (cached vs. live) and get_trips/get_routes (award flights vs. trips/routes).
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?
No explicit when-to-use or when-not-to-use guidance is provided. The word 'cached' implies this tool serves cached data rather than live searches, but it does not name alternatives like live_search or refresh_cached_data. Usage context is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_routesBRead-onlyIdempotent
Get routes for a particular source.
| Name | Required | Description | Default |
|---|---|---|---|
| source | Yes | Mileage program source to list routes for. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is established. The description adds no additional behavioral context beyond stating the action, such as return format or side effects. This is adequate for a simple getter but not enriched.
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 a single, direct sentence that front-loads the verb and object. It contains no filler or redundant information, making it optimally concise.
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 simple one-parameter read-only tool with strong annotations, the description is mostly complete. However, without an output schema, it does not clarify what 'routes' specifically returns (e.g., city pairs, flight numbers) or any limitations, leaving a minor gap. The enum and sibling names provide some disambiguation, so it remains adequate.
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?
The input schema has 100% description coverage for the single 'source' parameter, including an enum and a clear description ('Mileage program source to list routes for'). The description does not add extra semantic detail, but the schema already provides sufficient meaning, aligning with the baseline of 3.
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 identifies the action ('get') and resource ('routes') and specifies the scope ('for a particular source'). It does not explicitly distinguish from sibling tools like get_destinations or get_flights, but the term 'routes' provides some differentiation.
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 offers no guidance on when to use this tool versus alternatives. There is no mention of use cases, prerequisites, or exclusions. The implication that it is meant for a specific source is only derived from the parameter definition, not from the description itself.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_tripsARead-onlyIdempotent
Get flight-level trip details for a cached Availability object.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ID of an Availability object. | |
| include_filtered | No | Include dynamically-priced trips that are normally filtered out. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is covered. The description adds the 'cached' qualifier but does not explain implications like openWorldHint or what specific trip fields are returned.
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?
One short sentence that gets straight to the point, with no redundant information. It is appropriately concise and front-loaded.
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?
With a simple 2-parameter schema, annotations, and sibling context, the description is sufficient for an agent to understand the tool's purpose, though it lacks detail about the output format. Since there is no output schema, a brief mention of the return structure could improve it, but it's not critical.
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 descriptions fully cover both parameters (id and include_filtered), so the description need not add more. It does not explain how include_filtered affects results beyond the schema, so the baseline of 3 is appropriate.
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 uses a specific verb 'Get' and identifies the resource as 'flight-level trip details for a cached Availability object,' clearly distinguishing it from sibling tools like get_flights or get_destinations.
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 the tool is used when you have a cached Availability object ID and need trip-level flight details, but it does not explicitly mention when not to use it or alternative tools for other scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
live_searchARead-onlyIdempotent
Run a live award search for one route, date, and mileage program. This endpoint cannot be used by Seats.aero Pro users and requires a commercial agreement with Seats.aero.
| Name | Required | Description | Default |
|---|---|---|---|
| source | Yes | Mileage program source to search. | |
| seat_count | No | Number of adult passengers to search for (1-9; default 1). | |
| departureDate | Yes | Departure date, in YYYY-MM-DD format. | |
| originAirport | Yes | Origin airport code. | |
| disable_filters | No | Disable dynamic-pricing and mismatched-airport filters. | |
| destinationAirport | Yes | Destination airport code. | |
| show_dynamic_pricing | No | Include dynamic pricing while retaining mismatched-airport filters. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, covering the safety profile. The description adds meaningful access restrictions ('cannot be used by Seats.aero Pro users', 'requires a commercial agreement') and the 'live' nature of the search, which go beyond annotations. It doesn't describe rate limits or response format, but the annotations lower the bar.
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 exactly two sentences, front-loaded with the core purpose and followed by an important access restriction. Every word earns its place; no redundancy or filler.
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?
With no output schema, the description does not explain return values, pagination, or result structure, which is a gap for a search tool. However, the access restrictions and 'live' nature provide useful context, and the rich parameter schema covers the input side. It is adequate but not deeply complete.
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 description coverage is 100%, so the baseline is 3. The description does not add any parameter-level detail beyond what the schema already provides (e.g., origin/destination/departureDate/source are all well-documented). The phrase 'one route, date, and mileage program' maps directly to existing schema fields without extra semantics.
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 'Run a live award search for one route, date, and mileage program' – a specific verb, resource, and scope. This distinguishes it from siblings like get_bulk_avail (multiple routes) or get_flights (cached searches) by emphasizing 'live' and 'one route'.
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?
No explicit guidance on when to use this tool versus alternatives like get_flights or get_bulk_avail. The only context is an access restriction ('cannot be used by Pro users', 'requires commercial agreement'), which is not usage guidance. There are no when/when-not statements or named alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
refresh_cached_dataAIdempotent
Queue or poll refreshes for 1-250 cached Availability objects. This endpoint cannot be used by commercial users; commercial users should use live_search instead.
| Name | Required | Description | Default |
|---|---|---|---|
| availabilityIds | Yes | One to 250 Availability object IDs returned by cached search or bulk availability. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnly=false and idempotent=true, so the agent knows this is a mutating but idempotent operation. The description adds the behavioral trait of 'queue or poll' and highlights the commercial restriction, which goes beyond what annotations convey. It does not detail side effects, but given the annotations, this is sufficient.
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 composed of two concise sentences, with the primary action stated first and the restriction/alternative immediately after. Every word earns its place, and there is no fluff or 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?
The tool has a single parameter fully described in the schema, no output schema, and annotations covering safety profile. The description provides the essential context: what it operates on, the quantity limit, and the exclusion for commercial users. This is complete for the tool's simplicity.
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 description coverage is 100%, and the schema fully documents the availabilityIds parameter with constraints (1-250 items, string format). The description does not add extra semantics beyond restating the count range, so the baseline score of 3 is appropriate.
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 tool's purpose: to queue or poll refreshes for 1-250 cached Availability objects. It uses a specific verb ('queue or poll') and resource ('cached Availability objects'), and it distinguishes itself from siblings by explicitly comparing to live_search.
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 provides explicit usage guidance, stating that commercial users cannot use this endpoint and should use live_search instead. This clearly signals when to use this tool versus an alternative, fulfilling the dimension fully.
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.
7 tool updates
v1.2.0- Changed
get_bulk_avail22 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / cabinClass / descriptionAdded value: +"Only return results with this cabin available." - added
Input schema / properties / cursor / maximumAdded value: +9007199254740991 - added
Input schema / properties / cursor / minimumAdded value: +0 - changed
Input schema / properties / cursor / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / destinationRegion / descriptionAdded value: +"Only return results arriving in this region." - added
Input schema / properties / destinationRegion / enumAdded value: +[ + "North America", + "South America", + "Africa", + "Asia", + "Europe", + "Oceania" +] - added
Input schema / properties / endDate / descriptionAdded value: +"Latest departure date, in YYYY-MM-DD format." - changed
Input schema / properties / endDate / patternPrevious value: -"^\\d{4}\\-(0[1-9]|1[012])\\-(0[1-9]|[12][0-9]|3[01])$"New value: +"^\\d{4}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$" - added
Input schema / properties / include_filteredAdded value: +{ + "description": "Include raw results normally removed by dynamic-price filters.", + "type": "boolean" +} - added
Input schema / properties / originRegion / descriptionAdded value: +"Only return results originating in this region." - added
Input schema / properties / originRegion / enumAdded value: +[ + "North America", + "South America", + "Africa", + "Asia", + "Europe", + "Oceania" +] - added
Input schema / properties / skip / maximumAdded value: +9007199254740991 - added
Input schema / properties / skip / minimumAdded value: +0 - changed
Input schema / properties / skip / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / source / descriptionAdded value: +"Mileage program source to retrieve." - changed
Input schema / properties / source / enumPrevious value: -[ - "eurobonus", - "virginatlantic", - "aeromexico", - "american", - "delta", - "etihad", - "united", - "emirates", - "aeroplan", - "alaska", - "velocity", - "qantas", - "connectmiles", - "azul", - "smiles", - "flyingblue", - "jetblue", - "qatar", - "turkish", - "singapore", - "ethiopian", - "saudia" -]New value: +[ + "eurobonus", + "virginatlantic", + "aeromexico", + "american", + "delta", + "etihad", + "united", + "emirates", + "aeroplan", + "alaska", + "velocity", + "qantas", + "connectmiles", + "azul", + "smiles", + "flyingblue", + "jetblue", + "qatar", + "turkish", + "singapore", + "ethiopian", + "saudia", + "finnair", + "lufthansa", + "frontier", + "spirit" +] - added
Input schema / properties / startDate / descriptionAdded value: +"Earliest departure date, in YYYY-MM-DD format." - changed
Input schema / properties / startDate / patternPrevious value: -"^\\d{4}\\-(0[1-9]|1[012])\\-(0[1-9]|[12][0-9]|3[01])$"New value: +"^\\d{4}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$" - added
Input schema / properties / take / descriptionAdded value: +"Maximum results to return (10-1000; default 500)." - changed
Input schema / properties / take / typePrevious value: -"number"New value: +"integer"
- Added
get_destinations - Changed
get_flights36 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / cabinClass / descriptionAdded value: +"Deprecated single-cabin alias for cabins." - added
Input schema / properties / cabinsAdded value: +{ + "description": "Cabins that must be available, comma-delimited when specifying multiple cabins.", + "pattern": "^(economy|premium|business|first)(,(economy|premium|business|first))*$", + "type": "string" +} - added
Input schema / properties / carriers / descriptionAdded value: +"Two-character carrier codes, comma-delimited (for example, DL,AA)." - removed
Input schema / properties / carriers / maxLengthRemoved value: -2 - removed
Input schema / properties / carriers / minLengthRemoved value: -2 - added
Input schema / properties / carriers / patternAdded value: +"^[A-Za-z0-9]{2}(,[A-Za-z0-9]{2})*$" - added
Input schema / properties / cursor / descriptionAdded value: +"Opaque cursor returned by the first page of this search." - added
Input schema / properties / cursor / maximumAdded value: +9007199254740991 - added
Input schema / properties / cursor / minimumAdded value: +0 - changed
Input schema / properties / cursor / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / departureDate / descriptionAdded value: +"Deprecated single-date alias. When startDate or endDate is omitted, this value is used for that bound." - added
Input schema / properties / departureDate / patternAdded value: +"^\\d{4}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$" - added
Input schema / properties / destinationAirport / descriptionAdded value: +"Destination airport codes, comma-delimited when searching multiple airports (for example, FRA,LHR)." - added
Input schema / properties / destinationAirport / patternAdded value: +"^[A-Za-z]{3}(,[A-Za-z]{3})*$" - added
Input schema / properties / endDate / descriptionAdded value: +"Latest departure date, in YYYY-MM-DD format." - changed
Input schema / properties / endDate / patternPrevious value: -"^\\d{4}\\-(0[1-9]|1[012])\\-(0[1-9]|[12][0-9]|3[01])$"New value: +"^\\d{4}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$" - added
Input schema / properties / include_filteredAdded value: +{ + "description": "Include raw results normally removed by dynamic-price filters.", + "type": "boolean" +} - added
Input schema / properties / include_trips / descriptionAdded value: +"Include flight-level trip details in each availability result." - added
Input schema / properties / minify_tripsAdded value: +{ + "description": "Return fewer trip fields when include_trips is enabled.", + "type": "boolean" +} - added
Input schema / properties / only_direct_flights / descriptionAdded value: +"Only return results with a direct flight available." - added
Input schema / properties / order_by / constAdded value: +"lowest_mileage" - added
Input schema / properties / order_by / descriptionAdded value: +"Set to lowest_mileage to return the cheapest results first." - removed
Input schema / properties / order_by / enumRemoved value: -[ - "", - "lowest_mileage" -] - added
Input schema / properties / originAirport / descriptionAdded value: +"Origin airport codes, comma-delimited when searching multiple airports (for example, SFO,LAX)." - added
Input schema / properties / originAirport / patternAdded value: +"^[A-Za-z]{3}(,[A-Za-z]{3})*$" - added
Input schema / properties / skip / descriptionAdded value: +"Number of already-retrieved results to skip." - added
Input schema / properties / skip / maximumAdded value: +9007199254740991 - added
Input schema / properties / skip / minimumAdded value: +0 - changed
Input schema / properties / skip / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / sourcesAdded value: +{ + "description": "Mileage program sources, comma-delimited when specifying multiple.", + "type": "string" +} - added
Input schema / properties / startDate / descriptionAdded value: +"Earliest departure date, in YYYY-MM-DD format." - changed
Input schema / properties / startDate / patternPrevious value: -"^\\d{4}\\-(0[1-9]|1[012])\\-(0[1-9]|[12][0-9]|3[01])$"New value: +"^\\d{4}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$" - added
Input schema / properties / take / descriptionAdded value: +"Maximum results to return (10-1000; default 500)." - changed
Input schema / properties / take / typePrevious value: -"number"New value: +"integer"
- Changed
get_routes4 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / source / descriptionAdded value: +"Mileage program source to list routes for." - changed
Input schema / properties / source / enumPrevious value: -[ - "eurobonus", - "virginatlantic", - "aeromexico", - "american", - "delta", - "etihad", - "united", - "emirates", - "aeroplan", - "alaska", - "velocity", - "qantas", - "connectmiles", - "azul", - "smiles", - "flyingblue", - "jetblue", - "qatar", - "turkish", - "singapore", - "ethiopian", - "saudia" -]New value: +[ + "eurobonus", + "virginatlantic", + "aeromexico", + "american", + "delta", + "etihad", + "united", + "emirates", + "aeroplan", + "alaska", + "velocity", + "qantas", + "connectmiles", + "azul", + "smiles", + "flyingblue", + "jetblue", + "qatar", + "turkish", + "singapore", + "ethiopian", + "saudia", + "finnair", + "lufthansa", + "frontier", + "spirit" +]
- Added
get_trips - Added
live_search - Added
refresh_cached_data
3 tool updates
v1.0.0- First observed
get_bulk_avail - First observed
get_flights - First observed
get_routes
TDQS
Scored across 7 tools
The tool names and descriptions suggest overlapping purposes: get_destinations, get_routes, get_flights, get_trips, and get_bulk_avail all appear to return availability data at different granularities, but the distinctions are not always obvious. An agent might struggle to choose between get_routes and get_destinations, or get_flights and get_trips, without deeper documentation.
All tool names follow a consistent verb_noun pattern in snake_case (get_destinations, get_trips, refresh_cached_data, live_search, get_flights, get_bulk_avail, get_routes). The verbs and nouns are clear and predictable, providing a consistent naming convention across the set.
With 7 tools, the server is well-scoped for an award travel search domain. Each tool covers a distinct aspect of querying or managing availability data, and the number is neither excessive nor insufficient.
The tool surface covers the main workflows: finding destinations, routes, flights, bulk availability, live search, and refreshing cached data. A minor gap exists in that there is no explicit tool for detailed pricing per flight or for managing specific search parameters, but agents can likely work around this with the available tools.
Maintenance
Related MCP Connectors
Search award flights and cash fares, optimize points, and predict fares inside ChatGPT and Claude.
Personal AI travel agent. Points optimization, live flight/hotel/award search, trip planning.
Live flight prices and working booking links for AI agents and travel apps.
Give AI assistants access to real-time data. Search the web, compare flights, find hotels, and more.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables 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,745 PyPI3,150MIT
- FlicenseNot gradedqualityDmaintenanceEnables flight search and date parsing using Amadeus API and Google Gemini, with natural language understanding.-
- FlicenseNot gradedqualityDmaintenanceEnables AI assistants to search for real-time flights between airports using the SearchAPI.io Google Flights API, returning prices, schedules, airlines, and carbon emissions.-
- AlicenseAqualityFmaintenanceEnables searching and analyzing Google Flights data including prices, emissions, cabin classes, layovers, and price tracking, all without an API key.12132 npm5ISC