Skip to main content
Glama

Server Details

Let AI assistants shop for home and auto insurance: compare instant quotes across every carrier.

Ownership verified
Status
Healthy
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
Repository
Foresee-Tech/foresee
GitHub Stars
0

TDQS

A4.3/5.0

Scored across 2 tools

Disambiguation4/5

The two tools serve clearly different stages: quote_insurance provides instant estimates, while live_carrier_quotes confirms via real carrier sites. Both share coverage-selection concepts, which could cause minor confusion, but quote_insurance is explicitly labeled PRIMARY and live_carrier_quotes references it as the follow-up, making the boundary clear.

Naming Consistency3/5

quote_insurance follows a verb_noun pattern, but live_carrier_quotes uses an adjective_noun_noun structure with no verb. The names are descriptive and readable, but the inconsistent pattern prevents a higher score.

Tool Count3/5

Two tools is on the thin side for a server that covers both instant and live quoting workflows. Each tool is substantial and earns its place, but the count is borderline and feels minimal for the stated purpose.

Completeness4/5

The tools cover the core quote lifecycle: instant estimation and live confirmation. Minor gaps exist, such as no explicit tool for managing saved profiles or retrieving historical quotes, but these are workarounds within the existing tools rather than severe dead ends.

Available Tools

2 tools
live_carrier_quotesLive carrier quotesA
DestructiveIdempotent
Inspect

Purpose: confirm quote estimates on the carriers' own quote sites, via Foresee agents completing their real quote flows.

    IDEMPOTENT, keyed on the profile: the first call commissions the
    walks; calling again with the same profile collects progress and
    results instead of re-submitting anything — whatever the ask. A
    profile that has already been walked returns those results (the
    carriers are never asked twice): the envelope's
    ``coverage_selection`` names the ask the walk typed, and each quote
    carries the carrier's other recorded coverage options as
    ``variants``, so a new ask reads the same run. So call once to
    start, then re-call after a few minutes to collect; agents still
    working report their stage.

    No sign-in is required. The one hard requirement is the user's own
    consent, captured in-band: BEFORE the commissioning call, you MUST
    tell the user, plainly: Foresee will submit their details to the
    named carriers; the carriers may obtain their credit-based insurance
    score (a soft pull, with no impact on your credit score); and the
    carriers may contact them by email or phone. Then get their explicit
    go-ahead and pass their affirmation VERBATIM as ``user_authorization``
    (e.g. "yes, go ahead"). The affirmation is stored as the durable
    consent record for the dispatch; without one the call is refused with
    ``authorization_required``. Foresee only collects quotes; it does
    not take payment or bind insurance.

    Collect the ``identity`` fields in chat. They may be omitted only
    when the session is signed in to Foresee and the user has saved their
    profile on the Foresee site — then their consented profile-of-record
    is used, refined by anything passed in ``profile``.

    A ``missing_facts`` response is normal: carrier forms insist on facts
    (body style, purchase date, age first licensed…) that Foresee will not
    invent. Each ``needs`` entry carries the carrier (``scope``), the
    facts in the walk's own words (``need``), and ``fields[]`` — per
    fact, the ``ask`` beside the exact schema path to pass the answer
    under (``field``, e.g. ``auto.vehicles[].purchase_date``;
    ``identity.…`` paths go on ``identity``). Ask the user for exactly
    those facts, then call again with the answers merged in at those
    paths. A fact with no ``field`` has no profile home yet — relay
    that carrier's ask as unavailable rather than guessing a key. When
    the dispatch was PARTIAL (some carriers walked, some skipped over
    missing facts), follow the receipt's ``recover`` block: re-call
    with the new facts merged AND ``carriers`` set to exactly
    ``recover.carriers`` — a changed profile is a new dispatch, and an
    unscoped re-call would re-submit the already-walked carriers too.

    Unasserted MINOR facts are not asked: a form field that is really a
    claim nobody made (an anti-theft device, a defensive-driving course,
    years licensed abroad) is answered with the declared no-claim value —
    never a discount claim — and every one comes back in ``assumptions``
    (``field`` + the ``assumed`` value submitted). Relay them with the
    results; if the user corrects one, re-call with the real value at
    that path.

    ``lines`` names WHICH line to walk, exactly one per call (a fan-out
    drives one form family): ``{"auto": {...the ask...}}``,
    ``{"home": null}``, or ``{"renters": {"coverage_c": 30000,
    "coverage_e": 100000, "coverage_f": 1000, "deductible": 500}}``. An
    AUTO walk's ask is REQUIRED — the limits and deductibles the agents
    ask the carriers for, as actual numbers (`bi` "100/300", `pd` 100,
    `coll_deductible` 500, `comp_deductible` 500, the same four axes as
    quote_insurance); without it the tool answers with the
    selection-required message; ask the user, then call again. A HOME
    walk takes NO ask — the carrier's own form prices its package
    (dwelling amount from its replacement-cost estimate) and the agents
    report what it chose. A RENTERS walk requires its four axes as
    actual dollars — ``coverage_c`` (personal-property/contents),
    ``coverage_e`` (personal liability), ``coverage_f`` (guest medical)
    and ``deductible`` — the agents type the user's numbers on the form
    instead of accepting its defaults, and Foresee never invents them.

    Quotes come back with evidence. ``quote.premium`` is VERBATIM as
    the carrier's page printed it, and ``term_months`` says what it
    covers — a 6-month figure is not a monthly one. When term_months
    is known, present the monthly equivalent (premium ÷ term_months)
    so carriers compare on one basis, the page's own figure beside it;
    without it, relay the printed premium and say the monthly
    equivalent is unknown. A carrier may
    also decline the risk — a real answer to relay, not an error.
    ``skipped`` and ``not_dispatched`` name the carriers NOT walked,
    each with the reason — relay those too; a carrier never silently
    vanishes.
    
