Aviasales Flight Prices
OCI · GHCR.IO/STUFENTLY/AVIASALES-MCP · 2 COMPONENTS
Flight price search via Aviasales/Travelpayouts: fares by route, cheapest days, flexible dates.
Available components
Last scanned (10 hours ago)
Scores higher than 74% of OCI servers
Category Maps and Location
How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →
Supply Chain Security0
- No malware scan is available for this kind of package: the supply-chain vendors we use do not cover it. This is a permanent gap in our coverage, not a finding about the package.Unverified
- Known CVEs could not be checked: this artifact ships no SBOM or dependency manifest, so there is no dependency list to read.Unverified
- Install-script risk not yet assessed.Unverified
- Dependency health could not be checked: this artifact ships no SBOM or dependency manifest, so there is no dependency list to read.Unverified
Provenance & Transparency48
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
- Clear OSI-approved license (GPL-3.0-or-later).Pass
- Actively maintained (last published 21 days ago).Pass
- Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability64
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 3427 tokens (~263/item across 13 items; 13 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management70
- Stability observed for 21 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 100% of tool parameters carry a description.Pass
- Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- We read all 13 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
- An AI judge read all 14 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Unverified: 1 category
A category scored 0 because we could not verify it: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 4 Nov 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 63 to 67. That category is still filling its 30-day observation window: 19 days of observed history at the previous scan, 20 at this one. The score rises as the window fills, whether or not the server changes.
- 2 Nov 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 57 to 60. That category is still filling its 30-day observation window: 17 days of observed history at the previous scan, 18 at this one. The score rises as the window fills, whether or not the server changes.
- 31 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 50 to 53. That category is still filling its 30-day observation window: 15 days of observed history at the previous scan, 16 at this one. The score rises as the window fills, whether or not the server changes.
- 29 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 43 to 47. That category is still filling its 30-day observation window: 13 days of observed history at the previous scan, 14 at this one. The score rises as the window fills, whether or not the server changes.
- 27 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 37 to 40. That category is still filling its 30-day observation window: 11 days of observed history at the previous scan, 12 at this one. The score rises as the window fills, whether or not the server changes.
- 25 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 30 to 33. That category is still filling its 30-day observation window: 9 days of observed history at the previous scan, 10 at this one. The score rises as the window fills, whether or not the server changes.
- 23 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 23 to 27. That category is still filling its 30-day observation window: 7 days of observed history at the previous scan, 8 at this one. The score rises as the window fills, whether or not the server changes.
- 20 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 13 to 17. That category is still filling its 30-day observation window: 4 days of observed history at the previous scan, 5 at this one. The score rises as the window fills, whether or not the server changes.
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 5 Nov 2026 · Analysed oci/ghcr.io/stufently/aviasales-mcp@0.5.3
Provenance No attestation
The registry publishes no build provenance for this version, so there is nothing to verify.
| Result | No attestation |
|---|---|
| Ecosystem | oci |
| Reason | No attestation published |
Background: How many MCP packages publish verified provenance →
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
find_nearest_airports ~263
Find the airports closest to a place name or to a latitude and longitude. Use when the user asks which airport to fly into for a town, a resort, or a point on the map. `lookup_airports` only matches a name, and the nearest airport is rarely named after the town, so call this tool for that question. Feed the returned city code, not the airport code, to `search_flights` for fares. Pass either `near` (resolved against the city and airport datasets) or an explicit `latitude`/`longitude` pair.
| Name | Type | Req | Description |
|---|---|---|---|
| flightable_only | boolean | – | Skip airports with no scheduled service (default True). |
| latitude | – | – | Latitude in degrees, -90 to 90. Overrides `near`. |
| limit | integer | – | Max airports to return (1-50, default 5). |
| locale | – | – | 2-letter locale for names. Defaults to the server's locale. |
| longitude | – | – | Longitude in degrees, -180 to 180. Overrides `near`. |
| max_distance_km | – | – | Ignore airports further away than this. Optional. |
| near | – | – | Place name or IATA code to search around (e.g. "Pattaya", "UTP"). |
Structured output declared, but exposes no named fields.
No examples provided.
get_alternative_directions ~188
Get prices for nearby airports and cities around a chosen route. Use when the traveller can fly from or into a different airport and wants those fares. To learn which airports are near a place, use `find_nearest_airports` first; for the named city pair only, use `search_flights`.
| Name | Type | Req | Description |
|---|---|---|---|
| currency | – | – | Price currency (3 letters). Defaults to the server's currency. |
| departure_at | – | – | Departure date (YYYY-MM-DD or YYYY-MM). Optional. |
| destination | string | yes | Destination IATA code. |
| limit | integer | – | Max results (1-20, default 10). |
| market | – | – | 2-letter market whose price cache to read. Defaults to the server's configured market. |
| origin | string | yes | Origin IATA code. |
| return_at | – | – | Return date (YYYY-MM-DD or YYYY-MM). Optional. |
Structured output declared, but exposes no named fields.
No examples provided.
get_city_directions ~132
List the cheapest destinations reachable from a city, with a fare and dates. Use when the user asks where they can fly from a city, or wants somewhere cheap without naming a destination. For who flies into a city use `get_popular_directions`; to price one chosen route afterwards use `search_flights` or `get_prices_calendar`.
| Name | Type | Req | Description |
|---|---|---|---|
| currency | – | – | Price currency (3 letters). Defaults to the server's currency. |
| origin | string | yes | Origin city IATA code (e.g. "MOW"). Use `lookup_cities` to resolve a city name first. |
Structured output declared, but exposes no named fields.
No examples provided.
get_flexible_date_prices ~276
Compare prices for the days around a departure and an optional return. Use when the user already has dates and asks whether shifting a day either way would be cheaper. For one exact date use `search_flights`; for the cheapest day across a whole month use `get_prices_calendar`. This covers roughly a week around both the outbound and the return.
| Name | Type | Req | Description |
|---|---|---|---|
| adults | integer | – | Number of adult passengers, 1-9 (default 1). |
| children | integer | – | Number of children 2-11 years, 0-8 (default 0). |
| currency | – | – | Price currency (3 letters). Defaults to the server's currency. |
| depart_date | string | yes | Intended departure date (YYYY-MM-DD). Required. |
| destination | string | yes | Destination IATA code. |
| infants | integer | – | Number of infants under 2, 0-8 (default 0). |
| market | – | – | 2-letter market whose price cache to read. Defaults to the server's configured market. |
| origin | string | yes | Origin IATA code. |
| return_date | – | – | Intended return date (YYYY-MM-DD). Omit for one-way. |
| trip_class | string | – | "economy", "comfort", "business" or "first" (default "economy"). |
Structured output declared, but exposes no named fields.
No examples provided.
get_latest_prices ~329
Get the most recently found flight prices from other travellers' searches. Use when the user wants the latest fares that just appeared, on one route or across the whole cache. For a specific trip on chosen dates use `search_flights` instead. Prices are per adult (cached); passenger parameters are encoded into each booking_link. These rows come from the older v2 shape: they name the selling `agency` rather than an airline, carry no flight number, and their booking_link is reconstructed from the route and dates.
| Name | Type | Req | Description |
|---|---|---|---|
| adults | integer | – | Number of adult passengers, 1-9 (default 1). |
| children | integer | – | Number of children 2-11 years, 0-8 (default 0). Adults plus children cannot exceed 9; the excess is trimmed. |
| currency | – | – | Price currency (3 letters). Defaults to the server's currency. |
| destination | – | – | Destination IATA code. Optional. |
| infants | integer | – | Number of infants under 2, 0-8 (default 0). Cannot exceed the number of adults; the excess is trimmed. |
| limit | integer | – | Max results (1-100, default 20). |
| market | – | – | 2-letter market whose price cache to read. Defaults to the server's configured market. |
| one_way | boolean | – | One-way tickets only. |
| origin | – | – | Origin IATA code. Optional. |
| trip_class | string | – | "economy", "comfort", "business" or "first" (default "economy"). |
Structured output declared, but exposes no named fields.
No examples provided.
get_popular_directions ~148
List the cities people most often fly to a destination from, with a fare. Use when the user asks where travellers reach a city from and what that costs. The request is keyed on the destination. For where someone can fly from a city use `get_city_directions`; for prices on one known route use `search_flights`.
| Name | Type | Req | Description |
|---|---|---|---|
| currency | – | – | Price currency (3 letters). Defaults to the server's currency. |
| destination | string | yes | Destination IATA code (e.g. "BKK"). Required — the API rejects a request without it. |
| locale | – | – | 2-letter locale for city names. Defaults to the server's locale. |
Structured output declared, but exposes no named fields.
No examples provided.
get_prices_calendar ~348
Get grouped calendar prices for a route, one fare per day or per month. Use when the user asks which day or month is cheapest to fly a known route. For fares on one specific date use `search_flights`; for a few days either side of dates already chosen use `get_flexible_date_prices`. Codes are IATA; use `lookup_cities` to resolve a name first. Prices are per adult (cached); passenger parameters are encoded into each booking_link.
| Name | Type | Req | Description |
|---|---|---|---|
| adults | integer | – | Number of adult passengers, 1-9 (default 1). |
| children | integer | – | Number of children 2-11 years, 0-8 (default 0). Adults plus children cannot exceed 9; the excess is trimmed. |
| currency | – | – | Price currency (3 letters). Defaults to the server's currency. |
| departure_at | – | – | Departure month (YYYY-MM). Optional. |
| destination | string | yes | Destination IATA code. |
| group_by | string | – | Group results by "departure_at" or "month" (default "departure_at"). |
| infants | integer | – | Number of infants under 2, 0-8 (default 0). Cannot exceed the number of adults; the excess is trimmed. |
| market | – | – | 2-letter market whose price cache to read (e.g. "us", "ru"). Defaults to the server's configured market. |
| origin | string | yes | Origin IATA code. |
| return_at | – | – | Return month (YYYY-MM). Optional. |
| trip_class | string | – | "economy", "comfort", "business" or "first" (default "economy"). |
Structured output declared, but exposes no named fields.
No examples provided.
lookup_airlines ~163
Look up airlines by name or IATA code. Use when the user asks which airline a code belongs to, or wants the IATA code for an airline name. For an airport, city, or country code use `lookup_airports`, `lookup_cities`, or `lookup_countries`; for fares use `search_flights`.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | Max results to return (1-500, default 50). |
| locale | – | – | 2-letter locale for names (e.g. "en", "ru"). Defaults to the server's locale. |
| search | – | – | Airline name substring or exact IATA code (e.g. "aeroflot", "SU"). Omit to list airlines from the start of the dataset. |
Structured output declared, but exposes no named fields.
No examples provided.
lookup_airports ~214
Look up airports by name, IATA code, or city code. Use when the user names an airport or a code and needs its city, country, or coordinates. For the closest airport to a town that does not share the airport's name, use `find_nearest_airports` instead of this tool. The full dataset is ~10k airports, so always pass `search` — an unfiltered call just returns the first `limit` entries in dataset order. Results are ranked: exact code, then exact city code, then name matches, with airports you cannot actually fly to last.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | Max results to return (1-500, default 50). |
| locale | – | – | 2-letter locale for names (e.g. "en", "ru"). Defaults to the server's locale. |
| search | – | – | Airport name substring, exact IATA code, or city code (e.g. "heathrow", "LHR", "MOW"). |
Structured output declared, but exposes no named fields.
No examples provided.
lookup_cities ~210
Look up cities by name or IATA code and return the code flight tools expect. Use when the user names a city and a flight search needs its IATA code. For an airport code use `lookup_airports`; for the nearest airport to a place that is not itself a city, use `find_nearest_airports`. Every flight tool takes IATA codes, so this is usually the first call when the user names a place. The full dataset is ~9.6k cities, so always pass `search`. Names are only available in the requested locale: searching "Мюнхен" needs locale="ru".
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | Max results to return (1-500, default 50). |
| locale | – | – | 2-letter locale for names (e.g. "en", "ru"). Defaults to the server's locale. |
| search | – | – | City name substring or exact IATA code (e.g. "bangkok", "BKK"). |
Structured output declared, but exposes no named fields.
No examples provided.
lookup_countries ~136
Look up countries by name or two-letter country code. Use when the user asks which country a code belongs to, or wants that country's code or currency. For a city or airport code use `lookup_cities` or `lookup_airports`; this tool does not search flight prices.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | Max results to return (1-500, default 50). |
| locale | – | – | 2-letter locale for names (e.g. "en", "ru"). Defaults to the server's locale. |
| search | – | – | Country name substring or exact code (e.g. "thailand", "TH"). |
Structured output declared, but exposes no named fields.
No examples provided.
search_by_price_range ~237
Find flights whose cached fare falls inside a minimum and maximum price. Use when the user has a budget, including anywhere under a price with no destination named. Leave `destination` unset to let the budget pick the city; prices are per adult in economy. For a named route on a date or a month use `search_flights` or `get_prices_calendar`. There is deliberately no date argument: this endpoint ignores one (verified — passing a December date returns the same July and September fares), and each result carries its own `departure_at`.
| Name | Type | Req | Description |
|---|---|---|---|
| currency | – | – | Price currency (3 letters). Defaults to the server's currency. |
| destination | – | – | Destination IATA code. Optional — omit to search anywhere. |
| limit | integer | – | Max results (1-100, default 20). |
| market | – | – | 2-letter market whose price cache to read. Defaults to the server's configured market. |
| origin | string | yes | Origin IATA code. |
| value_max | integer | yes | Highest acceptable price, in `currency`. |
| value_min | integer | yes | Lowest acceptable price, in `currency`. |
Structured output declared, but exposes no named fields.
No examples provided.
search_flights ~689
Search flight prices between two cities on a date or across a month. Use when the user names both ends of a route and wants fares, a booking link, or only departures inside a time window. For the cheapest day in a month use `get_prices_calendar`; for the days around dates already chosen use `get_flexible_date_prices`; for a budget with no destination use `search_by_price_range`. Both codes must be IATA — call `lookup_cities` first if you only have a city name. For nearby airports use `get_alternative_directions`. A multi-city trip needs one call per leg. Note on passengers: the price data comes from a cache of recent searches and is always PER ADULT in economy. The adults/children/infants/trip_class parameters are encoded into each ticket's booking_link, so the link opens Aviasales with the full party pre-filled and shows the real total price. Durations: each ticket reports duration_total (full door-to-door travel time), duration_to/duration_back (pure flight time per direction) and layover_minutes (combined ground time between connecting flights; 0 for direct flights). All values are in minutes.
| Name | Type | Req | Description |
|---|---|---|---|
| adults | integer | – | Number of adult passengers, 1-9 (default 1). |
| children | integer | – | Number of children 2-11 years, 0-8 (default 0). Adults plus children cannot exceed 9; the excess is trimmed. |
| currency | – | – | Price currency code (3 letters, e.g. "rub", "usd"). Defaults to the server's configured currency. |
| depart_after | – | – | Keep only flights departing at or after this local time ("HH:MM", 24-hour). Optional. |
| depart_before | – | – | Keep only flights departing at or before this local time ("HH:MM", 24-hour). Optional. Combined with depart_after and set earlier than it, the window wraps midnight (e.g. 22:00-06:00). |
| departure_at | – | – | Departure date or month (YYYY-MM-DD or YYYY-MM). Optional; a month searches every day in it. |
| destination | string | yes | Destination city IATA code (e.g. "IST", "BCN"). |
| direct | boolean | – | If True, show only non-stop flights. |
| infants | integer | – | Number of infants under 2, 0-8 (default 0). Cannot exceed the number of adults; the excess is trimmed. |
| limit | integer | – | Max number of results (1-100, default 10). |
| market | – | – | 2-letter market whose price cache to read (e.g. "us", "ru", "th"). The same route in the same currency is priced differently per market, so set this to the traveller's country. Defaults to the server… |
| one_way | boolean | – | If True, search one-way tickets only. |
| origin | string | yes | Origin city IATA code (e.g. "MOW", "LED"). |
| return_at | – | – | Return date or month (YYYY-MM-DD or YYYY-MM). Optional. |
| trip_class | string | – | "economy", "comfort", "business" or "first" (default "economy"). |
Structured output declared, but exposes no named fields.
No examples provided.
How do I install the Aviasales Flight Prices MCP server?
Aviasales Flight Prices runs locally as a container image, launched with docker run --rm -i -e AVIASALES_API_TOKEN -e AVIASALES_MARKET -e AVIASALES_DEFAULT_CURRENCY -e AVIASALES_PARTNER_ID ghcr.io/stufently/aviasales-mcp:0.5.3. Ready-made configuration for Claude, Cursor, VS Code, Codex and 3 more is on this page, copied from each client's own documentation.
oci · ghcr.io/stufently/aviasales-mcp
claude mcp add stufently-aviasales-mcp -- docker run --rm -i -e AVIASALES_API_TOKEN -e AVIASALES_MARKET -e AVIASALES_DEFAULT_CURRENCY -e AVIASALES_PARTNER_ID ghcr.io/stufently/aviasales-mcp:0.5.3
This image reads AVIASALES_API_TOKEN, AVIASALES_MARKET, AVIASALES_DEFAULT_CURRENCY and AVIASALES_PARTNER_ID. Set them in your client's env block for this server; docker run -e passes each one through to the container.
What is the Aviasales Flight Prices MCP server?
Aviasales Flight Prices is an MCP server listed in the public MCP registry as io.github.stufently/aviasales-mcp. Flight price search via Aviasales/Travelpayouts: fares by route, cheapest days, flexible dates. This page covers its container image (ghcr.io/stufently/aviasales-mcp).
Is the Aviasales Flight Prices MCP server safe to use?
Aviasales Flight Prices scores 49 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the Aviasales Flight Prices MCP server expose?
Aviasales Flight Prices exposes 13 tools: search_flights, get_prices_calendar, get_flexible_date_prices, get_latest_prices, get_popular_directions, and 8 more. Their descriptions and schemas cost roughly 3,333 tokens of context every time the server is loaded.
Is the Aviasales Flight Prices MCP server still maintained?
Aviasales Flight Prices is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.
What licence is the Aviasales Flight Prices MCP server under?
Aviasales Flight Prices declares the GPL-3.0-or-later licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.