Open source · Python · MCP
Flight tracking your
agent can act on
SkyBuddy watches routes around the clock, measures every fare against a full year of its own history, and hands your agent an auditable booking intent for the exact flight link — with a separate travel workspace for every traveller.
Tracked flights
0 watchedInteractive preview — sample fares, stored in your browser. The Python side keeps the real per-user history.
Everything it does
One toolkit for the whole trip
Search, watch, score, advise, book. Each capability is an independent Python module you can call directly, from the CLI, or through the MCP server.
Real-time flight search
Live fares through the Duffel API plus deep links for Google Flights, Avianca, Iberia, KLM,
Air France, Kayak and Skyscanner. flight_scraper.py
Multi-user workspaces
Every traveller gets isolated preferences, watched routes, passengers, cards, bookings and
price history. users.py
Price monitoring
Watch unlimited routes, keep a full price history, and compute medians and trends per route.
flight_monitor.py
Smart alerts
Fires on target price, below-median deals and sharp drops. Console or email, with de-duplicated
alert history. alerts.py
Recommendation engine
Every fare scored 0–100 — 40% price, 30% duration, 20% stops, 10% your preferences — with
written reasons. recommendations.py
365-day price baseline
Scans a year of recorded fares for the route, then turns a live price into a verdict:
buy now, good, fair, wait or high. price_baseline.py
Seat selection, end to end
FlightAware and SeatMaps for the verified workflow, cross-checked on SeatGuru, aeroLOPA,
ExpertFlyer and Flightradar24. seat_advisor.py
Flexible-date sweeps
Every outbound/return pair and both baggage modes on Google Flights, keeping all carrier
combinations. google_flights_monitor.py
Loyalty & passengers
Cards, balances, tiers and points estimation, plus traveller profiles ready for checkout.
loyalty_cards.py · passenger_profiles.py
The part everyone asks for
Let the agent buy the ticket
SkyBuddy does not scrape a checkout behind your back. It builds a booking intent: a structured, auditable object carrying the exact flight link, the passengers, the price you agreed to, and the checks that must pass before money moves.
- 0auto_book_if_dealOptional: the 365-day baseline decides the fare is buy-worthy and creates the intent for you.
- 1prepare_bookingPins the chosen offer, its booking URL and price into a saved intent, inside that traveller's workspace.
- 2Human confirmationNothing executes until you approve the intent by its id.
- 3confirm_bookingRe-validates the price ceiling, then releases the agent playbook.
- 4Agent executesOpens the link, fills passenger data, checks the seat map on long-haul, and stops at payment for the final human OK.
from agent_integration import create_agent sky = create_agent(user="harold") # own workspace intent = sky.prepare_booking( booking_url="https://www.iberia.com/…", airline="Iberia", origin="BIO", destination="BOG", outbound_date="2026-12-04", return_date="2027-01-08", price=684.0, currency="EUR", passengers=["harold"], max_price=700.0, # hard ceiling ) # → {"intent_id": "bk_7f3a1c", # "status": "awaiting_confirmation"} sky.confirm_booking("bk_7f3a1c", approved_by="harold") # → "ready_to_execute" + a step-by-step # agent_playbook for the booking link
Quick start
Running in under a minute
Pure Python, one required dependency. Pick your entry point.
git clone https://github.com/HaroldMate1/SkyBuddy.git cd SkyBuddy pip install -r requirements.txt # search a route (config or arguments) python scripts/flight_scraper.py BIO BOG 2026-12-04 2027-01-08 EUR # monitor every watched route and raise alerts python scripts/flight_monitor.py # what does a good price look like? (365 days by default) python scripts/price_baseline.py scan --origin BIO --destination BOG python scripts/price_baseline.py evaluate --origin BIO --destination BOG --price 684
# create a workspace per traveller python scripts/users.py create --user harold --display-name "Harold Mateo" \ --email harold@example.com --currency EUR --home-airport BIO python scripts/users.py create --user ana --display-name "Ana" --currency EUR python scripts/users.py list python scripts/users.py switch --user ana # set the active traveller python scripts/users.py show --user ana # profile + workspace paths # every command runs inside the active workspace, or an explicit one python scripts/flight_monitor.py --user harold python scripts/booking_agent.py list --user ana # each traveller keeps their own routes, alerts, bookings and history: # data/users/harold/{price_baseline.csv,bookings.json,alerts.json} # config/users/harold/{preferences.json,passengers.json,cards.json}
from agent_integration import create_agent sky = create_agent(user="harold") result = sky.search_flights( origin="BIO", destination="BOG", outbound_date="2026-12-04", return_date="2027-01-08", ) for rec in result["top_recommendations"]: print(rec["score"], rec["airline"], rec["price"], rec["booking_url"]) sky.add_route("Colombia Trip", "BIO", "BOG", "2026-12-04", "2027-01-08", target_price=650) sky.check_all_routes() # only harold's routes
# start the universal MCP server python scripts/mcp_server.py claude # claude_desktop_config.json / .mcp.json { "mcpServers": { "skybuddy": { "command": "python", "args": ["scripts/mcp_server.py", "claude"], "cwd": "/path/to/SkyBuddy" } } } # the agent switches traveller with the user tools create_user(user="ana", display_name="Ana") switch_user(user="ana") get_current_user()
# 1 · create the intent from a flight link python scripts/booking_agent.py prepare --user harold \ --booking-url "https://www.iberia.com/…" \ --airline Iberia --origin BIO --destination BOG \ --outbound-date 2026-12-04 --return-date 2027-01-08 \ --price 684 --currency EUR --passenger harold --max-price 700 # 2 · approve it explicitly python scripts/booking_agent.py confirm --intent-id bk_7f3a1c --approved-by harold # 3 · hand the playbook to your agent python scripts/booking_agent.py playbook --intent-id bk_7f3a1c # or let the year of history decide and create the intent itself python scripts/price_baseline.py trigger --origin BIO --destination BOG \ --outbound-date 2026-12-04 --price 684 --airline Iberia \ --booking-url "https://www.iberia.com/…" --passenger harold
MCP surface
Tools any agent can call
The same set is exposed to Claude, Hermes, OpenClaw and any MCP client through
mcp_server.py. Every call runs inside the active traveller's workspace.
| Tool | What it does |
|---|---|
create_user | Create a traveller workspace with its own preferences, routes, bookings and history. |
list_users / get_current_user | See every traveller and which one is active. |
switch_user / update_user / delete_user | Change the active traveller, edit a profile, or remove one. |
search_flights | Search a route and return fares plus the top scored recommendations. |
add_route | Watch a route with an optional target price. |
list_routes | List watched routes with their latest prices. |
check_all_routes | Re-price every watched route and raise alerts. |
get_alerts | Recent alerts within a time window. |
get_preferences / set_preferences | Read and update airline, time, cabin and stop preferences. |
add_card / list_cards | Manage credit cards used for points earning. |
add_loyalty_program | Record a loyalty balance and tier. |
estimate_earnings | Estimate points earned on a given fare. |
add_passenger / list_passengers | Manage traveller profiles for bookings. |
prepare_booking | Create a booking intent from a flight link, pending confirmation. |
confirm_booking | Approve an intent after the price ceiling re-check. |
get_booking_playbook | Return the step-by-step instructions the agent executes on the link. |
mark_booking_executed | Record the outcome and confirmation code of a booking. |
list_bookings / cancel_booking | Audit trail for every intent, and cancellation before execution. |
get_price_baseline | Scan the last 365 days of recorded fares: min, percentiles, median, trend, confidence. |
evaluate_price | Turn a live fare into a buy verdict with reasons and its percentile. |
auto_book_if_deal | Create the booking intent automatically when the fare beats its own history. |
record_price_observation | Feed one observed price into the baseline store. |
get_seat_advisory | Seat-map workflow, cross-check sites and the actions that assign the seat. |
Agent agnostic
Bring your own agent
Adapters ship in the box; anything speaking MCP works without one.
Open source
Track it. Score it. Book it.
Clone the repo, point your agent at the MCP server, and let SkyBuddy watch the fare while you sleep.