ParametersJSON Schema
NameRequiredDescriptionDefault
linesNo
profileYes
carriersNo
identityNo
user_authorizationNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
noteNo
errorNo
needsNoFacts carrier forms insist on that the profile does not carry, per carrier (scope). Each entry's fields[] pairs the walk's own ask with the exact profile/identity schema path to supply it under (field) — collect the answers from the user and re-call; never invent them
agentsNo
detailNo
statusNo'in_progress' / 'partial' / 'complete' — re-call the tool with the same arguments to collect
recoverNoOn a partial receipt: how to add the skipped carriers without re-submitting the walked ones — re-call with the missing facts merged AND carriers set to exactly recover.carriers (a changed profile is a new dispatch; unscoped, it would re-walk everyone)
skippedNo
assumptionsNoUnasserted form facts this dispatch resolved to declared no-claim answers (never a discount claim) — each entry names the profile path (field) and the value submitted (assumed). Relay every one with the results; a user who corrects one re-calls with the real value in the profile
example_argumentsNoOn a profile_required refusal: a correctly-wrapped call to imitate — re-call with the user's facts in this shape
coverage_selectionNoThe ask the walks TYPED — what each headline premium is for. A walked profile answers any ask without re-submitting: if the user's ask differs, read each quote's bound cover and variants (the carrier's other recorded options) and present the match
authorization_recordedNo

TDQS

A4.7/5.0
Behavior5/5

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

Substantially deepens what the annotations convey: idempotency mechanics ('calling again with the same profile collects progress and results instead of re-submitting anything — whatever the ask'), the mandatory in-band consent disclosure with an exact script and the 'authorization_required' refusal, soft-pull credit-score disclosure, 'the carriers are never asked twice', changed-profile-is-a-new-dispatch semantics, and 'a carrier never silently vanishes.' This is consistent with destructiveHint=true (real submission to carriers) and readOnlyHint=false, so there is no contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Long (~700 words) but appropriately front-loaded: purpose and the critical idempotency/collection contract come first, followed by consent, then recovery/assumption handling, then per-line semantics, then result interpretation. Paragraphs are organized with bolded lead-ins and each covers a distinct operational concern. Minor repetition in the trust framing ('Foresee never invents', 'Foresee only collects quotes') and some redundancy between the no-sign-in and identity paragraphs keep it from a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Complete for a complex async, consent-gated, multi-line tool: covers the mandated consent disclosure, the start/collect protocol, missing-facts and partial-dispatch recovery, unasserted-fact assumption handling, and quote interpretation (premium verbatim, term_months monthly-equivalent conversion, declined-risk-as-answer, skipped/not_dispatched reporting). Since an output schema exists, return values need not be re-documented, and nothing needed to invoke correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

At 0% schema description coverage, the description fully compensates for all five arguments: it spells out the exact lines map shapes for auto/home/renters, requires the auto ask, mandates that carriers be set to recover.carriers on partial dispatches, defines when identity may be omitted, and requires user_authorization to be the user's verbatim affirmation with an example ('yes, go ahead'). Concrete key names (coverage_c, coverage_e, coverage_f, deductible, bi, pd, coll_deductible, comp_deductible) are enumerated against the schema fields.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific purpose with a specific mechanism: 'confirm quote estimates on the carriers' own quote sites, via Foresee agents completing their real quote flows.' The verb (confirm), resource (carrier quote sites), and mechanism are all clear, and the description's use of 'the same four axes as quote_insurance' situates it relative to its sibling rather than repeating it.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides an exceptionally detailed operational protocol: call once to start then re-call after a few minutes to collect, missing_facts → ask the user and re-call with answers merged at exact paths, partial dispatch → follow the recover block with carriers set exactly to recover.carriers, assumption corrections → re-call with the real value. However, it never explicitly states when to prefer this tool over the sibling quote_insurance — the routing decision is left to inference rather than stated.

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

quote_insuranceInstant insurance quotesA
Read-only
Inspect

Purpose: generate instant, itemized quote estimates from the carriers Foresee supports, across the lines and states Foresee currently serves, in one call — the LIVE TODAY line at the end of this description names today's set. PRIMARY tool.

`lines` is REQUIRED and is ONE map: each key names a line to price (e.g.
"auto", "renters", "home" — plain words are fine), each value is that
line's coverage ask as actual numbers. A line that isn't live yet comes
back under `skipped` with honest copy saying where Foresee IS live,
written to be relayed to the user as-is. For auto
the ask has four axes — `bi` (bodily-injury liability, per-person/
per-accident in $000s, e.g. "100/300"), `pd` (property-damage liability in
$000s, e.g. 100), `coll_deductible` (collision deductible in dollars, e.g.
500) and `comp_deductible` (comprehensive deductible in dollars, e.g.
500); `um` and `medpay` are optional. A renters ask has four axes —
`coverage_c` (personal-property/contents limit in dollars, e.g. 30000),
`coverage_e` (personal liability in dollars, e.g. 100000), `coverage_f`
(guest medical in dollars, e.g. 1000) and `deductible` (all-perils, in
dollars, e.g. 500); `coverage_d` is optional. A home ask: `coverage_a`
(the dwelling's replacement cost in dollars), `coverage_e` (e.g. 300000),
`coverage_f` (e.g. 1000) and `aop_deductible` (all-other-perils
deductible in dollars, e.g. 1000). There are no named coverage levels
and the server never defaults: pass exact numbers. An omitted OPTIONAL
axis (`um`, `medpay`, `coverage_d`) keeps each carrier's own
default — the quote's per-coverage lines show what was rated. Any
numbers work as the ask; the response carries the state's legal minimum,
and each carrier's `price_ladder` prices every other rung, so a starting
selection is easy to refine after the fact. An incomplete ask on a
live line prices nothing and answers with `coverage_required` naming that
line's own axes; an axis supplied with a value no carrier offers (`bi`
"banana", a negative deductible) is refused the same way, naming the bad
value and the format the axis takes. Each supported carrier is priced at
exactly the selection given; a carrier with no such option appears in
`failures` with the reason, as does one Foresee can't price for a line it
was asked on (no program served there yet, or the carrier doesn't sell
that line in the state) — a carrier never silently vanishes from a line's
results. Priced results come back per line under `by_line`.

Profile requirements: ZIP code, age (or dob) and — for auto — each
vehicle's year/make/model are REQUIRED; they have no server-side
fallback. A missing or mistyped one errors at the schema with guidance;
a value that fits the schema but cannot rate ("not-a-zip", a negative
age) comes back in `profile_required` naming it, with guidance on what
the field takes. Use the profile schema's exact field names.

Each carrier returns a **point estimate**
(`monthly`) plus a `confidence_interval` that reflects only what's genuinely
unresolvable (irreducible), NOT missing profile fields. A field the caller
omits is filled with ONE declared value and reported in `assumptions` /
`tighten_by` (the reducible "tell us X and we sharpen" gap) — the response
is built to be presented early and refined, never widened into
a vague range. An entry that carries `path` names the exact profile
field to send the user's real answer under — never guess a key from the
fact's name. A path-less entry (`incident_details`) is answered by
completing the incident entries already sent (dates, fault, BI split), not
under a fresh key. A `tighten_by` fact answers at its matching
`assumptions` entry's path — or, for a flagged given value, its
`input_flags` entry's path.

Each carrier's `quote` carries every sub-coverage line (BI/PD/collision/
comprehensive/UM…) with its rating steps, at the selection you passed (echoed
as `coverage_selection`). Most carriers also carry a `price_ladder`: for each
coverage lever of the line (auto: BI limit, PD limit, collision/comprehensive
deductible; renters: deductible and the C/E/F limits; home: AOP deductible
and the A/E/F limits) the exact
price at every rung, one lever moved at a time with everything else
held at the user's selection — the ladder is anchored at the selection you
passed, so its `anchor.monthly` is the carrier's `monthly`. It answers
limit/deductible what-ifs with real marginal prices.
Every ladder number IS an exact re-rate; a combined change or an unlisted
rung has no derivable price (rating is not linear), so those price only
through a re-call with the new `coverage_selection`.

