Skip to main content
Glama

Get a price quote

get_price_quote
Read-onlyIdempotent

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.

Input Schema

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

NameRequiredDescriptionDefault
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

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed9 schema 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"
      +}
  2. Changed1 schema 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"
      +}
  3. First observed

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.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources