Skip to main content
Glama
fastmcp-me
by fastmcp-me

Add to Cursor Add to VS Code Add to Claude Add to ChatGPT Add to Codex Add to Gemini

✈️ 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

  1. Clone the repository:

git clone <repository-url>
cd flights-mcp
  1. Set up environment variables (see Environment Variables section)

  2. Run the server

uv run src/flights-mcp/main.py

The 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 token

  • FLIGHTS_AVIASALES_MARKER (required): Your Aviasales marker ID

  • FLIGHTS_TRANSPORT (optional): Transport protocol to use

    • Options: stdio (default), streamable_http, sse

  • FLIGHTS_HTTP_PORT (optional): Port for HTTP/SSE transport

    • Only used when FLIGHTS_TRANSPORT is streamable_http or sse

    • Default: 4200

  • FLIGHTS_HTTP_PATH (optional): URI path for the endpoint

    • Only used when FLIGHTS_TRANSPORT is streamable_http or sse

    • Default: /mcp

MCP Tools

The server provides the following MCP tools:

Tool

Description

search_flights

Searches for flights using the Aviasales Flight Search API. Returns search description with search_id and summary of found options.

get_flight_options

Retrieves, filters, and sorts flight options from a previous search. Returns a paginated list of filtered flight options.

get_flight_option_details

Returns detailed flight information including segments, pricing, baggage allowances, and agency terms.

request_booking_link

Generates a booking link for a specific flight option.

Typical Usage Pattern

  1. Search for flights using search_flights() - Call multiple times for flexible dates

  2. Filter and browse options using get_flight_options() - Lightweight tool, call multiple times with different filters and sorting option

  3. Get detailed information using get_flight_option_details() - For user's preferred options

  4. Generate booking link using request_booking_link() - Only when user confirms booking intent

Support

For issues related to:

Available Tools

4 tools
get_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.

ParametersJSON Schema
NameRequiredDescriptionDefault
search_idYesSearch ID from the previous search_flights tool.
offer_idYesOffer ID of the flight option for which to request a booking link.

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
search_idYes
filtersYes
pageNoPage number for pagination. Default is 0.
page_sizeNoNumber of results per page. Default is 10.

TDQS

A3.5/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
requestYes

TDQS

A4.5/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden. It discloses that 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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

  1. 4 tool updatesv0.1.0
    • First observedget_flight_option_details
    • First observedget_flight_options
    • First observedrequest_booking_link
    • First observedsearch_flights

TDQS

A4/5.0
Disambiguation5/5

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.

Naming Consistency5/5

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.

Tool Count5/5

With 4 tools, the surface is well-scoped for a flight search and booking workflow—lean yet covering essential steps without redundancy.

Completeness4/5

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

ActivityInactive
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

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