FareDice
Server Details
Cheap multi-country trips and non-stop fares by day in Europe and Southeast Asia
- Status
- Healthy
- Uptime
- 99.9% over 22 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-06-18
- URL
TDQS
Scored across 3 tools
The three tools target distinct tasks: multi-city trip planning, route-level fare history, and destination discovery from a city. The two nonstop_* tools share a prefix and both return fare data, but their inputs and outputs are clearly differentiated in the descriptions.
find_trips uses a verb_noun pattern, while nonstop_fares and nonstop_from use an adjective_noun/preposition pattern; all are snake_case and readable, but the set lacks a single consistent convention.
Three tools is on the low end but appropriate for a focused flight-fare discovery service; each tool has a distinct, substantial capability and there is no obvious redundancy.
The surface covers trip planning, route fare lookup, and destination discovery, including reverse-direction fares within nonstop_fares. Minor gaps exist, such as a dedicated tool for exploring fares to a specific city or for flexible multi-city date searches, but core workflows are covered.
Available Tools
3 toolsfind_tripsFind cheap multi-country tripsARead-onlyIdempotentInspect
Finds cheap trips through several cities and countries in Europe or Southeast Asia, strung from non-stop one-way fares seen in the last few days: you give a start city (or a home airport outside the region: the trip then starts with a flight from the nearest big airport we have fares from), a window for the first flight, how many places and nights in each, and a flight budget, and optionally the kinds of place (beaches, islands, capitals ...), countries to keep to or skip and cities per country; it picks the cities. Returns the cheapest three trips, each with its flights, fare ages, cabin-bag notes and a link to the trip on faredice.com.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | home: the last flight returns to the start city (with home, to the airport the trip flew in through). Default anywhere. | |
| from | No | Start city: a name ("Lisbon") or IATA city code ("LIS"), "anywhere" to start in any of the region's busiest cities, or a country ("anywhere in Germany", "Spain") to start in any of its cities. Needed unless home is given. | |
| home | No | The traveller's home airport when it is outside the region: a town ("Calgary", "London, Ontario") or IATA code ("YYC"). Trips then start with a flight in from the nearest big airport we have fares from (Toronto, New York, Sydney ...), usually with a stop, and from there it's the same trip. The budget covers that flight; getting from home to that airport isn't in the prices. With home, from is used only when we can't fly from that home. | |
| start | No | Earliest day for the first flight, YYYY-MM-DD. Fares cover about the next 90 days. Default: a week from today. | |
| until | No | Latest day for the first flight, YYYY-MM-DD. Default: two weeks after start. | |
| region | No | Where the trip goes. Default europe. | |
| cabin_bag | No | true: the traveller takes a cabin bag (the wheeled one for the overhead locker), so the budget and the ranking count each flight's usual price for one where we know it; a flight whose bag price we don't know counts €35, the dearest bag price we know, so the total is an estimate (see unpriced_cabin_bags). Default false: fares alone. | |
| countries | No | ISO country codes ("ES", "PT"): every stop is in one of these. | |
| passports | No | ISO country codes of the traveller's passports ("US", "IN"): countries that need a visa in advance are left out. | |
| visa_free | No | With passports: only countries that need no visa of any kind, leaving out e-visas, ETAs and visas on arrival as well as visas needed before flying. | |
| budget_eur | No | Most to spend on all the flights, in euros, for all the travellers together (up to 5,000 each). | |
| held_visas | No | Valid visas the traveller already holds, with passports: "schengen" opens the Schengen area (its days counted against 90 in any 180) and the countries outside it that admit Schengen visa holders; "uk" and "us" open the countries that admit holders of those. The traveller still checks the visa's own dates and entries. | |
| nights_max | No | Most nights in each place. | |
| nights_min | No | Fewest nights in each place. | |
| places_max | No | Most places to stay in. Default 12, any number. | |
| places_min | No | Fewest places to stay in. Default 4. | |
| travellers | No | How many adults travel together. Default 1. Every price in the answer, and the budget, is then for all of them. | |
| warm_min_c | No | Only places whose typical daytime high for the month of the stay is at least this many °C, from long-term weather station averages (a place without them is left out). For winter sun in Europe. | |
| then_region | No | With home: after region, fly on to this other region and home from there, in one trip (europe then southeast-asia, or the reverse). Three long flights: home into region, one across (from or to London or Paris), and home from then_region; each a separate ticket, all in the total and the budget. Homes: Vancouver or Los Angeles, or an airport within 1,000 km of them. The trip always ends home; places_min splits between the regions. A budget of about 2,000 euros fits most. | |
| kinds_of_place | No | Kinds of place, from our notes on each city: per kind, "only" (every stop is one), "none" (no stop is one) or at least n stops of it (1-4), e.g. {"beaches": 2, "capitals": "none"}. One kind can be "only". Ski counts only from December to mid-April, and only in Europe. The start and the return don't count as stops. | |
| skip_countries | No | ISO country codes to leave out of the trip. | |
| cities_per_country | No | Most cities in any one country. Default 1; 0 for any number (answers write it "any"). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this a read-only, idempotent, non-destructive, closed-world operation, so the safety profile is covered. The description adds real behavioral context beyond that: fares are 'seen in the last few days,' only the cheapest three trips come back, and results include flight details, fare ages, cabin-bag notes and a faredice.com link.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded in the opening clause and every subsequent clause maps to a real input or output concern. It is essentially one very long sentence with heavy sub-clause nesting, which is dense but justified given the 22-parameter surface, though it could be broken up for readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex, fully-optional-parameter tool with no output schema, the description covers the workflow, the required-in-practice inputs, and the shape of the return (cheapest three trips with flights, fare ages, bag notes, link). Combined with the exhaustive schema, an agent has everything needed to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 22 parameters thoroughly, including the nuance of home airports, visa/passport handling and the cabin-bag pricing caveat. The description summarizes the key inputs in prose but adds no syntax or format detail beyond the schema, making the baseline of 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource ('Finds cheap trips through several cities and countries') and pins the scope to Europe or Southeast Asia, sourced from recent non-stop one-way fares. This distinguishes it from the sibling fare tools (nonstop_fares, nonstop_from) by making clear it assembles multi-city itineraries rather than retrieving individual fares.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It lays out the inputs that drive the search (start city or home airport, flight window, places/nights, budget) and the optional refinements (kinds of place, countries to keep/skip, cities per country), which gives clear context for when this tool applies. It stops short of explicitly naming the sibling tools or stating when to prefer them over this one, so it is not a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nonstop_faresCheapest fare each day between two citiesARead-onlyIdempotentInspect
The cheapest one-way fare seen on each day of the next three months or so from one city to another in Europe or Southeast Asia (non-stop flights), or on a long flight between a big airport outside the region and one of its cities (any stops): each day's price, its age and airline, the cheapest by month, the airlines with how many days they fly it and their cabin bag rule, the cheapest the other way, and a link to the route's page on faredice.com.
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | A city by name ("Berlin", "Krakow", "Saigon") or IATA city code ("BER"). For a long flight, one end can be a big airport outside the region we have fares from (Vancouver, Toronto, New York, Sydney, London for Southeast Asia ...). | |
| from | Yes | A city by name ("Berlin", "Krakow", "Saigon") or IATA city code ("BER"). For a long flight, one end can be a big airport outside the region we have fares from (Vancouver, Toronto, New York, Sydney, London for Southeast Asia ...). | |
| month | No | Only this month's days: YYYY-MM or a month's name ("november"). Default every day we have. | |
| region | No | europe or southeast-asia. Default: the first region where both places are found, Europe first. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, and non-destructive behavior. The description adds substantive return-value context absent from structured fields: daily price, its age and airline, monthly cheapest, airline frequency and cabin bag rule, reverse cheapest, and a link. It still omits rate limits, error behavior, and exact data freshness beyond 'next three months or so'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded in one dense sentence, and the colon-separated list efficiently enumerates return fields. The sentence is somewhat run-on and could be split for readability, but every clause earns its place given the absence of an output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description adequately explains what the tool returns and its route scope. Parameter details are fully covered by the schema, and annotations cover safety, so the definition is nearly complete for correct invocation, though it lacks sibling routing guidance.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all four parameters are already documented in the input schema. The description provides helpful route-type context (non-stop vs. long-haul any stops) but does not add syntax or defaults beyond what the schema already provides for from, to, month, and region.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific resource (cheapest one-way fare per day between two cities) with clear scope conditions (Europe/Southeast Asia non-stop or long-haul any stops). It does not explicitly distinguish itself from the sibling tools find_trips or nonstop_from, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the route and time-horizon constraints, but there is no explicit guidance on when to choose this tool over find_trips or nonstop_from. The description does not name alternatives or state when-not-to-use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nonstop_fromEvery city a city flies to non-stopBRead-onlyIdempotentInspect
Every city one city in Europe or Southeast Asia flies to non-stop over the next three months or so (or that a big airport outside the region flies to, any stops), cheapest first: each with its cheapest fare, the day, its age and airline, how many days have fares and the airlines, and links to each route's page on faredice.com.
| Name | Required | Description | Default |
|---|---|---|---|
| from | Yes | A city by name ("Berlin", "Krakow", "Saigon") or IATA city code ("BER"). For a long flight, one end can be a big airport outside the region we have fares from (Vancouver, Toronto, New York, Sydney, London for Southeast Asia ...). | |
| region | No | europe or southeast-asia. Default: the first region where both places are found, Europe first. | |
| max_results | No | Most cities to list, cheapest first. Default 30. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), so the description is free to add operational context — it does, disclosing the ~3-month forward window and the cheapest-first ordering. It stops short of noting pagination/truncation behavior when capped by max_results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is a single sentence with no filler, and the geographic scope is reasonably front-loaded. However, it crams origin scope, time window, sort order, and seven return fields into one dense clause, making it hard to parse on a first read.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description correctly carries the burden of describing return values: cheapest fare, day, age, airline, count of days with fares, airlines, and route links. Parameters and safety are fully covered elsewhere, so the main omission is any routing guidance toward the sibling tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already explains from, region, and max_results. The description only echoes the region scope ('Europe or Southeast Asia') and the cheapest-first ordering implied by max_results, adding little beyond what the schema already documents.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening clause essentially restates the title ('Every city a city flies to non-stop') rather than stating a distinct verb+resource action. It does convey the underlying operation (enumerate non-stop destinations from one origin) but does so obliquely, buried under a list of return fields, and it never distinguishes itself from find_trips or nonstop_fares.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use guidance and no comparison to the siblings find_trips and nonstop_fares, which appear to cover overlapping fare-search territory. The only selection cue is the implicit 'next three months or so' time window, which is stated as a data property, not as a usage condition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
2 tool updates
- Added
nonstop_fares - Added
nonstop_from
1 tool update
- Changed
find_trips1 field changed- added
Input schema / properties / warm_min_cAdded value: +{ + "description": "Only places whose typical daytime high for the month of the stay is at least this many °C, from long-term weather station averages (a place without them is left out). For winter sun in Europe.", + "enum": [ + 16, + 18, + 20, + 22, + 25 + ], + "type": "integer" +}
1 tool update
- Changed
find_trips2 fields changed- changed
Input schema / properties / places_max / descriptionPrevious value: -"Most places to stay in."New value: +"Most places to stay in. Default 12, any number." - changed
Input schema / properties / places_min / descriptionPrevious value: -"Fewest places to stay in."New value: +"Fewest places to stay in. Default 4."
1 tool update
- Changed
find_trips1 field changed- added
Input schema / properties / visa_freeAdded value: +{ + "description": "With passports: only countries that need no visa of any kind, leaving out e-visas, ETAs and visas on arrival as well as visas needed before flying.", + "type": "boolean" +}
1 tool update
- Changed
find_trips1 field changed- changed
Input schema / properties / cities_per_country / descriptionPrevious value: -"Most cities in any one country. Default 1; 0 for any number."New value: +"Most cities in any one country. Default 1; 0 for any number (answers write it \"any\")."
1 tool update
- Changed
find_trips4 fields changed- added
Input schema / properties / cities_per_countryAdded value: +{ + "description": "Most cities in any one country. Default 1; 0 for any number.", + "maximum": 3, + "minimum": 0, + "type": "integer" +} - added
Input schema / properties / countriesAdded value: +{ + "description": "ISO country codes (\"ES\", \"PT\"): every stop is in one of these.", + "items": { + "type": "string" + }, + "maxItems": 12, + "type": "array" +} - added
Input schema / properties / kinds_of_placeAdded value: +{ + "additionalProperties": false, + "description": "Kinds of place, from our notes on each city: per kind, \"only\" (every stop is one), \"none\" (no stop is one) or at least n stops of it (1-4), e.g. {\"beaches\": 2, \"capitals\": \"none\"}. One kind can be \"only\". Ski counts only from December to mid-April, and only in Europe. The start and the return don't count as stops.", + "properties": { + "beaches": { + "oneOf": [ + { + "maximum": 4, + "minimum": 1, + "type": "integer" + }, + { + "enum": [ + "only", + "none" + ], + "type": "string" + } + ] + }, + "capitals": { + "oneOf": [ + { + "maximum": 4, + "minimum": 1, + "type": "integer" + }, + { + "enum": [ + "only", + "none" + ], + "type": "string" + } + ] + }, + "islands": { + "oneOf": [ + { + "maximum": 4, + "minimum": 1, + "type": "integer" + }, + { + "enum": [ + "only", + "none" + ], + "type": "string" + } + ] + }, + "lakes": { + "oneOf": [ + { + "maximum": 4, + "minimum": 1, + "type": "integer" + }, + { + "enum": [ + "only", + "none" + ], + "type": "string" + } + ] + }, + "mountains": { + "oneOf": [ + { + "maximum": 4, + "minimum": 1, + "type": "integer" + }, + { + "enum": [ + "only", + "none" + ], + "type": "string" + } + ] + }, + "old_towns": { + "oneOf": [ + { + "maximum": 4, + "minimum": 1, + "type": "integer" + }, + { + "enum": [ + "only", + "none" + ], + "type": "string" + } + ] + }, + "ski": { + "oneOf": [ + { + "maximum": 4, + "minimum": 1, + "type": "integer" + }, + { + "enum": [ + "only", + "none" + ], + "type": "string" + } + ] + }, + "small_towns": { + "oneOf": [ + { + "maximum": 4, + "minimum": 1, + "type": "integer" + }, + { + "enum": [ + "only", + "none" + ], + "type": "string" + } + ] + } + }, + "type": "object" +} - added
Input schema / properties / skip_countriesAdded value: +{ + "description": "ISO country codes to leave out of the trip.", + "items": { + "type": "string" + }, + "maxItems": 20, + "type": "array" +}
1 tool update
- Changed
find_trips3 fields changed- changed
Input schema / properties / budget_eur / descriptionPrevious value: -"Most to spend on all the flights, in euros."New value: +"Most to spend on all the flights, in euros, for all the travellers together (up to 5,000 each)." - changed
Input schema / properties / budget_eur / maximumPrevious value: -5000New value: +30000 - added
Input schema / properties / travellersAdded value: +{ + "description": "How many adults travel together. Default 1. Every price in the answer, and the budget, is then for all of them.", + "maximum": 6, + "minimum": 1, + "type": "integer" +}
1 tool update
- Changed
find_trips1 field changed- added
Input schema / properties / then_regionAdded value: +{ + "description": "With home: after region, fly on to this other region and home from there, in one trip (europe then southeast-asia, or the reverse). Three long flights: home into region, one across (from or to London or Paris), and home from then_region; each a separate ticket, all in the total and the budget. Homes: Vancouver or Los Angeles, or an airport within 1,000 km of them. The trip always ends home; places_min splits between the regions. A budget of about 2,000 euros fits most.", + "enum": [ + "europe", + "southeast-asia" + ], + "type": "string" +}
1 tool update
- Changed
find_trips1 field changed- changed
Input schema / properties / cabin_bag / descriptionPrevious value: -"true: the traveller takes a cabin bag (the wheeled one for the overhead locker), so the budget and the ranking count each flight's usual price for one where we know it; a flight whose bag price we don't know counts at its fare (see unpriced_cabin_bags). Default false: fares alone."New value: +"true: the traveller takes a cabin bag (the wheeled one for the overhead locker), so the budget and the ranking count each flight's usual price for one where we know it; a flight whose bag price we don't know counts €35, the dearest bag price we know, so the total is an estimate (see unpriced_cabin_bags). Default false: fares alone."
1 tool update
- Changed
find_trips1 field changed- added
Input schema / properties / cabin_bagAdded value: +{ + "description": "true: the traveller takes a cabin bag (the wheeled one for the overhead locker), so the budget and the ranking count each flight's usual price for one where we know it; a flight whose bag price we don't know counts at its fare (see unpriced_cabin_bags). Default false: fares alone.", + "type": "boolean" +}
1 tool update
- Changed
find_trips1 field changed- added
Input schema / properties / held_visasAdded value: +{ + "description": "Valid visas the traveller already holds, with passports: \"schengen\" opens the Schengen area (its days counted against 90 in any 180) and the countries outside it that admit Schengen visa holders; \"uk\" and \"us\" open the countries that admit holders of those. The traveller still checks the visa's own dates and entries.", + "items": { + "enum": [ + "schengen", + "uk", + "us" + ], + "type": "string" + }, + "maxItems": 3, + "type": "array" +}
1 tool update
- Changed
find_trips1 field changed- changed
Input schema / properties / from / descriptionPrevious value: -"Start city: a name (\"Lisbon\") or IATA city code (\"LIS\"), or \"anywhere\" to start in any of the region's busiest cities. Needed unless home is given."New value: +"Start city: a name (\"Lisbon\") or IATA city code (\"LIS\"), \"anywhere\" to start in any of the region's busiest cities, or a country (\"anywhere in Germany\", \"Spain\") to start in any of its cities. Needed unless home is given."
1 tool update
- Changed
find_trips4 fields changed- changed
Input schema / properties / end / descriptionPrevious value: -"home: the last flight returns to the start city. Default anywhere."New value: +"home: the last flight returns to the start city (with home, to the airport the trip flew in through). Default anywhere." - changed
Input schema / properties / from / descriptionPrevious value: -"Start city: a name (\"Lisbon\") or IATA city code (\"LIS\"), or \"anywhere\" to start in any of the region's busiest cities."New value: +"Start city: a name (\"Lisbon\") or IATA city code (\"LIS\"), or \"anywhere\" to start in any of the region's busiest cities. Needed unless home is given." - added
Input schema / properties / homeAdded value: +{ + "description": "The traveller's home airport when it is outside the region: a town (\"Calgary\", \"London, Ontario\") or IATA code (\"YYC\"). Trips then start with a flight in from the nearest big airport we have fares from (Toronto, New York, Sydney ...), usually with a stop, and from there it's the same trip. The budget covers that flight; getting from home to that airport isn't in the prices. With home, from is used only when we can't fly from that home.", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "from" -]New value: +[]
1 tool update
- First observed
find_trips
Related MCP Connectors
Flight search, airfare analytics, flexible destinations
Live Google Flights search: stopover itineraries, country sweeps, explore anywhere, booking links
Cheap flights in Europe and multi-city trip plans from cached airline prices, with shareable links.
Is this flight price good? Buy-or-wait verdict from 90 days of real observed fares per route
Related MCP Servers
- AlicenseAqualityBmaintenanceAround the World and Complex Must-Stop Airfare and routing MCP757 npm2AGPL 3.0
- AlicenseAqualityBmaintenanceEnables real-time flight fare searches across date ranges and multiple destinations, with historical price insights and booking links. Provides one-way and round-trip search tools through MCP.41MIT
- AlicenseNot gradedqualityCmaintenanceFlexible multi-leg, multi-airport flight search that finds the cheapest route across an entire itinerary — available as a CLI and as an MCP server for AI agents.Apache 2.0
- AlicenseAqualityBmaintenanceEnables users to find the cheapest dates to fly a route via Google Flights, supporting one-way and round-trip searches through multiple backends. It provides a tool that can search date ranges, filter by nonstop, seat, currency, and force a particular backend.1MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.