Built on FastMCP, this server queries RyanAir, WizzAir, and Google Flights in parallel using asyncio.gather to find cheap flights in real time. It exposes five tools: search_flights for querying routes with dates and passenger counts, get_destinations for listing available routes from an airport, and three tools for managing which airlines are active in your search. Results include direct booking links to airline sites. The implementation uses exponential backoff retries for rate-limited APIs and includes currency conversion for Google Flights results. You get a Flask web UI and a Claude-powered conversational agent on top of the MCP server, but the core flight search works standalone without any API keys.
MCP server for searching cheap flights in real-time via RyanAir, WizzAir, and Google Flights.
Built with FastMCP (Anthropic's Model Context Protocol), featuring parallel airline queries via asyncio.gather, exponential backoff retry, and verified booking deep links.
| Airline | Data Source | Destinations | Reliability |
|---|---|---|---|
| RyanAir | ryanair-py library | Routes API (all, incl. seasonal) | Excellent |
| WizzAir | Unofficial JSON API | Route map | Good (429 retry) |
| Google Flights | fast-flights library | N/A | Good (verification source) |
git clone https://github.com/IngRobertFodor/CHEAP_FLIGHTS_MCP.git
cd CHEAP_FLIGHTS_MCP
pip install -r requirements.txt
Or via Smithery:
npx @smithery/cli install @ingrobertfodor/CHEAP_FLIGHTS_MCP
python web/app.py
Open browser: http://localhost:5000
python agent/flight_agent.py
python mcp_server/server.py
Create a .env file:
AI_PROXY_BASE_URL=http://localhost:6655
AI_PROXY_API_KEY=your-api-key-here
Note: The
.envfile is gitignored and never committed. Each user provides their own API key.
Edit mcp_server/config.json to configure active airlines:
{
"active_airlines": ["ryanair", "wizzair"],
"available_airlines": ["ryanair", "wizzair", "google_flights"]
}
| Tool | Description |
|---|---|
search_flights | Search flights between airports (origin, destination, date, return_date, adults) |
list_active_airlines | Show currently active airlines |
add_airline | Add an airline to active list |
remove_airline | Remove an airline from active list |
get_destinations | Get all available routes from an airport |
You: Find the cheapest flight from Bratislava to London on July 15, 2026
Agent: [calls search_flights] Found RyanAir BTS->STN for 19.99 EUR...
Browser → Flask (app.py) → MCP Server (server.py) → RyanAir/WizzAir API
→ Google Flights
→ Claude AI (optional, via SAP Hyperspace)
The web form searches without AI - directly calling MCP tools. The AI chat requires Claude (via SAP AI Proxy).
# Quick test (no AI needed):
python test_search.py
# Full agent test (8 use cases, requires AI Proxy):
python test_agent_prompts.py
mcp_server/airlines/new_airline.py (inherit from BaseAirline)search_flights() and get_destinations()mcp_server/airlines/__init__.pyconfig.json → available_airlinesserver.py → get_airline_adapters().env (gitignored, never committed)debug=FalseMIT License - see LICENSE
Robert Fodor - 2026
io.github.ericm1018/skillfm-llm-cost-optimizer-openai-anthropic-usage
io.github.mikerawsonnz/llm-orchestration-agent
io.github.mikerawsonnz/authenticated-llm-agent
labforgedev/copilot-memory-mcp
csoai-org/agent-prompt-injection-firewall-mcp
io.github.mikerawsonnz/authenticated-multi-llm-agent