Fly Travel Albania

Cached charter package, hotel facts and tour prices from Fly Travel Albania (Tirana); party-aware.

Should I use this

Quality & Safety

B
Description quality
100%
Schema completeness
90%
Naming quality
80%
Poisoning risk
60%
Permission match
100%
Protocol compliance
100%

Findings (3)

  • HIGHTool poisoning patterns detected
  • MEDIUMTool description contains URL to non-standard domainin prices_digest
  • LOWTool description contains negative instruction about its own usein charter_hotel

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~4,778Tokens (tool definitions)
~2.2 KBTypical response size
Significant attention impact (3.73% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "travel-prices": {
      "url": "https://flytravel.al/mcp"
    }
  }
}

Remote endpoints

https://flytravel.al/mcpstreamable-http

What it can do

Tool inventory

Tools (12)

🟒 Read-only🟑 WriteπŸ”΄ Deleteβšͺ Unknown
🟒charter_cheapest(destination)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "destination": {
      "type": "string",
      "description": "Optional destination key, e.g. 'antalya' or 'bodrum'. Omit to get every destination."
    }
  },
  "additionalProperties": false
}
🟒charter_hotel(hotel, destination, date, adults, children_ages, ...)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "hotel": {
      "type": "string",
      "description": "Hotel name, or part of it."
    },
    "destination": {
      "type": "string",
      "description": "Optional destination key ('antalya', 'bodrum') to narrow the search."
    },
    "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."
    },
    "adults": {
      "type": "integer",
      "minimum": 1,
      "maximum": 6,
      "description": "Number of adults (default 2)."
    },
    "children_ages": {
      "type": "array",
      "items": {
        "type": "integer",
        "minimum": 0,
        "maximum": 17
      },
      "maxItems": 6,
      "description": "Age of each child AT DEPARTURE (0-14 = child; 15+ is counted as an adult automatically)."
    },
    "nights": {
      "type": "integer",
      "minimum": 2,
      "maximum": 21,
      "description": "Trip length in nights. Omit for the standard charter length (6 nights / 7 days). Most departures also sell 3-10 nights."
    }
  },
  "required": [
    "hotel"
  ],
  "additionalProperties": false
}
🟒charter_offers(destination, date, budget_total_max, budget_total_min, stars_min, ...)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "destination": {
      "type": "string",
      "description": "Optional destination key ('antalya', 'bodrum'). Omit to search all."
    },
    "date": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      "description": "Departure date, format YYYY-MM-DD (recommended β€” exact availability for that date)."
    },
    "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."
    },
    "stars_min": {
      "type": "integer",
      "minimum": 1,
      "maximum": 5,
      "description": "Minimum hotel star rating (1-5)."
    },
    "board": {
      "type": "string",
      "description": "Board filter substring, e.g. 'all inclusive', 'ultra'."
    },
    "zone": {
      "type": "string",
      "description": "Zone/resort filter substring, e.g. 'Belek', 'Alanya', 'Lara', 'Side', 'Kemer'."
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 24,
      "description": "Shortlist size (default 12)."
    },
    "adults": {
      "type": "integer",
      "minimum": 1,
      "maximum": 6,
      "description": "Number of adults (default 2)."
    },
    "children_ages": {
      "type": "array",
      "items": {
        "type": "integer",
        "minimum": 0,
        "maximum": 17
      },
      "maxItems": 6,
      "description": "Age of each child AT DEPARTURE (0-14 = child; 15+ is counted as an adult automatically)."
    },
    "nights": {
      "type": "integer",
      "minimum": 2,
      "maximum": 21,
      "description": "Trip length in nights. Omit for the standard charter length (6 nights / 7 days). Most departures also sell 3-10 nights."
    },
    "family_friendly": {
      "type": "boolean",
      "description": "true = only hotels with family facilities (kids club / kids pool / family rooms) and not adults-only."
    },
    "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."
    },
    "adults_only": {
      "type": "boolean",
      "description": "true = only adults-only hotels; false = EXCLUDE adults-only hotels (use false for any party with children)."
    },
    "beach": {
      "type": "boolean",
      "description": "true = only hotels with a beach (own or nearby, per the hotel facts)."
    },
    "private_beach": {
      "type": "boolean",
      "description": "true = only hotels listing a private / own beach."
    },
    "spa": {
      "type": "boolean",
      "description": "true = only hotels with spa / Turkish bath / sauna."
    },
    "luxury": {
      "type": "boolean",
      "description": "true = only hotels tagged luxury."
    }
  },
  "additionalProperties": false
}
🟒charter_dates(destination, date_from, date_to, month, limit, ...)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "destination": {
      "type": "string",
      "description": "Destination key, e.g. 'antalya' or 'bodrum'."
    },
    "date_from": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      "description": "Only departures on/after this date (YYYY-MM-DD)."
    },
    "date_to": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      "description": "Only departures on/before this date (YYYY-MM-DD)."
    },
    "month": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}$",
      "description": "Whole-month window, e.g. '2026-09' (ignored when date_from/date_to given)."
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 60,
      "description": "Max dates to return (default 20)."
    },
    "adults": {
      "type": "integer",
      "minimum": 1,
      "maximum": 6,
      "description": "Number of adults (default 2)."
    },
    "children_ages": {
      "type": "array",
      "items": {
        "type": "integer",
        "minimum": 0,
        "maximum": 17
      },
      "maxItems": 6,
      "description": "Age of each child AT DEPARTURE (0-14 = child; 15+ is counted as an adult automatically)."
    },
    "nights": {
      "type": "integer",
      "minimum": 2,
      "maximum": 21,
      "description": "Trip length in nights. Omit for the standard charter length (6 nights / 7 days). Most departures also sell 3-10 nights."
    }
  },
  "required": [
    "destination"
  ],
  "additionalProperties": false
}
🟒tours_list(limit)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 30,
      "description": "Max tours to return (default 10)."
    }
  },
  "additionalProperties": false
}
🟒booking_link(destination, date, adults, children_ages, nights)

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).