RESULT FORMAT: a compact machine text, not JSON. Its first line is Q sel=<the coverage_selection priced, as JSON>; then a legend and a factor dictionary (f0= …). Row types — C: carrier|entity|monthly|ci lo-hi. L: monthly $ per coverage line (already monthly, every carrier). F ()=v,v,…: one rating factor, one value per coverage in the L order; blank = not applied, one value = all coverages; suffix ? = estimated, ~ = derived, none = exact. D =option:±$: the change in the carrier's monthly for each option of that lever, everything else held at the selection — answer deductible/limit what-ifs from D without another call (new monthly = monthly + delta). Only state numbers that appear in the result or follow from monthly + a D delta; if a rung is not in D for a carrier, say the carrier has no such option rather than guessing.

When the user wants firm numbers straight from the carriers, offer live carrier quotes: Foresee agents complete the carriers' real quote flows via live_carrier_quotes (which explains the required disclosure + consent affirmation; no sign-in is needed). Instant quotes stay the first answer; live quotes are the follow-up.

LIVE TODAY: Foresee quotes auto in CA today.

ParametersJSON Schema
NameRequiredDescriptionDefault
linesNo
profileYes
carriersNo
include_partialNo
include_failuresNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNo
stateNo
bundleNoPer-carrier bundle totals, keyed like by_line's carrier_key, when one carrier priced several of the asked lines together. Absent means no bundle pricing was computed — never present multi-line prices as bundled unless this block says so
detailNo
by_lineNoEach priced line's carriers, cheapest first
messageNo
skippedNoLines not priced, with the honest reason — relay it
serviceableNo
presentationNoHow to present priced results — rides with them
profile_requiredNoRequired profile facts still missing (field → what to pass). Nothing is priced while any is open: supply each — if the user didn't state one, pass your best concrete value and present it to them as your assumption
coverage_requiredNoLines needing a coverage ask, each naming its own axes
example_argumentsNoOn a profile_required refusal: a correctly-wrapped call to imitate — re-call with the user's facts in this shape

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the readOnlyHint/destructiveHint annotations, the description discloses a great deal: the result is 'a compact machine text, not JSON', errors surface via coverage_required/profile_required/failures, carriers never silently vanish, omitted fields become declared assumptions in assumptions/tighten_by, and price_ladder numbers are exact re-rates rather than derivable estimates. None of this contradicts the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but organized with clear sections (purpose, `lines`, profile, result format, live-carrier follow-up, LIVE TODAY) and front-loads the primary purpose. Some density and repetition around path/tighten_by/price_ladder mechanics could be tightened, but most sentences earn their place given the unusual non-JSON result format.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex tool it is remarkably complete: scope, error surfaces, assumptions semantics, result format, and the sibling relationship are all covered. The gaps are that `carriers`/`include_partial`/`include_failures` are undocumented, and the description calls `lines` REQUIRED while the schema lists only `profile` as required — an inconsistency an agent could trip on.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate — and it does extensively for the two central parameters: `lines` (per-line axes, required vs optional fields, defaults, refusal behavior) and `profile` (required ZIP/age/vehicle facts, exact field names, error handling). However, it never describes the `carriers`, `include_partial`, or `include_failures` parameters, leaving those semantically undefined.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence states a specific verb and resource: 'generate instant, itemized quote estimates from the carriers Foresee supports, across the lines and states Foresee currently serves, in one call.' It also labels itself 'PRIMARY tool' and explicitly distinguishes itself from live_carrier_quotes, so an agent can separate it from its sibling without inspecting schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description is explicit about when to use this tool ('Instant quotes stay the first answer') and when to switch to the sibling ('When the user wants firm numbers straight from the carriers, offer live carrier quotes'). It also names the sibling directly and notes that live quotes do not require sign-in, giving clear routing guidance.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 2 tool updates
    • First observedlive_carrier_quotes
    • First observedquote_insurance

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI agents to get real home & auto insurance quotes and start binding through a network of licensed independent agencies.
    Apache 2.0
  • F
    license
    Not graded
    quality
    Not graded
    maintenance
    Provides 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.
    -
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.