azair-eu-mcp

azair-eu-mcp

MCP server for azair.eu that enables flexible-date cheap flight searches across European low-cost airlines, with multi-airport, metro-area, and advanced filter support.

Category
访问服务器

README

✈️ azair-eu-mcp

Python MCP uv azair.eu

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 XXX searches 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

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
src_airport string Source airport IATA code (e.g. WMI, STN)
dst_airport string Destination IATA code or XXX for anywhere
src_airports string[] Additional source airports, e.g. BRQ, NUE together with PRG
dst_airports string[] Additional destination airports, e.g. LIN, BGY together with MXP
src_metro_code string Source metro code covering all its airports, e.g. MIL_ALL
dst_metro_code string Destination metro code covering all its airports, e.g. MIL_ALL
dep_date string Earliest departure, DD.MM.YYYY or YYYY-MM-DD
arr_date string Latest return, DD.MM.YYYY or YYYY-MM-DD
min_days_stay int 2 Minimum trip length in days
max_days_stay int 7 Maximum trip length in days
adults int 1 Adults (1-9)
children int 0 Children (0-8)
infants int 0 Infants (0-8)
currency string EUR EUR, USD, GBP, PLN, CZK, …
max_changes int 1 Max stopovers per leg (0-3, 0 = direct flights only)
is_oneway bool false One-way instead of return
schengen_only bool false Only transfers inside the Schengen area
allow_transfer bool false Allow ground transfer between airports
departure_weekdays int[] all Departure weekdays, 0=Mon..6=Sun
return_weekdays int[] all Return weekdays
min_hour_outbound string 0:00 Earliest outbound time
max_hour_outbound string 24:00 Latest outbound time
min_hour_inbound string 0:00 Earliest inbound time
max_hour_inbound string 24:00 Latest inbound time
min_hour_stay string 0:45 Minimum stopover time
max_hour_stay string 23:20 Maximum stopover time
next_day int 0 Allow overnight stopovers
same_dep bool true Return to the same departure airport
same_arr bool true Return from the same arrival airport

search_airports

Resolve IATA codes and airport names before searching — useful for finding the right code for a city.

Parameter Type Description
query string IATA code or partial name (e.g. WMI, London, Barcelona)

Returns up to 50 matching airports with code and name.

Installation

git clone <repo-url> azair-eu-mcp
cd azair-eu-mcp
uv sync

Usage

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.py

Development

uv sync
uv run python main.py

Sanity-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 exactly as the azair web app does (bracket notation + srcapN/dstapN params)

Notes

  • Azair uses an expired SSL certificate — the server bypasses SSL verification
  • Search times vary (10-60s) depending on the query scope

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选