TripWays
Server Details
Find, price, and book tours, day trips, and activities worldwide, with live dates and prices.
- Status
- Healthy
- Uptime
- 88.6% over 22 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 12 tools
Each tool targets a fairly distinct task: search, details, availability, price, booking link, reviews, alternatives, etc. There is some overlap since get_tour_details already includes cancellation policy, meeting point, and from-price that get_cancellation_policy, get_meeting_point, and search_tours also surface, but the descriptions explicitly clarify boundaries (e.g. 'live dates and totals come from check_availability').
All 12 tools use a consistent snake_case verb_noun pattern (check_availability, get_price_quote, search_tours, find_alternatives, etc.). No mixed conventions or ambiguous verbs, so the set is highly predictable.
12 tools is well within the ideal 3-15 range and each earns its place in a tour discovery/booking-assist flow. No redundant or throwaway tools, and the granularity (details vs availability vs price vs reviews) is reasonable.
The surface covers the full discovery-to-checkout-link lifecycle: destination resolution, search, comparison, details, availability, pricing, cancellation, reviews, meeting points, and alternatives. The one intentional gap is actual booking/payment and post-booking management, which the descriptions say happen externally on tripways.com, so agents have no dead ends but cannot complete a reservation.
Available Tools
12 toolscheck_availabilityCheck availabilityARead-onlyIdempotentInspect
Check live start times and remaining seats for a TripWays tour on one date or a range of up to 31 days. Pass party_size (seats needed) or a travelers object; slots that cannot fit the group are left out, and party_size wins if both are given. The status field is ok, no_schedule, no_fit, or calendar_gone. Use get_price_quote with the same date, start time, and travelers for the total.
| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | ||
| bokun_id | Yes | ||
| date_end | No | Inclusive end; default = date. Max 31 days. | |
| travelers | No | Simple ages; mapped to occupied seats (infants excluded unless the tour has an infant category). Used only when party_size is omitted. | |
| party_size | No | Occupied seats to keep (not ticket count). Slots with availabilityCount < party_size are omitted unless unlimited. Wins over travelers when both are set. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| note | No | |
| error | No | Present when ok is false. code: tour_not_found, destination_not_found, destination_ambiguous, or unpriced. message is written for the traveler. |
| slots | No | Open start times that fit the party. |
| reason | No | |
| status | No | ok, no_schedule, no_fit, or calendar_gone. |
| bokun_id | No | |
| checkout_url | No | |
| bookable_natively | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, openWorld), but the description adds real behavioral context: slots that cannot fit the group are omitted, party_size wins over travelers, and the status field enumerates ok/no_schedule/no_fit/calendar_gone. It stops short of error handling or rate-limit behavior.
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?
Three sentences with no filler; the core capability is front-loaded, followed by the input-precedence rule and the downstream tool. Every sentence carries information an agent needs.
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 an output schema present, the return shape need not be explained, and the description still adds status-value semantics. Complete enough to call correctly; only minor gaps around error or timezone behavior remain.
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 60%, so the baseline is 3. The description restates precedence rules and the 31-day cap that the schema largely already documents, adding little beyond what the schema and its nested descriptions provide.
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 ('Check live start times and remaining seats for a TripWays tour') and bounds the scope ('one date or a range of up to 31 days'). An agent can distinguish this from search_tours or get_tour_details without opening a 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?
Explicitly routes the agent to get_price_quote with the same date, start time, and travelers for totals, which is a clear alternative-tool handoff. It also clarifies the party_size vs travelers precedence. It does not state when-not to use this tool, so it falls short of the full when/when-not/alternatives bar.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_toursCompare toursARead-onlyIdempotentInspect
Compare 2 to 4 TripWays tours side by side by bokun_id: from-price, duration, rating, cancellation type, hotel pickup, languages, inclusions, and exclusions. The result also names the tour with the lowest from-price, the shortest duration, the best rating (10+ reviews), and which have free cancellation. Ids that are not bookable tours come back in not_found. For group totals on a date, use check_availability and get_price_quote.
| Name | Required | Description | Default |
|---|---|---|---|
| bokun_ids | Yes | Two to four tour ids (the number in tripways.com/t/{id}). |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| note | No | |
| error | No | Present when ok is false. code: tour_not_found, destination_not_found, destination_ambiguous, or unpriced. message is written for the traveler. |
| tours | No | One row per tour found, in the order asked. |
| not_found | No | Ids that are not bookable tours. |
| highlights | No | bokun_id of the tour with the lowest from-price, the shortest duration, and the best rating (10+ reviews), and the ids with free cancellation. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnly, idempotent, non-destructive, closed-world), so the description only needs to add operational detail — and it does: non-bookable ids surface in not_found, and the comparison derives lowest price, shortest duration, best rating gated at 10+ reviews, and free-cancellation flags. It does not mention any rate limits or permission requirements, but none are implied for this read-only 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?
Front-loads the core action and scope, then the derived outputs, then the not_found edge case, then the alternative routing — four tight sentences with no filler despite the long field list.
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?
An output schema exists, so return structure need not be repeated; the description still covers the surprising edge case (not_found for non-bookable ids) and the derived-comparison logic. Combined with full schema coverage and rich annotations, 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 coverage is 100% and the single parameter is fully documented in-schema (pattern ^[0-9]+$, min/max 2-4, tripways.com/t/{id} mapping). The description restates 'by bokun_id' and the 2-to-4 bound without adding new semantics, so the baseline 3 applies.
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 (compare), resource (TripWays tours), scope (2 to 4, keyed by bokun_id) and enumerates exactly which attributes are compared. An agent can distinguish this from get_tour_details or search_tours without opening any 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?
Explicitly routes the adjacent use case away: 'For group totals on a date, use check_availability and get_price_quote.' It also implies the when-to-use case (multi-tour side-by-side comparison) and the 2-4 id bound, leaving little to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_alternativesFind alternativesARead-onlyIdempotentInspect
Find tours similar to one TripWays tour that have open start times on a date, or a date range of up to 31 days, for a group. Pass the tour the traveler wanted (bokun_id), the date, and party_size or travelers. Returns up to limit similar tours (1 to 5, default 3), each with its card and up to three open start times with seats left, plus the original tour's own status for those dates. It reads several live calendars, so it can take a few seconds.
| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | ||
| limit | No | ||
| bokun_id | Yes | ||
| date_end | No | Inclusive end; default = date. Max 31 days. | |
| travelers | No | Simple ages; mapped to occupied seats. Used only when party_size is omitted. | |
| party_size | No | Occupied seats to keep. Wins over travelers when both are set. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| note | No | |
| error | No | Present when ok is false. code: tour_not_found, destination_not_found, destination_ambiguous, or unpriced. message is written for the traveler. |
| source | No | The tour that was asked about and its own status for these dates. |
| checked | No | How many similar tours' calendars were read. |
| alternatives | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint, idempotentHint, openWorldHint, destructiveHint=false). The description adds genuinely new behavioral context the annotations cannot: it reads several live calendars and therefore can take a few seconds, plus the 31-day date-range ceiling and the 1-to-5 result cap.
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?
Three sentences, front-loaded with purpose, then required inputs, then result shape and the latency caveat. Every sentence carries distinct information with no filler or repetition.
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?
An output schema exists, so return values need not be spelled out, yet the description still summarizes the response (cards plus up to three open start times and the original tour's status), which is a slight redundancy but harmless. Combined with the latency note and range limits, nothing essential for correct invocation 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?
With only 50% schema description coverage, the description compensates by explaining the key inputs: bokun_id is the traveler's desired tour, the date/range is capped at 31 days, and party_size or travelers (with party_size winning) define the group. It adds meaning beyond the raw schema properties, though it does not restate the full traveler age breakdown.
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: find tours similar to one given tour that have open start times on a date or date range. This is clearly distinguishable from siblings like search_tours (general discovery), check_availability (single-tour status), and compare_tours (comparison), so an agent can route correctly without opening any 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?
Gives concrete usage context: 'Pass the tour the traveler wanted (bokun_id), the date, and party_size or travelers', making it clear this is the fallback when a specific tour lacks open start times. It stops short of explicitly naming when to prefer it over check_availability or search_tours, so it is clear but not fully routed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_booking_linkGet a booking linkARead-onlyIdempotentInspect
Get the TripWays checkout link for a tour, optionally preset to a date, start time, rate, and traveler mix. The traveler pays on tripways.com; this tool does not hold seats or take payment. bookable_natively and reason say whether the link opens TripWays checkout or the operator's calendar, and whether a hotel pickup must be chosen at checkout.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | ||
| rate_id | No | ||
| bokun_id | Yes | ||
| travelers | No | Simple ages; mapped to Bokun pricing categories. | |
| start_time | No | HH:MM if start_time_id unknown. | |
| start_time_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| error | No | Present when ok is false. code: tour_not_found, destination_not_found, destination_ambiguous, or unpriced. message is written for the traveler. |
| reason | No | |
| bokun_id | No | |
| spots_left | No | |
| start_time | No | |
| checkout_url | No | Open in the browser to pay on tripways.com. |
| min_participants | No | |
| bookable_natively | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered. The description adds real value beyond that: payment happens on tripways.com, the tool does not hold seats or take payment, and the result's bookable_natively/reason fields signal whether checkout or the operator's calendar opens and whether hotel pickup is required.
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?
Three front-loaded sentences with the core purpose first and no filler. The final sentence explains the returned bookable_natively and reason fields, which is partly redundant since an output schema exists, but it still conveys useful behavioral context rather than pure padding.
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?
An output schema exists, so return values need not be fully described, and the description covers the key non-destructive/no-payment behavior an agent needs. The remaining gap is parameter-level detail for bokun_id and start_time/start_time_id in a 6-parameter, nested-object tool, which keeps this from being fully complete.
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 only 33%, so the description must compensate by explaining parameters. It names the presetable dimensions (date, start time, rate, traveler mix), covering most optional inputs, but never mentions bokun_id (the required key) or explains the distinction between start_time and start_time_id, leaving meaningful gaps against a low-coverage schema.
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 ('Get the TripWays checkout link for a tour') and scopes it clearly enough that it is distinguishable from read-oriented siblings like get_price_quote and check_availability. It does not explicitly name or contrast a sibling, so it stops 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?
The description implies usage context by saying the link can be 'optionally preset' with specific fields and clarifying 'this tool does not hold seats or take payment', which helps an agent understand when it applies. However, there is no explicit when-to-use versus check_availability or get_price_quote, nor any mention of prerequisites, so it remains implied guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_cancellation_policyGet cancellation policyARead-onlyIdempotentInspect
Get the cancellation terms stored for one TripWays tour by bokun_id: the type (free, flexible, partial, or non_refundable), the refund percent and cutoff when the tour has them, and the operator's policy text. These are the tour's terms, not a quote for a specific booking.
| Name | Required | Description | Default |
|---|---|---|---|
| bokun_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| url | No | The tour's TripWays page. |
| note | No | |
| error | No | Present when ok is false. code: tour_not_found, destination_not_found, destination_ambiguous, or unpriced. message is written for the traveler. |
| cutoff | No | How long before the start the terms apply. |
| summary | No | One-line terms, e.g. 'Free Cancellation'. |
| bokun_id | No | |
| guidance | No | |
| policy_text | No | The operator's policy text. |
| cancellation | No | free, flexible, partial, or non_refundable. |
| refund_percent | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds useful context in 'when the tour has them' (fields may be absent) and the fact that data is operator-authored policy text, but it discloses no auth, rate-limit, or failure behavior beyond that.
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?
Two sentences, front-loaded with the verb and resource, then the returned fields and a scoping caveat. No filler; every clause adds information.
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 an output schema present, the description needn't enumerate return structure, yet it does so helpfully, and it clarifies the tour-scoped (non-booking) semantics. It is complete enough to invoke correctly, with only the parameter's id origin/format left 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?
Single parameter with 0% schema description coverage, so the description must carry the load. It tells the agent bokun_id identifies 'one TripWays tour,' which is meaningful scoping, but adds nothing about the numeric-string format or where the id comes from.
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 (Get) and resource (cancellation terms stored for one TripWays tour), and enumerates the returned fields (type, refund percent, cutoff, operator policy text). It also draws a boundary against get_price_quote by clarifying these are the tour's stored terms, not a booking-specific quote.
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?
The closing sentence carves out the usage case by contrasting with a booking-specific quote, implicitly steering the agent to get_price_quote for that need. However, it does not name that alternative explicitly or state hard when/when-not conditions, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_destination_infoFind a destinationARead-onlyIdempotentInspect
Resolve a place name (a city, region, country, or well-known area such as Khao Sok) to a TripWays destination with bookable tours. Useful before search_tours when a name could mean more than one place. An ambiguous name returns destination_ambiguous with a did_you_mean list; pass country_code (ISO 3166-1 alpha-2, e.g. FR) to choose one. Area names resolve to their parent destination and include resolved_via=area_alias.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| country_code | No | Optional ISO2 pin, e.g. FR. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| error | No | Present when ok is false. code: tour_not_found, destination_not_found, destination_ambiguous, or unpriced. message is written for the traveler. |
| destination | No | |
| did_you_mean | No | Candidate destinations when the place name matched more than one location. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry the safety profile (readOnly, idempotent, non-destructive, closed-world), and the description goes well beyond them by disclosing the failure path ('returns destination_ambiguous with a did_you_mean list') and the alias behavior ('Area names resolve to their parent destination and include resolved_via=area_alias'). These are non-obvious runtime traits an agent must plan around.
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?
Three sentences, front-loaded with the core action, then the routing rationale, then the edge-case behavior. No filler and no restatement of the title or structured fields.
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 an output schema present, return values need not be enumerated, yet the description still flags the two return shapes an agent must branch on (destination_ambiguous, resolved_via=area_alias). Nothing needed to call this 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 50% and the undocumented param is `query`, whose meaning the description does supply (place names, including well-known areas). It also adds disambiguation semantics for country_code — that it exists to pick one meaning — beyond the schema's bare 'Optional ISO2 pin, e.g. FR.'
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 ('Resolve a place name ... to a TripWays destination with bookable tours') and enumerates accepted input forms (city, region, country, well-known area like Khao Sok). It also distinguishes itself from the sibling search_tours by naming it and its prep-step role.
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?
Explicitly says when to reach for it: 'Useful before search_tours when a name could mean more than one place.' It names the alternative tool and the exact condition that selects this one, plus the fallback lever (pass country_code) when the first call is ambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_itinerary_ideasGet itinerary ideasARead-onlyIdempotentInspect
Suggest a day-by-day plan of bookable TripWays tours for a destination. Pass destination, days (1 to 7, default 3), and optional interests such as food, history, or boat trips. Each day holds one full-day tour or a morning and afternoon pair, with from-prices and links; multi-day tours are listed apart. These are suggestions only: dates, seats, and group totals are not checked.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | ||
| interests | No | Optional, e.g. 'food and history'. | |
| destination | Yes | City, region, or country, e.g. 'Rome' or 'Phuket'. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| days | No | |
| note | No | |
| error | No | Present when ok is false. code: tour_not_found, destination_not_found, destination_ambiguous, or unpriced. message is written for the traveler. |
| did_you_mean | No | Candidate destinations when the place name matched more than one location. |
| days_requested | No | |
| longer_options | No | Multi-day tours, kept out of the day plan. |
| destination_resolved | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, and closed-world, so the safety profile is covered. The description usefully adds behavior beyond that: the output shape (one full-day tour, or a morning/afternoon pair, with from-prices and links), that multi-day tours are listed separately, and the important limitation that availability, seats, and group totals are unverified.
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?
Three sentences, front-loaded with the core action and only lightly redundant on the days default that the schema already specifies. The output-shape sentence earns its place by telling the agent what a response looks like.
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 3-parameter read tool with a full output schema and rich annotations, the description supplies the essential caveat about unverified availability plus the structure of the returned plan. An agent has enough to call it correctly; only explicit sibling routing 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 description coverage is 67% and the description largely restates what is already there (destination, days 1-7 with default 3). It does add marginal value by widening the interests example from the schema's 'food and history' to 'food, history, or boat trips'. Baseline 3 is 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?
A specific verb (suggest/plan) applied to a specific resource (a day-by-day plan of bookable TripWays tours) with a stated scope (a destination). It clearly distinguishes itself from siblings like search_tours and compare_tours, which return raw listings rather than an assembled itinerary.
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?
The closing caveat that 'dates, seats, and group totals are not checked' implies this is not the tool for firm availability, which nudges toward check_availability/get_price_quote, but no sibling is named and no explicit when-to-use/when-not statement is given. Usage is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_meeting_pointGet meeting pointARead-onlyIdempotentInspect
Get where one TripWays tour starts, by bokun_id: the operator's meeting point text, whether hotel pickup is available, and the operator's know-before-you-go notes and what to bring. Fields the operator has not filled in are left out, with a note when nothing is stored.
| Name | Required | Description | Default |
|---|---|---|---|
| bokun_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| url | No | |
| note | No | |
| error | No | Present when ok is false. code: tour_not_found, destination_not_found, destination_ambiguous, or unpriced. message is written for the traveler. |
| bokun_id | No | |
| hotel_pickup | No | |
| meeting_point | No | The operator's meeting point text. |
| what_to_bring | No | |
| know_before_you_go | No | |
| meeting_pickup_label | No | e.g. 'Pickup available' or 'Meet on location'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so safety is covered. The description adds genuinely useful behavioral context beyond that: missing operator fields are omitted rather than returned empty, and a note is emitted when nothing is stored. That is real output-shape disclosure an agent would not otherwise know.
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 primary purpose and identifier are front-loaded in the first clause, and the second sentence covers output behavior without padding. The field enumeration is dense but each item maps to a real returned value, so little is wasted.
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 an output schema present, the description need not document return structure, yet it still summarizes returned content and missing-field handling. For a single-parameter read tool with full annotation coverage, nothing an agent needs to call it correctly is absent.
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 0%, so the description must carry the meaning of bokun_id; it does add that the id refers to a TripWays tour, which is more than the schema's bare pattern constraint says. But it gives no format or sourcing hint (e.g., numeric string, obtainable from search results), so it only partially compensates.
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 specific verb and resource ('Get where one TripWays tour starts') and enumerates exactly what is returned: meeting point text, hotel pickup availability, know-before-you-go notes, and what to bring. That enumeration clearly carves out a niche distinct from get_tour_details or get_itinerary_ideas without needing to name them.
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?
The phrase 'by bokun_id' implies the prerequisite (you need a tour identifier, presumably from search_tours or get_tour_details), so usage is inferable. However, there is no explicit when-to-use statement, no guidance on when get_tour_details would be the better call, and no exclusion conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_price_quoteGet a price quoteARead-onlyIdempotentInspect
Get the live total for a TripWays tour on one date and start time for a traveler mix, priced from the operator's booking calendar. A quote does not hold seats or charge anything. Optional extras and promo codes are not included. When the tour's rates cannot price that mix, the result is unpriced.
| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | ||
| bokun_id | Yes | ||
| travelers | No | Simple ages; mapped to Bokun pricing categories. | |
| start_time | No | HH:MM if start_time_id unknown. | |
| start_time_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| date | No | |
| error | No | Present when ok is false. code: tour_not_found, destination_not_found, destination_ambiguous, or unpriced. message is written for the traveler. |
| reason | No | |
| bokun_id | No | |
| currency | No | |
| from_price | No | |
| quote_kind | No | |
| rate_title | No | |
| start_time | No | |
| checkout_url | No | Checkout preset to this date, time, and travelers. |
| package_total | No | Total for the whole group, before optional extras and promo codes. |
| promo_applied | No | |
| min_participants | No | |
| travelers_priced | No | Traveler counts the total covers. |
| bookable_natively | No | |
| includes_required_extras | No | |
| optional_extras_excluded | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent and non-destructive, so the safety profile is covered. The description adds genuinely useful behavior beyond that: no seat hold, no charge, extras/promos excluded, and the 'unpriced' failure mode when rates can't price a mix.
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?
Four tight sentences, front-loaded with the core action and scope, followed by the non-obvious constraints (no hold/no charge, exclusions, unpriced outcome). No filler, though the final sentence could be folded in.
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?
An output schema exists, so return shape needn't be described. For a read-only pricing tool with a nested traveler object, the description covers scope, side effects and the failure case adequately; only the id/time-id parameter ambiguity is left unaddressed.
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 only 40%, so the description should compensate more than it does. It ties date, start time and traveler mix together meaningfully, but says nothing about bokun_id or the start_time vs start_time_id precedence, leaving those to the schema alone.
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 ('Get the live total for a TripWays tour') plus the exact scoping inputs (date, start time, traveler mix) and the pricing source (operator's booking calendar). This is clearly distinguishable from check_availability and search_tours without opening any 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?
Gives clear context for use: a quote is a pre-booking price check that does not hold seats or charge, and it excludes extras and promo codes. It stops short of explicitly routing to sibling tools (e.g. 'use check_availability to hold seats'), so it is strong but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_tour_detailsGet tour detailsARead-onlyIdempotentInspect
Get the full details of one TripWays tour by bokun_id (the number in tripways.com/t/{id}): summary, itinerary stops, inclusions and exclusions, languages, cancellation policy, meeting point or pickup, from-price, rating, hero_image, url, and checkout_url. Live dates and group totals come from check_availability and get_price_quote.
| Name | Required | Description | Default |
|---|---|---|---|
| bokun_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| url | No | The tour's TripWays page. |
| error | No | Present when ok is false. code: tour_not_found, destination_not_found, destination_ambiguous, or unpriced. message is written for the traveler. |
| title | No | |
| rating | No | |
| reason | No | Why checkout works the way it does, e.g. pickup_required. |
| themes | No | |
| summary | No | |
| bokun_id | No | Tour id; the number in tripways.com/t/{id}. |
| guidance | No | |
| itinerary | No | |
| languages | No | |
| activities | No | |
| exclusions | No | |
| from_price | No | Lowest adult price. |
| hero_image | No | Main photo URL. |
| inclusions | No | |
| cancellation | No | free, flexible, partial, or non_refundable. |
| checkout_url | No | TripWays checkout for this tour. |
| destinations | No | |
| hotel_pickup | No | |
| duration_text | No | |
| gttd_eligible | No | Listed on Google Things to Do. |
| duration_hours | No | |
| bookable_natively | No | True when checkout_url opens TripWays checkout; false when it opens the operator calendar. |
| meeting_pickup_label | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description adds meaningful behavior beyond that: this returns static catalog content (summary, itinerary, inclusions, cancellation policy, hero_image, checkout_url) while volatile data lives in the two named siblings. It doesn't address error behavior for a nonexistent id, which is the only notable gap.
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?
Two sentences, front-loaded with the action and the identifier source, then a short routing clause naming the alternatives. No filler and nothing redundant with the 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?
For a single-parameter read tool with an output schema and full annotation coverage, this is complete: the agent knows what it gets, how to form the key, and which siblings cover the data this tool deliberately omits.
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 0%, so the description must carry the load, and it does: it translates bokun_id into 'the number in tripways.com/t/{id}', which tells the agent where to obtain the value. It doesn't restate the numeric-only pattern, but the URL decoding implies it clearly enough.
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 (fetch full details of one tour) and pins the identifier semantics to a concrete artifact ('the number in tripways.com/t/{id}'). It also enumerates the payload, so an agent can distinguish it from search_tours and the availability/quote siblings 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?
Explicitly routes live dates and group totals to check_availability and get_price_quote, which is exactly the boundary an agent needs. It doesn't state a when-not condition for this tool itself (e.g., use search_tours first to find an id), so it falls just short of full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_tour_reviewsGet tour reviewsARead-onlyIdempotentInspect
Get the rating summary and written reviews for one TripWays tour by bokun_id. Written reviews come from travelers who booked on TripWays and carry first name, country, date, star rating, and text; the overall rating can also include ratings from other platforms. limit sets how many written reviews to return (1 to 10, default 5, newest first).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| bokun_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| url | No | |
| note | No | |
| error | No | Present when ok is false. code: tour_not_found, destination_not_found, destination_ambiguous, or unpriced. message is written for the traveler. |
| rating | No | |
| reviews | No | |
| bokun_id | No | |
| site_reviews | No | Reviews written on TripWays by travelers who booked. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnly, idempotent, non-destructive and closed-world behavior. The description adds genuinely useful non-schema context: reviews originate only from TripWays bookings while the aggregate rating may include other platforms, and written reviews are returned newest first.
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?
A single front-loaded sentence carrying purpose, provenance, and the limit semantics with no filler. Every clause (review contents, rating provenance, ordering) earns its place.
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 an output schema present, return values need not be detailed, and the description still sketches what reviews contain (name, country, date, star rating, text). For a two-parameter read tool, nothing essential 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 description coverage is 0%, so the description carries the load, and it does: it explains bokun_id identifies a single TripWays tour and spells out limit's range, default, and ordering. It stops short of explaining what a bokun_id is or where it comes from, leaving a small gap.
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 ('Get the rating summary and written reviews for one TripWays tour') and scopes it to a single tour by bokun_id. This distinguishes it from siblings like get_tour_details or search_tours without needing to open a 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?
Usage is implied: you call it when you want reviews for a known tour id. However, no explicit when-to-use/when-not guidance or named alternative (e.g., get_tour_details) is offered, so the agent must infer that reviews are not included in the general tour lookup.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_toursSearch toursARead-onlyIdempotentInspect
Search the TripWays catalog of bookable tours, day trips, and activities worldwide. Pass a natural-language query plus any filters you already know: destination, price range in USD, duration in hours, activity, theme, or cancellation policy. Returns ranked tours with bokun_id, title, from-price, duration, destinations, rating, cancellation policy, hero_image, the TripWays page (url), and checkout_url. For live dates, remaining seats, or a group total, use check_availability and get_price_quote.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes | Natural-language search, e.g. 'family food tour in Rome under $100'. | |
| theme | No | ||
| activity | No | Activity facet, e.g. food, hiking, snorkeling. | |
| price_max | No | ||
| price_min | No | ||
| destination | No | Place name (city, region, country, or well-known area/landmark). Resolved against TripWays destinations; a landmark that is not a destination is added to the search text. | |
| cancellation | No | ||
| duration_hours_max | No | ||
| duration_hours_min | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| note | No | Why the list is empty or how the destination was read. |
| error | No | Present when ok is false. code: tour_not_found, destination_not_found, destination_ambiguous, or unpriced. message is written for the traveler. |
| tours | No | Ranked tours; empty when nothing matched (see note). |
| guidance | No | |
| did_you_mean | No | Candidate destinations when the place name matched more than one location. |
| destination_resolved | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is covered structurally. The description adds that results are 'ranked' and enumerates returned fields, which is useful behavioral context, but it adds nothing about pagination limits or scoring behavior beyond the limit cap in the 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?
Three sentences, each earning its place: what it searches, how to call it, what it returns, and the sibling handoff. The core purpose is front-loaded in the first clause with no filler.
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?
An output schema exists, so return values need not be explained, though the description redundantly enumerates them. Given the 10-parameter surface and low schema coverage, the description covers the meaningful filter semantics and routing; only the untouched limit/duration-range params leave a minor gap.
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?
With only 30% schema description coverage across 10 params, the description compensates well by naming the filter families (destination, price range in USD, duration in hours, activity, theme, cancellation policy) and clarifying the USD unit, which the schema's price_min/price_max do not state. It does not explain limit or the duration_min/max pairing explicitly, so it is not exhaustive.
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 (Search) and resource (TripWays catalog of bookable tours, day trips, activities), and explicitly contrasts scope with siblings by routing live availability/pricing to check_availability and get_price_quote. An agent can distinguish it from get_tour_details and get_destination_info without opening any 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?
Gives clear usage context ('Pass a natural-language query plus any filters you already know') and names two alternatives with the conditions that select them (live dates, remaining seats, group total). It stops short of an explicit when-not-to-use statement for search itself, but the routing is unambiguous.
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.
6 tool updates
- Added
compare_tours - Added
find_alternatives - Added
get_cancellation_policy - Added
get_itinerary_ideas - Added
get_meeting_point - Added
get_tour_reviews
6 tool updates
- Changed
check_availability1 field changed- added
Output schema / properties / errorAdded value: +{ + "description": "Present when ok is false. code: tour_not_found, destination_not_found, destination_ambiguous, or unpriced. message is written for the traveler.", + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + } + }, + "type": "object" +}
- Changed
get_booking_link1 field changed- added
Output schema / properties / errorAdded value: +{ + "description": "Present when ok is false. code: tour_not_found, destination_not_found, destination_ambiguous, or unpriced. message is written for the traveler.", + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + } + }, + "type": "object" +}
- Changed
get_destination_info2 fields changed- added
Output schema / properties / did_you_meanAdded value: +{ + "description": "Candidate destinations when the place name matched more than one location.", + "type": "array" +} - added
Output schema / properties / errorAdded value: +{ + "description": "Present when ok is false. code: tour_not_found, destination_not_found, destination_ambiguous, or unpriced. message is written for the traveler.", + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + } + }, + "type": "object" +}
- Changed
get_price_quote1 field changed- added
Output schema / properties / errorAdded value: +{ + "description": "Present when ok is false. code: tour_not_found, destination_not_found, destination_ambiguous, or unpriced. message is written for the traveler.", + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + } + }, + "type": "object" +}
- Changed
get_tour_details1 field changed- added
Output schema / properties / errorAdded value: +{ + "description": "Present when ok is false. code: tour_not_found, destination_not_found, destination_ambiguous, or unpriced. message is written for the traveler.", + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + } + }, + "type": "object" +}
- Changed
search_tours2 fields changed- added
Output schema / properties / did_you_meanAdded value: +{ + "description": "Candidate destinations when the place name matched more than one location.", + "type": "array" +} - added
Output schema / properties / errorAdded value: +{ + "description": "Present when ok is false. code: tour_not_found, destination_not_found, destination_ambiguous, or unpriced. message is written for the traveler.", + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + } + }, + "type": "object" +}
6 tool updates
- First observed
check_availability - First observed
get_booking_link - First observed
get_destination_info - First observed
get_price_quote - First observed
get_tour_details - First observed
search_tours
Publisher details
- Operator
- TripWays
- Operator website
- https://tripways.com · Publisher source
- Vendor relationship
- First-party
- Documentation
- https://TripWays.com · Publisher source
- Trust center
- https://tripways.com/mcp
- Restrictions
- No Auth, Fair Use Policy
Related MCP Connectors
Search & compare prices for tours, activities and tickets across multiple providers.
Free walking tours & activities in 1,000+ cities — live availability, ratings & booking links.
Discover and book theatre, tours, attractions, and live experiences worldwide. No API key required.
Search tours, attraction tickets, and holiday packages across 24 countries.
Related MCP Servers
- AlicenseAqualityFmaintenanceReal-time last-minute tour and activity booking across 18 suppliers in 15 countries via the OCTO open standard. Search available slots, create Stripe checkout sessions, and check booking status.41MIT
- AlicenseAqualityCmaintenanceDiscover and book theatre, shows, events, tours and experiences across 700+ cities worldwide on tickadoo® with real-time pricing and booking links.4494 npm2MIT
- AlicenseNot gradedqualityDmaintenanceEnables searching, browsing, and booking tours and unique travel experiences on GetExperience.com via MCP, with support for both guest payments and B2B partner integrations.MIT
- AlicenseBqualityAmaintenanceOfficial MCP server for MAQAMI, a hotel and flight booking platform with 3M+ hotels. Search live hotel rates and flights, look up places, airports and hotel details, then prebook and book. Remote Streamable HTTP endpoint, no API key required.1241428 npm2MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.