Skip to main content
Glama

Server Details

Compare travel insurance quotes from 15+ insurers — Schengen, WHV, students, long stays, seniors.

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Uptime
99.8% over 80 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
ChatGPT
–
Claude
–

TDQS

A4.2/5.0

Scored across 2 tools

Disambiguation5/5

The two tools have clearly distinct purposes: one inspects existing credit-card travel coverage, the other retrieves insurance quotes. Their descriptions explicitly link them via cardId, making the workflow unambiguous.

Naming Consistency5/5

Both tool names use snake_case with a verb_noun structure: check_card_coverage and get_quote. The pattern is predictable and readable.

Tool Count3/5

Two tools are thin but each serves a clear, necessary role in a narrow comparison workflow. The server is borderline under-scoped for a travel-insurance comparison surface.

Completeness4/5

The core flow is covered: check card coverage, identify gaps, then get ranked quotes using the cardId. Minor gaps exist around retrieving individual offer details or policy actions, but the stated quote/coverage purpose is largely fulfilled.

Available Tools

2 tools
check_card_coverageCheck a bank card's travel insuranceA
Read-only
Inspect

Checks what travel insurance a credit card already includes, from the card's own terms & conditions in HelloSafe's card database. For questions about what a card covers for travel (medical, cancellation, baggage, ski…) or whether it is enough for a trip. The card is identified from its name (and bank / country when given). Returns the covered guarantees with amounts and conditions, the coverage gaps, and the card id, which get_quote accepts as cardId to rank offers by how well they fill those gaps. Coverage comes from the card's terms only: anything not returned is not documented.

NameRequiredDescriptionDefault
cardIdNoExact HelloSafe card ID from a previous call: it re-checks that card instead of matching by name.
localeNoLanguage the user is conversing in, as a BCP 47 tag or 2-letter code (e.g. "fr", "pt-BR"). Guarantee labels are localized with it.
networkNoCard network when stated: "Visa", "Mastercard", "Amex".
cardQueryNoCard name as the user said it, expanded ("American Express Platinum", not "Amex Plat"), with the bank when known ("Chase Sapphire Reserve"). Not needed when cardId is given.
bankCountryNoISO-2 country of the issuing bank (e.g. "US", "FR"). Defaults to the user's country of residence when known — greatly improves matching.
tripContextNoOptional trip details; they sharpen the gap analysis.

Output Schema

NameRequiredDescription
cardNoThe card the analysis is about.
gapsNoGuarantees missing or insufficient for the trip — the offer features a complementary policy should provide.
errorNoHuman-readable reason when the check could not run. Absent on success.
coveredNoTravel guarantees the card really includes, with amounts and conditions from the card T&Cs.
unknownNoCore guarantees with no data on this card: not documented in HelloSafe's data, which is not the same as not covered.
cardWidgetNoData rendered by the card widget (gaps, catches, full sheet) — not meant for the assistant.
alternativesNoOther cards matching the query; any of their ids can be passed back as cardId.
translationsNoLocalized UI strings consumed by the widget — not meant for the assistant.
allGuaranteesNoThe card's FULL guarantee sheet, grouped by section (travel first). Shown in the widget.
_assistantGuidanceNoContext of the result: what the widget shows and the facts behind the analysis.
cancellationOnlyGapNoTrue when cancellation is the ONLY gap: a cancellation-only policy (get_quote intent "cancellation") is then usually much cheaper than full cover.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint/openWorldHint=false/destructiveHint=false, so the safety profile is covered. The description adds genuinely useful behavior beyond that: coverage is limited to the card's own terms and "anything not returned is not documented", which tells the agent not to infer missing cover. It does not mention data freshness or whether a name-only match can fail or return multiple candidates.

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?

Four sentences, front-loaded with purpose before scope and the get_quote handoff; nothing is padding. The heavy parentheticals and the trailing caveat make it slightly dense, but each clause carries information an agent needs.

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?

