Skip to main content
Glama

Server Details

Find, price, and book tours, day trips, and activities worldwide, with live dates and prices.

Ownership verified
Status
Healthy
Uptime
93.5% over 43 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
ChatGPT
TripWays
Claude
mcp.tripways.com

TDQS

A4.4/5.0

Scored across 12 tools

Disambiguation5/5

Each tool has a clearly distinct role: catalog search, destination resolution, single-tour details, multi-tour comparison, live availability, live pricing, checkout-link generation, cancellation terms, meeting points, reviews, alternatives, and itinerary suggestions. Overlap between search_tours, find_alternatives, compare_tours, and get_tour_details is resolved by different inputs and outputs, so an agent can reliably select the right tool.

Naming Consistency5/5

All 12 tools use a consistent snake_case verb_noun pattern such as check_availability, get_price_quote, search_tours, and compare_tours. The convention is predictable throughout with no mixed styles or vague names.

Tool Count5/5

Twelve tools is well scoped for a tour discovery and booking-intent server. Each tool covers a distinct part of the traveler workflow, and there are no redundant or trivial tools.

Completeness5/5

The surface covers the full pre-booking lifecycle: destination resolution, catalog search, tour details, comparisons, alternatives, itinerary ideas, live availability, live pricing, checkout links, cancellation policies, meeting points, and reviews. Payment and seat-holding are explicitly out of scope and handled by the checkout link, so no obvious operational gap remains.

Available Tools

12 tools
check_availabilityCheck availabilityA
Read-onlyIdempotent
Inspect

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; its rate_options name and price the options in rate_ids.

NameRequiredDescriptionDefault
dateYes
bokun_idYes
date_endNoInclusive end; default = date. Max 31 days.
travelersNoSimple ages; mapped to occupied seats (infants excluded unless the tour has an infant category). Used only when party_size is omitted.
party_sizeNoOccupied seats to keep (not ticket count). Slots with availabilityCount < party_size are omitted unless unlimited. Wins over travelers when both are set.

Output Schema

NameRequiredDescription
okYes
noteNo
errorNoPresent when ok is false. code: tour_not_found, destination_not_found, destination_ambiguous, or unpriced. message is written for the traveler.
slotsNoOpen start times that fit the party.
reasonNo
statusNook, no_schedule, no_fit, or calendar_gone.
bokun_idNo
checkout_urlNo
bookable_nativelyNo

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations' read-only and idempotent hints, the description discloses the filtering behavior ('slots that cannot fit the group are left out'), the precedence rule between party_size and travelers, the 31-day range cap, and the status values ok, no_schedule, no_fit, and calendar_gone. These are substantive behavioral traits that help an agent interpret results correctly.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with purpose and then moves efficiently through input selection, status values, and the get_price_quote handoff. It is dense but appropriately sized; the final sentence about rate_options and rate_ids is slightly compressed but still earns its place by linking to the pricing sibling.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

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 explained, and the description still names the status values and the sibling to use for pricing. It leaves the meanings of no_schedule, no_fit, and calendar_gone implicit, but overall it gives enough context for an agent to call the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 60%, and the description mostly restates what the schema already says about party_size, travelers, and their precedence. It adds little for the undocumented bokun_id and date parameters, and does not explain formats or edge cases beyond the schema's own patterns and constraints.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb and resource ('Check live start times and remaining seats') plus the exact scope: a TripWays tour, one date or a range up to 31 days. It also distinguishes this tool from get_price_quote by assigning pricing to that sibling, so an agent can tell them apart without reading the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It clearly says to use get_price_quote with the same date, start time, and travelers for the total, which gives a concrete handoff condition. It also states party_size wins over travelers when both are supplied. It does not explicitly list when not to use this tool, so it stops short of a full when/when-not routing statement.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

compare_toursCompare toursA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
bokun_idsYesTwo to four tour ids (the number in tripways.com/t/{id}).

Output Schema

