Skip to main content
Glama

Get travel insurance quotes

get_quote
Read-only

Use HelloSafe to get travel-insurance quotes when the user asks for travel insurance for a trip. Returns priced offers from HelloSafe partners and renders the comparison widget. Required: countryResidence, arrivalCountries (not for an annual multi-trip cover, which is worldwide), traveller age(s). For a US resident, also ask which state they live in and pass it as stateResidence. Everything else has a sensible default — never ask the user for an optional field. After calling, reply with 1-2 short sentences highlighting the recommended offer — never re-list offers as a table, never paste subscribe URLs.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
cardIdNoHelloSafe card ID returned by check_card_coverage. Pass it when the user holds a credit card with travel cover: offers are then re-ranked by how well they fill that card's coverage gaps, and each offer lists what it adds over the card (complementsCard).
localeNoLanguage the user is conversing in, as a BCP 47 tag or 2-letter code (e.g. "fr", "pt-BR"). ALWAYS pass it — the widget and all offer texts are localized with it. Falls back to the ChatGPT account locale, then to English.
tripInfoYesTrip details.
subscriptionIdNoExisting subscription ID to update instead of creating a new one.
displayCurrencyNoISO 4217 code to override the widget display currency. Omit unless the user explicitly asked for a different display currency than the trip-cost currency.
requiredCoveragesNoOptional filter on policy features, the guarantee filters of the HelloSafe comparison site: only the offers whose contract includes every listed cover are returned, that cover listed first. maternityCover = covers pregnancy; preExistingConditionsCover = covers pre-existing medical conditions; personalLiability; baggage; travelDelay; directHospitalBilling = the insurer pays the hospital directly; disability; searchAndRescue; earlyReturn; tripInterruption; electronics = electronic devices; cashAdvance; expatMaternity, expatDental, expatOptical (expatriates). Each trip purpose has its own filters, as on the site; a cover that is not one of them is ignored and reported. Set it only when the user explicitly asks for a policy that includes this cover; the tool never asks the user about their health. It changes neither prices nor eligibility; health-related covers are not stored.
cancelForAnyReasonNoCancel For Any Reason option, like trip cancellation: an add-on bought with the policy (extra cost, a purchase window counted from the first trip payment, usually 75 % of prepaid costs refunded). Sold to US residents only, on a forTourism, cruise or cancellation trip; true keeps the offers that sell it. Set it only when the user asks for it.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
errorNoHuman-readable reason when the quote could not be generated. Absent on success.
tripInfoNoNormalized trip parameters the quote was computed with.
cardContextNoPresent only when the quote was computed against a card (cardId argument): the card and its gaps.
subscribeUrlNoHelloSafe comparator URL for this quote. The widget already renders clickable buttons — never paste it in the reply.
translationsNoLocalized UI strings consumed by the widget — not meant for the assistant.
displayOffersNoPriced offers sorted by price, with the recommended offer (isBestScore=true) promoted first.
subscriptionIdNoQuote session ID — pass it back as `subscriptionId` to update this quote instead of creating a new one.
_assistantGuidanceNoGuidance for the assistant reply — follow "instruction".

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed6 schema fields changed
    • addedInput schema / properties / cancelForAnyReason
      Added value: +{
      +  "description": "Cancel For Any Reason option, like trip cancellation: an add-on bought with the policy (extra cost, a purchase window counted from the first trip payment, usually 75 % of prepaid costs refunded). Sold to US residents only, on a forTourism, cruise or cancellation trip; true keeps the offers that sell it. Set it only when the user asks for it.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / requiredCoverages
      Added value: +{
      +  "description": "Optional filter on policy features, the guarantee filters of the HelloSafe comparison site: only the offers whose contract includes every listed cover are returned, that cover listed first. maternityCover = covers pregnancy; preExistingConditionsCover = covers pre-existing medical conditions; personalLiability; baggage; travelDelay; directHospitalBilling = the insurer pays the hospital directly; disability; searchAndRescue; earlyReturn; tripInterruption; electronics = electronic devices; cashAdvance; expatMaternity, expatDental, expatOptical (expatriates). Each trip purpose has its own filters, as on the site; a cover that is not one of them is ignored and reported. Set it only when the user explicitly asks for a policy that includes this cover; the tool never asks the user about their health. It changes neither prices nor eligibility; health-related covers are not stored.",
      +  "items": {
      +    "enum": [
      +      "maternityCover",
      +      "preExistingConditionsCover",
      +      "personalLiability",
      +      "baggage",
      +      "travelDelay",
      +      "directHospitalBilling",
      +      "disability",
      +      "searchAndRescue",
      +      "earlyReturn",
      +      "tripInterruption",
      +      "electronics",
      +      "cashAdvance",
      +      "expatMaternity",
      +      "expatDental",
      +      "expatOptical"
      +    ],
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • changedInput schema / properties / tripInfo / properties / arrivalCountries / anyOf
      Previous value: -[
      -  {
      -    "items": {
      -      "pattern": "^[A-Za-z]{2}$",
      -      "type": "string"
      -    },
      -    "type": "array"
      -  },
      -  {
      -    "type": "string"
      -  }
      -]New value: +[
      +  {
      +    "items": {
      +      "pattern": "^([A-Za-z]{2}|SCH|sch)$",
      +      "type": "string"
      +    },
      +    "type": "array"
      +  },
      +  {
      +    "type": "string"
      +  }
      +]
    • changedInput schema / properties / tripInfo / properties / arrivalCountries / description
      Previous value: -"Destination countries as ISO 3166-1 alpha-2 codes. Prefer an array ([\"TH\",\"VN\"]); a comma-separated string also works. Required, EXCEPT for intent \"annual\": a yearly multi-trip cover is worldwide, so never ask for a destination then — omit it."New value: +"Destination countries as ISO 3166-1 alpha-2 codes. Prefer an array ([\"TH\",\"VN\"]); a comma-separated string also works. \"WW\" = the whole world (intents forTourism, cruise, digitalNomad); \"SCH\" = the whole Schengen area (intent schengenArea). Required, EXCEPT for intent \"annual\": a yearly multi-trip cover is worldwide, so never ask for a destination then — omit it."
    • changedInput schema / properties / tripInfo / properties / stateResidence / description
      Previous value: -"State of residence as its USPS 2-letter code (e.g. \"CA\", \"TX\") — for US residents only, ignored for every other country. US travel insurance is regulated state by state, so when countryResidence is \"US\" ASK THE USER which state they live in and pass it; never guess it from the destination or the chat language. The quote is still produced without it. The US territories are countries here, not states (a Puerto Rico resident is countryResidence \"PR\", never \"US\" + \"PR\")."New value: +"State of residence as its USPS 2-letter code (e.g. \"CA\", \"TX\") — for US residents only, ignored for every other country. US travel insurance is regulated state by state, so when countryResidence is \"US\" ASK THE USER which state they live in and pass it; never guess it from the destination or the chat language. No quote is computed without it. The US territories are countries here, not states (a Puerto Rico resident is countryResidence \"PR\", never \"US\" + \"PR\")."
    • changedOutput schema / properties / displayOffers / items / properties / profileGuarantees / description
      Previous value: -"What the contract of each offer states on four guarantees, for every offer that documents them (contract facts, the same for every buyer): pregnancyCover (value = last covered week of pregnancy, e.g. \"35 wks\"), preExistingConditions (illnesses known before departure), seniorConditions (value = maximum age covered, in years), cancelAnyReason (Cancel For Any Reason, US residents only: value = share of prepaid non-refundable costs refunded; always an add-on bought with the policy at extra cost, not in priceFullText). covered=false means the offer does not cover it. description is HelloSafe's summary of the contract for this trip purpose."New value: +"What the contract of each offer states on four guarantees, for every offer that documents them (contract facts, the same for every buyer): pregnancyCover (value = last covered week of pregnancy, e.g. \"35 wks\"), preExistingConditions (illnesses known before departure), seniorConditions (value = maximum age covered, in years), cancelAnyReason (Cancel For Any Reason, US residents only: value = share of prepaid non-refundable costs refunded; always an add-on bought with the policy at extra cost, not in priceFullText). covered=false means the offer does not cover it. description is HelloSafe's summary of the contract for this trip purpose; exclusions is given for the covers asked with requiredCoverages or cancelForAnyReason."
  2. Changed1 schema field changed
    • addedOutput schema / properties / displayOffers / items / properties / profileGuarantees
      Added value: +{
      +  "additionalProperties": {
      +    "additionalProperties": {},
      +    "properties": {
      +      "covered": {
      +        "type": "boolean"
      +      },
      +      "description": {
      +        "type": "string"
      +      },
      +      "exclusions": {
      +        "type": "string"
      +      },
      +      "value": {
      +        "type": "string"
      +      }
      +    },
      +    "type": "object"
      +  },
      +  "description": "What the contract of each offer states on four guarantees, for every offer that documents them (contract facts, the same for every buyer): pregnancyCover (value = last covered week of pregnancy, e.g. \"35 wks\"), preExistingConditions (illnesses known before departure), seniorConditions (value = maximum age covered, in years), cancelAnyReason (Cancel For Any Reason, US residents only: value = share of prepaid non-refundable costs refunded; always an add-on bought with the policy at extra cost, not in priceFullText). covered=false means the offer does not cover it. description is HelloSafe's summary of the contract for this trip purpose.",
      +  "propertyNames": {
      +    "type": "string"
      +  },
      +  "type": "object"
      +}
  3. Changed2 schema fields changed
    • changedInput schema / properties / tripInfo / properties / arrivalCountries / description
      Previous value: -"Destination countries as ISO 3166-1 alpha-2 codes. Prefer an array ([\"TH\",\"VN\"]); a comma-separated string also works."New value: +"Destination countries as ISO 3166-1 alpha-2 codes. Prefer an array ([\"TH\",\"VN\"]); a comma-separated string also works. Required, EXCEPT for intent \"annual\": a yearly multi-trip cover is worldwide, so never ask for a destination then — omit it."
    • changedInput schema / properties / tripInfo / required
      Previous value: -[
      -  "countryResidence",
      -  "arrivalCountries",
      -  "travellers"
      -]New value: +[
      +  "countryResidence",
      +  "travellers"
      +]
  4. Changed2 schema fields changed
    • changedInput schema / properties / tripInfo / properties / intent / description
      Previous value: -"Trip purpose. Map from the user message when clear: leisure / holidays / sightseeing → \"forTourism\"; study abroad, Erasmus, internship → \"studyInternship\"; working-holiday visa (PVT) → \"whv\"; yearly multi-trip cover → \"annual\"; long-term relocation → \"expat\"; cancellation-only (no medical) → \"cancellation\"; ski / trek / mountaineering → \"mountainTrip\"; cruise → \"cruise\"; remote-work nomading → \"digitalNomad\"; group of 10+ travellers → \"groupTravel\"; Schengen visa application → \"schengenArea\"; humanitarian mission or volunteering → \"humanitarian\"; au pair placement → \"auPair\"; business / work trip → \"toWork\"; returning home for a visit → \"backToHome\"; rental / Airbnb stay focus → \"rentalStay\". If you cannot confidently map the user's situation to one of these values, ASK THE USER which purpose fits best — do not guess. Note: \"annual\" and \"expat\" automatically force isAnnual=true."New value: +"Trip purpose. Map from the user message when clear: leisure / holidays / sightseeing → \"forTourism\"; study abroad, Erasmus, internship → \"studyInternship\"; working-holiday visa (PVT) → \"whv\"; yearly multi-trip cover → \"annual\"; long-term relocation → \"expat\"; cancellation-only (no medical) → \"cancellation\"; ski / trek / mountaineering → \"forTourism\" with the extreme sports option; cruise → \"cruise\"; remote-work nomading → \"digitalNomad\"; group of 10+ travellers → \"groupTravel\"; Schengen visa application → \"schengenArea\"; humanitarian mission or volunteering → \"humanitarian\"; au pair placement → \"auPair\"; a business trip, a visit back home or a rental stay → \"forTourism\". If you cannot confidently map the user's situation to one of these values, ASK THE USER which purpose fits best — do not guess. Note: \"annual\" and \"expat\" automatically force isAnnual=true."
    • changedInput schema / properties / tripInfo / properties / intent / enum
      Previous value: -[
      -  "forTourism",
      -  "schengenArea",
      -  "annual",
      -  "studyInternship",
      -  "whv",
      -  "cruise",
      -  "digitalNomad",
      -  "expat",
      -  "groupTravel",
      -  "rentalStay",
      -  "mountainTrip",
      -  "backToHome",
      -  "humanitarian",
      -  "auPair",
      -  "toWork",
      -  "cancellation"
      -]New value: +[
      +  "forTourism",
      +  "schengenArea",
      +  "annual",
      +  "studyInternship",
      +  "whv",
      +  "cruise",
      +  "digitalNomad",
      +  "expat",
      +  "groupTravel",
      +  "humanitarian",
      +  "auPair",
      +  "cancellation"
      +]
  5. Changed6 schema fields changed
    • changedOutput schema / properties / _assistantGuidance / properties / recommendedOffer / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": {},
      -    "properties": {
      -      "coverages": {
      -        "additionalProperties": {
      -          "type": "string"
      -        },
      -        "description": "Coverage label → covered amount for the recommended offer.",
      -        "propertyNames": {
      -          "type": "string"
      -        },
      -        "type": "object"
      -      },
      -      "insurerName": {
      -        "type": "string"
      -      },
      -      "name": {
      -        "type": "string"
      -      },
      -      "price": {
      -        "type": "string"
      -      }
      -    },
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": {},
      +    "properties": {
      +      "coverages": {
      +        "additionalProperties": {
      +          "type": "string"
      +        },
      +        "description": "Coverage label → covered amount for the recommended offer.",
      +        "propertyNames": {
      +          "type": "string"
      +        },
      +        "type": "object"
      +      },
      +      "insurerName": {
      +        "type": "string"
      +      },
      +      "name": {
      +        "type": "string"
      +      },
      +      "optionsNotTaken": {
      +        "additionalProperties": {
      +          "type": "string"
      +        },
      +        "description": "Options available on the recommended offer that this quote does NOT include (not covered unless the user adds them).",
      +        "propertyNames": {
      +          "type": "string"
      +        },
      +        "type": "object"
      +      },
      +      "price": {
      +        "type": "string"
      +      }
      +    },
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • addedOutput schema / properties / displayOffers / items / properties / featureDetails
      Added value: +{
      +  "additionalProperties": {
      +    "type": "string"
      +  },
      +  "description": "Second line of a feature row, part of that guarantee: on cancelTrip, the covered cancellation reasons (e.g. \"Any justified reason\"). They share the verdict of cancelTrip — never a cover of their own.",
      +  "propertyNames": {
      +    "type": "string"
      +  },
      +  "type": "object"
      +}
    • changedOutput schema / properties / displayOffers / items / properties / features / description
      Previous value: -"Coverage feature slug → formatted covered amount, already filtered for the trip purpose and converted to the display currency."New value: +"Coverage feature slug → formatted covered amount, already filtered for the trip purpose and converted to the display currency. Slugs listed in optionalFeatures are NOT covered: they are options the traveller has not added (value \"Optional\"). When cancellation is an option, its covered reasons are in featureDetails.cancelTrip, part of that guarantee and never covered on their own; on a cancellation-only trip they are their own cancellationReasons entry."
    • addedOutput schema / properties / displayOffers / items / properties / notIncludedFeatures
      Added value: +{
      +  "description": "Feature slugs of `features` that this offer does NOT cover (value \"Not included\"), listed last like the results page's \"Not covered\" section.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / displayOffers / items / properties / optionalFeatures
      Added value: +{
      +  "description": "Feature slugs of `features` that are options NOT taken on this quote (trip cancellation, studies interruption, extreme sports): available on the offer, not covered.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / displayOffers / items / properties / takenOptions
      Added value: +{
      +  "description": "Feature slugs of the options the traveller added on this quote (trip cancellation, extreme sports, studies interruption): covered, and part of their quote.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
  6. Changed1 schema field changed
    • addedInput schema / properties / tripInfo / properties / stateResidence
      Added value: +{
      +  "description": "State of residence as its USPS 2-letter code (e.g. \"CA\", \"TX\") — for US residents only, ignored for every other country. US travel insurance is regulated state by state, so when countryResidence is \"US\" ASK THE USER which state they live in and pass it; never guess it from the destination or the chat language. The quote is still produced without it. The US territories are countries here, not states (a Puerto Rico resident is countryResidence \"PR\", never \"US\" + \"PR\").",
      +  "pattern": "^[A-Za-z]{2}$",
      +  "type": "string"
      +}
  7. Changed3 schema fields changed
    • addedInput schema / properties / cardId
      Added value: +{
      +  "description": "HelloSafe card ID returned by check_card_coverage. Pass it when the user holds a credit card with travel cover: offers are then re-ranked by how well they fill that card's coverage gaps, and each offer lists what it adds over the card (complementsCard).",
      +  "type": "number"
      +}
    • changedInput schema / properties / locale / description
      Previous value: -"Language of the user. Defaults to the host locale."New value: +"Language the user is conversing in, as a BCP 47 tag or 2-letter code (e.g. \"fr\", \"pt-BR\"). ALWAYS pass it — the widget and all offer texts are localized with it. Falls back to the ChatGPT account locale, then to English."
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "$schema": "http://json-schema.org/draft-07/schema#",
      +  "additionalProperties": false,
      +  "properties": {
      +    "_assistantGuidance": {
      +      "additionalProperties": {},
      +      "description": "Guidance for the assistant reply — follow \"instruction\".",
      +      "properties": {
      +        "instruction": {
      +          "description": "How the assistant should present the result to the user.",
      +          "type": "string"
      +        },
      +        "recommendedOffer": {
      +          "anyOf": [
      +            {
      +              "additionalProperties": {},
      +              "properties": {
      +                "coverages": {
      +                  "additionalProperties": {
      +                    "type": "string"
      +                  },
      +                  "description": "Coverage label → covered amount for the recommended offer.",
      +                  "propertyNames": {
      +                    "type": "string"
      +                  },
      +                  "type": "object"
      +                },
      +                "insurerName": {
      +                  "type": "string"
      +                },
      +                "name": {
      +                  "type": "string"
      +                },
      +                "price": {
      +                  "type": "string"
      +                }
      +              },
      +              "type": "object"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "Compact summary of the offer HelloSafe recommends for this trip."
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "cardContext": {
      +      "additionalProperties": {},
      +      "description": "Present only when the quote was computed against a card (cardId argument): the card and its gaps.",
      +      "properties": {
      +        "cancellationOnlyGap": {
      +          "type": "boolean"
      +        },
      +        "cardId": {
      +          "type": "number"
      +        },
      +        "cardName": {
      +          "type": "string"
      +        },
      +        "gaps": {
      +          "description": "The card coverage gaps that drove the offer ranking.",
      +          "items": {},
      +          "type": "array"
      +        },
      +        "unknown": {
      +          "items": {},
      +          "type": "array"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "displayOffers": {
      +      "description": "Priced offers sorted by price, with the recommended offer (isBestScore=true) promoted first.",
      +      "items": {
      +        "additionalProperties": {},
      +        "properties": {
      +          "complementsCard": {
      +            "description": "Only when the quote carries a cardId: labels of the card's coverage gaps this offer fills — what it adds over the user's card.",
      +            "items": {
      +              "type": "string"
      +            },
      +            "type": "array"
      +          },
      +          "faq": {
      +            "description": "Frequently asked questions about this offer.",
      +            "items": {},
      +            "type": "array"
      +          },
      +          "features": {
      +            "additionalProperties": {
      +              "type": "string"
      +            },
      +            "description": "Coverage feature slug → formatted covered amount, already filtered for the trip purpose and converted to the display currency.",
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          },
      +          "id": {
      +            "description": "HelloSafe offer ID.",
      +            "type": "number"
      +          },
      +          "insurerLogoUrl": {
      +            "description": "Absolute URL of the insurer logo.",
      +            "type": "string"
      +          },
      +          "insurerName": {
      +            "description": "Insurer brand name.",
      +            "type": "string"
      +          },
      +          "isBestScore": {
      +            "description": "True for the single offer HelloSafe recommends for this trip (shown first).",
      +            "type": "boolean"
      +          },
      +          "isStartingPrice": {
      +            "description": "True when the price is a \"from\" price.",
      +            "type": "boolean"
      +          },
      +          "name": {
      +            "description": "Commercial name of the offer / formula.",
      +            "type": "string"
      +          },
      +          "noList": {
      +            "description": "Newline-separated list of exclusions.",
      +            "type": "string"
      +          },
      +          "priceFullText": {
      +            "description": "Total price for the whole trip and all travellers, formatted in the display currency (e.g. \"34,20 €\").",
      +            "type": "string"
      +          },
      +          "priceParts": {
      +            "additionalProperties": {},
      +            "description": "Price split into rendering parts (used by the widget).",
      +            "properties": {
      +              "decimal": {
      +                "type": "string"
      +              },
      +              "decimalSeparator": {
      +                "type": "string"
      +              },
      +              "integer": {
      +                "type": "string"
      +              },
      +              "symbol": {
      +                "type": "string"
      +              },
      +              "symbolPosition": {
      +                "description": "\"prefix\" or \"suffix\".",
      +                "type": "string"
      +              }
      +            },
      +            "type": "object"
      +          },
      +          "subscribeUrl": {
      +            "description": "HelloSafe comparator URL for this quote. The widget already renders it as a button — never paste it in the reply.",
      +            "type": "string"
      +          },
      +          "suffix": {
      +            "description": "Price period suffix key: \"perMonth\", \"perYear\", \"perDay\" or empty.",
      +            "type": "string"
      +          },
      +          "topBanner": {
      +            "description": "Short marketing highlight for this offer, if any.",
      +            "type": "string"
      +          },
      +          "yesList": {
      +            "description": "Newline-separated list of advantages.",
      +            "type": "string"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "error": {
      +      "description": "Human-readable reason when the quote could not be generated. Absent on success.",
      +      "type": "string"
      +    },
      +    "subscribeUrl": {
      +      "description": "HelloSafe comparator URL for this quote. The widget already renders clickable buttons — never paste it in the reply.",
      +      "type": "string"
      +    },
      +    "subscriptionId": {
      +      "description": "Quote session ID — pass it back as `subscriptionId` to update this quote instead of creating a new one.",
      +      "type": "string"
      +    },
      +    "translations": {
      +      "additionalProperties": {},
      +      "description": "Localized UI strings consumed by the widget — not meant for the assistant.",
      +      "propertyNames": {
      +        "type": "string"
      +      },
      +      "type": "object"
      +    },
      +    "tripInfo": {
      +      "additionalProperties": {},
      +      "description": "Normalized trip parameters the quote was computed with.",
      +      "properties": {
      +        "arrivalCountriesCodes": {
      +          "items": {
      +            "type": "string"
      +          },
      +          "type": "array"
      +        },
      +        "arrivalCountriesNames": {
      +          "description": "Destination country names in the response locale.",
      +          "items": {
      +            "type": "string"
      +          },
      +          "type": "array"
      +        },
      +        "countryResidenceCode": {
      +          "type": "string"
      +        },
      +        "countryResidenceName": {
      +          "type": "string"
      +        },
      +        "currency": {
      +          "description": "ISO 4217 currency the amounts are shown in.",
      +          "type": "string"
      +        },
      +        "endDate": {
      +          "type": "string"
      +        },
      +        "endDateLabel": {
      +          "type": "string"
      +        },
      +        "intentName": {
      +          "description": "Human-readable trip purpose.",
      +          "type": "string"
      +        },
      +        "isAnnual": {
      +          "type": "boolean"
      +        },
      +        "numberOfDays": {
      +          "type": "number"
      +        },
      +        "shouldCoverCancellation": {
      +          "type": "boolean"
      +        },
      +        "startDate": {
      +          "type": "string"
      +        },
      +        "startDateLabel": {
      +          "type": "string"
      +        },
      +        "travellers": {
      +          "items": {
      +            "additionalProperties": {},
      +            "properties": {
      +              "age": {
      +                "type": "number"
      +              }
      +            },
      +            "type": "object"
      +          },
      +          "type": "array"
      +        },
      +        "tripBoughtDateLabel": {
      +          "type": "string"
      +        },
      +        "tripPrice": {
      +          "description": "Trip cost per traveller; -1 when not provided.",
      +          "type": "number"
      +        },
      +        "tripPriceText": {
      +          "type": "string"
      +        }
      +      },
      +      "type": "object"
      +    }
      +  },
      +  "type": "object"
      +}
  8. Changed1 schema field changed
    • changedInput schema / properties / tripInfo / properties / tripPrice / description
      Previous value: -"Trip cost PER TRAVELLER (not the group total). Omit unless the user explicitly asked for cancellation coverage."New value: +"TOTAL trip cost for ALL travellers (not per traveller). Omit unless the user explicitly asked for cancellation coverage."
  9. Changed2 schema fields changed
    • changedInput schema / properties / tripInfo / properties / intent / description
      Previous value: -"Trip purpose. Map from the user message when clear: leisure / holidays / sightseeing → \"forTourism\"; study abroad, Erasmus, internship → \"studyInternship\"; working-holiday visa (PVT) → \"whv\"; yearly multi-trip cover → \"annual\"; long-term relocation → \"expat\"; cancellation-only (no medical) → \"cancellation\"; ski / trek / mountaineering → \"mountainTrip\"; cruise → \"cruise\"; remote-work nomading → \"digitalNomad\"; group of 10+ travellers → \"groupTravel\"; Schengen visa application → \"schengenArea\"; humanitarian mission or au pair → \"humanitarianAuPair\"; business / work trip → \"toWork\"; returning home for a visit → \"backToHome\"; rental / Airbnb stay focus → \"rentalStay\". If you cannot confidently map the user's situation to one of these values, ASK THE USER which purpose fits best — do not guess. Note: \"annual\" and \"expat\" automatically force isAnnual=true."New value: +"Trip purpose. Map from the user message when clear: leisure / holidays / sightseeing → \"forTourism\"; study abroad, Erasmus, internship → \"studyInternship\"; working-holiday visa (PVT) → \"whv\"; yearly multi-trip cover → \"annual\"; long-term relocation → \"expat\"; cancellation-only (no medical) → \"cancellation\"; ski / trek / mountaineering → \"mountainTrip\"; cruise → \"cruise\"; remote-work nomading → \"digitalNomad\"; group of 10+ travellers → \"groupTravel\"; Schengen visa application → \"schengenArea\"; humanitarian mission or volunteering → \"humanitarian\"; au pair placement → \"auPair\"; business / work trip → \"toWork\"; returning home for a visit → \"backToHome\"; rental / Airbnb stay focus → \"rentalStay\". If you cannot confidently map the user's situation to one of these values, ASK THE USER which purpose fits best — do not guess. Note: \"annual\" and \"expat\" automatically force isAnnual=true."
    • changedInput schema / properties / tripInfo / properties / intent / enum
      Previous value: -[
      -  "forTourism",
      -  "schengenArea",
      -  "annual",
      -  "studyInternship",
      -  "whv",
      -  "cruise",
      -  "digitalNomad",
      -  "expat",
      -  "groupTravel",
      -  "rentalStay",
      -  "mountainTrip",
      -  "backToHome",
      -  "humanitarianAuPair",
      -  "toWork",
      -  "cancellation"
      -]New value: +[
      +  "forTourism",
      +  "schengenArea",
      +  "annual",
      +  "studyInternship",
      +  "whv",
      +  "cruise",
      +  "digitalNomad",
      +  "expat",
      +  "groupTravel",
      +  "rentalStay",
      +  "mountainTrip",
      +  "backToHome",
      +  "humanitarian",
      +  "auPair",
      +  "toWork",
      +  "cancellation"
      +]
  10. Changed20 schema fields changed
    • addedInput schema / properties / displayCurrency / description
      Added value: +"ISO 4217 code to override the widget display currency. Omit unless the user explicitly asked for a different display currency than the trip-cost currency."
    • addedInput schema / properties / locale / description
      Added value: +"Language of the user. Defaults to the host locale."
    • addedInput schema / properties / subscriptionId / description
      Added value: +"Existing subscription ID to update instead of creating a new one."
    • addedInput schema / properties / tripInfo / description
      Added value: +"Trip details."
    • addedInput schema / properties / tripInfo / properties / arrivalCountries / description
      Added value: +"Destination countries as ISO 3166-1 alpha-2 codes. Prefer an array ([\"TH\",\"VN\"]); a comma-separated string also works."
    • addedInput schema / properties / tripInfo / properties / countryResidence / description
      Added value: +"User's country of residence as ISO 3166-1 alpha-2 code (e.g. \"FR\"). Ask the user if they did not state it — do not infer from destination or chat language."
    • addedInput schema / properties / tripInfo / properties / currency / description
      Added value: +"ISO 4217 code for tripPrice. Defaults to the currency of countryResidence. Only pass if the user gave an explicit amount in another currency."
    • addedInput schema / properties / tripInfo / properties / durationDays / description
      Added value: +"Trip length in days. Use this instead of endDate when the user gave a duration (e.g. \"20 days\") — the server computes endDate = startDate + durationDays."
    • addedInput schema / properties / tripInfo / properties / endDate / description
      Added value: +"Trip end date (YYYY-MM-DD). Either endDate or durationDays must be provided (or use intent=\"annual\"/\"expat\")."
    • addedInput schema / properties / tripInfo / properties / intent / description
      Added value: +"Trip purpose. Map from the user message when clear: leisure / holidays / sightseeing → \"forTourism\"; study abroad, Erasmus, internship → \"studyInternship\"; working-holiday visa (PVT) → \"whv\"; yearly multi-trip cover → \"annual\"; long-term relocation → \"expat\"; cancellation-only (no medical) → \"cancellation\"; ski / trek / mountaineering → \"mountainTrip\"; cruise → \"cruise\"; remote-work nomading → \"digitalNomad\"; group of 10+ travellers → \"groupTravel\"; Schengen visa application → \"schengenArea\"; humanitarian mission or au pair → \"humanitarianAuPair\"; business / work trip → \"toWork\"; returning home for a visit → \"backToHome\"; rental / Airbnb stay focus → \"rentalStay\". If you cannot confidently map the user's situation to one of these values, ASK THE USER which purpose fits best — do not guess. Note: \"annual\" and \"expat\" automatically force isAnnual=true."
    • addedInput schema / properties / tripInfo / properties / isAnnual / description
      Added value: +"Annual / multi-trip cover. Defaults to false (auto-true for intent=\"annual\" or \"expat\")."
    • addedInput schema / properties / tripInfo / properties / shouldCoverCancellation / description
      Added value: +"Include trip cancellation coverage. Defaults to false."
    • addedInput schema / properties / tripInfo / properties / shouldCoverExtremeSports / description
      Added value: +"Cover extreme sports (mountaineering, off-piste skiing, diving, paragliding, climbing). Defaults to false; set true only if the user mentioned such activities."
    • addedInput schema / properties / tripInfo / properties / startDate / description
      Added value: +"Trip start date (YYYY-MM-DD). Defaults to tomorrow when omitted."
    • addedInput schema / properties / tripInfo / properties / studiesAmount / description
      Added value: +"Tuition fees to cover, in tripInfo.currency. Required when studiesInterruption=true."
    • addedInput schema / properties / tripInfo / properties / studiesInterruption / description
      Added value: +"Cover interrupted studies (intent=\"studyInternship\" only). Defaults to false. Requires studiesAmount when true."
    • addedInput schema / properties / tripInfo / properties / travellers / description
      Added value: +"All travellers covered by the policy, including children. Example: a couple aged 35 with a 5-year-old → [{age:35},{age:35},{age:5}]."
    • addedInput schema / properties / tripInfo / properties / travellers / items / properties / age / description
      Added value: +"Age in years, 0–99."
    • addedInput schema / properties / tripInfo / properties / tripBoughtDate / description
      Added value: +"Date the trip was booked (YYYY-MM-DD). Required when shouldCoverCancellation=true (most insurers require booking within ~30 days)."
    • addedInput schema / properties / tripInfo / properties / tripPrice / description
      Added value: +"Trip cost PER TRAVELLER (not the group total). Omit unless the user explicitly asked for cancellation coverage."
  11. Changed3 schema fields changed
    • addedInput schema / properties / tripInfo / properties / durationDays
      Added value: +{
      +  "exclusiveMinimum": 0,
      +  "maximum": 9007199254740991,
      +  "type": "integer"
      +}
    • changedInput schema / properties / tripInfo / required
      Previous value: -[
      -  "intent",
      -  "startDate",
      -  "endDate",
      -  "countryResidence",
      -  "arrivalCountries",
      -  "tripPrice",
      -  "currency",
      -  "isAnnual",
      -  "travellers"
      -]New value: +[
      +  "countryResidence",
      +  "arrivalCountries",
      +  "travellers"
      +]
    • changedInput schema / required
      Previous value: -[
      -  "locale",
      -  "tripInfo"
      -]New value: +[
      +  "tripInfo"
      +]
  12. Changed1 schema field changed
    • addedInput schema / properties / tripInfo / properties / shouldCoverExtremeSports
      Added value: +{
      +  "type": "boolean"
      +}
  13. First observed

TDQS

Score is being calculated.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources