tuio.com
Spanish digital insurance advisor for comparing and buying home, life, car and pet insurance online in minutes.
First seen 2026-10-12 · Last seen 2026-10-12 · Source: webmcp.com
Answer 3 · Act 1 · Transact 0 · Score: Not yet scored
Tool inspector
quote_auto_insurance
Get a Tuio car (auto) insurance quote for a Spanish vehicle, comparing two tiers (Terceros and Terceros Ampliado). This server quotes TWO different products: car insurance (this tool) and home insurance (get_price_estimate). Only start this flow once the user has made clear they want to insure a CAR. If they just say something ambiguous like "I need insurance" / "get me a quote" / "insurance for me" without naming the product, do NOT start this flow — first ask whether they want car or home insurance. Never assume car. Once car insurance is confirmed (or the user mentions a car, plate, driving, etc.): the flow asks for everything it needs a few questions at a time, so start it right away — do not pre-collect data yourself. If the user already mentioned details (plate, how they use the car, etc.), pass them in stateUpdates so those questions are skipped. LANGUAGE: the comparison card is rendered in the language you pass as `stateUpdates.locale`. This one is NOT collected from the user — never ask about it. Set it yourself from the language the user writes to you in: `"en"` only when they are writing in English, otherwise omit it and the card renders in Spanish. ## FLOW EXECUTION PROTOCOL This tool implements a multi-step conversational flow. Follow this protocol exactly: 1. Call with `action: "start"` to begin and include `intent`. `intent` must be a brief summary of the user's goal for this flow. Do NOT invent missing intent. Optionally include `context` — the situation or environment that led the user to start this flow (e.g. what page they are on, what they were doing, or what triggered the request). Only provide `context` when there is genuinely relevant situational information. Do NOT invent missing context. If the user's message already contains answers to likely questions, extract them into `stateUpdates` as `{ field: value }` pairs (see the `stateUpdates` schema for the list of writable fields). The engine will auto-skip steps whose fields are already filled…
Input schema
| Property | Type | Required | Description |
|---|---|---|---|
action |
string | yes | "start" to begin the flow, "continue" to resume after a pause (interrupt or widget), "reset" to restart from the beginning with a correction to a previously-collected field |
intent |
string | no | Required when action is "start". Provide a brief summary of the user's goal for this flow. Do not invent missing intent. |
context |
string | no | Optional when action is "start". Describe the situation or environment that led the user to start this flow — e.g. what page they are on, what they were doing, or what triggered the request. Do not invent missing context. |
stateUpdates |
object | no | State field values to set before processing the next node. Pass the user's answer (keyed by the field name from the response) and any other values the user mentioned. For nested state fields, use dot-paths like "driver.name". |
sessionId |
string | no | Session identifier. If the response includes a `sessionId`, pass it back on every subsequent "continue" and "reset" call for this flow. |
Raw JSON schema
{
"type": "object",
"properties": {
"action": {
"type": "string",
"enum": [
"start",
"continue",
"reset"
],
"description": "\"start\" to begin the flow, \"continue\" to resume after a pause (interrupt or widget), \"reset\" to restart from the beginning with a correction to a previously-collected field"
},
"intent": {
"description": "Required when action is \"start\". Provide a brief summary of the user's goal for this flow. Do not invent missing intent.",
"type": "string"
},
"context": {
"description": "Optional when action is \"start\". Describe the situation or environment that led the user to start this flow — e.g. what page they are on, what they were doing, or what triggered the request. Do not invent missing context.",
"type": "string"
},
"stateUpdates": {
"description": "State field values to set before processing the next node. Pass the user's answer (keyed by the field name from the response) and any other values the user mentioned. For nested state fields, use dot-paths like \"driver.name\".",
"type": "object",
"properties": {
"plate": {
"type": "string",
"description": "The car's Spanish license plate, e.g. '1234BCD'."
},
"b7VersionId": {
"type": "string",
"description": "Internal Tuio vehicle-version id. Resolved automatically from the plate — never ask the user for this."
},
"versionLabel": {
"type": "string",
"description": "Human-readable vehicle version (make/model/trim). Resolved from the plate."
},
"versionChoices": {
"type": "array",
"items": {
"type": "object",
"properties": {
"b7VersionId": {
"type": "string"
},
"label": {
"type": "string"
}
},
"required": [
"b7VersionId"
]
},
"description": "Internal — candidate vehicle versions for the plate. Set automatically; never ask the user."
},
"firstPlateDate": {
"type": "string",
"description": "First registration date of the car (yyyy-MM-dd). Usually resolved from the plate; only asked if the lookup didn't return it."
},
"annualKm": {
"type": "string",
"enum": [
"UpTo4000km",
"From4000To6000km",
"From6000To8000km",
"From8000To10000km",
"From10000To12000km",
"From12000To16000km",
"From16000To20000km",
"From20000To30000km",
"From30000To50000km",
"MoreThan50000km"
],
"description": "Approximate kilometres driven per year, as one of Tuio's mileage brackets. Pick the bracket the stated yearly distance falls INTO, upper bound inclusive — e.g. 6,000 km/year → From4000To6000km, 7,000 → From6000To8000km, 11,000 → From10000To12000km, 12,000 → From10000To12000km."
},
"garageType": {
"type": "string",
"enum": [
"PrivateGarage",
"PublicGarage",
"NoGarage"
],
"description": "Where the car is usually parked overnight: PrivateGarage (a private/individual garage, OR a building's shared/communal residents' garage — anything covered and secure), PublicGarage (a paid public car park open to anyone, e.g. a rotational/monthly parking structure) or NoGarage (on the street). A residents' communal garage is PrivateGarage, NOT PublicGarage."
},
"use": {
"type": "string",
"enum": [
"Private",
"Professional",
"PublicService"
],
"description": "How the car is used: Private (personal/commute), Professional (work) or PublicService."
},
"licenseDate": {
"type": "string",
"description": "Date the driver got their driving licence (yyyy-MM or yyyy-MM-dd)."
},
"birthDate": {
"type": "string",
"description": "Driver's date of birth (yyyy-MM-dd)."
},
"atFaultClaims": {
"type": "number",
"description": "Number of at-fault claims in the last 5 years."
},
"lastAtFaultClaim": {
"description": "When the driver's MOST RECENT at-fault accident happened: WithinLast12Months or MoreThan12MonthsAgo. Only relevant when atFaultClaims > 0 — the flow asks for it automatically in that case. Leave unset when there are no at-fault claims.",
"type": "string",
"enum": [
"WithinLast12Months",
"MoreThan12MonthsAgo"
]
},
"penalties": {
"type": "number",
"description": "Number of driving penalties in the last 3 years."
},
"previouslyInsured": {
"type": "boolean",
"description": "Whether the car has been insured in the driver's name in the last 60 days."
},
"yearsInsured": {
"type": "number",
"description": "Total full years the driver has held car insurance (0 if never insured)."
},
"previousInsuranceCompany": {
"description": "The company the car is currently/was last insured with, as the user names it (e.g. 'Mapfre'). OPTIONAL — only relevant when the car is currently insured; leave unset if the car isn't insured or the user doesn't know.",
"type": "string"
},
"documentNumber": {
"type": "string",
"description": "Policyholder's ID document number (DNI/NIE/passport)."
},
"postalCode": {
"type": "string",
"description": "Policyholder's postal code (this alone determines the price)."
},
"city": {
"description": "Policyholder's town/city. Optional — auto-derived from the postal code when not given; never ask for it, but set it if the user volunteers their town.",
"type": "string"
},
"startDate": {
"type": "string",
"description": "When the customer wants the policy to take effect (yyyy-MM-dd). ALWAYS ask for this — the effective date materially changes the price, so it must be collected and sent, never defaulted. Must be today or a future date."
},
"locale": {
"type": "string",
"enum": [
"en",
"es"
],
"description": "Internal — the language THE USER is writing in, so the comparison card renders in it: 'es' if they write in Spanish, 'en' if they write in English. NEVER ask the user about it: judge it from their own messages (not from your replies, this schema, or the host's interface language) and pass it in stateUpdates when you start the flow. Omit it when unsure; the card then renders in Spanish."
},
"quoteResult": {
"type": "array",
"items": {},
"description": "Internal — the computed two-tier quote result. Set automatically by the flow."
}
},
"additionalProperties": {}
},
"sessionId": {
"description": "Session identifier. If the response includes a `sessionId`, pass it back on every subsequent \"continue\" and \"reset\" call for this flow.",
"type": "string"
}
},
"required": [
"action"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}
Similar websites
dashboard.orderly.network
Orderly dashboard
stockpilot-indol-chi.vercel.app
A WebMCP-powered trading terminal where humans and AI agents research markets, analyze SEC filings, and trade together — on real data.
app.ramp.com
Sign-in page for Ramp's finance platform, used to manage corporate cards, expenses and accounts payable.
famabook.com
famabook