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.

★ — stars ⑂ — forks 30 agent tools Multi-user
Traveller

Interactive preview — sample fares, stored in your browser. The Python side keeps the real per-user history.

7booking sources per search
30agent-callable tools
∞travellers & routes in parallel
365dprice history behind every buy call

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.

  1. 0
    auto_book_if_dealOptional: the 365-day baseline decides the fare is buy-worthy and creates the intent for you.
  2. 1
    prepare_bookingPins the chosen offer, its booking URL and price into a saved intent, inside that traveller's workspace.
  3. 2
    Human confirmationNothing executes until you approve the intent by its id.
  4. 3
    confirm_bookingRe-validates the price ceiling, then releases the agent playbook.
  5. 4
    Agent executesOpens the link, fills passenger data, checks the seat map on long-haul, and stops at payment for the final human OK.
Safe by default: dry-run mode, a hard price ceiling, and an explicit stop before any payment step.
booking_agent.py
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.

bash
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

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.

ToolWhat it does
create_userCreate a traveller workspace with its own preferences, routes, bookings and history.
list_users / get_current_userSee every traveller and which one is active.
switch_user / update_user / delete_userChange the active traveller, edit a profile, or remove one.
search_flightsSearch a route and return fares plus the top scored recommendations.
add_routeWatch a route with an optional target price.
list_routesList watched routes with their latest prices.
check_all_routesRe-price every watched route and raise alerts.
get_alertsRecent alerts within a time window.
get_preferences / set_preferencesRead and update airline, time, cabin and stop preferences.
add_card / list_cardsManage credit cards used for points earning.
add_loyalty_programRecord a loyalty balance and tier.
estimate_earningsEstimate points earned on a given fare.
add_passenger / list_passengersManage traveller profiles for bookings.
prepare_bookingCreate a booking intent from a flight link, pending confirmation.
confirm_bookingApprove an intent after the price ceiling re-check.
get_booking_playbookReturn the step-by-step instructions the agent executes on the link.
mark_booking_executedRecord the outcome and confirmation code of a booking.
list_bookings / cancel_bookingAudit trail for every intent, and cancellation before execution.
get_price_baselineScan the last 365 days of recorded fares: min, percentiles, median, trend, confidence.
evaluate_priceTurn a live fare into a buy verdict with reasons and its percentile.
auto_book_if_dealCreate the booking intent automatically when the fare beats its own history.
record_price_observationFeed one observed price into the baseline store.
get_seat_advisorySeat-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.

✓ Claude · MCP ✓ Hermes ✓ OpenClaw ✓ Any MCP client ✓ Plain Python / CLI

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.