Servidor MCP

Fly Travel Albania

al.flytravel/travel-prices
Viajes y hospitalidad Público y accesible MCP 2026-07-28

Qué hace este MCP

Provides cached charter, hotel, tour, and holiday-package information from Tirana, including prices, dates, comparisons, and booking links.

booking_link
Build a booking search link
Deep link into the live charter search results for a destination, date, party and optional trip length — hand this URL to the user to see live availability and book. Children are ages 0-14 at departure; ages 15+ count as adults. Pure URL builder (no data).
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'required': ['destination', 'date'], 'properties': {'date': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$', 'description': 'Departure date, format YYYY-MM-DD.'}, 'adults': {'type': 'integer', 'maximum': 6, 'minimum': 1, 'description': 'Number of adults (default 2).'}, 'nights': {'type': 'integer', 'maximum': 21, 'minimum': 2, 'description': 'Trip length in nights. Omit for the standard charter length (6 nights / 7 days). Most departures also sell 3-10 nights.'}, 'destination': {'type': 'string', 'description': "Destination key, e.g. 'antalya'."}, 'children_ages': {'type': 'array', 'items': {'type': 'integer', 'maximum': 17, 'minimum': 0}, 'maxItems': 6, 'description': 'Age of each child AT DEPARTURE (0-14 = child; 15+ is counted as an adult automatically).'}}, 'additionalProperties': False}
charter_cheapest
Cheapest charter packages (live cache)
Cheapest flight+hotel charter packages from Tirana (Albania) per destination, from the live booking-engine cache (the 5 cheapest per destination, each on its own date). Use for "what is the cheapest…" only; for advice or filtering use charter_offers. CACHED prices (from recent real searches on flytravel.al — not a live query; every row carries cached_at/age_minutes). Charter prices are PACKAGE TOTALS in EUR for the row's "party" (flight + hotel + transfers), NOT per person. party_match=false means the price is the 2-adult reference, not the total for the requested party — say so. A price belongs ONLY to its own "date": never present it as the price of another date.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'properties': {'destination': {'type': 'string', 'description': "Optional destination key, e.g. 'antalya' or 'bodrum'. Omit to get every destination."}}, 'additionalProperties': False}
charter_dates
Upcoming charter departure dates
Real upcoming charter departure dates from Tirana for a destination (cached calendar), each with the trip lengths (nights_available) really on sale for that departure and a ready booking-search link. Filter with date_from/date_to or month; total_count/has_more say when the calendar holds MORE dates than returned — never present a capped list as the whole calendar. For "which date is cheapest" use charter_flexible_dates.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'required': ['destination'], 'properties': {'limit': {'type': 'integer', 'maximum': 60, 'minimum': 1, 'description': 'Max dates to return (default 20).'}, 'month': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}$', 'description': "Whole-month window, e.g. '2026-09' (ignored when date_from/date_to given)."}, 'adults': {'type': 'integer', 'maximum': 6, 'minimum': 1, 'description': 'Number of adults (default 2).'}, 'nights': {'type': 'integer', 'maximum': 21, 'minimum': 2, 'description': 'Trip length in nights. Omit for the standard charter length (6 nights / 7 days). Most departures also sell 3-10 nights.'}, 'date_to': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$', 'description': 'Only departures on/before this date (YYYY-MM-DD).'}, 'date_from': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$', 'description': 'Only departures on/after this date (YYYY-MM-DD).'}, 'destination': {'type': 'string', 'description': "Destination key, e.g. 'antalya' or 'bodrum'."}, 'children_ages': {'type': 'array', 'items': {'type': 'integer', 'maximum': 17, 'minimum': 0}, 'maxItems': 6, 'description': 'Age of each child AT DEPARTURE (0-14 = child; 15+ is counted as an adult automatically).'}}, 'additionalProperties': False}
charter_flexible_dates
Cheapest cached date in a window
For flexible travellers: the lowest CACHED package total for each departure date inside a window (max 31 days) for a destination and party, plus best_value_date. Dates with no cache are returned as availability_status=no_cached_data — NOT as "no offers" (the cache only holds recently searched dates; the search_url prices them live). CACHED prices (from recent real searches on flytravel.al — not a live query; every row carries cached_at/age_minutes). Charter prices are PACKAGE TOTALS in EUR for the row's "party" (flight + hotel + transfers), NOT per person. party_match=false means the price is the 2-adult reference, not the total for the requested party — say so. A price belongs ONLY to its own "date": never present it as the price of another date.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'required': ['destination'], 'properties': {'adults': {'type': 'integer', 'maximum': 6, 'minimum': 1, 'description': 'Number of adults (default 2).'}, 'nights': {'type': 'integer', 'maximum': 21, 'minimum': 2, 'description': 'Trip length in nights. Omit for the standard charter length (6 nights / 7 days). Most departures also sell 3-10 nights.'}, 'date_to': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$', 'description': 'Window end, YYYY-MM-DD (default date_from + 14 days; max 31-day window).'}, 'date_from': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$', 'description': 'Window start, YYYY-MM-DD (default today).'}, 'stars_min': {'type': 'integer', 'maximum': 5, 'minimum': 1, 'description': 'Minimum hotel star rating (1-5).'}, 'destination': {'type': 'string', 'description': "Destination key, e.g. 'antalya' or 'bodrum'."}, 'children_ages': {'type': 'array', 'items': {'type': 'integer', 'maximum': 17, 'minimum': 0}, 'maxItems': 6, 'description': 'Age of each child AT DEPARTURE (0-14 = child; 15+ is counted as an adult automatically).'}, 'budget_total_max': {'type': 'integer', 'description': 'Max TOTAL budget in EUR for the whole party.'}}, 'additionalProperties': False}
charter_hotel
Price for a specific hotel (live cache)
Cached price(s) for ONE hotel named by the user (e.g. "Granada Luxury Belek") — searches the full price cache (hundreds of hotels). ALWAYS pass the date and the party the user gave: the per-date cache is read for that EXACT party first (party_match=true = real total for that family), then the 2-adult file (party_match=false = reference price). exact_date_matches = real cached prices for the requested date; other_cached_offers belong to their OWN dates (availability_status=reference_other_date). When nothing is cached for the requested date, say so and give hotel_page (it prices any date live). Do NOT call this tool repeatedly to browse — use charter_offers (filters) or compare_hotels (2-6 named hotels) instead. For amenities use hotel_details. CACHED prices (from recent real searches on flytravel.al — not a live query; every row carries cached_at/age_minutes). Charter prices are PACKAGE TOTALS in EUR for the row's "party" (flight + hotel + transfers), NOT per person. party_match=false means the price is the 2-adult reference, not the total for the requested party — say so. A price belongs ONLY to its own "date": never present it as the price of another date.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'required': ['hotel'], 'properties': {'date': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$', 'description': 'Desired departure date, format YYYY-MM-DD — exact-date cache is checked and the date is baked into the links.'}, 'hotel': {'type': 'string', 'description': 'Hotel name, or part of it.'}, 'adults': {'type': 'integer', 'maximum': 6, 'minimum': 1, 'description': 'Number of adults (default 2).'}, 'nights': {'type': 'integer', 'maximum': 21, 'minimum': 2, 'description': 'Trip length in nights. Omit for the standard charter length (6 nights / 7 days). Most departures also sell 3-10 nights.'}, 'destination': {'type': 'string', 'description': "Optional destination key ('antalya', 'bodrum') to narrow the search."}, 'children_ages': {'type': 'array', 'items': {'type': 'integer', 'maximum': 17, 'minimum': 0}, 'maxItems': 6, 'description': 'Age of each child AT DEPARTURE (0-14 = child; 15+ is counted as an adult automatically).'}}, 'additionalProperties': False}
charter_offers
Browse & filter offers (advisor, one call)
THE discovery tool: filters the whole cached charter inventory (hundreds of hotels) in ONE call by date, TOTAL budget, stars, board, zone, party and hotel features (aquapark, kids club, adults-only, beach, spa, luxury…). Built for "I have X EUR for 2 adults + a child, Antalya, 5 stars, aquapark, near the beach — what do you suggest?". Returns the price range, three quality tiers (economy-but-good / mid / premium) and a shortlist; advise from the tiers, never only the cheapest. Pass the date whenever the user has one (exact availability for that date) and the real party (exact-party cache is used when present). excluded_unknown_features tells how many hotels were dropped because their facilities are unknown. CACHED prices (from recent real searches on flytravel.al — not a live query; every row carries cached_at/age_minutes). Charter prices are PACKAGE TOTALS in EUR for the row's "party" (flight + hotel + transfers), NOT per person. party_match=false means the price is the 2-adult reference, not the total for the requested party — say so. A price belongs ONLY to its own "date": never present it as the price of another date.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'properties': {'spa': {'type': 'boolean', 'description': 'true = only hotels with spa / Turkish bath / sauna.'}, 'date': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$', 'description': 'Departure date, format YYYY-MM-DD (recommended — exact availability for that date).'}, 'zone': {'type': 'string', 'description': "Zone/resort filter substring, e.g. 'Belek', 'Alanya', 'Lara', 'Side', 'Kemer'."}, 'beach': {'type': 'boolean', 'description': 'true = only hotels with a beach (own or nearby, per the hotel facts).'}, 'board': {'type': 'string', 'description': "Board filter substring, e.g. 'all inclusive', 'ultra'."}, 'limit': {'type': 'integer', 'maximum': 24, 'minimum': 1, 'description': 'Shortlist size (default 12).'}, 'adults': {'type': 'integer', 'maximum': 6, 'minimum': 1, 'description': 'Number of adults (default 2).'}, 'luxury': {'type': 'boolean', 'description': 'true = only hotels tagged luxury.'}, 'nights': {'type': 'integer', 'maximum': 21, 'minimum': 2, 'description': 'Trip length in nights. Omit for the standard charter length (6 nights / 7 days). Most departures also sell 3-10 nights.'}, 'aquapark': {'type': 'boolean', 'description': 'true = only hotels with an aquapark / water park.'}, 'kids_club': {'type': 'boolean', 'description': 'true = only hotels with a kids / mini club.'}, 'stars_min': {'type': 'integer', 'maximum': 5, 'minimum': 1, 'description': 'Minimum hotel star rating (1-5).'}, 'adults_only': {'type': 'boolean', 'description': 'true = only adults-only hotels; false = EXCLUDE adults-only hotels (use false for any party with children).'}, 'destination': {'type': 'string', 'description': "Optional destination key ('antalya', 'bodrum'). Omit to search all."}, 'children_ages': {'type': 'array', 'items': {'type': 'integer', 'maximum': 17, 'minimum': 0}, 'maxItems': 6, 'description': 'Age of each child AT DEPARTURE (0-14 = child; 15+ is counted as an adult automatically).'}, 'private_beach': {'type': 'boolean', 'description': 'true = only hotels listing a private / own beach.'}, 'family_friendly': {'type': 'boolean', 'description': 'true = only hotels with family facilities (kids club / kids pool / family rooms) and not adults-only.'}, 'budget_total_max': {'type': 'integer', 'description': 'Max TOTAL budget in EUR for the whole party.'}, 'budget_total_min': {'type': 'integer', 'description': 'Optional min total, to skip too-basic offers.'}}, 'additionalProperties': False}
compare_hotels
Compare 2-6 hotels side by side
Side-by-side comparison of 2-6 named hotels for a date and party: cached price (with party_match + cached_at), stars, zone, board, room, features (aquapark, kids club, beach, spa, adults-only…) and a booking link each — one call instead of several charter_hotel calls. Hotels not in the cache are listed in not_found (do NOT say they are unavailable — the cache only holds recently searched offers). CACHED prices (from recent real searches on flytravel.al — not a live query; every row carries cached_at/age_minutes). Charter prices are PACKAGE TOTALS in EUR for the row's "party" (flight + hotel + transfers), NOT per person. party_match=false means the price is the 2-adult reference, not the total for the requested party — say so. A price belongs ONLY to its own "date": never present it as the price of another date.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'required': ['hotels'], 'properties': {'date': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$', 'description': 'Departure date, format YYYY-MM-DD (recommended).'}, 'adults': {'type': 'integer', 'maximum': 6, 'minimum': 1, 'description': 'Number of adults (default 2).'}, 'hotels': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 6, 'minItems': 2, 'description': 'Hotel names (or parts of them).'}, 'nights': {'type': 'integer', 'maximum': 21, 'minimum': 2, 'description': 'Trip length in nights. Omit for the standard charter length (6 nights / 7 days). Most departures also sell 3-10 nights.'}, 'destination': {'type': 'string', 'description': "Optional destination key ('antalya', 'bodrum')."}, 'children_ages': {'type': 'array', 'items': {'type': 'integer', 'maximum': 17, 'minimum': 0}, 'maxItems': 6, 'description': 'Age of each child AT DEPARTURE (0-14 = child; 15+ is counted as an adult automatically).'}}, 'additionalProperties': False}
holiday_packages
Holiday packages (bus/flight + hotel) — destinations & dates
Our NON-charter holiday packages from Tirana (flight+hotel or bus+hotel: Corfu, Parga, Crete, Malta, Barcelona, Mallorca, Rimini…): which destinations are on sale right now, their validated upcoming departure dates, an INDICATIVE "from €X per person" price and the booking page link. The exact price depends on hotel/room/party and is computed live on the package page (link) — never present price_from as a bookable quote. For Turkey/Egypt beach charters (Antalya, Bodrum…) use the charter_* tools instead. Cached/validated data only, no live call.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'properties': {'date_to': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$', 'description': 'Only departures on/before this date (YYYY-MM-DD).'}, 'date_from': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$', 'description': 'Only departures on/after this date (YYYY-MM-DD).'}, 'destination': {'type': 'string', 'description': "Package destination key from the no-argument listing (e.g. 'korfuz', 'barcelona', 'kreta'). Omit to list every destination."}}, 'additionalProperties': False}
hotel_details
Hotel facts (facilities, features)
Static facts we hold about ONE charter hotel: stars, zone, provider-tagged categories, tri-state features (aquapark, kids_club, kids_pool, beach, private_beach, spa, adults_only, luxury, night_entertainment, water_slides — true/false/null where null = unknown), the facility list and a short description. FACTS ONLY: never claim a feature that is null/absent; distances to beach/airport are NOT available — do not estimate them. No prices here (use charter_hotel). Cache/DB read, no live call.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'required': ['hotel'], 'properties': {'hotel': {'type': 'string', 'description': 'Hotel name, or part of it.'}, 'destination': {'type': 'string', 'description': "Optional destination key ('antalya', 'bodrum')."}}, 'additionalProperties': False}
prices_digest
Full live-price digest
Today's full machine-readable price digest (charter packages, tours, guides, FAQ) — same content as https://flytravel.al/llms-full.txt (cached, rebuilt hourly). Overview only; for any specific hotel/date/party use the charter_* tools.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'properties': {}, 'additionalProperties': False}
tour_details
Organized tour details (dates, program, price)
Full cached details for ONE organized group tour: the COMPLETE departure-date calendar, the day-by-day program as text, duration, transport, and the per-person price. Match by `tour` (part of the name/cities, e.g. "Stamboll", "Milano Como") or exact `tour_id` from tours_list. Pass `date` + the party when the user has them: when that departure's group price is warm in cache you get the EXACT group total (price_status=cached_for_date); otherwise price_from is the PER PERSON price of the NEAREST departure (price_status=list_from) — every departure date has its OWN price, never quote one date's price for another; tour_page prices any date live. Answer date questions ONLY from departure_dates — it is the complete current calendar. Seats/availability are confirmed by staff. Cache/DB read, no live call.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'properties': {'date': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$', 'description': 'Desired departure date, YYYY-MM-DD — checked against the calendar and baked into tour_page.'}, 'tour': {'type': 'string', 'description': 'Tour name or city, or part of it (e.g. "Stamboll", "Dubai").'}, 'adults': {'type': 'integer', 'maximum': 9, 'minimum': 1, 'description': 'Number of adults (default 2).'}, 'tour_id': {'type': 'integer', 'description': 'Exact tour id from tours_list (preferred when known).'}, 'children_ages': {'type': 'array', 'items': {'type': 'integer', 'maximum': 17, 'minimum': 0}, 'maxItems': 4, 'description': 'Age of each child, 0-11 (TOURS price 12+ as adults — a DIFFERENT bracket than charter packages).'}}, 'additionalProperties': False}
tours_list
Organized group tours (cheapest first)
Escorted group tours from Tirana with Albanian-speaking guides (cached catalogue): stable id, title, days/nights, cities, transport, next_departure and the PER PERSON price in EUR — unlike charter packages, tour prices are per person. For one tour's full calendar, program and date-specific price use tour_details.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'properties': {'limit': {'type': 'integer', 'maximum': 30, 'minimum': 1, 'description': 'Max tours to return (default 10).'}}, 'additionalProperties': False}
Añadido
holiday_packages
17 de September de 2026 a las 07:57
Añadido
tour_details
17 de September de 2026 a las 07:57
Añadido
charter_flexible_dates
17 de September de 2026 a las 07:57
Añadido
compare_hotels
17 de September de 2026 a las 07:57
Añadido
hotel_details
17 de September de 2026 a las 07:57
Añadido
prices_digest
17 de September de 2026 a las 07:57
Añadido
booking_link
17 de September de 2026 a las 07:57
Añadido
tours_list
17 de September de 2026 a las 07:57
Añadido
charter_dates
17 de September de 2026 a las 07:57
Añadido
charter_offers
17 de September de 2026 a las 07:57
Añadido
charter_hotel
17 de September de 2026 a las 07:57
Añadido
charter_cheapest
17 de September de 2026 a las 07:57