Six optional parameters plus a nested tripContext object and an output schema would normally demand a lot of the description, and this one covers input identification, the gap-analysis framing, the completeness caveat and the sibling handoff. An agent has everything needed to decide to call it and to interpret the result.

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 100%, so the baseline is 3; the description still adds a little by stating the card is identified from its name with bank/country when given, and by framing tripContext as sharpening the gap analysis. It reinforces the cardId reuse path but does not add syntax or edge-case semantics (e.g., what happens when cardId and cardQuery conflict).

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 ("checks what travel insurance a credit card already includes") plus the data source (HelloSafe's card terms database). It also positions the tool against its sibling by naming how get_quote consumes the returned cardId, so an agent can distinguish the two 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?

Gives a clear trigger: questions about what a card covers for travel (medical, cancellation, baggage, ski) or whether that cover is sufficient for a trip. The downstream handoff to get_quote is spelled out, which implicitly frames the alternative, but there is no explicit statement of when not to call it (e.g., user already has a cardId or has moved on to offer ranking).

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

get_quoteGet travel insurance quotesA
Read-only
Inspect

Gets travel-insurance quotes from HelloSafe for a trip: priced offers from HelloSafe partners, shown in a comparison widget. Required: countryResidence, arrivalCountries (not for an annual multi-trip cover, which is worldwide), traveller ages, the trip length as endDate or durationDays (not for an annual or expat cover, which runs a year), and stateResidence for a US resident. Every other field has a default. The trip length is not defaulted: a wrong length gives a wrong price. HelloSafe is a licensed insurance broker, paid a commission by the insurers whose policies it distributes.

NameRequiredDescriptionDefault
cardIdNoHelloSafe card ID returned by check_card_coverage, for a user who 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 writing in, as a BCP 47 tag or 2-letter code (e.g. "fr", "pt-BR"): the widget and all offer texts are localized with it, so when it is set the quote follows the user's language even if it differs from the app UI. When it is absent, the host UI locale is used if the host provides one (not every host does), then English; the quote never depends on a host locale being present.
tripInfoYesTrip details.
subscriptionIdNoExisting subscription ID to update instead of creating a new one.
displayCurrencyNoISO 4217 code of a display currency other than the trip-cost currency. Without it, amounts are shown in 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. Used when the user asks for a policy that includes this cover; it changes neither prices nor eligibility, and 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. Defaults to false.

Output Schema

NameRequiredDescription
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, where the user compares and buys. The widget shows it as a button on each offer.
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; sent back as `subscriptionId`, it updates this quote instead of creating a new one.
_assistantGuidanceNoContext of the result: what the widget already shows, how offers were ranked, and a summary of the recommended offer.

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already declare readOnly, non-destructive, closed-world, so safety is covered. The description adds real value beyond them by disclosing the pricing-accuracy sensitivity of trip length and the commercial relationship (licensed broker paid commission by insurers). It does not mention latency, caching, or failure modes for unpriced destinations.

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?

Front-loaded with the core action, then requirements, then the pricing warning and broker disclosure. Dense and mostly waste-free, though the required-fields sentence is long and partially duplicates schema content.

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 7-parameter tool with a deeply nested tripInfo object and an output schema, the description covers required inputs, defaulting behavior, and conditional rules well. It leaves subscriptionId reuse and the requiredCoverages filter semantics entirely to the schema, which is acceptable given full coverage but is a small gap.

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 100%, so the schema already documents every field, including the endDate/durationDays exclusion and the US state rule. The description restates the required set and the no-default trip length rather than adding meaning the schema lacks, so the baseline 3 applies.

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 ("Gets travel-insurance quotes from HelloSafe for a trip") plus the output form (priced offers from partners in a comparison widget). An agent can tell immediately this is a quote-generation call, not the sibling card-coverage lookup.

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?

Gives clear conditional context: arrivalCountries is not needed for annual multi-trip, trip length is not needed for annual/expat, stateResidence only for US residents. It lacks an explicit statement of when to prefer this over check_card_coverage, though that flow is documented on the cardId parameter.

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. 1 tool update
    • Changedget_quote3 fields changed
      • changedInput schema / properties / locale / description
        Previous value: -"Language the user is conversing in, as a BCP 47 tag or 2-letter code (e.g. \"fr\", \"pt-BR\"). The widget and all offer texts are localized with it; without it, the language the assistant app sends is used, then English."New value: +"Language the user is writing in, as a BCP 47 tag or 2-letter code (e.g. \"fr\", \"pt-BR\"): the widget and all offer texts are localized with it, so when it is set the quote follows the user's language even if it differs from the app UI. When it is absent, the host UI locale is used if the host provides one (not every host does), then English; the quote never depends on a host locale being present."
      • changedInput schema / properties / tripInfo / properties / durationDays / description
        Previous 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."New value: +"Trip length in whole days; the server computes endDate = startDate + durationDays. One of durationDays or endDate gives the trip length (not for an annual or expat cover). It is not defaulted: a wrong length gives a wrong price."
      • changedInput schema / properties / tripInfo / properties / endDate / description
        Previous value: -"Trip end date (YYYY-MM-DD). Either endDate or durationDays must be provided (or use intent=\"annual\"/\"expat\")."New value: +"Trip end date (YYYY-MM-DD). The quote needs the trip length: endDate or durationDays (not for an annual or expat cover, which runs a year). It comes from the dates or duration given and is not defaulted, because a wrong length gives a wrong price."
  2. 2 tool updates
    • Changedcheck_card_coverage12 fields changed
      • changedInput schema / properties / cardId / description
        Previous value: -"Exact HelloSafe card ID from a previous call — use it to re-check a specific candidate instead of fuzzy matching."New value: +"Exact HelloSafe card ID from a previous call: it re-checks that card instead of matching by name."
      • changedInput schema / properties / cardQuery / description
        Previous value: -"Card name as the user said it, expanded (\"American Express Platinum\", not \"Amex Plat\"). Include the bank when known (\"Chase Sapphire Reserve\"). Omit only when cardId is provided."New value: +"Card name as the user said it, expanded (\"American Express Platinum\", not \"Amex Plat\"), with the bank when known (\"Chase Sapphire Reserve\"). Not needed when cardId is given."
      • changedInput schema / properties / locale / description
        Previous value: -"Language the user is conversing in, as a BCP 47 tag or 2-letter code (e.g. \"fr\", \"pt-BR\"). ALWAYS pass it."New value: +"Language the user is conversing in, as a BCP 47 tag or 2-letter code (e.g. \"fr\", \"pt-BR\"). Guarantee labels are localized with it."
      • changedInput schema / properties / tripContext / description
        Previous value: -"Optional trip details — sharpen the gap analysis. Omit what you do not know."New value: +"Optional trip details; they sharpen the gap analysis."
      • addedOutput schema / properties / _assistantGuidance / description
        Added value: +"Context of the result: what the widget shows and the facts behind the analysis."
      • addedOutput schema / properties / _assistantGuidance / properties / context
        Added value: +{
        +  "description": "Facts behind the analysis: sources, what the widget shows, the travel gaps for the trip.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / _assistantGuidance / properties / instruction / description
        Added value: +"Not sent (see context)."
      • changedOutput schema / properties / alternatives / description
        Previous value: -"Other cards matching the query. If the analysed card is not the user's, ask which one and call again with its cardId."New value: +"Other cards matching the query; any of their ids can be passed back as cardId."
      • changedOutput schema / properties / alternatives / items / properties / id / description
        Previous value: -"HelloSafe card ID — pass to get_quote as `cardId` to get offers that complement this card, or back to this tool to re-check a specific candidate."New value: +"HelloSafe card ID: as `cardId`, get_quote ranks offers by how well they complement this card, and this tool re-checks it."
      • changedOutput schema / properties / cancellationOnlyGap / description
        Previous value: -"True when cancellation is the ONLY gap — suggest a cancellation-only policy (intent \"cancellation\" in get_quote), usually much cheaper."New value: +"True when cancellation is the ONLY gap: a cancellation-only policy (get_quote intent \"cancellation\") is then usually much cheaper than full cover."
      • changedOutput schema / properties / card / properties / id / description
        Previous value: -"HelloSafe card ID — pass to get_quote as `cardId` to get offers that complement this card, or back to this tool to re-check a specific candidate."New value: +"HelloSafe card ID: as `cardId`, get_quote ranks offers by how well they complement this card, and this tool re-checks it."
      • changedOutput schema / properties / unknown / description
        Previous value: -"Core guarantees with no data on this card — phrase as \"not documented, check your contract\", never as \"not covered\"."New value: +"Core guarantees with no data on this card: not documented in HelloSafe's data, which is not the same as not covered."
    • Changedget_quote18 fields changed
      • changedInput schema / properties / cancelForAnyReason / description
        Previous value: -"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."New value: +"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. Defaults to false."
      • changedInput schema / properties / cardId / description
        Previous value: -"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)."New value: +"HelloSafe card ID returned by check_card_coverage, for a user who 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)."
      • changedInput schema / properties / displayCurrency / description
        Previous 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."New value: +"ISO 4217 code of a display currency other than the trip-cost currency. Without it, amounts are shown in the trip-cost currency."
      • changedInput schema / properties / locale / description
        Previous 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."New value: +"Language the user is conversing in, as a BCP 47 tag or 2-letter code (e.g. \"fr\", \"pt-BR\"). The widget and all offer texts are localized with it; without it, the language the assistant app sends is used, then English."
      • changedInput schema / properties / requiredCoverages / description
        Previous value: -"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."New value: +"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. Used when the user asks for a policy that includes this cover; it changes neither prices nor eligibility, and health-related covers are not stored."
      • 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. \"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."New value: +"Destination countries as ISO 3166-1 alpha-2 codes, as an array ([\"TH\",\"VN\"]) or a comma-separated string. \"WW\" = the whole world (forTourism, cruise, digitalNomad); \"SCH\" = the whole Schengen area (schengenArea). Required, except for intent \"annual\": a yearly multi-trip cover is worldwide and uses no destination."
      • changedInput schema / properties / tripInfo / properties / countryResidence / description
        Previous 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."New value: +"User's country of residence as ISO 3166-1 alpha-2 code (e.g. \"FR\"). It decides which insurers can cover the traveller; it cannot be deduced from the destination or the conversation language."
      • changedInput schema / properties / tripInfo / properties / currency / description
        Previous value: -"ISO 4217 code for tripPrice. Defaults to the currency of countryResidence. Only pass if the user gave an explicit amount in another currency."New value: +"ISO 4217 code for tripPrice. Defaults to the currency of countryResidence."
      • 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 → \"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."New value: +"Trip purpose. Leisure, holidays, sightseeing, a business trip, a visit back home or a rental stay → \"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\". The purpose decides which policies are offered: a wrong one gives offers built for another trip. Defaults to \"forTourism\". \"annual\" and \"expat\" set isAnnual=true."
      • changedInput schema / properties / tripInfo / properties / shouldCoverExtremeSports / description
        Previous value: -"Cover extreme sports (mountaineering, off-piste skiing, diving, paragliding, climbing). Defaults to false; set true only if the user mentioned such activities."New value: +"Extreme sports option (mountaineering, off-piste skiing, diving, paragliding, climbing), added to the policy at extra cost like trip cancellation. Defaults to false; only relevant when the trip includes such activities."
      • 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. No quote is computed 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\"). Required for a US resident: US travel insurance is regulated state by state, and no quote is computed without it. Ignored for every other country. The US territories are countries here, not states (a Puerto Rico resident is countryResidence \"PR\", never \"US\" + \"PR\")."
      • changedInput schema / properties / tripInfo / properties / tripPrice / description
        Previous value: -"TOTAL trip cost for ALL travellers (not per traveller). Omit unless the user explicitly asked for cancellation coverage."New value: +"TOTAL trip cost for ALL travellers (not per traveller). Only used by cancellation coverage."
      • changedOutput schema / properties / _assistantGuidance / description
        Previous value: -"Guidance for the assistant reply — follow \"instruction\"."New value: +"Context of the result: what the widget already shows, how offers were ranked, and a summary of the recommended offer."
      • addedOutput schema / properties / _assistantGuidance / properties / context
        Added value: +{
        +  "description": "Facts about what the widget shows and how the offers were ranked.",
        +  "type": "string"
        +}
      • changedOutput schema / properties / _assistantGuidance / properties / instruction / description
        Previous value: -"How the assistant should present the result to the user."New value: +"Not sent (see context)."
      • changedOutput schema / properties / displayOffers / items / properties / subscribeUrl / description
        Previous value: -"HelloSafe comparator URL for this quote. The widget already renders it as a button — never paste it in the reply."New value: +"HelloSafe comparator URL for this quote, where the user compares and buys. The widget shows it as a button on each offer."
      • changedOutput schema / properties / subscribeUrl / description
        Previous value: -"HelloSafe comparator URL for this quote. The widget already renders clickable buttons — never paste it in the reply."New value: +"HelloSafe comparator URL for this quote, where the user compares and buys. The widget shows it as a button on each offer."
      • changedOutput schema / properties / subscriptionId / description
        Previous value: -"Quote session ID — pass it back as `subscriptionId` to update this quote instead of creating a new one."New value: +"Quote session ID; sent back as `subscriptionId`, it updates this quote instead of creating a new one."
  3. 1 tool update
    • Changedget_quote6 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."
  4. 1 tool update
    • Changedget_quote1 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"
        +}
  5. 1 tool update
    • Changedcheck_card_coverage1 field changed
      • changedOutput schema / properties / allGuarantees / description
        Previous value: -"The card's FULL guarantee sheet, grouped by section (travel first) — render as one markdown table per section: Guarantee | Your card | Recommended | Verdict."New value: +"The card's FULL guarantee sheet, grouped by section (travel first). Shown in the widget."
  6. 2 tool updates
    • Changedcheck_card_coverage2 fields changed
      • addedOutput schema / properties / cardWidget
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Data rendered by the card widget (gaps, catches, full sheet) — not meant for the assistant.",
        +  "properties": {},
        +  "type": "object"
        +}
      • addedOutput schema / properties / translations
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Localized UI strings consumed by the widget — not meant for the assistant.",
        +  "propertyNames": {
        +    "type": "string"
        +  },
        +  "type": "object"
        +}
    • Changedget_quote2 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"
        +]
  7. 2 tool updates
    • Changedcheck_card_coverage1 field changed
      • changedInput schema / properties / tripContext / properties / intent / description
        Previous value: -"Trip purpose when known — same values as get_quote (forTourism, mountainTrip, schengenArea…). Drives the thresholds (e.g. ski cover checked for mountainTrip)."New value: +"Trip purpose when known — same values as get_quote (forTourism, schengenArea, studyInternship…). Drives the thresholds."
    • Changedget_quote2 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"
        +]
  8. 1 tool update
    • Changedget_quote6 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"
        +}
  9. 1 tool update
    • Changedget_quote1 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"
        +}
  10. 2 tool updates
    • Addedcheck_card_coverage
    • Changedget_quote3 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"
        +}
  11. 1 tool update
    • Changedget_quote1 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."
  12. 1 tool update
    • Changedget_quote2 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"
        +]
  13. 1 tool update
    • Changedget_quote20 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."
  14. 1 tool update
    • Changedget_quote3 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"
        +]
  15. 1 tool update
    • Changedget_quote1 field changed
      • addedInput schema / properties / tripInfo / properties / shouldCoverExtremeSports
        Added value: +{
        +  "type": "boolean"
        +}

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    Travel compliance and trip planning for digital nomads — visa requirements, tax residency analysis, Schengen 90/180-day tracking, and curated accommodation, transport, and experience search across 189 European destinations.
    7
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Check visa requirements for 39,585 passport-destination pairs in 15 languages. Returns visa type, required documents, application process, and travel tips from 136 official government sources. Free quick checks without API key.
    5
    142 npm
    1
    MIT
  • F
    license
    Not graded
    quality
    B
    maintenance
    Search flights, compare prices, check visas, look up airports, get travel advisories through a single endpoint.
    -
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources