Sigo Seguros car insurance quotes
Server Details
Non-binding car insurance estimates from Sigo Seguros, a licensed agency, not a carrier.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 8 tools
The three-step chain (next_question -> start_quote -> get_quote) is explicitly numbered and each tool's role is stated, and the carrier_questions/answer_carrier_questions pair is cleanly split into ask vs. record. The residual ambiguity is that next_question and carrier_questions are both 'return questions' tools for different phases, so an agent must track which stage it is in to choose correctly.
Six of eight names follow a clear verb_noun pattern (find_occupation, get_quote, list_available_states, resolve_application_link, start_quote, answer_carrier_questions). The two exceptions, carrier_questions and next_question, drop the verb and name the artifact instead, which is readable but breaks the otherwise uniform convention.
Eight tools is well matched to a guided quote funnel: three flow steps, a question/answer pair, two optional helpers, and an inbound-link resolver. Nothing looks redundant or padded, and no lifecycle operation is crammed into a catch-all tool.
The surface covers the full customer journey the server claims responsibility for: state eligibility, stepwise intake, quote submission and polling, second-round data, carrier attestations, occupation lookup, and resuming an existing link. Payment and binding are deliberately delegated to Sigo's own flow and are consistently declared out of scope rather than left as an unexplained gap.
Available Tools
8 toolsanswer_carrier_questionsFile the customer's answers to the carrier's questionsAIdempotentInspect
After carrier_questions: file the answers, passing answers_so_far back each time, until the set is complete.
Saves what the customer answered against their application, which is what moves it towards a final quote. Send every answer under the code it came back with, and only what the customer actually said.
This does not take payment, sign anything or bind coverage. Those happen in Sigo's own flow, through the link that comes back here.
The carrier takes its questions as a set, so answers are held until every one has been given. Pass the answers_so_far from the previous call back in, and only the new answer needs to go in answers.
| Name | Required | Description | Default |
|---|---|---|---|
| locale | Yes | The language the customer is writing in. Set it from their own messages rather than leaving the default: the estimate's notice comes back in this language, and a notice the customer cannot read discloses nothing. Sigo serves these two languages only. | |
| answers | Yes | What the customer said, in their own answers. Never filled in on their behalf. | |
| quote_id | Yes | The handle start_quote returned. | |
| answers_so_far | No | The `answers_so_far` from the previous call, when there was one. It carries what the customer already answered, so only the new answer needs to go in `answers`. It survives a re-quote: after start_quote with revise_of, send the same token with the new quote_id and the answers still stand, as long as the carrier is the same one. Nobody has to be asked twice. | |
| chosen_quote_id | Yes | The estimate the customer picked. |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | Yes | What is done and what is still ahead, in the customer's language. |
| filed | Yes | True once the carrier has the whole set. The carrier takes it whole or not at all, so answers are held until every required question has one. |
| answered | Yes | How many of the carrier's questions have an answer so far, counting the earlier turns. |
| next_step | Yes | Paying and signing happen here, not in this conversation. |
| still_needed | Yes | The codes of the required questions with no answer yet. Empty when the set is complete. |
| answers_so_far | Yes | Everything answered up to now, to pass back on the next call so nothing is lost. Null once the carrier has the set and there is nothing left to carry. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare a non-read-only, idempotent, non-destructive, open-world write, and the description is consistent with all of them. It adds genuine behavioral context beyond the annotations: answers are buffered until the full set is given, the token survives a re-quote (supporting idempotency), and payment/signing/binding are out of scope. It stops short of describing error behavior or the returned link's use in depth.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The instruction is front-loaded, which is good, but the four-paragraph narrative repeats the answers_so_far mechanic twice ('passing answers_so_far back each time' and 'Pass the answers_so_far from the previous call back in') and re-states the schema's own descriptions. Some sentences could be cut without losing meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a stateful, multi-step, 5-parameter write tool with an output schema, the description covers sequencing, the carry-back token, re-quote continuity, and scope limits. With an output schema present, return values need no explanation, so nothing an agent needs is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds meaning the schema does not: answers must be given 'under the code it came back with' and 'only what the customer actually said', and only the new answer goes into `answers` while prior ones travel in `answers_so_far`. That incremental-input semantics is the key to calling this correctly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('file the answers', 'saves what the customer answered against their application') and names the preceding action ('After carrier_questions'), cleanly separating it from the sibling that surfaces questions. An agent can tell what this does and where it sits in the flow without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit ordering ('After carrier_questions'), the iterative protocol ('passing answers_so_far back each time, until the set is complete'), and a clear exclusion ('This does not take payment, sign anything or bind coverage'). Both when-to-use and when-not are covered, plus the re-quote case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
carrier_questionsThe carrier's own questions before it will issueARead-onlyInspect
After the three steps, when to_final_quote.next_call names it: the questions of the estimate the customer picked. Then answer_carrier_questions.
Once the customer has picked an estimate, this returns the questions that carrier asks in their state — attestations and disclosures the carrier words itself. Say preamble first, then ask one ask_together block per turn, each question exactly as it is worded; they are not Sigo's questions to reword. Send the answers with answer_carrier_questions.
can_answer_here is false where that carrier does not finish online, and then a Sigo agent takes it from there. Either way the customer keeps the link: they can finish on the web at any point without losing what they have answered.
| Name | Required | Description | Default |
|---|---|---|---|
| locale | Yes | The language the customer is writing in. Set it from their own messages rather than leaving the default: the estimate's notice comes back in this language, and a notice the customer cannot read discloses nothing. Sigo serves these two languages only. | |
| quote_id | Yes | The handle start_quote returned. | |
| chosen_quote_id | Yes | The `quote_id` of the estimate the customer picked, from the list they were shown. |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | Yes | How to put these, in the customer's language. |
| preamble | Yes | Sigo's own words for the customer, to say as they are before the first question. Not one of the carrier's questions and not answered. Null when there is nothing to ask here. |
| next_step | Yes | Where the customer finishes. Theirs at any point, not only at the end. |
| questions | Yes | In the order the platform ranked them. |
| ask_together | Yes | Codes that can be put to the customer in one turn, grouped the way the carrier groups them. Ask each block as one message and send its answers together. A question with `depends_on` is in no block: it gets its own turn, after the one it hangs off. Empty when there is nothing to ask here. |
| still_needed | Yes | What the application still lacks, when that is why the questions are not here. An empty array means nothing is missing. Null means this is not about the application at all — either the questions came back, or the carrier does not finish online here. |
| can_answer_here | Yes | False when there is nothing to ask here yet: the application is still missing details, or the carrier does not finish online in this state. Check `still_needed` to tell the two apart. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint/openWorldHint annotations, it discloses rich behavior: say preamble first, one ask_together block per turn, questions must be relayed verbatim and not reworded, and can_answer_here=false hands off to a Sigo agent while the customer retains the link. This is well past what the annotations cover.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but mostly earned; the turn protocol and verbatim requirement each justify their place. The first sentence is front-loaded with opaque references rather than the tool's core purpose, which costs a point.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained. The description covers the gating step, the per-turn asking protocol, the handoff when can_answer_here is false, and the customer-link persistence — everything needed to invoke and use it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 quote_id, chosen_quote_id and the locale language semantics. The description adds no further parameter-specific detail beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: it returns the questions the carrier asks in the customer's state (attestations and disclosures). It is distinguishable from answer_carrier_questions and next_question. The opening sentence, however, leans on unexplained context ('the three steps', 'to_final_quote.next_call') that an agent must already know, which blunts the clarity slightly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states the trigger condition (after the customer has picked an estimate, when to_final_quote.next_call names it) and routes to the alternative (send answers with answer_carrier_questions). The preamble/ask_together turn protocol is spelled out, leaving no inference needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_occupationFind the rater's code for a customer's jobARead-onlyInspect
Second-round helper, outside the three steps: turns the customer's words into the occupation code start_quote takes.
Turns what the customer said they do into the carrier's own occupation codes. Call it before sending occupation on a driver: the catalogue is written in trade names and customers answer in their own, so the code is never something to guess at. Pick the entry that matches what they described and send its code.
An empty list means ask them another way rather than settle for the nearest thing.
| Name | Required | Description | Default |
|---|---|---|---|
| said | Yes | What the customer said they do, in their own words — 'chofer', 'trabajo en construcción'. | |
| locale | Yes | The language the customer is writing in. Set it from their own messages rather than leaving the default: the estimate's notice comes back in this language, and a notice the customer cannot read discloses nothing. Sigo serves these two languages only. |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | Yes | What to do with this list, in the customer's language — including when it comes back empty. |
| matches | Yes | The rater's entries that fit, best first. Pick the one that matches what the customer described and send its `code` as the driver's `occupation`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, so the safety profile is covered. The description adds genuinely useful behavior beyond them: the catalogue is in trade names, matching is approximate so an empty list is meaningful, and the result must be verified rather than guessed. It does not discuss rate limits or return shape, but the output schema covers the latter.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the tool's role before the how-to, and every clause is actionable. Minor redundancy between 'turns the customer's words into the occupation code' and 'Turns what the customer said they do into the carrier's own occupation codes' costs it the top mark.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists so return values need no explanation, and annotations carry the safety profile. The description covers purpose, workflow position, and empty-result handling, leaving only minor gaps such as whether multiple matches can be returned. Adequate for a two-parameter lookup.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so `said` and `locale` are already fully documented, including the enum and locale's effect on notice language. The description reinforces the 'customer's own words' intent but adds no syntax or constraints beyond the schema. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific transformation (customer's spoken words → carrier occupation code) and names the sibling it feeds (`start_quote` / the `occupation` field). An agent can distinguish it from next_question, carrier_questions, and get_quote without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-call ('Call it before sending `occupation` on a driver'), why the lookup is necessary ('the code is never something to guess at'), and what to do on an empty result ('ask them another way rather than settle for the nearest thing'). It also locates itself in the flow ('outside the three steps').
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_quoteRead car insurance estimatesARead-onlyInspect
Step 3 of 3: read the quote_id start_quote returned, after poll_after_seconds, until more_carriers_pending is false. Never start_quote again to refresh a result.
Reads the estimates for a quote_id returned by start_quote. Carriers answer at different speeds: when more_carriers_pending is true the list is not final and poll_after_seconds says how long to wait before asking again. The list closes within a minute either way, with whatever arrived — a carrier that did not answer is not a price, and there is none to go looking for. Once it is closed, to_final_quote.next_call is what to do next. No price here is final, in any round: the final quote is calculated by Sigo in the link, after the carrier's questions.
| Name | Required | Description | Default |
|---|---|---|---|
| locale | No | The language the customer is writing in. Set it from their own messages rather than leaving the default: the estimate's notice comes back in this language, and a notice the customer cannot read discloses nothing. Sigo serves these two languages only. | es |
| quote_id | Yes | The handle start_quote returned. |
Output Schema
| Name | Required | Description |
|---|---|---|
| state | Yes | |
| covers | Yes | |
| quotes | Yes | |
| status | Yes | |
| contact | Yes | |
| carriers | Yes | |
| problems | Yes | |
| quote_id | Yes | Pass this back to get_quote to read the result again. |
| asked_for | Yes | Label each answer with this when comparing two quotes for the same customer, so "con deducible de 1000" is matched to the quote that asked for it. |
| issued_by | Yes | |
| quoted_at | Yes | |
| expires_at | Yes | |
| application | Yes | |
| pending_note | Yes | What to do while carriers are still answering, in the customer's language. Null once the list is final. |
| price_levers | Yes | |
| to_final_quote | Yes | |
| personal_use_note | Yes | Present when the customer said the vehicle is used for work. Say it with the prices: this quote is personal auto. Null when they said nothing about it, and then the subject is not raised. |
| poll_after_seconds | Yes | How long to wait before calling get_quote again. |
| revised_from_quote | Yes | True when this quote re-quoted the same customer: started with revise_of, or for a customer who already quoted today and was still at their first round. One person, one application, priced again. |
| more_carriers_pending | Yes | True when more carriers may still return a price; the list is not final. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only and open-world, but the description adds substantial behavior beyond them: carriers answer asynchronously, the list may be incomplete while more_carriers_pending is true, the list closes within a minute with partial results, missing carriers are not prices, and no price is final at this stage. This is exactly the kind of operational context annotations cannot express.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the step position, the wait condition, and the prohibition, which is the right ordering. It runs long and a few sentences are slightly redundant/quasi-poetic ('there is none to go looking for', 'no price here is final, in any round'), costing a point without hurting comprehension.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values needn't be documented; the description instead supplies the asynchronous polling semantics, termination condition, and hand-off to the next step. Nothing an agent needs to invoke and loop this tool correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the locale parameter's schema description is already very rich (language of the notice, Sigo serves only es/en). The description restates quote_id's origin without adding syntax or format beyond the schema, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (read the estimates for a quote_id returned by start_quote) and explicitly distinguishes itself from the sibling start_quote, which it warns against re-invoking. An agent can place it in the flow without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use ('Step 3 of 3'), the polling loop condition (wait poll_after_seconds, repeat until more_carriers_pending is false), an explicit prohibition ('never start_quote again to refresh'), and what to do after closure (to_final_quote.next_call). Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_available_statesStates where Sigo can quoteARead-onlyInspect
Before the flow, optional: where Sigo quotes. The flow itself is next_question, then start_quote once, then get_quote.
The US states Sigo Seguros is licensed to sell car insurance in, and what Sigo is. Ask this before collecting details, so a customer elsewhere is not taken through a full quote.
The state a policy is rated in comes from where the car is kept overnight, not from where the customer lives or works. Read state_is_decided_by before asking for a ZIP: a car kept outside these states is not quoted on a ZIP inside them, however close the customer commutes.
Sigo is an agency: it sells policies that carriers issue. The carrier pays it a commission, and in almost every state where it sells, the customer pays a one-time broker fee for the agency's service — in Florida there is none. Where there is one it is real and is itemised before anyone pays, in Sigo's own flow. Asked what Sigo charges — which customers ask before there is any quote — that is the answer, with no amount: saying Sigo charges nothing is false wherever it does charge, and the checkout will contradict it.
| Name | Required | Description | Default |
|---|---|---|---|
| locale | Yes | The language the customer is writing in. Set it from their own messages rather than leaving the default: the estimate's notice comes back in this language, and a notice the customer cannot read discloses nothing. Sigo serves these two languages only. |
Output Schema
| Name | Required | Description |
|---|---|---|
| states | Yes | |
| carriers | Yes | |
| how_sigo_is_paid | Yes | What to say when the customer asks what Sigo charges, in their language. No amount is in it. |
| state_is_decided_by | Yes | Read this before asking for a ZIP. It says what decides the state a policy is rated in, in the customer's language, and it is the one thing this list does not say on its own. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description goes well beyond that by disclosing the agency/commission/broker-fee model and, importantly, the policy for answering fee questions ('saying Sigo charges nothing is false wherever it does charge'), which is real behavioral context an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long and mixes distinct concerns — flow sequencing, licensing geography, organizational identity, and fee/commission policy — with the core purpose appearing late. Much of the fee-model prose is tangential to invoking this tool, so several sentences do not earn their place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need no explanation, and the description covers the who/what/when for this lookup. It is arguably over-complete on domain policy rather than under-complete, so nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single enum parameter 'locale' is fully documented in the schema with its own rationale. The description adds no locale syntax or formatting detail beyond the schema; the 'state_is_decided_by' reference is about domain logic, not the parameter. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific resource — 'The US states Sigo Seguros is licensed to sell car insurance in' — and distinguishes itself from the flow siblings (next_question, start_quote, get_quote). However, the purpose statement is buried after flow-ordering guidance rather than front-loaded, which slightly weakens immediate clarity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear context: 'Ask this before collecting details, so a customer elsewhere is not taken through a full quote,' which effectively states when to use it and the consequence of skipping it. There is implicit exclusion guidance (customers outside licensed states), though no explicit named alternative tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
next_questionThe next thing to ask the customerARead-onlyInspect
Step 1 of 3: call it until ready_to_quote is true, sending back the collected it returns each time and each answer under answer_as.key. Then start_quote.
Returns the one question to put to the customer now, in their language, with the options to offer when the field has a fixed set. Call it before each question and again after every answer, until ready_to_quote is true, then call start_quote.
Send only what the customer said this turn, in answered, together with the collected from the last call. The connector keeps the record of the conversation, so nothing is repeated and an answer given before its turn is not lost. When ready_to_quote turns true, summary is what the customer has said: read it back and let them correct it before quoting.
It exists so the order and the pace are the connector's rather than a matter of judgement: Sigo's customers are working people, often quoting on a phone, and a turn that asks for four things at once is where they give up.
Once a ZIP is given it is checked here, so a customer outside the states Sigo is licensed in is told before being walked through the rest.
There are two stretches. stage: "first_quote" is the one that ends in estimates. stage: "second_round" is for a customer who saw those estimates and wants to finish the application so the carrier can quote it for real: it asks where the car is kept, the VIN, who owns it, the licence, and a few more. The prices it leads to are still estimates; the final quote comes after the carrier's own questions, in Sigo's link. get_quote says when that is worth offering.
| Name | Required | Description | Default |
|---|---|---|---|
| stage | No | Which stretch the conversation is in. `second_round` is for a customer who saw prices and wants to finish the application; it asks a different set, and the prices it leads to are still estimates. | first_quote |
| locale | Yes | The language the customer is writing in. Set it from their own messages rather than leaving the default: the estimate's notice comes back in this language, and a notice the customer cannot read discloses nothing. Sigo serves these two languages only. | |
| answered | No | Only what the customer said this turn. Everything from earlier turns is already in `collected` and must not be repeated here. | |
| collected | No | The `collected` from the previous call. Leave it out on the first question of a conversation and send it on every call after that: it carries everything answered so far, so nothing has to be repeated and nothing is lost. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ask | Yes | The question, ready to put to the customer, in their language. |
| field | Yes | The question being asked, by name. Not the key to answer under: that is `answer_as.key`. |
| options | Yes | Every choice the customer may pick, when the field has a fixed set. |
| summary | Yes | What the customer has answered, to read back to them for confirmation. Present only once `ready_to_quote` is true; null while there are still questions to ask. |
| answer_as | Yes | How to send the answer back. Null on the closing step, when there is nothing left to answer. |
| collected | Yes | Everything answered so far, this turn included. Send it back on the next call. It is the connector's record of the conversation, so nothing has to be asked twice. |
| ready_to_quote | Yes | True when nothing is missing and start_quote can be called. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint and openWorldHint=false; the description goes well beyond by disclosing that the connector is stateful and retains conversation history, that answers are never lost or repeated, that ZIP is validated here against licensed states, that summary must be read back for correction, and that the two stages yield only estimates with the real quote coming later via the carrier's link. These are non-obvious behavioral traits an agent could not derive from structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The call loop is stated twice — once in the opening 'Step 1 of 3' line and again in the second paragraph ('Call it before each question and again after every answer, until ready_to_quote is true, then call start_quote'). The rationale about Sigo's customers quoting on a phone is useful for pacing but verbose. Front-loaded and readable, yet the duplication costs it.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a stateful, two-stage conversation driver with a nested answered object, the description covers the full workflow (loop, termination, handoff), the stage semantics, ZIP validation, and the read-back requirement. An output schema exists so return values need not be re-explained, and nothing an agent needs to drive the flow correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the schema already documents stage, locale, answered and collected in detail, including the enum values and per-field notes. The description reinforces the semantics of `answered` (only this turn's utterance) and `collected` (carried from the previous call), but adds little beyond what the schema text already says, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Returns the one question to put to the customer now'), scopes it to the customer's language and fixed option sets, and explicitly names the sibling it hands off to (start_quote) and the gate (ready_to_quote). An agent can distinguish it from start_quote and get_quote without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit call timing ('call it before each question and again after every answer'), the loop termination condition ('until ready_to_quote is true'), and the next step ('then call start_quote'), plus a routing hint to get_quote. When-to-use and when-to-stop are both stated, not inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resolve_application_linkRead a Sigo link the customer already hasARead-onlyInspect
Outside the three steps: for a customer who arrives with a Sigo link they already have.
Says what a Sigo link points at, how far that application has got, and the one thing the customer has to do next. Call it when someone shows up with a link — from an email, a text, or their own notes — and asks for help finishing.
Pass what they wrote, as they wrote it. It resolves the short link, the long one and a bare code, with surrounding words and punctuation.
It reads only: it opens nothing on the customer's behalf, and asking twice changes nothing. It reports no price, carrier or personal detail, because Sigo does not send any — whoever holds a link gets this same answer, so there is nothing here that identifies its owner. Say the message as given rather than composing one.
| Name | Required | Description | Default |
|---|---|---|---|
| locale | Yes | The language the customer is writing in. Set it from their own messages rather than leaving the default: the estimate's notice comes back in this language, and a notice the customer cannot read discloses nothing. Sigo serves these two languages only. | |
| pasted_link | Yes | The link or code the customer gave, exactly as they wrote it — surrounding words and punctuation are fine. Do not clean it up or guess at a link the customer did not provide. |
Output Schema
| Name | Required | Description |
|---|---|---|
| url | Yes | The link to hand back so the customer can continue, or null when nothing resolved. Use this URL rather than the one the customer pasted. |
| state | Yes | How far the application has got. Coarse on purpose. |
| message | Yes | What to tell the customer, already written in their language. Say this rather than composing your own: it is the only description of the application Sigo has checked, and it deliberately states no price, carrier or personal detail because none was read. |
| next_step | Yes | The single next action, as a value. `message` is the wording for it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint and openWorldHint. The description adds real behavioral context beyond them: idempotence ('asking twice changes nothing'), no side effects ('opens nothing on the customer's behalf'), and a disclosure posture ('reports no price, carrier or personal detail... nothing here that identifies its owner'), which tells the agent not to expect personalized or sensitive output.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Core behaviour and the trigger are front-loaded, and every sentence carries information. It is slightly dense and the opening sentence is a fragment that requires reading on to parse, keeping it just short of a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be described, yet the description still states what the answer contains and the disclosure constraints. With only two fully-documented params and annotations covering safety, nothing an agent needs to call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds accepted-format semantics the schema does not: it resolves short links, long links and bare codes, tolerates surrounding words and punctuation, and must be passed verbatim. That is genuine value over the schema text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource: it says what a Sigo link points at, how far the application has progressed, and the next required customer action. It also explicitly positions itself against the sibling flow ('Outside the three steps'), so an agent can distinguish it from start_quote/next_question/get_quote without reading schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete trigger condition ('Call it when someone shows up with a link — from an email, a text, or their own notes — and asks for help finishing') and names the alternative path (the three-step flow) it sits outside of. Routing is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start_quoteStart a car insurance quoteAInspect
Step 2 of 3: call it once, with the collected next_question returned when ready_to_quote was true. It returns a quote_id for get_quote. If it answers quote_in_progress, do not call it again: read the quote_id you already have. Retrying the same call, after a timeout say, is safe: while its rating runs, the retry starts no second one and answers quote_in_progress.
Asks Sigo's carriers for car insurance estimates. Carriers answer over tens of seconds, so this returns a quote_id straight away rather than waiting; read the prices with get_quote. Estimates are not binding: this does not select a policy, take payment or bind coverage. No browser is needed to get them: they come back in these tool calls, and the link in each one is where the customer continues if they want to buy.
Call it once the details are gathered. Gather them a step at a time in conversation — listing every field up front reads as a form and loses people before the first answer.
For a customer who already has a quote and wants something changed, pass that quote's id as revise_of instead of starting over: the same person re-quoted, not a second one. A call for a customer who already quoted today and is still at their first round revises that quote even without revise_of — the result says revised_from_quote: true — so a forgotten id never makes a second application.
The same call carries the second round. Once the customer has answered what next_question asks with stage: "second_round" — address, VIN, ownership and lienholder, licence status and months held, occupation, education, prior coverage, excluded drivers, and each driver's document number in drivers[].document.number — send them all here with revise_of, and the carriers price the quote again on what they now know.
The address the second round asks for is where the car is kept, and it is checked against the ZIP the quote is running on. They disagree, and the answer is to correct whichever one is wrong — never to move the customer onto a ZIP in a state the car is not kept in.
One quote at a time per customer. If their previous quote is still being answered, this fails with quote_in_progress and a poll_after_seconds: say so, read the earlier quote with get_quote when that time has passed, then ask for this one again with revise_of. Two asks at once ("the Civic and the Silverado") are run one after the other, and each result's asked_for says which is which.
Apart from arguments the schema rejects, a refusal comes back with a code, a message for the customer and a next_step for you, which says what to do next and which tool, if any, to call.
| Name | Required | Description | Default |
|---|---|---|---|
| Yes | Identifies the customer and is how Sigo reaches them about this quote. No phone number is collected here, so nothing can be called or texted from this channel — which is not the same as Sigo not calling: a customer who wants a call leaves their number in Sigo's own flow, through the link on their estimate, and an agent calls them. | ||
| locale | Yes | The language the customer is writing in. Set it from their own messages rather than leaving the default: the estimate's notice comes back in this language, and a notice the customer cannot read discloses nothing. Sigo serves these two languages only. | |
| address | No | Second round only. The street address where the car is kept overnight — street and number; the ZIP already gave the city and the state. It is checked against that ZIP, and an address somewhere else is refused rather than quoted: this is the field that decides which state the policy is rated in. Where they work is not it. | |
| drivers | Yes | ||
| vehicles | Yes | ||
| zip_code | Yes | The 5-digit ZIP code where the vehicle is kept. It determines the state. | |
| collected | Yes | The `collected` next_question returned once `ready_to_quote` was true. Required: it is the record that every question was put to the customer. A call without it, or with one that still has questions pending, is refused with `questions_not_finished` and creates nothing. | |
| revise_of | No | When the customer wants a quote they already have run again with something changed — another deductible, another coverage, a detail they gave wrong: pass that quote's `quote_id` here, with the full details including the change. It re-quotes the same person instead of making them a second one. Never invent this value, and never use it for a different customer. | |
| is_student | No | ||
| is_homeowner | No | ||
| correction_of | No | Only when a previous call failed with `data_not_accepted`: pass the `correction_of` it returned, together with the corrected details. The quote is retried on the same record instead of starting a second one for the same person. Never invent this value. | |
| uninsured_motorist | Yes | Whether to include uninsured-motorist protection — cover for when the other driver has no insurance. Ask it; it is the one add-on offered at this step and it changes the price. | |
| has_prior_insurance | Yes | Whether the customer currently has car insurance. | |
| prior_coverage_months | No | Second round only, and only for a customer who has insurance now. How long they have been covered: offer 6 months, 1 year, 3 years, 4 or more. | |
| prior_coverage_expiration | No | Second round only. YYYY-MM-DD, when the current policy ends. Today is accepted; a date already past is refused: confirm it with the customer, and if their coverage really did end, they have no prior insurance to send. |
Output Schema
| Name | Required | Description |
|---|---|---|
| state | Yes | |
| covers | Yes | |
| quotes | Yes | |
| status | Yes | |
| contact | Yes | |
| carriers | Yes | |
| problems | Yes | |
| quote_id | Yes | Pass this back to get_quote to read the result again. |
| asked_for | Yes | Label each answer with this when comparing two quotes for the same customer, so "con deducible de 1000" is matched to the quote that asked for it. |
| issued_by | Yes | |
| quoted_at | Yes | |
| expires_at | Yes | |
| application | Yes | |
| pending_note | Yes | What to do while carriers are still answering, in the customer's language. Null once the list is final. |
| price_levers | Yes | |
| to_final_quote | Yes | |
| personal_use_note | Yes | Present when the customer said the vehicle is used for work. Say it with the prices: this quote is personal auto. Null when they said nothing about it, and then the subject is not raised. |
| poll_after_seconds | Yes | How long to wait before calling get_quote again. |
| revised_from_quote | Yes | True when this quote re-quoted the same customer: started with revise_of, or for a customer who already quoted today and was still at their first round. One person, one application, priced again. |
| more_carriers_pending | Yes | True when more carriers may still return a price; the list is not final. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare non-readOnly, open-world, non-idempotent, non-destructive, so the bar is lower, yet the description still adds substantial context beyond them: in-flight retry deduplication, the non-binding nature of the estimate ('does not select a policy, take payment or bind coverage'), the one-quote-at-a-time-per-customer constraint, refusal envelopes carrying code/message/next_step, and the rideshare case that halts quoting entirely. It never asserts a read-only or idempotent effect that the annotations contradict.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Eleven dense paragraphs is defensible for a 15-parameter, multi-step tool, but the opening line ('Step 2 of 3: call it once, with the collected next_question returned when ready_to_quote was true') is opaque before the purpose is stated, and the quote_in_progress behaviour is explained across two separate paragraphs. Every paragraph carries content, but ordering and some repetition cost it.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, yet the description still covers the workflow end to end: gathering sequence, second-round batching, revise semantics, concurrent-ask ordering via asked_for, and the refusal envelope. For a tool of this complexity nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 73%, with a very rich schema that already documents most fields, so the baseline sits near 3. The description earns above baseline by adding cross-parameter workflow semantics the schema cannot express: it enumerates the second-round field set to send with revise_of, explains revise_of/correction_of as identity-preserving re-quotes, and ties address to the ZIP the quote is running on.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Asks Sigo's carriers for car insurance estimates') and immediately scopes the return contract ('returns a quote_id straight away rather than waiting; read the prices with get_quote'). It differentiates from siblings by name — get_quote reads prices, next_question gathers details, and the quote_in_progress path routes back to get_quote — so an agent can pick this tool over its neighbours without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-call ('once the details are gathered', gathered a step at a time rather than as a form), when-not-to-retry ('If it answers quote_in_progress, do not call it again'), and how to handle the revise path via revise_of versus starting fresh. Concrete alternatives and recovery routes (poll_after_seconds, then get_quote) are named, so nothing is left to inference.
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.
8 tool updates
- First observed
answer_carrier_questions - First observed
carrier_questions - First observed
find_occupation - First observed
get_quote - First observed
list_available_states - First observed
next_question - First observed
resolve_application_link - First observed
start_quote
Related MCP Connectors
Indicative US auto insurance prices for agents: rating facts only, no PII, consented path to agents.
Indicative US auto insurance prices for agents: rating facts only, no PII, consented path to agents.
Indicative US auto insurance prices for agents: rating facts only, no PII, consented path to agents.
Indicative US auto insurance prices for agents: rating facts only, no PII, consented path to agents.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to get real home & auto insurance quotes and start binding through a network of licensed independent agencies.1Apache 2.0
- FlicenseNot gradedqualityCmaintenanceProvides educational fixed-rate loan estimates with mortgage and auto loan calculators.-
- FlicenseNot gradedqualityBmaintenanceSearch 6,900+ U.S. surety bond requirements across all 50 states. Instant pricing.-
- FlicenseNot gradedqualityNot gradedmaintenanceProvides tools for motor insurance quoting, including vehicle lookups, postcode risk assessments, and premium calculations. It enables users to generate and compare car insurance quotes through natural language interactions.-
Glama MCP Gateway
Add one secure layer between your agents and this server.