Fly Frugal Travel Data

Read-only public itinerary previews, observed round-trip fares, and flight savings verified today.

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
93%
Naming quality
100%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~1,190Tokens (tool definitions)
~1.6 KBTypical response size
Moderate attention impact (0.93% 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-data": {
      "url": "https://flyfrugal.fyi/mcp"
    }
  }
}

Remote endpoints

https://flyfrugal.fyi/mcpstreamable-http

What it can do

Tool inventory

Tools (4)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢list_itineraries(limit, country)

Browse Fly Frugal's published day-by-day budget travel itineraries. Use this to discover which destinations have a guide, then call get_itinerary with a returned slug for one guide's preview. Each item has slug, country_name, tagline, days_count, a preview, cover and first-day image URLs, price_cents and currency for the full guide, updated_at, and pdf_ready. Results are newest first. Only public previews are returned; the paid full guide is never included.

Input Schema

{
  "type": "object",
  "properties": {
    "limit": {
      "default": 24,
      "description": "Maximum number of itineraries to return (1 to 50, default 24).",
      "type": "integer",
      "minimum": 1,
      "maximum": 50
    },
    "country": {
      "description": "Only return itineraries for this destination, matched case-insensitively against the full name, for example \"Japan\", \"South Korea\" or \"Bali\". Country codes such as \"JP\" do not match. Omit to list every destination.",
      "type": "string",
      "minLength": 2
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢get_itinerary(slug)

Get the public preview of one Fly Frugal itinerary by its slug, as returned by list_itineraries. Returns the same fields as a list item: country_name, tagline, days_count, the preview content, image URLs, the full guide's price (price_cents, currency), updated_at and pdf_ready. Use it to describe a trip to the user or decide whether the full guide fits; the complete paid day-by-day guide is never returned. An unknown slug returns an error.

Input Schema

{
  "type": "object",
  "properties": {
    "slug": {
      "type": "string",
      "maxLength": 160,
      "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
      "description": "Itinerary slug from list_itineraries, lowercase and hyphenated, for example \"japan\" or \"south-india\"."
    }
  },
  "required": [
    "slug"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢list_flight_deals(origin, nights, limit)

List the cheapest round-trip economy fares Fly Frugal has recently observed, from one departure airport or across all tracked US airports. Use it for questions like "cheap flights from SFO" or "where can I fly for under $500". Each deal has origin, destination_airport, label (airport name), country, places, departure_date and return_date, nights, price and currency (whole US dollars), airlines, longest_layover_minutes, observed_at, and Google's price insight when checked: google_price_signal (low, typical or high), google_usual_low/high, google_savings, google_share_url and google_signal_checked_at. Prices are observations that can change or sell out, so tell users to confirm before booking. For only deals re-verified today, use get_todays_deals.

Input Schema

{
  "type": "object",
  "properties": {
    "origin": {
      "description": "Departure airport as a three-letter IATA code, such as SFO, JFK or ATL (case-insensitive). Omit to search deals from every tracked US airport.",
      "type": "string",
      "pattern": "^[a-zA-Z]{3}$"
    },
    "nights": {
      "default": 7,
      "description": "Trip length in nights between the outbound and return flights (1 to 30, default 7). Only fares observed for this exact length are returned.",
      "type": "integer",
      "minimum": 1,
      "maximum": 30
    },
    "limit": {
      "default": 20,
      "description": "Maximum number of deals to return (1 to 50, default 20).",
      "type": "integer",
      "minimum": 1,
      "maximum": 50
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢get_todays_deals(origin, nights, limit)

Return only the strongest current deals: fares whose Google savings insight was checked today (America/Los_Angeles calendar day) and shows a positive saving versus the usual price. Use it when the user asks for today's deals or wants prices that are freshly verified. Each deal has the same fields as list_flight_deals, plus count. If nothing was verified today the list is empty; say so instead of presenting older fares, or offer list_flight_deals for recent observations.

Input Schema

{
  "type": "object",
  "properties": {
    "origin": {
      "description": "Departure airport as a three-letter IATA code, such as SFO, JFK or ATL (case-insensitive). Omit to search deals from every tracked US airport.",
      "type": "string",
      "pattern": "^[a-zA-Z]{3}$"
    },
    "nights": {
      "default": 7,
      "description": "Trip length in nights between the outbound and return flights (1 to 30, default 7). Only fares observed for this exact length are returned.",
      "type": "integer",
      "minimum": 1,
      "maximum": 30
    },
    "limit": {
      "default": 2,
      "description": "Maximum number of deals to return (1 to 10, default 2).",
      "type": "integer",
      "minimum": 1,
      "maximum": 10
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded4 tools