NameRequiredDescription
okYes
noteNo
errorNoPresent when ok is false. code: tour_not_found, destination_not_found, destination_ambiguous, or unpriced. message is written for the traveler.
toursNoOne row per tour found, in the order asked.
not_foundNoIds that are not bookable tours.
highlightsNobokun_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

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive, closed-world behavior. The description adds real value beyond that: it discloses the derived verdicts returned (lowest price, shortest duration, best rating with a 10+ review threshold, free cancellation flags) and how unresolvable ids surface in not_found.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action, then the returned attributes and derived picks, then the sibling routing. Every sentence earns its place with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present and full param coverage, the description supplies the extra semantics an agent needs: the derived 'best' logic and not_found behavior. Minor residual gap is ordering/pagination of results, which is low-impact for a max-4-item comparison.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the schema already documents the 2-4 count, uniqueness, and the tripways.com/t/{id} form. The description repeats the count and id meaning without adding format or edge-case detail beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Compare 2 to 4 TripWays tours side by side by bokun_id') and enumerates the compared attributes. It also distinguishes itself from siblings by naming check_availability and get_price_quote for a different need.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Clear positive guidance: use this to compare 2-4 tours by bokun_id, and route to check_availability/get_price_quote for group totals on a date. Lacks an explicit exclusion such as pointing to get_tour_details for a single tour, so 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.

find_alternativesFind alternativesA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
dateYes
limitNo
bokun_idYes
date_endNoInclusive end; default = date. Max 31 days.
travelersNoSimple ages; mapped to occupied seats. Used only when party_size is omitted.
party_sizeNoOccupied seats to keep. Wins over travelers when both are set.

Output Schema

NameRequiredDescription
okYes
noteNo
errorNoPresent when ok is false. code: tour_not_found, destination_not_found, destination_ambiguous, or unpriced. message is written for the traveler.
sourceNoThe tour that was asked about and its own status for these dates.
checkedNoHow many similar tours' calendars were read.
alternativesNo

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, idempotent, open-world, and non-destructive behavior. The description adds non-obvious behavior: it reads several live calendars, may take a few seconds, and returns up to limit tours with card data and up to three open start times plus original-tour status. No contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with purpose, then invocation, then return and latency expectations. The limit/default detail repeats the schema, but every sentence contributes useful selection or expectation-setting information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only tool with annotations, an output schema, and nested parameters, the description covers purpose, invocation, return shape, latency, and date-range cap. Remaining gaps are mostly sibling routing rather than missing call-critical information.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema already documents date_end, travelers precedence, and party_size precedence, but overall coverage is 50%. The description adds meaning for bokun_id ('the tour the traveler wanted'), date/date-range scope, and party_size-or-travelers, but does not fully explain the nested travelers object or all constraints beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Find tours similar to one TripWays tour') and scopes it to open start times on a date or date range for a group. It is clearly different in substance from check_availability or search_tours, though it does not name a sibling explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides invocation guidance ('Pass the tour the traveler wanted ...'), which implies the use case, but it never says when to choose this over check_availability/search_tours or when not to use it. Alternatives and exclusions are left to inference.

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 policyA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
bokun_idYes

Output Schema

NameRequiredDescription
okYes
urlNoThe tour's TripWays page.
noteNo
errorNoPresent when ok is false. code: tour_not_found, destination_not_found, destination_ambiguous, or unpriced. message is written for the traveler.
cutoffNoHow long before the start the terms apply.
summaryNoOne-line terms, e.g. 'Free Cancellation'.
bokun_idNo
guidanceNo
policy_textNoThe operator's policy text.
cancellationNofree, flexible, partial, or non_refundable.
refund_percentNo

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 destinationA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
queryYes
country_codeNoOptional ISO2 pin, e.g. FR.

Output Schema

NameRequiredDescription
okYes
errorNoPresent when ok is false. code: tour_not_found, destination_not_found, destination_ambiguous, or unpriced. message is written for the traveler.
destinationNo
did_you_meanNoCandidate destinations when the place name matched more than one location.

TDQS

A4.9/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 ideasA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
daysNo
interestsNoOptional, e.g. 'food and history'.
destinationYesCity, region, or country, e.g. 'Rome' or 'Phuket'.

Output Schema

