Koskamo

HelloSafe Travel MCP

Compare travel insurance quotes from 15+ insurers for Schengen, WHV, students, long stays, and seniors. Provides medical cost benchmarks by destination and decodes bank card coverage for 490+ cards.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

HelloSafe Travel MCP logo, by HelloSafeCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-06Published by HelloSafe
MCP endpoint (Streamable HTTP)
https://hellosafe.com/api/mcp-travel
Vendor documentation

What its tools do

2 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

2 of 2 have a description · 2 of 2 declare behavior hints · 2 of 2 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Compare 70+ travel insurance contracts by destination and traveler profile
  • Check medical cost benchmarks for hospitalization and evacuation per country
  • Decode bank card travel coverage for Visa, Mastercard, and Amex

Source and maintenance

Community listingRegistry 1.0.1
Maintenance checked

Protocol and capabilities

Server
HelloSafe Travel Insurance 1.0.0
MCP protocol negotiated in check
2025-11-25
Tools
2 advertised
Resources
2 advertised
Resource templates
0 advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": true
  },
  "resources": {
    "listChanged": true
  }
}

Tools

2 advertised

get_quote — Get travel insurance quotes
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

get_quote input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "tripInfo"
  ],
  "properties": {
    "cardId": {
      "type": "number",
      "description": "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)."
    },
    "locale": {
      "type": "string",
      "description": "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."
    },
    "tripInfo": {
      "type": "object",
      "required": [
        "countryResidence",
        "travellers"
      ],
      "properties": {
        "intent": {
          "enum": [
            "forTourism",
            "schengenArea",
            "annual",
            "studyInternship",
            "whv",
            "cruise",
            "digitalNomad",
            "expat",
            "groupTravel",
            "humanitarian",
            "auPair",
            "cancellation"
          ],
          "type": "string",
          "description": "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."
        },
        "endDate": {
          "type": "string",
          "description": "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."
        },
        "currency": {
          "type": "string",
          "description": "ISO 4217 code for tripPrice. Defaults to the currency of countryResidence."
        },
        "isAnnual": {
          "type": "boolean",
          "description": "Annual / multi-trip cover. Defaults to false (auto-true for intent=\"annual\" or \"expat\")."
        },
        "startDate": {
          "type": "string",
          "description": "Trip start date (YYYY-MM-DD). Defaults to tomorrow when omitted."
        },
        "tripPrice": {
          "type": "number",
          "description": "TOTAL trip cost for ALL travellers (not per traveller). Only used by cancellation coverage."
        },
        "travellers": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "age"
            ],
            "properties": {
              "age": {
                "type": "number",
                "description": "Age in years, 0–99."
              }
            }
          },
          "description": "All travellers covered by the policy, including children. Example: a couple aged 35 with a 5-year-old → [{age:35},{age:35},{age:5}]."
        },
        "durationDays": {
          "type": "integer",
          "maximum": 9007199254740991,
          "description": "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.",
          "exclusiveMinimum": 0
        },
        "studiesAmount": {
          "type": "number",
          "description": "Tuition fees to cover, in tripInfo.currency. Required when studiesInterruption=true."
        },
        "stateResidence": {
          "type": "string",
          "pattern": "^[A-Za-z]{2}$",
          "description": "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\")."
        },
        "tripBoughtDate": {
          "type": "string",
          "description": "Date the trip was booked (YYYY-MM-DD). Required when shouldCoverCancellation=true (most insurers require booking within ~30 days)."
        },
        "arrivalCountries": {
          "anyOf": [
            {
              "type": "array",
              "items": {
                "type": "string",
                "pattern": "^([A-Za-z]{2}|SCH|sch)$"
              }
            },
            {
              "type": "string"
            }
          ],
          "description": "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."
        },
        "countryResidence": {
          "type": "string",
          "pattern": "^[A-Za-z]{2}$",
          "description": "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."
        },
        "studiesInterruption": {
          "type": "boolean",
          "description": "Cover interrupted studies (intent=\"studyInternship\" only). Defaults to false. Requires studiesAmount when true."
        },
        "shouldCoverCancellation": {
          "type": "boolean",
          "description": "Include trip cancellation coverage. Defaults to false."
        },
        "shouldCoverExtremeSports": {
          "type": "boolean",
          "description": "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."
        }
      },
      "description": "Trip details."
    },
    "subscriptionId": {
      "type": "string",
      "description": "Existing subscription ID to update instead of creating a new one."
    },
    "displayCurrency": {
      "type": "string",
      "description": "ISO 4217 code of a display currency other than the trip-cost currency. Without it, amounts are shown in the trip-cost currency."
    },
    "requiredCoverages": {
      "type": "array",
      "items": {
        "enum": [
          "maternityCover",
          "preExistingConditionsCover",
          "personalLiability",
          "baggage",
          "travelDelay",
          "directHospitalBilling",
          "disability",
          "searchAndRescue",
          "earlyReturn",
          "tripInterruption",
          "electronics",
          "cashAdvance",
          "expatMaternity",
          "expatDental",
          "expatOptical"
        ],
        "type": "string"
      },
      "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. 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."
    },
    "cancelForAnyReason": {
      "type": "boolean",
      "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. Defaults to false."
    }
  }
}
get_quote output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "error": {
      "type": "string",
      "description": "Human-readable reason when the quote could not be generated. Absent on success."
    },
    "tripInfo": {
      "type": "object",
      "properties": {
        "endDate": {
          "type": "string"
        },
        "currency": {
          "type": "string",
          "description": "ISO 4217 currency the amounts are shown in."
        },
        "isAnnual": {
          "type": "boolean"
        },
        "startDate": {
          "type": "string"
        },
        "tripPrice": {
          "type": "number",
          "description": "Trip cost per traveller; -1 when not provided."
        },
        "intentName": {
          "type": "string",
          "description": "Human-readable trip purpose."
        },
        "travellers": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "age": {
                "type": "number"
              }
            },
            "additionalProperties": {}
          }
        },
        "endDateLabel": {
          "type": "string"
        },
        "numberOfDays": {
          "type": "number"
        },
        "tripPriceText": {
          "type": "string"
        },
        "startDateLabel": {
          "type": "string"
        },
        "tripBoughtDateLabel": {
          "type": "string"
        },
        "countryResidenceCode": {
          "type": "string"
        },
        "countryResidenceName": {
          "type": "string"
        },
        "arrivalCountriesCodes": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "arrivalCountriesNames": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Destination country names in the response locale."
        },
        "shouldCoverCancellation": {
          "type": "boolean"
        }
      },
      "description": "Normalized trip parameters the quote was computed with.",
      "additionalProperties": {}
    },
    "cardContext": {
      "type": "object",
      "properties": {
        "gaps": {
          "type": "array",
          "items": {},
          "description": "The card coverage gaps that drove the offer ranking."
        },
        "cardId": {
          "type": "number"
        },
        "unknown": {
          "type": "array",
          "items": {}
        },
        "cardName": {
          "type": "string"
        },
        "cancellationOnlyGap": {
          "type": "boolean"
        }
      },
      "description": "Present only when the quote was computed against a card (cardId argument): the card and its gaps.",
      "additionalProperties": {}
    },
    "subscribeUrl": {
      "type": "string",
      "description": "HelloSafe comparator URL for this quote, where the user compares and buys. The widget shows it as a button on each offer."
    },
    "translations": {
      "type": "object",
      "description": "Localized UI strings consumed by the widget — not meant for the assistant.",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {}
    },
    "displayOffers": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "number",
            "description": "HelloSafe offer ID."
          },
          "faq": {
            "type": "array",
            "items": {},
            "description": "Frequently asked questions about this offer."
          },
          "name": {
            "type": "string",
            "description": "Commercial name of the offer / formula."
          },
          "noList": {
            "type": "string",
            "description": "Newline-separated list of exclusions."
          },
          "suffix": {
            "type": "string",
            "description": "Price period suffix key: \"perMonth\", \"perYear\", \"perDay\" or empty."
          },
          "yesList": {
            "type": "string",
            "description": "Newline-separated list of advantages."
          },
          "features": {
            "type": "object",
            "description": "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.",
            "propertyNames": {
              "type": "string"
            },
            "additionalProperties": {
              "type": "string"
            }
          },
          "topBanner": {
            "type": "string",
            "description": "Short marketing highlight for this offer, if any."
          },
          "priceParts": {
            "type": "object",
            "properties": {
              "symbol": {
                "type": "string"
              },
              "decimal": {
                "type": "string"
              },
              "integer": {
                "type": "string"
              },
              "symbolPosition": {
                "type": "string",
                "description": "\"prefix\" or \"suffix\"."
              },
              "decimalSeparator": {
                "type": "string"
              }
            },
            "description": "Price split into rendering parts (used by the widget).",
            "additionalProperties": {}
          },
          "insurerName": {
            "type": "string",
            "description": "Insurer brand name."
          },
          "isBestScore": {
            "type": "boolean",
            "description": "True for the single offer HelloSafe recommends for this trip (shown first)."
          },
          "subscribeUrl": {
            "type": "string",
            "description": "HelloSafe comparator URL for this quote, where the user compares and buys. The widget shows it as a button on each offer."
          },
          "takenOptions": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Feature slugs of the options the traveller added on this quote (trip cancellation, extreme sports, studies interruption): covered, and part of their quote."
          },
          "priceFullText": {
            "type": "string",
            "description": "Total price for the whole trip and all travellers, formatted in the display currency (e.g. \"34,20 €\")."
          },
          "featureDetails": {
            "type": "object",
            "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"
            },
            "additionalProperties": {
              "type": "string"
            }
          },
          "insurerLogoUrl": {
            "type": "string",
            "description": "Absolute URL of the insurer logo."
          },
          "complementsCard": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "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."
          },
          "isStartingPrice": {
            "type": "boolean",
            "description": "True when the price is a \"from\" price."
          },
          "optionalFeatures": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "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."
          },
          "profileGuarantees": {
            "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; exclusions is given for the covers asked with requiredCoverages or cancelForAnyReason.",
            "propertyNames": {
              "type": "string"
            },
            "additionalProperties": {
              "type": "object",
              "properties": {
                "value": {
                  "type": "string"
                },
                "covered": {
                  "type": "boolean"
                },
                "exclusions": {
                  "type": "string"
                },
                "description": {
                  "type": "string"
                }
              },
              "additionalProperties": {}
            }
          },
          "notIncludedFeatures": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Feature slugs of `features` that this offer does NOT cover (value \"Not included\"), listed last like the results page's \"Not covered\" section."
          }
        },
        "additionalProperties": {}
      },
      "description": "Priced offers sorted by price, with the recommended offer (isBestScore=true) promoted first."
    },
    "subscriptionId": {
      "type": "string",
      "description": "Quote session ID; sent back as `subscriptionId`, it updates this quote instead of creating a new one."
    },
    "_assistantGuidance": {
      "type": "object",
      "properties": {
        "context": {
          "type": "string",
          "description": "Facts about what the widget shows and how the offers were ranked."
        },
        "instruction": {
          "type": "string",
          "description": "Not sent (see context)."
        },
        "recommendedOffer": {
          "anyOf": [
            {
              "type": "object",
              "properties": {
                "name": {
                  "type": "string"
                },
                "price": {
                  "type": "string"
                },
                "coverages": {
                  "type": "object",
                  "description": "Coverage label → covered amount for the recommended offer.",
                  "propertyNames": {
                    "type": "string"
                  },
                  "additionalProperties": {
                    "type": "string"
                  }
                },
                "insurerName": {
                  "type": "string"
                },
                "optionsNotTaken": {
                  "type": "object",
                  "description": "Options available on the recommended offer that this quote does NOT include (not covered unless the user adds them).",
                  "propertyNames": {
                    "type": "string"
                  },
                  "additionalProperties": {
                    "type": "string"
                  }
                }
              },
              "additionalProperties": {}
            },
            {
              "type": "null"
            }
          ],
          "description": "Compact summary of the offer HelloSafe recommends for this trip."
        }
      },
      "description": "Context of the result: what the widget already shows, how offers were ranked, and a summary of the recommended offer.",
      "additionalProperties": {}
    }
  },
  "additionalProperties": false
}
get_quote annotations
{
  "title": "Get travel insurance quotes",
  "readOnlyHint": true,
  "openWorldHint": false,
  "destructiveHint": false
}
check_card_coverage — Check a bank card's travel insurance
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

