splitfare-mcp
Fetches easyJet flight prices via its fare-calendar API or browser automation, filling gaps in flight coverage.
Uses Google Flights as the primary flight data source, aggregating fares from multiple carriers for route pricing.
Queries Ryanair's public fare API to supplement flight data with Ryanair-specific fares and availability.
Sends price-drop alerts and watch notifications to a Telegram chat via a bot.
Pulls event listings from Ticketmaster to show concerts and festivals happening at the destination during candidate travel windows.
Retrieves flight prices from Wizz Air's search API for inclusion in multi-source fare comparison.
Click on "Install 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., "@splitfare-mcpFind the cheapest weekend to Berlin in October for 2 people."
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.
splitfare 🎟️
A flight-hacker's scanner for short trips: split tickets, trip-shape search, and it knows what's on when you land.
Booking sites answer "how much are flights on these dates?" splitfare answers the question you actually have:
"Find me any weekend next month — out Friday or Saturday, landing before 2pm, home Sunday night — and tell me who's playing while I'm there."
It prices the direct fares and every viable split-ticket combination (separate cheap tickets glued together through hub airports — routings no booking site will show you), sweeps whole months by trip shape, and pairs every candidate window with the destination's event calendar.
Demo above: London → Berlin weekends in September for 2 people — every Fri→Sun window priced, with Berlin's club calendar (Resident Advisor) per night.
What it does
Split-ticket routing — direct fares plus self-transfer combos through your chosen hub airports (same airport, enforced minimum connection, home the same day), ranked by total price for your whole party.
Trip-shape search — sweep a month for the cheapest N-night window with human constraints: out on these weekdays, land by this time, home by that time.
Overnight positioning — when landing early is impossible same-day, it prices flying to the hub the evening before and catching the morning flight.
Multi-source fares — Google Flights plus the airlines' own public fare APIs (Ryanair, easyJet, Wizz), fetched in parallel and merged, deduped by flight, cheapest fare wins. Each source has its own health check.
Price intelligence — every route-date keeps a price history; results show a buy/wait verdict vs its own typical range (good/fair/typical/pricey) and a rising/falling/stable trend.
Watch mode — set a trip shape + target price ("any 24hr window in September under £180 for 2") and get a Telegram ping the moment one appears. Cron-friendly.
Events fusion — every candidate night shows who's playing, via pluggable providers (Resident Advisor worldwide, Ticketmaster, Skiddle, Ibiza Spotlight — or write your own in ~30 lines).
--events-filter bigturns the calendar into a search constraint: only windows with a tier-1 night.A phone dashboard —
publishrenders a static site: browse every window by day, tap into flights, alternatives and lineups. Host it anywhere.AI-agent native — an MCP server exposes the whole thing to any MCP-capable assistant (Claude, etc.), plus an
askcommand for plain English from the terminal.
Related MCP server: Amadeus Agent
Quickstart
git clone https://github.com/teatimedev/splitfare && cd splitfare
python3 -m venv .venv && .venv/bin/pip install -e ".[mcp]"
.venv/bin/splitfare init # your airports, hubs, party size, events providerThen:
# price one out/back pair — direct + split combos + what's on
.venv/bin/splitfare window 2026-09-04 2026-09-06 --events
# sweep a month: cheapest 2-night windows, Friday departures, land by 2pm
.venv/bin/splitfare scan --month 2026-09 --nights 2 --out-dow fri --arrive-by 14:00
# render the phone dashboard (static site in ./site — host anywhere)
.venv/bin/splitfare publish --month 2026-09 --nights 2
# plain English (drives the tool via the `claude` CLI if you have Claude Code)
.venv/bin/splitfare ask "cheapest weekend next month for 2, landing before 2pm?"The first scan of a month is slow (~1.5 s per route-date, politely rate-limited). Results cache for 6 h; after that everything is instant.
Picking your hubs
Hubs are what make split ticketing work: airports with cheap budget-airline
service from both your home and your destination. Think Ryanair / easyJet /
Wizz bases — Stansted, Luton, Barcelona, Bergamo, Vienna, Warsaw… 5–10 is the
sweet spot; every hub adds ~4 lookups per date, so more hubs = more combos
found but slower scans. The init wizard walks you through it.
Using it with your AI agent (MCP)
splitfare ships an MCP server, so any MCP-capable assistant can hunt flights for you:
claude mcp add splitfare -- /path/to/splitfare/.venv/bin/splitfare-mcpThree read-only tools: splitfare_find_flights (one date pair, full detail),
splitfare_scan_month (cheapest windows across a month), splitfare_whats_on
(event calendar). Your agent gets structured JSON — routings, per-leg booking
links, connection gaps, lineups — and can reason about trade-offs
("£15 more but you'd land 6 hours earlier and Four Tet is playing").
Three things to know:
Run
splitfare initfirst — the server reads theconfig.jsonnext to the code (or at$SPLITFARE_HOME). Without it, tools return a setup hint.Uncached calls take seconds-to-minutes;
scan_monthwithdeep=0on a cold cache can exceed some clients' tool timeouts — start with specific dates ordeep=4.Prices are totals for the configured party, in your configured currency.
Configuration
splitfare init writes config.json:
key | meaning |
| IATA code lists (several codes = searched together, e.g. all London airports) |
| self-transfer candidates between them |
| party size — all prices are totals for the party |
| ISO code; used for fetching, display, and booking links |
| self-transfer buffer (default 120; separate tickets — bigger is safer) |
|
|
| see table below |
SPLITFARE_HOME relocates config/cache/site for pip installs.
Events providers
provider | coverage | key needed | notes |
| clubbing, worldwide | no |
|
| concerts/festivals, worldwide | free, instant (signup) |
|
| UK clubbing & gigs | free (apply) |
|
| Ibiza only | no | includes door prices |
| — | — | flights only |
Adding one is a single function in providers.py.
Flight sources
Primary data comes from Google Flights via
fast-flights — the only free source
that aggregates all the budget carriers. On top of that, splitfare merges in
the airlines' own public (no-key) fare APIs, configured in
"flight_sources":
source | what it adds |
| every carrier on the route (always primary) |
| Ryanair's public fare-finder; fills gaps + cheaper fare tiers |
| easyJet's homepage fare-calendar endpoint (Akamai-gated; needs |
| drives a real browser (camofox bridge) through easyJet's booking flow and scrapes results — works from residential IPs |
| Wizz Air's search API |
All enabled sources are fetched in parallel (per-source concurrency budget — polite but ~4-5x faster than the old sequential sweep) and merged, deduped by flight, keeping the cheapest fare. Fetches are cached; the cache refetches automatically when you add a source that wasn't there before.
IP-dependent sources: Ryanair works from anywhere, but easyJet/Wizz sometimes block datacenter IPs (VPSes). If a source shows as empty in the per-source health warning, run from a residential IP or drop it from
flight_sources— google alone still covers those carriers via the aggregator. easyJet's current API (no public endpoint; Akamai-protected) is reverse-engineered in docs/easyjet-api.md, withEASYJET_COOKIESsession-cookie injection for residential use.
For the curious: Amadeus retired its self-service API in 2026, Kiwi's Tequila closed to new signups, and Duffel doesn't carry Ryanair/Wizz — scraping the aggregator remains the pragmatic play, which is also why this is a run-it-yourself tool and not a website.
Price history, buy/wait scoring, and watches
Every fetch appends the cheapest price to .cache/price_history.jsonl
(backfilled from older caches on first run). With ≥3 observations for a
route-date you get a buy/wait signal on every result:
verdict vs the route-date's own history:
good(≤ p25) /fair(≤ p50) /typical/pricey(> p75)a rising/falling/stable trend from recent observations
The dashboard shows "vs typical" badges and a sparkline of the last 24 price observations on each flight ticket.
Watch mode turns "run a scan" into "ping me when it happens":
splitfare watch add --month 2026-09 --nights 1 --max-total 180 --name "Sep 24hr"
splitfare watch list
splitfare watch check # cron-friendly; alerts on new/cheaper hits only
splitfare watch remove IDwatch check scans each watch's trip shape and alerts when a window totals
at or below the target — only on first appearance or a ≥5% price drop, so
cron doesn't spam you. Alerts go to Telegram when configured:
"alerts": { "telegram": { "bot_token_env": "TELEGRAM_BOT_TOKEN",
"chat_id": "123456789" } }(create a bot with @BotFather; your chat id comes from @userinfobot). Without
a token, watch check prints to stdout and exits 0 — safe for cron either
way. Example cron: 0 8 * * * cd ~/projects/splitfare && .venv/bin/splitfare watch check.
Events as a constraint
scan/publish/watch take --events-filter any|big: only keep windows
whose night has any event, or at least one tier-1 venue (Ushuaïa, Hï, Pacha,
Amnesia, DC10, Eden…). "Cheapest 24hrs in Ibiza with a big night on" is one
command now.
How it works, honestly
Any source can break. Treat prices as estimates and book each leg directly with the airline — every result links to a matching search. The tool tracks per-source health (live vs empty fetches) and warns you per source instead of silently showing "no flights".
Split tickets carry real risk. Separate bookings mean no missed-connection protection. The tool enforces a minimum gap and shows the gap on every result, but the risk is yours. Prefer long gaps.
Be polite: requests are rate-limited (per source) and cached. Don't hammer it.
Development
.venv/bin/pip install -e ".[dev]"
.venv/bin/pytest tests/ -qPRs welcome — events providers for your scene, flight sources, and routing improvements especially.
License
MIT.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- Alicense-quality-maintenanceThis MCP server allows an AI assistants to search for flight information online using Google Flights. It can find flights for specific dates or search through a range of dates to find all options or just the cheapest ones available.Last updated27
- Flicense-qualityDmaintenanceA proof-of-concept MCP server that allows LLM agents to query live flight booking information via Amadeus, including cheapest tickets, destinations, and airline routes.Last updated1
- FlicenseAqualityCmaintenanceAn AI-powered travel planner MCP server enabling flight and hotel search, weather forecasts, point-of-interest discovery, itinerary generation, and budget management.Last updated8
- AlicenseAqualityCmaintenanceAn MCP server that finds cheap flights with flexible dates and smart suggestions using the Google Flights API.Last updated3MIT
Related MCP Connectors
Geo-based flight search MCP server. Find more flights between any two places on earth
AI marketplace — flights, tours, activities, transport & more via MCP. No auth required.
MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/teatimedev/splitfare'
If you have feedback or need assistance with the MCP directory API, please join our Discord server