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., "@flights-mcpSearch flights from JFK to LAX next Monday"
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.
✈️ Flights MCP Server
A Model Context Protocol (MCP) server that provides flight search capabilities using the Aviasales Flight Search API. This server allows you to search for flights, filter results, get detailed flight information, and generate booking links.
https://github.com/user-attachments/assets/87d79d54-c4ab-4938-9792-18572315f1ba
How to use
You can either use the remote MCP server or deploy your own instance:
Remote MCP
A public instance is available at:https://findflights.me/sse
This server uses the SSE transport protocol and is ready to use without setup.⚠️ Important: Currently not all LLM clients support remote MCP connections. For example, Claude.ai supports remote MCP integrations only on Pro+ plans.
Self-Hosted Deployment
If you prefer to run your own server, follow the instructions in the Installation section.Note: To deploy your own server, you must obtain an Aviasales API Key and Marker ID.
Related MCP server: cheapflights-mcp
Features
Flight Search: Search for one-way, round-trip, and multi-city flights
Advanced Filtering: Filter results by price, duration, airlines, departure/arrival times, and number of stops
Multiple Sorting Options: Sort by price, departure time, arrival time, or duration
Detailed Flight Information: Get comprehensive flight details including baggage allowances and airline information
Booking Links: Generate booking links for selected flights
Local Storage: Performed searches are stored locally so LLM can access past searches without waiting
Multiple MCP Transport Options: Supports stdio, HTTP, and SSE transports
Installation
Prerequisites
Aviasales API key
Python 3.12 or higher
UV package manager
Setup
Clone the repository:
git clone <repository-url>
cd flights-mcpSet up environment variables (see Environment Variables section)
Run the server
uv run src/flights-mcp/main.pyThe server binds to 0.0.0.0, making it accessible on all network interfaces of the host machine.
Environment Variables
The following environment variables are required:
FLIGHTS_AVIASALES_API_TOKEN(required): Your Aviasales API tokenFLIGHTS_AVIASALES_MARKER(required): Your Aviasales marker IDFLIGHTS_TRANSPORT(optional): Transport protocol to useOptions:
stdio(default),streamable_http,sse
FLIGHTS_HTTP_PORT(optional): Port for HTTP/SSE transportOnly used when
FLIGHTS_TRANSPORTisstreamable_httporsseDefault:
4200
FLIGHTS_HTTP_PATH(optional): URI path for the endpointOnly used when
FLIGHTS_TRANSPORTisstreamable_httporsseDefault:
/mcp
MCP Tools
The server provides the following MCP tools:
Tool | Description |
| Searches for flights using the Aviasales Flight Search API. Returns search description with |
| Retrieves, filters, and sorts flight options from a previous search. Returns a paginated list of filtered flight options. |
| Returns detailed flight information including segments, pricing, baggage allowances, and agency terms. |
| Generates a booking link for a specific flight option. |
Typical Usage Pattern
Search for flights using
search_flights()- Call multiple times for flexible datesFilter and browse options using
get_flight_options()- Lightweight tool, call multiple times with different filters and sorting optionGet detailed information using
get_flight_option_details()- For user's preferred optionsGenerate booking link using
request_booking_link()- Only when user confirms booking intent
Support
For issues related to:
MCP Server: Open an issue in this repository
MCP Protocol: See Model Context Protocol Documentation
Available Tools
4 toolsget_flight_option_detailsA
Retrieve detailed information about a specific flight option from the search results. This tool provides detailed information about a flight option, including its segments, price, baggage info. It is useful for getting more granular information about a specific flight option.
| Name | Required | Description | Default |
|---|---|---|---|
| search_id | Yes | Search ID from the previous search_flights tool. | |
| offer_id | Yes | Offer ID of the flight option for which to request a booking link. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses output contents (segments, price, baggage) but does not mention side effects, prerequisites, authentication, or error conditions. The implied dependency on previous search is not emphasized.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, no fluff. Front-loads the purpose, then lists contents. Every sentence adds 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?
Lacks output schema, but description mentions return fields. It provides enough context for a simple retrieval tool, though could clarify the connection to search_flights more explicitly.
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 both parameters well-described. The description adds general context about output but not parameter-specific meaning 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 clearly states the verb 'retrieve' and the resource 'detailed information about a specific flight option'. It mentions included fields (segments, price, baggage info) and distinguishes from siblings like get_flight_options (likely returns list) and request_booking_link.
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 says 'It is useful for getting more granular information' but does not explicitly state when to use or when not to use it relative to siblings. There is no mention of prerequisites or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_flight_optionsA
Get flight options from the previously performed search. This tool allows you to filter the found flight options by price, departure and arrival times, and airlines. It returns a paginated list of flight options that match the specified filters and sorting option.IMPORTANT: This is very cheap operation, so you can call it as many times as needed to find the best flight options.
| Name | Required | Description | Default |
|---|---|---|---|
| search_id | Yes | ||
| filters | Yes | ||
| page | No | Page number for pagination. Default is 0. | |
| page_size | No | Number of results per page. Default is 10. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. Description mentions pagination and cheapness but omits behavioral details like error handling, response format, or side effects. For a tool with no annotations, more transparency is needed.
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?
Two sentences plus an important note. Purpose is front-loaded. No redundant text. Could be slightly more structured but overall 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?
Lacks explanation of response format, error cases, required search_id from prior step, and how pagination works. Complex tool with nested filters needs more detail.
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 50%; description vaguely lists filter criteria (price, times, airlines) but does not detail the filters object structure. Adds marginal value over schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves flight options from a prior search, with filtering and pagination. It distinguishes from siblings: get_flight_option_details (details), request_booking_link (booking), and search_flights (initial 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?
Explicitly states 'from the previously performed search' implying prerequisite. Notes the operation is cheap and callable many times. Does not explicitly mention when not to use, but context with siblings provides differentiation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
request_booking_linkA
Request link for booking a flight option. This tool generates a booking link for a specific flight option.This tool is recommended to be used after the user expressed intention to book the flight option.
| Name | Required | Description | Default |
|---|---|---|---|
| search_id | Yes | Search ID from the previous search_flights tool. | |
| offer_id | Yes | Offer ID of the flight option for which to request a booking link. | |
| agency_id | Yes | Internal agency ID for generating booking link. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden. It states that the tool generates a booking link, indicating a side effect of creating an external resource. However, it lacks details on required permissions, rate limits, or what the output link contains.
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 two sentences long, starting with the core purpose. It is efficient and avoids redundancy, though the two sentences could be merged without loss of 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?
The tool has no output schema, so the description should clarify the return value. It mentions generating a booking link but does not specify whether the link is returned in the response or how it is structured. This leaves ambiguity about what the agent will receive.
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 already provides thorough descriptions for all three parameters (100% coverage). The description adds no additional parameter-level information beyond what the schema offers, resulting in a baseline score.
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 action ('request link') and resource ('booking a flight option'). It distinguishes from sibling tools like search_flights and get_flight_option_details by focusing on generating a booking link.
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 recommends using this tool after the user expresses intention to book, providing clear context for when to invoke it. However, it does not mention when not to use it or list alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_flightsA
Search for flights using the Aviasales Flight Search API. This tool performs search based on the provided flight segments, number of passengers, trip class, currency, and locale. It provides search_id and description of search results and saves found options internally.After receiving the result client can use get_flight_options tool to retrieve the found options with more granular filters.IMPORTANT: All times are local to departure/arrival locations and use HH:MM 24-hour format.IMPORTANT: Call this tool as many times as needed to find the best flight options.
| Name | Required | Description | Default |
|---|---|---|---|
| request | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that search results are saved internally, that all times are local and in HH:MM 24-hour format, but does not mention auth or rate limits. It is fairly transparent, but could include more about statefulness.
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 well-structured with clear sections and front-loaded purpose. It is slightly verbose but each sentence provides value, earning a 4.
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 complexity of the nested schema and the lack of an output schema, the description adequately explains the workflow (search then retrieve options) and provides critical usage details. It is practically complete for an agent to use effectively.
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?
Although the schema_description_coverage is 0% (likely a metric artifact), the input schema has detailed descriptions for all nested properties. The tool description adds value with examples and important usage hints, going beyond what the schema provides. Baseline 3 is exceeded.
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 it searches for flights using Aviasales API, provides a search_id, and saves options internally. It explicitly mentions the subsequent use of get_flight_options, distinguishing itself from its siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides explicit guidance on when to call this tool (as many times as needed) and when to use get_flight_options. It includes examples for one-way, round trip, multi-city, and warns against using multiple segments for alternative dates.
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.
4 tool updates
v0.1.0- First observed
get_flight_option_details - First observed
get_flight_options - First observed
request_booking_link - First observed
search_flights
TDQS
Each tool has a distinct role: initiating search, retrieving filtered results, getting detailed info on a specific option, and requesting a booking link. No overlap in functionality.
All tool names follow a consistent verb_noun pattern (search_flights, get_flight_options, get_flight_option_details, request_booking_link), making them predictable and easy to use.
With 4 tools, the surface is well-scoped for a flight search and booking workflow—lean yet covering essential steps without redundancy.
The tools cover the core flight search workflow: initiate search, filter results, view details, and obtain a booking link. Minor gaps (e.g., no tool for managing bookings) are acceptable given the server's focused 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.
Geo-based flight search MCP server. Find more flights between any two places on earth
Skiplagged MCP Server for flight search, hotel booking, and travel planning
Search and compare flight offers through a cache-aware Streamable HTTP MCP server for AI agents.
Related MCP Servers
- AlicenseAqualityFmaintenanceMCP server searching flights with granular filtering, sorting options, and purchase integration.415PythonGPL 3.0
- AlicenseAqualityCmaintenanceAn MCP server that finds cheap flights with flexible dates and smart suggestions using the Google Flights API.3MIT
- AlicenseNot gradedqualityCmaintenanceAn MCP server that integrates with the Amadeus Flight Availabilities Search API to allow users to search for available flights and view seat availability in real-time.MIT
- FlicenseAqualityDmaintenanceAn MCP server for holiday flight planning powered by Google Flights via SerpAPI, enabling real-time flight search, destination discovery, airport comparison, and multi-country trip planning.13-
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/fastmcp-me/flights-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server