check_card_coverage input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "cardId": {
      "type": "number",
      "description": "Exact HelloSafe card ID from a previous call: it re-checks that card instead of matching by name."
    },
    "locale": {
      "type": "string",
      "description": "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."
    },
    "network": {
      "type": "string",
      "description": "Card network when stated: \"Visa\", \"Mastercard\", \"Amex\"."
    },
    "cardQuery": {
      "type": "string",
      "description": "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."
    },
    "bankCountry": {
      "type": "string",
      "description": "ISO-2 country of the issuing bank (e.g. \"US\", \"FR\"). Defaults to the user's country of residence when known — greatly improves matching."
    },
    "tripContext": {
      "type": "object",
      "properties": {
        "intent": {
          "type": "string",
          "description": "Trip purpose when known — same values as get_quote (forTourism, schengenArea, studyInternship…). Drives the thresholds."
        },
        "arrivalCountries": {
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[A-Za-z]{2}$"
          },
          "description": "Destination countries as ISO-2 codes, when the user mentioned a trip."
        },
        "shouldCoverCancellation": {
          "type": "boolean",
          "description": "True when the user cares about cancellation cover."
        },
        "shouldCoverExtremeSports": {
          "type": "boolean",
          "description": "True for ski / diving / mountaineering trips."
        }
      },
      "description": "Optional trip details; they sharpen the gap analysis."
    }
  }
}
check_card_coverage output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "card": {
      "type": "object",
      "properties": {
        "id": {
          "type": "number",
          "description": "HelloSafe card ID: as `cardId`, get_quote ranks offers by how well they complement this card, and this tool re-checks it."
        },
        "name": {
          "type": "string",
          "description": "Card commercial name."
        },
        "score": {
          "type": "number",
          "description": "HelloSafe score for the card travel cover."
        },
        "network": {
          "type": "string",
          "description": "Visa, Mastercard, Amex…"
        },
        "bankName": {
          "type": "string"
        },
        "currency": {
          "type": "string",
          "description": "Currency of the card guarantee amounts."
        },
        "bankCountry": {
          "type": "string",
          "description": "ISO-2 country of the issuing bank."
        }
      },
      "description": "The card the analysis is about.",
      "additionalProperties": {}
    },
    "gaps": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "slug": {
            "type": "string",
            "description": "Offer feature slug that fills this gap."
          },
          "label": {
            "type": "string"
          },
          "reason": {
            "type": "string",
            "description": "not_covered | misleading | below_recommended | below_destination_threshold."
          },
          "cardCoverage": {
            "type": "string",
            "description": "What the card actually provides, for contrast."
          },
          "thresholdLabel": {
            "type": "string",
            "description": "Why the amount is considered insufficient."
          }
        },
        "additionalProperties": {}
      },
      "description": "Guarantees missing or insufficient for the trip — the offer features a complementary policy should provide."
    },
    "error": {
      "type": "string",
      "description": "Human-readable reason when the check could not run. Absent on success."
    },
    "covered": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "slug": {
            "type": "string",
            "description": "Feature slug — same slugs as get_quote offer features."
          },
          "badge": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "excellent | covered | misleading | not_covered."
          },
          "label": {
            "type": "string"
          },
          "coverage": {
            "type": "string",
            "description": "Formatted covered amount from the card T&Cs."
          },
          "franchise": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Deductible, when any."
          },
          "conditions": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Conditions for the guarantee to apply (e.g. trip paid with the card)."
          },
          "exclusions": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "additionalProperties": {}
      },
      "description": "Travel guarantees the card really includes, with amounts and conditions from the card T&Cs."
    },
    "unknown": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "slug": {
            "type": "string"
          },
          "label": {
            "type": "string"
          }
        },
        "additionalProperties": {}
      },
      "description": "Core guarantees with no data on this card: not documented in HelloSafe's data, which is not the same as not covered."
    },
    "cardWidget": {
      "type": "object",
      "properties": {},
      "description": "Data rendered by the card widget (gaps, catches, full sheet) — not meant for the assistant.",
      "additionalProperties": {}
    },
    "alternatives": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "number",
            "description": "HelloSafe card ID: as `cardId`, get_quote ranks offers by how well they complement this card, and this tool re-checks it."
          },
          "name": {
            "type": "string",
            "description": "Card commercial name."
          },
          "score": {
            "type": "number",
            "description": "HelloSafe score for the card travel cover."
          },
          "network": {
            "type": "string",
            "description": "Visa, Mastercard, Amex…"
          },
          "bankName": {
            "type": "string"
          },
          "currency": {
            "type": "string",
            "description": "Currency of the card guarantee amounts."
          },
          "bankCountry": {
            "type": "string",
            "description": "ISO-2 country of the issuing bank."
          }
        },
        "additionalProperties": {}
      },
      "description": "Other cards matching the query; any of their ids can be passed back as cardId."
    },
    "translations": {
      "type": "object",
      "description": "Localized UI strings consumed by the widget — not meant for the assistant.",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {}
    },
    "allGuarantees": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "tab": {
            "type": "string",
            "description": "Section key: travelInsurance | carRental | winterSports | protection."
          },
          "features": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "slug": {
                  "type": "string"
                },
                "label": {
                  "type": "string"
                },
                "verdict": {
                  "type": "string",
                  "description": "excellent | ok | below_recommended | misleading | not_covered."
                },
                "coverage": {
                  "type": "string",
                  "description": "What the card provides, formatted."
                },
                "franchise": {
                  "type": "string"
                },
                "conditions": {
                  "type": "string"
                },
                "recommended": {
                  "type": "string",
                  "description": "The coverage HelloSafe recommends, when defined."
                }
              },
              "additionalProperties": {}
            }
          },
          "tabLabel": {
            "type": "string",
            "description": "Human-readable section title."
          }
        },
        "additionalProperties": {}
      },
      "description": "The card's FULL guarantee sheet, grouped by section (travel first). Shown in the widget."
    },
    "_assistantGuidance": {
      "type": "object",
      "properties": {
        "context": {
          "type": "string",
          "description": "Facts behind the analysis: sources, what the widget shows, the travel gaps for the trip."
        },
        "instruction": {
          "type": "string",
          "description": "Not sent (see context)."
        }
      },
      "description": "Context of the result: what the widget shows and the facts behind the analysis.",
      "additionalProperties": {}
    },
    "cancellationOnlyGap": {
      "type": "boolean",
      "description": "True when cancellation is the ONLY gap: a cancellation-only policy (get_quote intent \"cancellation\") is then usually much cheaper than full cover."
    }
  },
  "additionalProperties": false
}
check_card_coverage annotations
{
  "title": "Check a bank card's travel insurance",
  "readOnlyHint": true,
  "openWorldHint": false,
  "destructiveHint": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

2 advertised

travel-quote-ui

Advertised by the server during the last successful anonymous check.

travel-quote-ui URI
ui://travel-quote

MIME type: text/html;profile=mcp-app

travel-quote-schema

Advertised by the server during the last successful anonymous check.

Full input/output schema for get_quote: required fields, valid intent values, supported locales, date formats, and response structure.

travel-quote-schema URI
schema://travel-quote

MIME type: application/json

90-day uptime

A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.

Too few checks for a percentage yet (2 of 2 answered).

  1. 2026-11-06: 1 of 1 checks answered
  2. 2026-11-07: 1 of 1 checks answered

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
2921 ms
95th percentile latency
2921 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 2921 ms · metadata changed · 2 tool(s), 2 resource(s), 0 resource template(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http hellosafe-travel-mcp https://hellosafe.com/api/mcp-travel

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add hellosafe-travel-mcp --url https://hellosafe.com/api/mcp-travel

Cursor

Merge this server into .cursor/mcp.json in your project, then enable hellosafe-travel-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "hellosafe-travel-mcp": {
      "url": "https://hellosafe.com/api/mcp-travel"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "hellosafe-travel-mcp": {
      "type": "streamableHttp",
      "url": "https://hellosafe.com/api/mcp-travel",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start hellosafe-travel-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "hellosafe-travel-mcp": {
      "type": "http",
      "url": "https://hellosafe.com/api/mcp-travel"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http hellosafe-travel-mcp https://hellosafe.com/api/mcp-travel

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://hellosafe.com/api/mcp-travel

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "hellosafe-travel-mcp": {
      "serverUrl": "https://hellosafe.com/api/mcp-travel"
    }
  }
}

Let your agent find its tools

Find servers like HelloSafe Travel MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.