Fly Travel Albania
Cached charter package, hotel facts and tour prices from Fly Travel Albania (Tirana); party-aware.
我该使用它吗
质量与安全性
发现(3)
- HIGH
- MEDIUM在 prices_digest 中
- LOW在 charter_hotel 中
基于对工具定义和协议合规性的自动分析。
上下文开销
这是每次将服务器的工具加载到模型上下文窗口时所消耗的大致 token 数。数值越高,可用于其他任务的注意力就越少。
安装
一键安装
将以下内容添加到你的 `claude_desktop_config.json` 文件中:
{
"mcpServers": {
"travel-prices": {
"url": "https://flytravel.al/mcp"
}
}
}远程端点
https://flytravel.al/mcpstreamable-http它能做什么
工具清单
工具(12)
🟢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.
输入模式
{
"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.
输入模式
{
"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.
输入模式
{
"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.
输入模式
{
"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.
输入模式
{
"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).
输入模式
{
"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.
输入模式
{
"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.
输入模式
{
"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.
输入模式
{
"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.
输入模式
{
"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.
输入模式
{
"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.
输入模式
{
"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
}推荐提示词
tours_listtours_list社区
证据