NameRequiredDescription
okYes
daysNo
noteNo
errorNoPresent when ok is false. code: tour_not_found, destination_not_found, destination_ambiguous, or unpriced. message is written for the traveler.
did_you_meanNoCandidate destinations when the place name matched more than one location.
days_requestedNo
longer_optionsNoMulti-day tours, kept out of the day plan.
destination_resolvedNo

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive, closed-world behavior, so the safety profile is covered. The description adds real value beyond that: the result structure (from-prices, links, multi-day tours listed apart) and the important caveat that availability, seats, and group totals are unverified. It does not discuss result size, empty-result behavior, or rate limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences, front-loaded with purpose, then parameters, then output shape, then the caveat — each carrying distinct information with no restatement or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a three-parameter read-only suggestion tool with an output schema, nothing essential is missing: inputs, result structure, and the key limitation (no live availability) are all stated. The remaining gaps, such as empty-destination handling, are minor.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 67%; the description reinforces the days bounds (1 to 7, default 3) and broadens the interests examples to 'food, history, or boat trips' beyond the schema's single example. It explains what interests actually do (shape the suggested plan), which the schema does not.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource — 'Suggest a day-by-day plan of bookable TripWays tours for a destination' — and the structured shape of the result (full-day tour or morning/afternoon pair, multi-day listed apart). This is clearly distinct from siblings like search_tours or compare_tours, which return flat lists or comparisons rather than a plan.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'These are suggestions only: dates, seats, and group totals are not checked' establishes the planning context and implicitly routes verification to check_availability/get_price_quote. It never names an alternative tool explicitly, so the agent must infer the handoff rather than being told it.

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 pointA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
bokun_idYes

Output Schema

NameRequiredDescription
okYes
urlNo
noteNo
errorNoPresent when ok is false. code: tour_not_found, destination_not_found, destination_ambiguous, or unpriced. message is written for the traveler.
bokun_idNo
hotel_pickupNo
meeting_pointNoThe operator's meeting point text.
what_to_bringNo
know_before_you_goNo
meeting_pickup_labelNoe.g. 'Pickup available' or 'Meet on location'.

TDQS

