Fly Travel Albania
by flytravel.al · remote · no sign-in to list tools · v1.2.0 · published by al.flytravel
Cached charter package, hotel facts and tour prices from Fly Travel Albania (Tirana); party-aware.
12 tools: 10 change things and 2 only read.
Scanned Oct 21, 2026
- Deletes or cancels0Claude Code: deny
- Can't be undone0Claude Code: ask
- Changes things10Claude Code: ask: see these tools
- Only reads2Claude Code: allow: see these tools
1 check matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.
claude mcp add --transport http travel-prices https://flytravel.al/mcpFindings
Matches of fixed checks, with the text they matched.
- Warnbooking_link
The server marks "booking_link" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "booking_link" says "link": a word for a change.
Tools
Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.
12 tools
Changes things 10Claude Code: ask
booking_linkDeep 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.1 finding
Why it is in this group
- The name "booking_link" says "link": a word for a change.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Findings
- Warn
The server marks "booking_link" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "booking_link" says "link": a word for a change.
Description, as the server wrote it 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).
Annotations the server declares
- title: Build a booking search link
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
charter_cheapestCheapest 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).No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it 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.
Annotations the server declares
- title: Cheapest charter packages (live cache)
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
charter_datesReal 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 b…No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it 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.
Annotations the server declares
- title: Upcoming charter departure dates
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
charter_flexible_datesFor 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.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it 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.
Annotations the server declares
- title: Cheapest cached date in a window
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
charter_hotelCached price(s) for ONE hotel named by the user (e.g.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it 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.
Annotations the server declares
- title: Price for a specific hotel (live cache)
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
charter_offersTHE 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 …No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it 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.
Annotations the server declares
- title: Browse & filter offers (advisor, one call)
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
holiday_packagesOur 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 …No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it 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.
Annotations the server declares
- title: Holiday packages (bus/flight + hotel) — destinations & dates
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
hotel_detailsStatic 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, l…No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it 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.
Annotations the server declares
- title: Hotel facts (facilities, features)
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
prices_digestToday's full machine-readable price digest (charter packages, tours, guides, FAQ) — same content as https://flytravel.al/llms-full.txt (cached, rebuilt hourly).No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it 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.
Annotations the server declares
- title: Full live-price digest
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
tour_detailsFull 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.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it 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.
Annotations the server declares
- title: Organized tour details (dates, program, price)
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
Only reads 2Claude Code: allow
compare_hotelsSide-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, …No findings
Why it is in this group
- The name "compare_hotels" says "compare": a word for reading.
Description, as the server wrote it 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.
Annotations the server declares
- title: Compare 2-6 hotels side by side
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
tours_listEscorted 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 …No findings
Why it is in this group
- The name "tours_list" says "list": a word for reading.
Description, as the server wrote it 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.
Annotations the server declares
- title: Organized group tours (cheapest first)
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.
Install
Pinned to version 1.2.0. Values in angle brackets are yours to fill in.
claude mcp add --transport http travel-prices https://flytravel.al/mcpRun in a terminal.
Claude Code permissions
Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [
"mcp__travel-prices__tours_list",
"mcp__travel-prices__compare_hotels"
],
"ask": [
"mcp__travel-prices__charter_cheapest",
"mcp__travel-prices__charter_hotel",
"mcp__travel-prices__charter_offers",
"mcp__travel-prices__charter_dates",
"mcp__travel-prices__booking_link",
"mcp__travel-prices__prices_digest",
"mcp__travel-prices__hotel_details",
"mcp__travel-prices__charter_flexible_dates",
"mcp__travel-prices__tour_details",
"mcp__travel-prices__holiday_packages"
],
"deny": []
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as travel-prices. Review it before you use it.