Aviasales MCP

Open source · GPL-3.0 · Python 3.12+

MCP server for flight price search via the Aviasales / Travelpayouts Data API

Thirteen read-only MCP tools for Claude Code, Claude Desktop and Cursor: fares by route and month, cheapest day, flexible dates, airport lookup.

Get started Read the docsView on GitHub

What it does

Example prompts

Ask in plain language. The server picks the tool.

Install

Paste this into a terminal. It is the same docker command every client block below runs; the process speaks MCP on stdin and waits there.

AVIASALES_API_TOKEN=your-token-here AVIASALES_MARKET=ru \
  docker run -i --rm \
  -e AVIASALES_API_TOKEN \
  -e AVIASALES_MARKET \
  ghcr.io/stufently/aviasales-mcp:latest

You need Docker, and a free Travelpayouts API token from https://www.travelpayouts.com/programs/100/tools/api. A wrong token still lets the process start (so does no token at all in the Docker image); it surfaces as an error on the first search. AVIASALES_MARKET is optional — see Configuration. Drop that variable and its -e pair if you do not need it.

:latest follows releases; pin a version tag (:0.5.3) if you would rather upgrade by hand.

Without Docker, the same server is on PyPI as aviasales-mcp (Python 3.12+). uvx fetches and runs it in one step:

AVIASALES_API_TOKEN=your-token-here AVIASALES_MARKET=ru uvx aviasales-mcp

pip install aviasales-mcp puts the same aviasales-mcp command on your PATH. In a client config, use "command": "uvx", "args": ["aviasales-mcp"] with the token in env instead of the docker command in the blocks below.

FAQ

How do I install Aviasales MCP?

Run the Docker image ghcr.io/stufently/aviasales-mcp:latest with AVIASALES_API_TOKEN in the environment, or without Docker run uvx aviasales-mcp (Python 3.12+). The README has ready configs for Claude Code, Claude Desktop, Cursor, Windsurf, Zed and Codex.

Which token do I need?

A free Travelpayouts API token from travelpayouts.com/programs/100/tools/api. A wrong or missing token still lets the process start; it surfaces as an error on the first search.

Are the prices live?

No. The Data API serves a cache of recent searches, not live availability. A fare can be gone by the time the link opens, and an empty result means nobody searched that route recently, not that the route does not exist.

Do prices include all passengers and the cabin class?

No. Prices are always per adult in economy. Passenger count and cabin class are encoded into each ticket's booking_link, which opens Aviasales with the full party pre-filled and shows the real total.

Can it book or buy tickets?

No. The server searches and links out; it never holds or buys a ticket. All thirteen tools are read-only.

Why does AVIASALES_MARKET matter?

The price cache is per market: the same route in the same currency comes back at a different price for ru and us. Unset, the server reads the ru market.

Documentation pages