A4/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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 quoteA
Read-onlyIdempotent
Inspect

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. Without rate_id it prices the option the tour page advertises (else the operator's default, then the cheapest option that fits the group). rate_options lists every option at that start time with its total for the same travelers; pass one's rate_id to price that option. The start time can be left out when the date has only one. A quote does not hold seats or charge anything. Optional extras and promo codes are not included. When no option can price the mix, the result is unpriced and the message gives the group size the options take. from_price is what one adult pays (the price Google shows); group_price, when present, is the per-person price for a group as the tour page shows it.

NameRequiredDescriptionDefault
dateYes
rate_idNoOption to price: a rate_id from rate_options (or check_availability rate_ids). Omit for the option the tour page advertises.
bokun_idYes
travelersNoSimple ages; mapped to Bokun pricing categories.
start_timeNoHH:MM if start_time_id unknown.
start_time_idNo

Output Schema

NameRequiredDescription
okYes
dateNo
errorNoPresent when ok is false. code: tour_not_found, destination_not_found, destination_ambiguous, or unpriced. message is written for the traveler.
reasonNo
rate_idNoThe option priced. Pass to get_booking_link.
bokun_idNo
currencyNo
from_priceNoThe tour's From price: what one adult pays on the option the tour page advertises, the price Google shows. Not the price of this quote; that is package_total.
per_personNoWhat each traveler pays in this quote, when all are one age group on a per-person option (package_total split evenly).
quote_kindNo
rate_titleNo
start_timeNo
group_priceNoPresent when the tour page also shows a group price, for example "2 travelers: $187.09 each": what each pays when that many adults book together on the advertised option. Quote it as given.
checkout_urlNoCheckout preset to this date, time, and travelers.
rate_optionsNoEvery option at this start time. Priced options carry package_total for the same travelers; unpriced ones carry min_travelers or max_travelers when group size is the reason. Pass rate_id to get_price_quote or get_booking_link to choose one.
package_totalNoTotal for the whole group, before optional extras and promo codes.
pickup_chargeNoCompulsory pickup / drop-off charge, already in package_total.
promo_appliedNo
min_participantsNo
travelers_pricedNoTraveler counts the total covers.
bookable_nativelyNo
from_price_basis_adultsNoTravelers from_price covers: 1, or the minimum group on a tour sold only to groups (from_price is then that group's total).
includes_required_extrasNo
optional_extras_excludedNo
required_extras_unpricedNo

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the readOnly/idempotent annotations: states a quote holds no seats and charges nothing, excludes extras and promo codes, and describes the unpriced outcome with a message giving the group size the options can take. This is exactly the extra context an agent needs before calling.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Dense and front-loaded, starting with what is priced and following with the rate_id ladder, then behavioral caveats. A few sentences (the rate_id restatement) duplicate the schema, which trims a point off an otherwise efficient definition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a six-param pricing tool with an output schema, the description covers fallback behavior, optional parameters, exclusivity of extras/promos, and the failure mode. It also clarifies what from_price and group_price mean, so an agent can interpret results without guessing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 50% schema coverage, the description compensates by explaining the pricing fallback for a missing rate_id and the condition for omitting start_time, plus how traveler mixes map to pricing. It repeats the rate_id schema description somewhat, and travel-mix category mapping stays briefly noted rather than fully elaborated.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (live total for a TripWays tour on a date/start time for a traveler mix) and scopes the pricing source to the operator's booking calendar. It also distinguishes the rate_options path from check_availability, making it easy to tell apart from siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly explains the rate_id decision ladder (advertised option → operator default → cheapest fitting option), when to pass a rate_id from rate_options, and that start_time can be omitted for single-time dates. Effectively states when and how to use it rather than leaving options to inference.

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 detailsA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
bokun_idYes

Output Schema

NameRequiredDescription
okYes
urlNoThe tour's TripWays page.
errorNoPresent when ok is false. code: tour_not_found, destination_not_found, destination_ambiguous, or unpriced. message is written for the traveler.
titleNo
ratingNo
reasonNoWhy checkout works the way it does, e.g. pickup_required.
themesNo
summaryNo
bokun_idNoTour id; the number in tripways.com/t/{id}.
guidanceNo
itineraryNo
languagesNo
activitiesNo
exclusionsNo
from_priceNoWhat one adult pays: the tour page's From price, the same price Google shows.
hero_imageNoMain photo URL.
inclusionsNo
cancellationNofree, flexible, partial, or non_refundable.
checkout_urlNoTripWays checkout for this tour.
destinationsNo
hotel_pickupNo
duration_textNo
gttd_eligibleNoListed on Google Things to Do.
duration_hoursNo
bookable_nativelyNoTrue when checkout_url opens TripWays checkout; false when it opens the operator calendar.
meeting_pickup_labelNo

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, and the description adds meaningful context beyond them: the response is a static catalog snapshot, with live dates and group totals explicitly excluded. It doesn't mention auth requirements, rate limits, or error behavior for a nonexistent bokun_id, so it stops short of full disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The key identifier and scope are front-loaded, and the second sentence is a tight hand-off to the money/availability tools. The long field enumeration partially duplicates the output schema, making one sentence do more work than necessary.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

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 needn't be explained, yet the description still previews the payload shape well enough to plan a call. For a single-parameter read tool with strong annotations, nothing an agent needs is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for the single parameter, so the description must carry the meaning — and it does, explaining that bokun_id is the numeric id from the tripways.com/t/{id} URL. It adds no note on the digits-only pattern or what happens with an invalid id, keeping it below a 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get the full details of one TripWays tour') and disambiguates the identifier by tying bokun_id to the number in tripways.com/t/{id}. It also enumerates the returned content and names the siblings that serve live pricing/availability, so the agent can distinguish it from check_availability 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.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes dynamic concerns elsewhere: 'Live dates and group totals come from check_availability and get_price_quote.' That is clear positive guidance on when to use alternatives, but it doesn't address the other overlapping siblings (get_meeting_point, get_cancellation_policy, get_tour_reviews), which return subsets of the same data.

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 reviewsA
Read-onlyIdempotent
Inspect

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).

NameRequiredDescriptionDefault
limitNo
bokun_idYes

