All Flights MCP
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@All Flights MCPsearch flights from LAX to CDG on May 1st"
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.
All Flights MCP
A federated Model Context Protocol server that searches multiple flight inventory sources concurrently and returns one normalized, deduplicated result set.
Providers
Provider | Status | Inventory role |
ITA Matrix | Supported through an existing Streamable HTTP ITA MCP | Fare research and routing |
Google Flights | Supported through the pinned Fli MCP | Live metasearch fares and Google booking links |
Duffel | Supported directly | Live NDC, GDS, and selected low-cost-carrier offers |
Skyscanner | Supported directly | Metasearch suppliers and booking deep links |
Standard MCP | Extensible adapter | Additional providers that implement this server's normalized |
No provider guarantees complete global inventory. Configure more than one source for better coverage. Provider errors are isolated: one failed or slow source does not discard results from the others.
Related MCP server: Find Flights MCP Server
MCP tools
list_providers: reports configured and unavailable providers.search_flights: searches providers concurrently, normalizes offers, and groups equivalent itineraries with provider-specific alternatives.search_date_range: scans up to 60 outbound-date/stay-length combinations.get_offer: retrieves a recent offer and its alternatives from the in-memory cache.
Quick start
Requires Node.js 22 or newer.
npm install
cp .env.example .env
npm run build
npm startThe server automatically loads .env. The default transport is stdio. Set
MCP_TRANSPORT=http to expose stateless
Streamable HTTP at http://127.0.0.1:3000/mcp. The HTTP server also exposes
GET /health.
Local MCP client
{
"mcpServers": {
"all-flights": {
"command": "node",
"args": ["C:\\Repos\\all-flights-mcp\\dist\\index.js"],
"env": {
"ITA_MCP_URL": "https://your-ita-mcp.example/mcp",
"ITA_MCP_BEARER_TOKEN": "${input:ita-token}",
"DUFFEL_ACCESS_TOKEN": "${input:duffel-token}"
}
}
}
}Configuration
Copy .env.example and enable any providers for which you have access:
ITA_MCP_URLand optionalITA_MCP_BEARER_TOKENor
ITA_MCP_COMMANDand optionalITA_MCP_ARGS_JSONfor a local stdio serverGOOGLE_FLIGHTS_MCP_URLorGOOGLE_FLIGHTS_MCP_COMMAND=fli-mcpDUFFEL_ACCESS_TOKENSKYSCANNER_API_KEYplus market and locale
Skyscanner, Sabre, and Travelport generally require commercial approval. Credentials are never returned in tool output or written to disk by this server.
Additional MCP providers
UPSTREAM_MCP_PROVIDERS_JSON adds providers that expose a normalized
search_flights tool compatible with this repository:
[
{
"id": "partner",
"name": "Partner inventory",
"url": "https://partner.example/mcp",
"tokenEnv": "PARTNER_MCP_TOKEN",
"toolName": "search_flights"
}
]tokenEnv names an environment variable; do not place secrets directly in the
JSON configuration.
HTTP deployment
cp .env.example .env
# Edit .env and set MCP_TRANSPORT=http and MCP_BEARER_TOKEN.
docker compose up -d --buildWhen MCP_BEARER_TOKEN is set, /mcp requires
Authorization: Bearer <token>. Use TLS in front of the container.
HomeAssistant OCI deployment
The repository includes the deployment used by HomeAssistant. It runs beside
the existing ITA MCP container and a pinned Fli Google Flights container, publishes
https://flights.159-54-184-44.sslip.io/mcp through Caddy, stores the bearer
token in Azure Key Vault, and registers the server in the agent's MCP registry.
The OCI Fli container uses the existing residential SOCKS tunnel because
Google returns empty inventory from the datacenter address.
.\deploy-oci.ps1Provider credentials can be added to /opt/n8n/all-flights-mcp.env before
restarting the service. ITA is reached over the private Compose network.
Normalization and deduplication
Each offer retains its source, provider offer ID, total price, currency, segments, carriers, booking URL or booking-item links, and expiry. Equivalent itineraries are grouped by segment airports, times, carriers, and flight numbers. The cheapest alternative in the requested currency becomes the primary result; every provider alternative remains attached.
Prices are not currency-converted. ITA Matrix results are marked non-bookable because ITA does not return durable booking links. Always revalidate a selected offer before purchase. Google Flights support uses an unofficial reverse-engineered interface provided by Fli; it may change without notice.
Development
npm run checkThe test suite uses Node's built-in test runner and does not call live provider APIs.
Available Tools
3 toolslist_providersARead-only
List flight inventory providers and whether each one is configured.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description and annotations are consistent: readOnlyHint true aligns with a listing operation. The description adds the detail that the tool returns configuration status, which is transparent. No contradictory or missed behaviors.
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 concise sentence of 9 words, front-loading the purpose and requiring no additional sentences. Every word provides value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity, zero parameters, and no output schema, the description adequately captures the purpose. It states the output includes provider names and configuration status, which is sufficient for a simple list. A minor gap is the lack of return format details, but the tool is straightforward.
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?
With no parameters and 100% schema description coverage, the description does not need to add parameter info. The baseline score of 4 is appropriate as the tool's parameterless nature is fully captured.
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 lists flight inventory providers and their configuration status, using a specific verb and resource. However, it does not explicitly differentiate from sibling tools like search_flights and search_date_range, which are focused on searching rather than listing.
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, nor does it mention any prerequisites or exclusions. This leaves the agent without context for selecting it appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_date_rangeBRead-only
Search multiple outbound dates and stay lengths, returning the cheapest normalized offer for each date pair.
| Name | Required | Description | Default |
|---|---|---|---|
| cabin | No | economy | |
| adults | No | ||
| origin | Yes | Origin IATA airport or city code | |
| endDate | Yes | ||
| currency | No | ISO 4217 currency | |
| maxStops | No | ||
| maxNights | No | ||
| minNights | No | ||
| providers | No | Provider IDs to query | |
| startDate | Yes | ||
| timeoutMs | No | ||
| maxResults | No | ||
| destination | Yes | Destination IATA airport or city code |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint and openWorldHint. Description adds no further behavioral context such as rate limits, pagination, or what 'normalized offer' means.
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?
Single sentence front-loaded with verb 'Search', very concise. However, it could include more structure for clarity.
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?
Tool has 13 parameters and no output schema, yet description lacks details on return value format, how results are normalized, or any usage caveats. Incomplete for a tool of this complexity.
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 low (31%), and description does not elaborate on parameter semantics beyond mentioning 'outbound dates and stay lengths'. No mapping to specific parameters or added meaning for the 13 parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it searches multiple outbound dates and stay lengths, returning cheapest normalized offer per date pair. This distinguishes it from sibling tools like search_flights which likely searches specific dates.
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?
Description implies usage for flexible date searches but does not explicitly specify when to use this tool over siblings or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_flightsBRead-only
Search all configured flight providers concurrently, normalize their offers, and deduplicate equivalent itineraries.
| Name | Required | Description | Default |
|---|---|---|---|
| cabin | No | economy | |
| adults | No | ||
| origin | Yes | Origin IATA airport or city code | |
| currency | No | ISO 4217 currency | |
| maxStops | No | ||
| providers | No | Provider IDs to query | |
| timeoutMs | No | ||
| maxResults | No | ||
| returnDate | No | Optional return date, YYYY-MM-DD | |
| destination | Yes | Destination IATA airport or city code | |
| departureDate | Yes | Departure date, YYYY-MM-DD |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds value beyond annotations by disclosing concurrent querying of providers, normalization, and deduplication. Annotations already indicate read-only and open-world behavior, and the description complements this without contradiction. However, it still omits details like error handling or rate limits.
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 that effectively summarizes the core function. It is concise and front-loaded with the key action. However, it could be broken into multiple sentences for improved readability, but overall it is appropriately sized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (11 parameters, no output schema), the description is insufficient. It does not explain the output format, how to interpret results, or what edge cases exist. The annotations and schema alone do not provide complete guidance for a production tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With schema coverage at 55%, many parameters lack description. The tool description does not elaborate on parameter meanings beyond what is already in the schema. It does not compensate for the missing schema descriptions, leaving ambiguity for parameters like 'providers' or 'timeoutMs'.
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 specifies the verb 'Search', the resource 'flights', and the unique behavior: searching all configured providers concurrently, normalizing offers, and deduplicating. It distinguishes itself from sibling tools like 'list_providers' and 'search_date_range' which have different scopes.
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 vs. alternatives is provided. The description only states what the tool does, but does not mention when to prefer it over 'search_date_range' or other tools. The context of usage is implied but not articulated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool has a distinct purpose: listing providers, searching flights across providers, and searching across date ranges. No overlaps or ambiguity.
All tool names follow a consistent verb_noun pattern in snake_case: list_providers, search_flights, search_date_range. No deviations.
Three tools is well-scoped for a flight search server, covering configuration listing, general search, and date-range search without excess or deficiency.
The set covers core flight search functionality, but lacks filters (e.g., by airline, price) or provider-specific queries. Minor gap but sufficient for the stated purpose.
Maintenance
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
Flight search MCP server providing search, pagination, and itinerary details for AI assistants.
Award seat availability from a contracted GDS. One route, one airline, one date.
Free, no-login flight search with real-time pricing from multiple airlines.
Search and compare flight offers through a cache-aware Streamable HTTP MCP server for AI agents.
Related MCP Servers
- AlicenseCqualityDmaintenanceEnables searching and retrieving detailed flight information using the Duffel API, supporting various flight types and flexible search parameters for efficient travel planning.3222MIT
- -licenseNot gradedqualityNot gradedmaintenanceEnables searching and retrieving flight information using Duffel API, supporting one-way, round-trip, and multi-city queries with flexible search parameters.
- FlicenseCqualityDmaintenanceEnables flight search between airports using the Duffel API, returning flight offers and detailed debug logs.11
- FlicenseAqualityBmaintenanceSearches Google Flights, labels results as in-policy or out-of-policy based on a travel policy file, and ranks them by preferences like nonstop, alliance, or price.5
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/shayben/all-flights-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server