Input Schema

{
  "type": "object",
  "properties": {
    "destination": {
      "type": "string",
      "description": "Destination key, e.g. 'antalya'."
    },
    "date": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      "description": "Departure date, format YYYY-MM-DD."
    },
    "adults": {
      "type": "integer",
      "minimum": 1,
      "maximum": 6,
      "description": "Number of adults (default 2)."
    },
    "children_ages": {
      "type": "array",
      "items": {
        "type": "integer",
        "minimum": 0,
        "maximum": 17
      },
      "maxItems": 6,
      "description": "Age of each child AT DEPARTURE (0-14 = child; 15+ is counted as an adult automatically)."
    },
    "nights": {
      "type": "integer",
      "minimum": 2,
      "maximum": 21,
      "description": "Trip length in nights. Omit for the standard charter length (6 nights / 7 days). Most departures also sell 3-10 nights."
    }
  },
  "required": [
    "destination",
    "date"
  ],
  "additionalProperties": false
}
🟒prices_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.

Input Schema

{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
🟒hotel_details(hotel, destination)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "hotel": {
      "type": "string",
      "description": "Hotel name, or part of it."
    },
    "destination": {
      "type": "string",
      "description": "Optional destination key ('antalya', 'bodrum')."
    }
  },
  "required": [
    "hotel"
  ],
  "additionalProperties": false
}
🟒compare_hotels(hotels, destination, date, adults, children_ages, ...)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "hotels": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "minItems": 2,
      "maxItems": 6,
      "description": "Hotel names (or parts of them)."
    },
    "destination": {
      "type": "string",
      "description": "Optional destination key ('antalya', 'bodrum')."
    },
    "date": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      "description": "Departure date, format YYYY-MM-DD (recommended)."
    },
    "adults": {
      "type": "integer",
      "minimum": 1,
      "maximum": 6,
      "description": "Number of adults (default 2)."
    },
    "children_ages": {
      "type": "array",
      "items": {
        "type": "integer",
        "minimum": 0,
        "maximum": 17
      },
      "maxItems": 6,
      "description": "Age of each child AT DEPARTURE (0-14 = child; 15+ is counted as an adult automatically)."
    },
    "nights": {
      "type": "integer",
      "minimum": 2,
      "maximum": 21,
      "description": "Trip length in nights. Omit for the standard charter length (6 nights / 7 days). Most departures also sell 3-10 nights."
    }
  },
  "required": [
    "hotels"
  ],
  "additionalProperties": false
}
🟒charter_flexible_dates(destination, date_from, date_to, stars_min, budget_total_max, ...)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "destination": {
      "type": "string",
      "description": "Destination key, e.g. 'antalya' or 'bodrum'."
    },
    "date_from": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      "description": "Window start, YYYY-MM-DD (default today)."
    },
    "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)."
    },
    "stars_min": {
      "type": "integer",
      "minimum": 1,
      "maximum": 5,
      "description": "Minimum hotel star rating (1-5)."
    },
    "budget_total_max": {
      "type": "integer",
      "description": "Max TOTAL budget in EUR for the whole party."
    },
    "adults": {
      "type": "integer",
      "minimum": 1,
      "maximum": 6,
      "description": "Number of adults (default 2)."
    },
    "children_ages": {
      "type": "array",
      "items": {
        "type": "integer",
        "minimum": 0,
        "maximum": 17
      },
      "maxItems": 6,
      "description": "Age of each child AT DEPARTURE (0-14 = child; 15+ is counted as an adult automatically)."
    },
    "nights": {
      "type": "integer",
      "minimum": 2,
      "maximum": 21,
      "description": "Trip length in nights. Omit for the standard charter length (6 nights / 7 days). Most departures also sell 3-10 nights."
    }
  },
  "required": [
    "destination"
  ],
  "additionalProperties": false
}
🟒tour_details(tour, tour_id, date, adults, children_ages)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "tour": {
      "type": "string",
      "description": "Tour name or city, or part of it (e.g. \"Stamboll\", \"Dubai\")."
    },
    "tour_id": {
      "type": "integer",
      "description": "Exact tour id from tours_list (preferred when known)."
    },
    "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."
    },
    "adults": {
      "type": "integer",
      "minimum": 1,
      "maximum": 9,
      "description": "Number of adults (default 2)."
    },
    "children_ages": {
      "type": "array",
      "items": {
        "type": "integer",
        "minimum": 0,
        "maximum": 17
      },
      "maxItems": 4,
      "description": "Age of each child, 0-11 (TOURS price 12+ as adults β€” a DIFFERENT bracket than charter packages)."
    }
  },
  "additionalProperties": false
}
🟒holiday_packages(destination, date_from, date_to)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "destination": {
      "type": "string",
      "description": "Package destination key from the no-argument listing (e.g. 'korfuz', 'barcelona', 'kreta'). Omit to list every destination."
    },
    "date_from": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      "description": "Only departures on/after this date (YYYY-MM-DD)."
    },
    "date_to": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      "description": "Only departures on/before this date (YYYY-MM-DD)."
    }
  },
  "additionalProperties": false
}

Recommended Prompts

list_items
List all [items] available in Fly Travel Albania
Expected tools: tours_list
browse_collection
Show me the [collection] from Fly Travel Albania
Expected tools: tours_list

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded12 tools
verifiedversion not recorded12 tools