Output Schema

NameRequiredDescription
okYes
urlNo
noteNo
errorNoPresent when ok is false. code: tour_not_found, destination_not_found, destination_ambiguous, or unpriced. message is written for the traveler.
ratingNo
reviewsNo
bokun_idNo
site_reviewsNoReviews written on TripWays by travelers who booked.

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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 toursA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
limitNo
queryYesNatural-language search, e.g. 'family food tour in Rome under $100'.
themeNo
activityNoActivity facet, e.g. food, hiking, snorkeling.
price_maxNo
price_minNo
destinationNoPlace 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.
cancellationNo
duration_hours_maxNo
duration_hours_minNo

Output Schema

NameRequiredDescription
okYes
noteNoWhy the list is empty or how the destination was read.
errorNoPresent when ok is false. code: tour_not_found, destination_not_found, destination_ambiguous, or unpriced. message is written for the traveler.
toursNoRanked tours; empty when nothing matched (see note).
guidanceNo
did_you_meanNoCandidate destinations when the place name matched more than one location.
destination_resolvedNo

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover read-only, idempotent and closed-world behavior. The description adds that results are ranked and that filters are optional ('any filters you already know'), which guides partial-query usage. It does not disclose result-set sizing or the effect of the limit cap, but with annotations carrying the safety profile this is close to complete.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with purpose and usage before the field list. The return-field enumeration is somewhat wasted because an output schema exists, but it does not obscure the actionable guidance.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 10-parameter, read-only search tool with an output schema, the description covers purpose, filter semantics and sibling routing. Only behavior around the limit cap and result ranking/ordering is unstated, which is a small residual gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 30%, so the description does real work: it enumerates query, destination, price range in USD, duration in hours, activity, theme and cancellation policy, confirming all are optional refinements. Only 'limit' is left unexplained, which is a minor gap given its documented default and maximum in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Search the TripWays catalog of bookable tours, day trips, and activities worldwide') and scopes it to catalog discovery rather than live availability. An agent can distinguish it from check_availability and get_price_quote without reading either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly describes two modes: free-text query plus optional known filters. It also names the exact conditions that route elsewhere — live dates, remaining seats, group totals go to check_availability and get_price_quote. This is a clear when-to-use / when-not-to-use split.

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.

  1. 8 tool updates
    • Changedcheck_availability1 field changed
      • addedOutput schema / properties / slots / items / properties / rate_ids / description
        Added value: +"Options (rate ids) offered at this start time."
    • Changedcompare_tours1 field changed
      • changedOutput schema / properties / tours / items / properties / from_price / description
        Previous value: -"Lowest adult price."New value: +"What one adult pays: the tour page's From price, the same price Google shows."
    • Changedfind_alternatives1 field changed
      • changedOutput schema / properties / alternatives / items / properties / tour / properties / from_price / description
        Previous value: -"Lowest adult price."New value: +"What one adult pays: the tour page's From price, the same price Google shows."
    • Changedget_booking_link1 field changed
      • addedInput schema / properties / rate_id / description
        Added value: +"Option to preselect: the rate_id get_price_quote priced or one from its rate_options. Omit for the option a quote would price."
    • Changedget_itinerary_ideas2 fields changed
      • changedOutput schema / properties / days / items / properties / tours / items / properties / from_price / description
        Previous value: -"Lowest adult price."New value: +"What one adult pays: the tour page's From price, the same price Google shows."
      • changedOutput schema / properties / longer_options / items / properties / from_price / description
        Previous value: -"Lowest adult price."New value: +"What one adult pays: the tour page's From price, the same price Google shows."
    • Changedget_price_quote9 fields changed
      • addedInput schema / properties / rate_id
        Added value: +{
        +  "description": "Option to price: a rate_id from rate_options (or check_availability rate_ids). Omit for the option the tour page advertises.",
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedOutput schema / properties / from_price / description
        Added value: +"The tour's From price: what one adult pays on the option the tour page advertises, the price Google shows. Not the price of this quote; that is package_total."
      • addedOutput schema / properties / from_price_basis_adults
        Added value: +{
        +  "description": "Travelers from_price covers: 1, or the minimum group on a tour sold only to groups (from_price is then that group's total).",
        +  "type": "integer"
        +}
      • addedOutput schema / properties / group_price
        Added value: +{
        +  "description": "Present when the tour page also shows a group price, for example \"2 travelers: $187.09 each\": what each pays when that many adults book together on the advertised option. Quote it as given.",
        +  "properties": {
        +    "adults": {
        +      "type": "integer"
        +    },
        +    "per_person": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "total": {
        +      "minimum": 0,
        +      "type": "number"
        +    }
        +  },
        +  "type": "object"
        +}
      • addedOutput schema / properties / per_person
        Added value: +{
        +  "description": "What each traveler pays in this quote, when all are one age group on a per-person option (package_total split evenly).",
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedOutput schema / properties / pickup_charge
        Added value: +{
        +  "description": "Compulsory pickup / drop-off charge, already in package_total.",
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedOutput schema / properties / rate_id
        Added value: +{
        +  "description": "The option priced. Pass to get_booking_link.",
        +  "type": "integer"
        +}
      • addedOutput schema / properties / rate_options
        Added value: +{
        +  "description": "Every option at this start time. Priced options carry package_total for the same travelers; unpriced ones carry min_travelers or max_travelers when group size is the reason. Pass rate_id to get_price_quote or get_booking_link to choose one.",
        +  "items": {
        +    "properties": {
        +      "max_travelers": {
        +        "type": "integer"
        +      },
        +      "min_travelers": {
        +        "type": "integer"
        +      },
        +      "package_total": {
        +        "minimum": 0,
        +        "type": "number"
        +      },
        +      "pickup_charge": {
        +        "minimum": 0,
        +        "type": "number"
        +      },
        +      "priced": {
        +        "type": "boolean"
        +      },
        +      "rate_id": {
        +        "type": "integer"
        +      },
        +      "required_extras_unpriced": {
        +        "type": "boolean"
        +      },
        +      "title": {
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / required_extras_unpriced
        Added value: +{
        +  "type": "boolean"
        +}
    • Changedget_tour_details1 field changed
      • changedOutput schema / properties / from_price / description
        Previous value: -"Lowest adult price."New value: +"What one adult pays: the tour page's From price, the same price Google shows."
    • Changedsearch_tours1 field changed
      • changedOutput schema / properties / tours / items / properties / from_price / description
        Previous value: -"Lowest adult price."New value: +"What one adult pays: the tour page's From price, the same price Google shows."
  2. 6 tool updates
    • Addedcompare_tours
    • Addedfind_alternatives
    • Addedget_cancellation_policy
    • Addedget_itinerary_ideas
    • Addedget_meeting_point
    • Addedget_tour_reviews
  3. 6 tool updates
    • Changedcheck_availability1 field changed
      • addedOutput schema / properties / error
        Added 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"
        +}
    • Changedget_booking_link1 field changed
      • addedOutput schema / properties / error
        Added 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"
        +}
    • Changedget_destination_info2 fields changed
      • addedOutput schema / properties / did_you_mean
        Added value: +{
        +  "description": "Candidate destinations when the place name matched more than one location.",
        +  "type": "array"
        +}
      • addedOutput schema / properties / error
        Added 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"
        +}
    • Changedget_price_quote1 field changed
      • addedOutput schema / properties / error
        Added 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"
        +}
    • Changedget_tour_details1 field changed
      • addedOutput schema / properties / error
        Added 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"
        +}
    • Changedsearch_tours2 fields changed
      • addedOutput schema / properties / did_you_mean
        Added value: +{
        +  "description": "Candidate destinations when the place name matched more than one location.",
        +  "type": "array"
        +}
      • addedOutput schema / properties / error
        Added 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"
        +}
  4. 6 tool updates
    • First observedcheck_availability
    • First observedget_booking_link
    • First observedget_destination_info
    • First observedget_price_quote
    • First observedget_tour_details
    • First observedsearch_tours

Publisher details

Operator
TripWays
Vendor relationship
First-party
Restrictions
No Auth, Fair Use Policy

Related MCP Connectors

Related MCP Servers

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources