azair-eu-mcp
You can search cheap European flights on azair.eu and resolve airport/metro codes for use in searches.
Use
search_flightsto find return or one-way cheap flights with flexible date ranges, min/max stay, multiple source/destination airports, metro/region codes, anywhere (XXX), and advanced filters (weekdays, time windows, layover limits, overnight waits, Schengen-only, ground transfers, same-airport constraints).Search for up to 9 adults, 8 children, and 8 infants with currency selection (EUR, USD, GBP, PLN, CZK, etc.).
Get up to 180 structured results with prices, dates, per-segment flight details, and booking URLs.
Use
search_airportsto resolve IATA codes, airport names, and metro/region codes (up to 50 matches) before searching.
Searches and surfaces Ryanair low-cost flights (airline IATA FR) alongside other European carriers, returning flight numbers, departure/arrival airports and times, leg prices, and booking links for itineraries found on azair.eu.
Click on "Deploy 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., "@azair-eu-mcp Find cheapest weekend trips from Berlin to anywhere in Spain next month"
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.
✈️ azair-eu-mcp
MCP server for azair.eu — cheap flight search across European low-cost airlines with flexible dates. Give your AI assistant the power to hunt for bargain flights the way humans do on azair: loose date ranges, multiple airports, metro areas, and every advanced filter from the azair search form.
Features
🔎 Flexible-date search — the core azair superpower: pick a date range, get the cheapest day combinations within it
🛫 Multi-airport search — search from several airports at once (e.g.
PRG+BRQ+NUE)🏙️ Metro-area search — cover all airports of a city via metro codes (e.g.
MIL_ALL→ MXP, BGY, LIN)🌍 Anywhere mode — destination
XXXsearches the whole continent⚙️ All advanced filters — weekdays, time windows, stopover length, transfers, Schengen-only, clubs, and more
💱 Multi-currency — EUR, USD, GBP, PLN, CZK, and all azair currencies
✍️ Structured results — clean JSON with prices, dates, per-segment flight details, and booking links
Related MCP server: cheapflights-mcp
Quick start
Ask your assistant (Claude, Cursor, Windsurf, …):
Find cheap return flights from Prague to anywhere in Italy between August and January, min 5 nights, max 8 nights, any Milan or Rome airport.
or directly:
search_flights(src_airport="PRG", src_airports=["BRQ", "NUE"],
dst_airport="MXP", dst_airports=["LIN", "BGY"], dst_metro_code="MIL_ALL",
dep_date="2026-08-01", arr_date="2027-01-31",
min_days_stay=5, max_days_stay=8)Example response:
{
"total_price": 33.33,
"currency": "EUR",
"length_of_stay_days": 6,
"outbound_date": "Thu 20/08/26",
"return_date": "Wed 26/08/26",
"outbound_segments": [
{
"airline": "Ryanair",
"airline_iata": "FR",
"flight_number": "FR3601",
"departure_airport": "Prague",
"departure_airport_code": "PRG",
"departure_time": "09:00",
"arrival_airport": "Bologna",
"arrival_airport_code": "BLQ",
"arrival_time": "10:30",
"duration": "12:10 h / 1 change",
"price": 33.33,
"currency": "EUR"
}
],
"return_segments": [],
"booking_url": "book/b.php?b=RlJQUkdCTFEyNjA4MjUzNjAxMTAwMjAyNi0wOC0wMSswMjoxM2Vud3d3LmF6YWlyLmV1"
}Returns up to 180 results, each with total price, dates, outbound/return segments (airline, flight number, times, duration, leg price), and a direct booking URL.
Tools
search_flights
Full-featured flight search mirroring the azair search form, including advanced parameters.
Parameter | Type | Default | Description |
| string | — | Source airport IATA code (e.g. |
| string | — | Destination IATA code, |
| string[] | — | Additional source airports, e.g. |
| string[] | — | Additional destination airports, e.g. |
| string | — | Source metro/region code covering several airports, e.g. |
| string | — | Destination metro/region code covering several airports, e.g. |
| string | — | Earliest departure, |
| string | — | Latest return, |
| int |
| Minimum trip length in days |
| int |
| Maximum trip length in days |
| int |
| Adults (1-9) |
| int |
| Children (0-8) |
| int |
| Infants (0-8) |
| string |
|
|
| int |
| Max stopovers per leg (0-3, |
| bool |
| One-way instead of return |
| bool |
| Only transfers inside the Schengen area |
| bool |
| Allow ground transfer between airports; automatically enabled for open-jaw searches ( |
| int[] | all | Departure weekdays, |
| int[] | all | Return weekdays |
| string |
| Earliest outbound time |
| string |
| Latest outbound time |
| string |
| Earliest inbound time |
| string |
| Latest inbound time |
| string |
| Minimum stopover time |
| string |
| Maximum stopover time |
| int |
| Allow overnight stopovers |
| bool |
| Return to the same departure airport |
| bool |
| Return from the same arrival airport |
search_airports
Resolve IATA codes, airport names, and metro/region codes before searching — useful for finding the right code for a city.
Parameter | Type | Description |
| string | IATA code, metro/region code, or partial name (e.g. |
Returns up to 50 matching airports and metro/region codes with code and name.
Installation
git clone <repo-url> azair-eu-mcp
cd azair-eu-mcp
uv syncUsage
Claude Desktop
Add to your claude_desktop_config.json:
{
"mcpServers": {
"azair-eu-mcp": {
"command": "uv",
"args": ["run", "--directory", "/absolute/path/to/azair-eu-mcp", "python", "main.py"]
}
}
}Cursor / Windsurf
Add the same command in the MCP servers settings.
Any MCP client
Run the server directly — it speaks MCP over stdio:
uv run python main.pyDevelopment
uv sync
uv run python main.py
# Offline regression tests
PYTHONPATH=. uv run python -m unittest discover -s tests -t . -vSanity-check a search without spinning up the server:
uv run python -c "
import asyncio
from azair.models import SearchParams
from azair.client import fetch_search_results
from azair.parser import parse_results
async def main():
html = await fetch_search_results(SearchParams(
src_airport='PRG', dst_airport='STN',
dep_date='2026-08-01', arr_date='2026-08-31',
))
print(len(parse_results(html)), 'results')
asyncio.run(main())
"How it works
Azair exposes no public JSON API — results are scraped from the HTML search results page (
azfin.php)The airport database is fetched once from azair's static JS asset and cached in memory
Multi-airport and metro codes are sent as the azair web app does (bracket notation +
srcapN/dstapNparams)Open-jaw searches automatically set azair's
transferflag, which is required to search different arrival/return airportsIf azair returns nothing for a wide stay range (e.g. 1-3 days) even though shorter trips exist, the server retries a bounded number of narrower ranges and merges the results
Transient empty responses from azair are retried once before falling back to narrower stay ranges, with an overall retry budget
Metro and region codes set azair's
srcMC/dstMCfield, which is required for some country/region searches
Notes
Search times vary (10-60s) depending on the query scope
Azair's
XXX(anywhere) mode does not support open-jaw trips; it returns same-airport round-trips
Available Tools
2 toolssearch_airportsA
Search for airports by IATA code or name. Uses the azair airport database.
Inputs: query (required).
search_flightsA
Search for cheap flights on azair.eu across European low-cost airlines. Supports flexible date ranges, multiple airports per side, metro-area codes (e.g. MIL_ALL), anywhere (XXX), one-way or return, and all advanced filters (weekdays, time windows, stopover limits, overnight waits, transfers, Schengen-only).
Inputs: arr_date (required), dep_date (required), dst_airport (required), src_airport (required), +25 more.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 2 tools
The two tools have clearly distinct purposes: one searches for airport metadata (IATA/name), the other searches for flights. There is no overlap or ambiguity in their intended use.
Both tools follow the consistent 'search_' verb + noun pattern (search_airports, search_flights), making the tool names predictable and easy to understand.
With only two tools, the count is slightly below the typical range, but it is reasonable for a focused flight-search server. Each tool serves a necessary function and there is no bloat.
The tool set fully covers the stated domain of flight searching: airport lookup supports flight search, and flight search includes advanced filters for comprehensive results. There are no obvious missing operations for this purpose.
Maintenance
Related MCP Connectors
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
Flight search MCP server providing search, pagination, and itinerary details for AI assistants.
Search and compare flight offers through a cache-aware Streamable HTTP MCP server for AI agents.
Related MCP Servers
- AlicenseAqualityDmaintenanceMCP 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
- AlicenseAqualityDmaintenanceAn MCP server that provides flight search capabilities using the Aviasales API, allowing users to search, filter, and get details on flights and generate booking links.4GPL 3.0
- FlicenseAqualityDmaintenanceMCP server that watches flight and train fares across multiple provider APIs, with tools to manage watched routes and a background scheduler that re-checks hourly for new offers.8-