Doorfarer
Server Details
Door-to-door trips: every airport within reach of your home, with the train or bus there.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 4 tools
Each tool has a clearly distinct role in the travel workflow: search bookable trips, check monthly price patterns, inspect a selected trip, or report a problem. find_trips and price_calendar are related, but their descriptions sharply distinguish live/bookable search from instant historical fare guidance.
All tool names use consistent snake_case and are readable. However, they mix verb_noun forms (find_trips, send_feedback) with noun_noun forms (price_calendar, trip_details), so the pattern is not fully uniform.
Four tools is well-scoped for a focused door-to-door travel search server. Each tool earns its place: search, price calendar, trip details, and feedback.
The surface covers the core discovery lifecycle: find trips, assess flexible timing, inspect a chosen trip with booking links and calendar file, and report failures. Native booking or transaction tools are absent, but the workflow is not a dead end because booking links are returned.
Available Tools
4 toolsfind_tripsFind door-to-door tripsARead-onlyIdempotentInspect
Finds the best round trips from where someone lives, not just from one airport: it adds the train or bus to every airport they can reach and ranks all options door to door, by price, by total travel time, or balanced. Use it when someone wants flights from their home town, could fly from several airports, or asks for the cheapest or fastest way to get somewhere, e.g. "I live in New Haven: should I fly to Lisbon from JFK, Newark, Boston or Hartford?" Not for a search from one airport already chosen. For a one-way trip set one_way (the trip length is then ignored). Multi-city: search each leg as one_way only when the user gave dates for it; otherwise ask for the dates. Set mode only when the user says how they get to the airport (car, train, bus, any): by default a home in the US compares driving, a taxi to a near airport and public transport, and a home elsewhere uses the train or bus. A named departure airport is an ordinary search: pass it as from_airports, with the home town the user gave. A month or holiday without a year means the next one coming; don't ask which year, and don't ask for the trip length or to confirm a town: search, and the answer says what it assumed. Any town or village works. The first search from a town we haven't seen takes about 20 seconds while we look up its train and bus connections; tell the user you're checking the connections from their town to each airport. Later searches from that town take a second or two. Give the home town and where to: airport, city or country codes, a list of them, or a region such as "Iberia" or "Southeast Asia". For "anywhere", a continent ("Asia") or "somewhere warm" it finds the cheapest places itself: pass "anywhere", "abroad" (another country) or the continent, or for warm, sunny or a beach the countries that fit the season with anywhere true; it searches the best 6 cities door to door. Dates are optional, but dates says where they came from: use "assumed" when the user gave none and you picked them (or left them out). Without them it searches departures in the next 3 months at 2-14 nights and says so. If the user gave no hint of when at all, one quick question about timing is fine. Example call: {"home": "New Haven", "destinations": ["LIS"], "dates": "from_user", "depart_from": "2027-03-01", "depart_to": "2027-03-31", "nights_min": 5, "nights_max": 9, "travellers": 2}. Show the answer's rows as a table with the airports each trip flies from and to, and give every booking link exactly as returned, as a clickable link (don't shorten or rewrite it); show the picks and at most a few more rows, and relay the answer's notes. Airports more than 8.5 hours from the door are left out and named in the answer (max_ground_hours changes that: set it only if the user says how far they would travel). Say when a ground leg is an estimate. If the answer's status isn't "ok", tell the user plainly what its note says and don't invent prices. Keep the user's own dates, trip length and places: if nothing is found, say so and offer to widen them, instead of widening on your own. Prices are in the traveller's home currency unless currency is given, per person; use the totals the answer gives for a party and don't convert or add up prices yourself. Prices come from recent searches on Aviasales and can change. Booking links are affiliate links: Doorfarer may earn a commission if you book, at no extra cost to you. Say so when you show them, and only then. When the user picks a trip, trip_details gives it step by step with a calendar file; when they ask which month is cheapest, price_calendar answers first, instantly. If an answer is wrong or confusing, report it with send_feedback.
| Name | Required | Description | Default |
|---|---|---|---|
| home | Yes | The traveller's home town or village, e.g. "New Haven" or "Hamden, US". Not an airport. Add the country when the name is common. At most 80 characters. | |
| mode | No | How the user gets to the airport: public (train or bus), train, bus, car (their own, parked at the airport), or any (car, taxi and public compete). Leave out unless the user says: then any for a home in the US, public elsewhere. | |
| dates | Yes | "from_user" whenever the user named any time at all (a month, season, holiday, "next week"); "assumed" only when they named none and you picked dates or left them out. | |
| limit | No | Rows to return, 1-25. Default: the picks plus the best trip from each airport. | |
| one_way | No | True if the user wants one way only: then the trip length is ignored. | |
| anywhere | No | True to find the cheapest places anywhere in the countries or regions named, instead of searching each one's biggest airports. A continent (Asia, Europe), "anywhere" or "abroad" (outside the home country) in destinations always searches this way. For "somewhere warm" or "a beach", pass the countries that fit the season and set this. | |
| currency | No | ISO code (USD, GBP, EUR) to show prices in. Default: the traveller's home currency. | |
| priority | No | What matters most. | balanced |
| depart_to | No | The window to leave in: last day. A window of at most 183 days, within the next 12 months. | |
| nights_max | No | Trip length in nights: longest. Default 14. 1 to 30. | |
| nights_min | No | Trip length in nights: shortest. Default 2. 1 to 30. | |
| travellers | No | Adults travelling together. 1 to 9. | |
| depart_from | No | The window to leave in: first day. Leave out with depart_to for the next 3 months. A window of at most 183 days, within the next 12 months. | |
| destinations | Yes | Where to: airport codes (LIS), city codes (NYC), country codes (PT), a region, a continent (Asia), "anywhere" or "abroad" (outside the home country). At most 6. | |
| from_airports | No | Only these departure airports. For narrowing a previous answer. At most 8. | |
| max_ground_hours | No | The most hours from the front door to the departure airport, one way. Default 8.5: farther airports are left out and named in the answer. Set it only when the user says how far they would travel to the airport, or to include the far ones the answer names. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only cover the safety profile (readOnly, idempotent, open-world); the description adds the material behavior: first search from an unknown town takes ~20 seconds, later ones a second or two, prices come from recent Aviasales searches and can change, booking links are affiliate links, an 8.5-hour ground cutoff drops and names airports, and a non-"ok" status must be relayed rather than prices invented.
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?
Purpose and routing are front-loaded and most sentences carry real instruction, but the block is very long and several rules are stated twice (dates semantics, the anywhere/warm-country handling, the max_ground_hours default already in the schema), and output-formatting guidance is interleaved with search guidance rather than grouped.
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 16-parameter tool with no output schema, the description still tells the agent what the answer contains (rows with origin/destination airports, notes, status, booking links, totals and currency) and how to present it. Nothing required to call it or interpret the result correctly is missing.
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 the baseline is 3, but the description adds interpretation rules absent from the schema: a month or holiday without a year means the next one, don't ask for trip length, dates "assumed" vs "from_user" when the user gave no timing, and set mode only when the user states how they reach the airport. A worked example call anchors several parameters at once.
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?
States a specific verb and resource with scope: door-to-door round trips from a home town rather than from a single airport, ranking by price, total travel time, or balanced. It explicitly names the excluded case ("Not for a search from one airport already chosen"), so it is distinguishable from a plain flight search at a glance.
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?
Gives explicit triggers (user names a home town, several airports, or asks for cheapest/fastest), explicit exclusions (single airport already chosen), and per-case routing: one_way for one-way, leg-by-leg for multi-city with dates only, ask for dates otherwise. It also routes to siblings — trip_details when a trip is picked, price_calendar for cheapest-month questions, send_feedback for bad answers.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
price_calendarCheapest month from homeARead-onlyIdempotentInspect
Shows the cheapest month to travel from someone's home town to a place, for each airport within reach: what fares on each route usually cost per month (from the fares Doorfarer has seen, not live prices) plus the train or bus to the airport. Instant. Use it when the user's dates are flexible or they ask when it's cheapest to go; then call find_trips for the month they choose to get bookable trips. Needs the home town; months as "2027-03", at most 12. Prices per person, in the home currency unless currency is given.
| Name | Required | Description | Default |
|---|---|---|---|
| home | Yes | The traveller's home town or village, e.g. "New Haven" or "Hamden, US". Not an airport. Add the country when the name is common. | |
| one_way | No | True for one-way fares. | |
| currency | No | ISO code (USD, GBP, EUR). Default: the home's. | |
| month_to | No | Last month. Default: 6 months in all. | |
| month_from | No | First month, "2027-03". Default: this month. | |
| destinations | Yes | Where to: airport codes (LIS), city codes (NYC) or country codes (PT). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only/idempotent/non-destructive, and the description adds genuinely new context: prices come from observed fares, not live availability, and results are 'Instant'. It also discloses the ground-transport leg and per-person/home-currency pricing. Slightly short of 5 because it doesn't say how the estimates should be caveated for booking.
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?
Front-loaded with the core definition, then usage, then the hand-off, then prerequisites and units. Dense but every clause carries information; only the pricing-unit sentence trails slightly long.
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 carries the burden of explaining what comes back ('what fares on each route usually cost per month ... plus the train or bus to the airport'), which it does. It leaves the exact shape of the per-airport, per-month result implicit.
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 already 100%, so baseline is 3, but the description adds constraints the schema doesn't: month strings must be '2027-03' with at most 12 months, and prices default to the home currency unless `currency` is given. It also reinforces that 'home' is a town, not an airport.
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?
States a specific verb and resource ('Shows the cheapest month to travel from someone's home town to a place, for each airport within reach') and immediately narrows scope to fare history plus ground transport. An agent can distinguish it from find_trips without opening either schema.
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?
Explicit trigger ('when the user's dates are flexible or they ask when it's cheapest to go') and an explicit hand-off ('then call find_trips for the month they choose to get bookable trips'). It also states a prerequisite: needs the home town, not an airport.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_feedbackReport a problem with DoorfarerAInspect
Tell Doorfarer's maker where Doorfarer fell short, so it can be fixed. Use it when a find_trips answer was wrong, confusing, or missing something you needed to help, or when the user asks you to pass something on. Write as the assistant that used the tool: what you asked for, what came back, what you expected instead. The report is about Doorfarer only, never about the user: leave out names, contact details, travel plans, reasons for travelling and anything the user said about themselves. Be specific and honest, including when the problem may have been your own call. Pass the search_id from the answer's last line. One report per search. If the user asked you to report something, tell them it's sent.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | bug: something is wrong. confusing: right but hard to use. idea: something that would help. | |
| search_id | No | The id from the find_trips answer this is about, e.g. "s_7f3kq2m9xa". | |
| suggestion | No | What would have helped. At most 400 characters. | |
| what_happened | Yes | What you asked for, what came back and what you expected. About Doorfarer, not the user. At most 600 characters. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only say this is a non-read-only, non-destructive, closed-world, non-idempotent call. The description adds what annotations cannot: the report is transmitted to the product maker, is scoped to Doorfarer and never the user, and must exclude names, contact details, travel plans and personal disclosures. It also tells the agent to inform the user the report was sent, closing the loop on a write whose result is otherwise invisible with no output schema.
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?
Purpose and trigger conditions are front-loaded, followed by writing guidance, privacy rules and bookkeeping. Every sentence contributes, though the privacy paragraph and the 'be specific and honest' sentence overlap slightly and could be tightened into one clause.
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 supplies the crucial missing return behavior — tell the user it's sent — and fully specifies the privacy boundary and deduplication rule. It stops short of saying whether the report is attributed to the assistant or whether the maker may reply, a minor gap for a fire-and-forget feedback tool.
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 the parameter definitions already carry the burden. The description still adds operational value by telling the agent where search_id comes from ('the answer's last line') and by constraining one report per search, plus guidance on what belongs in what_happened that the schema only paraphrases.
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?
Names a concrete verb-and-resource pair — send a report to Doorfarer's maker about where the product fell short — and frames its purpose as product feedback, which cleanly separates it from the read-only siblings find_trips, price_calendar and trip_details. An agent can tell instantly that this is the only outgoing-report tool in the set.
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?
Gives explicit trigger conditions: a find_trips answer that was wrong, confusing or missing information, or an explicit user request to pass something on. It also states the cadence constraint 'One report per search', which prevents duplicate filings, and defines the agent's voice when writing the report.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trip_detailsTrip step by stepARead-onlyIdempotentInspect
Shows one trip from a find_trips answer step by step, door to door: leaving home, the train or bus to the airport, the airport wait, the flight, the transfer into the city and arrival, then the way back, with local times. Also gives the booking link and a calendar file (.ics) the user can add. Pass a trip id from the find_trips answer ("Trip ids, row by row", or a row's id). Use it when the user picks a trip or asks how the journey works. Ids are kept for 72 hours.
| Name | Required | Description | Default |
|---|---|---|---|
| trip_id | Yes | A trip id from the find_trips answer, e.g. "t_k3m9q2xa". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior, but the description adds meaningful context beyond them: local times, booking link, .ics calendar file, and the 72-hour retention window for trip ids. Those details materially affect whether and how an agent should call the tool.
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 description is front-loaded with the core behavior and then adds the necessary input source and retention constraint. Every sentence earns its place by clarifying what is returned or how to obtain the required id.
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 one required parameter, full schema coverage, and annotations covering safety traits, the description supplies the remaining operational context: what the output contains, how to obtain the id, and how long ids remain valid. No output schema is present, but the description sufficiently explains the return content.
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 the baseline is 3. The description goes beyond the schema by explaining where the trip id comes from in the find_trips answer and by adding the important 72-hour retention constraint, though it does not add format or validation detail beyond that.
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 verb and resource: it shows one trip from a find_trips answer step by step. It clearly distinguishes this from the sibling find_trips by framing this as the detailed view of a selected trip, and it enumerates the journey segments the tool returns.
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 explicitly says when to use the tool: when the user picks a trip or asks how the journey works. It also routes the agent to the sibling find_trips as the source of the required trip id, which gives clear alternative-source guidance.
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.
4 tool updates
- First observed
find_trips - First observed
price_calendar - First observed
send_feedback - First observed
trip_details
Related MCP Connectors
Plan door-to-door trips across French trains, buses, transit and flights.
Plan journeys by train, bus, tram, metro and ferry across 42 European countries.
Plan trips on a map: routed transport, day-by-day itineraries, and a plan you can share.
Plan intercity journeys in India by train, flight or both, with a fare for every travel class.
Related MCP Servers
- AlicenseAqualityDmaintenanceReal-time train, bus, ferry and private transfer prices between 40+ Italian cities4MIT
- FlicenseNot gradedqualityAmaintenanceUniversal travel planning, IATA flight connectivity (Kairos Protocol), and urban Sensory Impact Score (SIS) routing engine aligned with WHO 53 dB Lden acoustic guidelines.-
- AlicenseNot gradedqualityDmaintenanceEnables multi-modal travel planning for India, aggregating flights, trains, buses, cabs, and personal vehicles across 117 cities with multi-leg routing and weighted scoring.2 npmApache 2.0
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to get fixed-price quotes and book London airport transfers, with flight validation and inter-agent communication via A2A protocol.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.