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
Audiense Insights MCP Server

Audiense Insights MCP Server

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

官方
精选
本地
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

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

官方
精选
本地
TypeScript
VeyraX

VeyraX

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

官方
精选
本地
Kagi MCP Server

Kagi MCP Server

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

官方
精选
Python
graphlit-mcp-server

graphlit-mcp-server

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

官方
精选
TypeScript
Exa MCP Server

Exa MCP Server

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

官方
精选
mcp-server-qdrant

mcp-server-qdrant

这个仓库展示了如何为向量搜索引擎 Qdrant 创建一个 MCP (Managed Control Plane) 服务器的示例。

官方
精选
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选