Foresee
officielForesee permet aux assistants IA de comparer les assurances habitation et automobile auprès de tous les assureurs et options de couverture, en fournissant des estimations de devis instantanées, précises et détaillées.
Que pouvez-vous faire avec Foresee MCP ?
- Compare auto insurance quotes — Demandez des estimations instantanées et détaillées auprès de plusieurs assureurs à l’aide de
quote_insuranceavec les détails de votre véhicule et de votre couverture. - Price home or renters coverage — Obtenez des devis détaillés pour une habitation ou une location en précisant les caractéristiques du bien et les limites de couverture comme
coverage_aoucoverage_c. - Explore coverage trade-offs — Voyez comment la modification des franchises ou des limites affecte les primes mensuelles grâce aux échelles de prix dans la réponse.
- Identify missing factors — Demandez quels détails omis (comme
annual_mileageou le dossier de conduite) feraient le plus varier votre devis, en vous basant sur les suggestions detighten_by. - Confirm estimates with carriers — Utilisez
live_carrier_quotessur le serveur des agents pour vérifier les estimations de devis directement auprès des compagnies d’assurance.
Serveur MCP hébergé
npx add-mcp 'https://agents.go-foresee.com/mcp'S’installe dans Claude Code, Codex, Cursor et plus
Documentation
Documentation
Foresee permet aux assistants IA de comparer les assurances habitation et automobile auprès de tous les assureurs et pour toutes les options de couverture, en fournissant des estimations de devis instantanées, précises et détaillées.
Utilisation de Foresee
Foresee héberge deux serveurs MCP :
Les utilisateurs qui souhaitent une estimation de devis simple et sans friction sans divulguer leurs informations personnelles identifiables (PII) utilisent :
https://mcp.go-foresee.com/mcp
Les utilisateurs qui souhaitent également confirmer les estimations de devis directement auprès des assureurs peuvent déployer les agents d'utilisation informatique de Foresee via :
https://agents.go-foresee.com/mcp
Aucun des deux serveurs ne nécessite d'authentification.
Outils
Foresee publie deux outils sur les serveurs MCP :
| Outil | Objectif | agents. | mcp. |
|---|---|---|---|
quote_insurance | Générer des estimations de devis instantanées, précises et détaillées | ✅ | ✅ |
live_carrier_quotes | Confirmer les estimations de devis auprès des assureurs | ✅ | ❌ |
Outil 1 : quote_insurance
Objectif : générer des estimations de devis instantanées et détaillées auprès des assureurs pris en charge par Foresee, pour les lignes et les États actuellement desservis, en un seul appel.
Paramètres d'entrée
| Paramètre | Type | Requis | Détails |
|---|---|---|---|
profile | objet | oui | voir Profil |
lines | objet | oui | Les clés sont les lignes à tarifer (auto, home, renters) ; les valeurs sont les options de couverture de cette ligne (voir Options de couverture) |
carriers | chaîne[] | non | Par défaut : « tous les assureurs » |
include_partial | booléen | non | false |
include_failures | booléen | non | true |
Profil
Profil de base
Il existe une entrée de base profile, plus des blocs supplémentaires pour l'assurance automobile et l'assurance habitation/locataire.
Les seuls champs requis sont l'âge (ou dob), le code postal, et (pour l'assurance automobile) les détails du véhicule.
Les champs facultatifs omis deviennent des hypothèses déclarées : nous choisissons une valeur de substitution prudente, signalée comme assumptions — par exemple annual_mileage = 12000, avec une entrée tighten_by listant les hypothèses qui feraient le plus varier le prix. prior_insurance signifie une assurance pour la même ligne ; companion_policies signifie une assurance pour une ligne différente.
| Champ | Type | Requis |
|---|---|---|
zip_code | chaîne | oui |
age | entier | oui |
dob | chaîne, YYYY-MM-DD | alternative acceptée à age |
city | chaîne | non |
gender | chaîne | non |
marital_status | chaîne | non |
education | chaîne | non |
employment_status | chaîne | non |
occupation | chaîne | non |
credit_range | chaîne | non |
home_ownership_status | chaîne | non |
residence_type | chaîne | non |
military_affiliation | chaîne | non |
memberships | chaîne[] | non |
effective_date | chaîne | non |
prior_insurance | objet | non |
companion_policies | chaîne[] | non |
Profil d'assurance automobile
| Champ | Type | Requis |
|---|---|---|
auto.vehicles[].year | entier | oui |
auto.vehicles[].make | chaîne | oui |
auto.vehicles[].model | chaîne | oui |
auto.vehicles[].ownership | chaîne | non |
auto.vehicles[].annual_mileage | entier | non |
auto.vehicles[].primary_use | chaîne | non |
auto.vehicles[].garaging_zip | chaîne | non |
auto.drivers[].relation | chaîne | non (self pour le premier) |
auto.drivers[].dob | chaîne | non |
auto.drivers[].years_licensed | entier | non |
auto.drivers[].accidents | objet[] | non |
auto.drivers[].violations | objet[] | non |
auto.drivers[].sr22_required | booléen | non |
accidents et violations sont des listes d'objets structurés, où une liste vide correspond à un dossier vierge.
Profil d'assurance habitation et locataire
| Champ | Type | Requis |
|---|---|---|
property.year_built | entier | non |
property.construction_type | chaîne | non |
property.roof_type | chaîne | non |
property.square_feet | entier | non |
property.protection_class | chaîne | non |
property.replacement_cost | entier | non |
property.devices | chaîne[] | non |
property.losses | objet[] | non |
Options de couverture
Chaque clé dans lines prend les options de couverture de cette ligne. Rien n'est tarifé selon une valeur par défaut du serveur : les options que vous transmettez sont celles qui sont tarifées.
Automobile
| Option | Type | Requis | Ce qu'elle couvre |
|---|---|---|---|
bi | chaîne | oui | Responsabilité civile pour dommages corporels : blessures que vous causez à autrui. Limite par personne/par accident en milliers de dollars, ex. "100/300" |
pd | entier | oui | Responsabilité civile pour dommages matériels : dommages que vous causez aux véhicules et biens d'autrui. Limite en milliers de dollars, ex. 100 |
coll_deductible | entier | oui | Collision : dommages à votre propre véhicule lors d'un accident, quelle que soit la personne responsable. La franchise que vous payez par sinistre, en dollars |
comp_deductible | entier | oui | Tous risques (hors collision) : dommages à votre propre véhicule autres que ceux d'un accident — vol, incendie, grêle, vandalisme, collision avec un animal. La franchise que vous payez par sinistre, en dollars |
um | chaîne | non | Conducteur non assuré/sous-assuré : vos blessures lorsque le conducteur responsable n'a pas ou trop peu d'assurance. Limite par personne/par accident en milliers de dollars, ex. "100/300" |
medpay | entier | non | Frais médicaux : factures médicales pour vous et vos passagers, quelle que soit la personne responsable. Limite en dollars, ex. 5000 |
Habitation
| Option | Type | Requis | Ce qu'elle couvre |
|---|---|---|---|
coverage_a | entier | oui | Bâtiment : reconstruction de la maison elle-même. Limite en dollars, généralement le coût de remplacement |
coverage_e | entier | oui | Responsabilité civile personnelle : blessures ou dommages dont vous êtes légalement responsable, sur ou hors de la propriété. Limite en dollars |
coverage_f | entier | oui | Frais médicaux pour autrui : factures médicales d'un invité après une blessure sur votre propriété, quelle que soit la personne responsable. Limite en dollars |
aop_deductible | entier | oui | Franchise pour tous autres périls : ce que vous payez par sinistre pour tout sauf les périls ayant leur propre franchise (comme les tremblements de terre). En dollars |
Les couvertures B (autres structures, comme un garage détaché ou une clôture), C (biens personnels — vos effets personnels) et D (perte d'usage — frais de subsistance pendant que la maison est inhabitable) ne sont pas demandées en dollars — elles reviennent dans sel sous forme de ratios de la couverture A qui ont été tarifés.
Locataire
| Option | Type | Requis | Ce qu'elle couvre |
|---|---|---|---|
coverage_c | entier | oui | Biens personnels : vos effets personnels. Limite en dollars |
coverage_e | entier | oui | Responsabilité civile personnelle : blessures ou dommages dont vous êtes légalement responsable. Limite en dollars |
coverage_f | entier | oui | Frais médicaux pour autrui : factures médicales d'un invité après une blessure dans votre logement, quelle que soit la personne responsable. Limite en dollars |
deductible | entier | oui | Ce que vous payez par sinistre avant le début de la couverture. En dollars |
coverage_d | entier | non | Perte d'usage : frais de subsistance supplémentaires si vous devez déménager pendant les réparations. Limite en dollars |
Format de réponse
| Préfixe | Fréquence | Signification |
|---|---|---|
Q | une fois par ligne | Ce qui a été tarifé : État, ligne d'activité, sélection de couverture |
format: factors: | une fois par ligne | Légende auto-descriptive pour tout ce qui suit |
assumptions: | une fois par ligne | Hypothèses faites par Foresee ; high_impact: true signifie que ce champ fait varier matériellement l'estimation du devis |
tighten_by: | une fois par ligne | Les hypothèses/faits manquants qui feraient le plus varier le prix |
not_priced: | lorsque applicable | Assureurs exclus, avec la raison |
C | une fois par assureur | Assureur, entité émettrice, prime mensuelle (estimation ponctuelle et intervalle de confiance) |
W | selon les besoins | Avertissement attaché à l'assureur ci-dessus — ex. « Ne souscrit pas la responsabilité civile minimale de l'État (BI/PD) » |
L | une fois par assureur | Coût mensuel par couverture ou péril |
F | plusieurs par assureur | Un facteur de tarification par ligne, nommé dans la légende factors:. Les valeurs correspondent une à une aux codes L : vide = ne touche pas cette couverture, une valeur unique = s'applique à toutes les couvertures. La parenthèse indique la ligne sur laquelle le profil a atterri (un échelon comme 100/300, un fait comme 90066, ou applied / not applied). Suffixe de valeur : aucun = exact, ~ = dérivé, ? = estimé |
D | par assureur | Échelles de prix : pour chaque levier de couverture, chaque échelon proposé en ±$/mois par rapport au mensuel cité, tout le reste maintenu à la sélection. +0.00 marque l'échelon sélectionné ; (asked X) = X n'est pas proposé et le prix se situe à l'échelon proposé le plus proche. Re-tarifer à partir de D ; ne pas rappeler |
Exemple : automobile
Une personne de 41 ans dans le code postal 90066 avec une Honda Civic de 2021.
Mercury affiche la cellule d'assureur simple ; Travelers tarifie via deux entités émettrice possibles, donc sa cellule comporte un segment ci (la plage de placement). USAA se trouve dans not_priced avec la raison propre à l'assureur.
{
"profile": {
"zip_code": "90066",
"age": 41,
"auto": {"vehicles": [{"year": 2021, "make": "Honda", "model": "Civic"}]}
},
"lines": {"auto": {"bi": "100/300", "pd": 100, "coll_deductible": 500, "comp_deductible": 500}},
"carriers": ["mercury", "travelers", "usaa"]
}
Chaque champ de profil omis revient comme une hypothèse déclarée — le gros bloc assumptions:
ci-dessous est causé par la demande mince ci-dessus, et tighten_by: liste les sept réponses
qui feraient le plus varier le prix. Mercury affiche la cellule d'assureur simple ; Travelers tarifie via
deux entités émettrice possibles, donc sa cellule comporte un segment ci (la plage de placement). USAA se trouve dans not_priced
avec la raison propre à l'assureur.
Q CA auto sel={"bi":"100/300","coll_deductible":500,"comp_deductible":500,"pd":100}
format: Q state [line] sel=<coverage_selection priced, JSON> ; C=carrier|entity|monthly|ci lo-hi ; tighten_by=missing facts that most move the price — offer to re-quote with the user's answers ; L COV:$,.. = monthly $ per coverage ; F fid(selected)=v,v,.. = rating factor, one value per coverage in the L order, blank=not applied, single value=all coverages, suffix ?=estimated ~=derived none=exact ; D lever selected=option:±$/mo vs the carrier's monthly, others held at the selection (selected(asked X) = X is not an option; the price is at the selected rung shown) ; W = warning — e.g. an asked limit is not offered and the price covers the nearest offered rung instead
factors: f0=BI Limit f1=Good Driver f2=Group Placement (Rule G) f3=PD Limit f4=UMBI Limit f5=Medical Payments Limit f6=Comprehensive Deductible f7=Collision Deductible f8=Vehicle Symbol f9=ca_good_driver_pri f10=group f11=UM Limit
assumptions: [{"assumed":"Male","field":"gender","high_impact":false},{"assumed":"Single","field":"marital_status","high_impact":false},{"assumed":12000,"field":"annual_mileage","high_impact":true},{"assumed":0,"field":"accidents_3yr","high_impact":true},{"assumed":0,"field":"violations_3yr","high_impact":true},{"assumed":false,"field":"dui","high_impact":true},{"assumed":false,"field":"currently_insured","high_impact":true},{"assumed":null,"field":"homeowner","high_impact":false},{"assumed":null,"field":"occupation","high_impact":true},{"assumed":null,"field":"memberships","high_impact":true}]
tighten_by: annual_mileage,accidents_3yr,violations_3yr,dui,currently_insured,occupation,memberships
not_priced: usaa:USAA sells only to military members, veterans, and their fam
C mercury|Mercury Insurance Company|235.11
L BI:56.33,PD:44.10,UMBI:16.85,MP:0.97,COMP:17.49,COLL:99.38
F f0(100/300)=1.51,,,,,
F f1(applied)=0.8
F f2(not applied)=1.0
F f3(100)=,1.38,,,,
F f4(30/60)=,,1.65,,,
F f5(1000)=,,,1.0,,
F f6(500)=,,,,0.89,
F f7(500)=,,,,,1.0
D bi 100/300=15/30 *available through December 31, 2024:-19.03,25/50 *available through December 31, 2024:-14.18,30/60 *available on or after January 1, 2025:-9.70,50/100:-6.72,100/300:+0.00,250/500:+12.31,300/300:+12.68,500/500:+23.13
D pd 100=5:-15.34,10:-12.14,15:-9.27,25:-7.99,50:-2.88,100:+0.00,250:+2.56,300:+3.83
D coll_deductible 500=100:+19.87,200:+14.91,250:+12.42,500:+0.00,1000:-9.94,2000:-29.81,2500:-39.75
D comp_deductible 500=25:+25.74,50:+17.88,100:+11.00,200:+6.09,250:+2.75,500:+0.00,1000:-2.75,2000:-5.70,2500:-8.06
C travelers|Travelers Commercial Insurance Company|368.50|ci 327.21-415.00
L BI:149.00,PD:70.17,CP:15.50,CL:114.33,UMBI:19.50
F f0(100000/300000)=1.649,,,,
F f8(symbol AA)=1.009?,1.003?,,,
F f9(applied)=0.8
F f10(not applied)=1.0
F f3(100000)=,1.443,,,
F f6(500)=,,0.627,,
F f8(symbol 12)=,,0.941?,,
F f7(500)=,,,0.801,
F f8(symbol 17)=,,,1.013?,
F f11(30000/60000)=,,,,1.5
F f8(symbol 1)=,,,,1.0?
D pd 100=5:-21.50,10:-10.50,15:-6.67,25:-2.83,50:-0.67,100:+0.00,250:+0.50,300:+0.83,500:+1.17
present: Lead with the best option for this user — its price and a one-line reason — then a comparison sorted cheapest-first (Carrier · Monthly · 6-month total; a markdown table when your surface renders it) and the annual dollar spread between cheapest and priciest — that spread is the reason to compare. These are Foresee's estimates of what each carrier will charge; the assumptions and tighten_by blocks say how they were made and how to sharpen them. Foresee never takes payment: when the user settles on a carrier (or asks to buy), give that carrier's carrier_quote_url as a clickable link — the purchase completes on the carrier's own quoting portal.
Les codes L automobile sont les couvertures que l'assureur tarifie (BIPD combiné, ou réparti BI/PD, plus collision, tous risques, conducteur non assuré, frais). Ils ne sont pas normalisés entre les assureurs du panel.
Exemple : habitation
La même personne de 41 ans que ci-dessus, assurant une maison à ossature construite en 1998 avec un coût de remplacement de 450 000 $ :
{
"profile": {
"zip_code": "90066",
"age": 41,
"property": {"year_built": 1998, "construction_type": "frame", "replacement_cost": 450000}
},
"lines": {"home": {"coverage_a": 450000, "coverage_e": 300000, "coverage_f": 1000, "aop_deductible": 1000}},
"carriers": ["mercury", "autoclub"]
}
sel renvoie B/C/D comme ratios de la couverture A qui ont été tarifés. Le L de Mercury est une
décomposition par péril (incendie, eau, feu de forêt, frais) ; AAA dépose une prime groupée à la place. Les faits relatifs au bâtiment figurent dans assumptions:/tighten_by: — ici le type de toiture, la classe de protection et un historique de sinistres vierge.
Q CA home sel={"aop_deductible":1000,"coverage_a":450000,"coverage_b_pct":0.1,"coverage_c_pct":0.5,"coverage_d_pct":0.2,"coverage_e":300000,"coverage_f":1000}
format: Q state [line] sel=<coverage_selection priced, JSON> ; C=carrier|entity|monthly|ci lo-hi ; tighten_by=missing facts that most move the price — offer to re-quote with the user's answers ; L COV:$,.. = monthly $ per coverage ; F fid(selected)=v,v,.. = rating factor, one value per coverage in the L order, blank=not applied, single value=all coverages, suffix ?=estimated ~=derived none=exact ; D lever selected=option:±$/mo vs the carrier's monthly, others held at the selection (selected(asked X) = X is not an option; the price is at the selected rung shown) ; W = warning — e.g. an asked limit is not offered and the price covers the nearest offered rung instead
factors: f0=Deductible f1=Coverage A f2=Multiple Policy Discount (Automobile) f3=Personal Property Replacement Cost f4=Additional Replacement Cost f5=Ordinance or Law f6=Reduced Coverage Endorsement f7=Coverage E f8=Coverage F f9=Enhanced Home Package f10=Water Backup Limit f11=Other Perils Deductible (Table 5 relativity, additive) f12=Water Deductible (Table 5 relativity, additive) f13=Coverage A / Amount of Insurance Relativity (Table 5) f14=Package Discount (Exchange auto policy)
assumptions: [{"assumed":"Asphalt Shingle","field":"roof_type","high_impact":false},{"assumed":1,"field":"stories","high_impact":false},{"assumed":2,"field":"bathrooms","high_impact":false},{"assumed":1,"field":"families","high_impact":false},{"assumed":"Primary","field":"residency_type","high_impact":false},{"assumed":5,"field":"protection_class","high_impact":true},{"assumed":"Attached","field":"garage_type","high_impact":false},{"assumed":"Single","field":"marital_status","high_impact":false},{"assumed":[],"field":"home_losses","high_impact":true}]
tighten_by: protection_class,home_losses
C mercury|CALIFORNIA AUTOMOBILE INS CO|123.67
L P1_FIRE:34.69,P2_LIABILITY:6.39,P3_THEFT:6.40,P4_WIND:2.68,P5_WATER:61.56,P6_OTHER:3.57,P7_CAT_WIND:0.97,P10_CAT_WATER:0.04,P12_WILDFIRE:0.43,P13_FFEQ:1.36,WC_RESIDENCE_EMPLOYEES_910:0.67,FEE:3.75,FEE:1.16,FEE:0.01
F f0(1000)=0.95,,0.887,0.963,1.0,0.909,0.963,1.0,0.95,0.95,,,,
F f1(450000)=1.895,1.206,1.142,0.901,2.519,1.176,0.901,2.519,1.518,2.313,,,,
F f2(No)=1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,,,,
F f3(No)=1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,,,,
F f4(No)=1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,,,,
F f5(0.1)=1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,,,,
F f6(No)=1.0,,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,,,,
F f7(300000)=,1.5,,,,1.0,,,,,,,,
F f8(1000)=,1.5,,,,,,,,,,,,
F f9(No)=,,1.0,1.0,1.0,1.0,1.0,1.0,,,,,,
F f10(No)=,,,,1.0,,,1.0,,,,,,
D aop_deductible 1000=500:+13.38,1000:+0.00,1500:-5.38,2500:-21.45,3500:-26.58,5000:-37.01,10000:-48.28,25000:-63.01,50000:-72.51
D coverage_a 450000=30000:-90.60,65000:-82.94,95000:-76.38,130000:-68.81,165000:-61.24,195000:-54.76,230000:-47.27,265000:-39.79,295000:-33.39,330000:-25.82,365000:-18.34,395000:-11.94,430000:-4.37,445000:-1.17,450000:+0.00,455000:+1.01,465000:+3.20,500000:+10.86,570000:+26.34,630000:+39.88,700000:+56.03,770000:+72.77,830000:+87.49,900000:+105.41,970000:+124.09,2500000:+523.01,6000000:+1464.79
D coverage_e 300000=100000:-1.34,200000:-0.58,300000:+0.00,500000:+0.68,1000000:+4.04
D coverage_f 1000=1000:+0.00,2000:+0.17,5000:+0.42
C autoclub|Interinsurance Exchange of the Automobile Club|146.10
L Package:139.00,MedPayIL:0.00,LiabilityIL:2.08,BrushFire:0.00,FireFollowingEQ:3.42,FEE:1.60
F f11(1000)=0.393,,,,,
F f12(1000)=1.092,,,,,
F f13(450000)=1.485,,,,,
F f14(No)=1.0,,,,,
D aop_deductible 1000=500:+20.98,750:+7.59,1000:+0.00,1500:-11.45,2000:-16.93,3000:-21.06,5000:-25.36,10000:-28.73,15000:-51.90,20000:-63.44,25000:-71.53,30000:-77.34,50000:-90.49
D coverage_a 450000=60000:-120.65,90000:-115.51,110000:-110.96,130000:-105.66,150000:-99.59,170000:-92.85,190000:-86.53,220000:-76.17,250000:-64.54,280000:-54.09,320000:-40.02,350000:-29.15,360000:-26.54,400000:-16.00,440000:-3.62,450000:+0.00,460000:+2.45,480000:+9.44,550000:+32.95,650000:+77.19,750000:+98.00,850000:+116.62,950000:+147.71,2000000:+475.47,4000000:+1099.41,10000000:+2982.24
present: Lead with the best option for this user — its price and a one-line reason — then a comparison sorted cheapest-first (Carrier · Monthly · 6-month total; a markdown table when your surface renders it) and the annual dollar spread between cheapest and priciest — that spread is the reason to compare. These are Foresee's estimates of what each carrier will charge; the assumptions and tighten_by blocks say how they were made and how to sharpen them. Foresee never takes payment: when the user settles on a carrier (or asks to buy), give that carrier's carrier_quote_url as a clickable link — the purchase completes on the carrier's own quoting portal.
Exemple : locataire
Un autre ménage au même code postal : un locataire de 27 ans :
{
"profile": {"zip_code": "90066", "dob": "1998-11-11"},
"lines": {"renters": {"coverage_c": 30000, "coverage_e": 100000, "coverage_f": 1000, "deductible": 500}},
"carriers": ["farmers", "usaa"]
}
Q CA renters sel={"coverage_c":30000,"coverage_e":100000,"coverage_f":1000,"deductible":500}
format: Q state [line] sel=<coverage_selection priced, JSON> ; C=carrier|entity|monthly|ci lo-hi ; tighten_by=missing facts that most move the price — offer to re-quote with the user's answers ; L COV:$,.. = monthly $ per coverage ; F fid(selected)=v,v,.. = rating factor, one value per coverage in the L order, blank=not applied, single value=all coverages, suffix ?=estimated ~=derived none=exact ; D lever selected=option:±$/mo vs the carrier's monthly, others held at the selection (selected(asked X) = X is not an option; the price is at the selected rung shown) ; W = warning — e.g. an asked limit is not offered and the price covers the nearest offered rung instead
factors: f0=Coverage C - Personal Property f1=Deductible f2=Coverage D - Loss of Use (% of C) f3=Additional Living Expense Term (months) f4=Contents Loss Settlement (ACV) f5=Enhanced Personal Property Coverage f6=Claims Free Discount f7=Multi-Policy Discount - Renter/auto f8=Multi-Policy Discount - Renter/life f9=Multi-Policy Discount - Renter/umbrella f10=Multi-Policy Discount - Renter/business f11=Multi-Policy Discount - Renter/boat f12=Multi-Policy Discount - Renter/motorhome f13=Multi-Policy Discount - Renter/recreational_vehicle f14=Multi-Policy Discount - Renter/cea f15=ZIP Code f16=Fireline Score f17=Experience Rating (points) f18=Coverage E - Personal Liability f19=Premises Rented to Others Solely Used as a Private Residence
assumptions: [{"assumed":2000,"field":"year_built","high_impact":false},{"assumed":5,"field":"protection_class","high_impact":false},{"assumed":"Single","field":"marital_status","high_impact":false},{"assumed":[],"field":"home_losses","high_impact":true}]
tighten_by: home_losses
not_priced: usaa:USAA sells only to military members, veterans, and their fam
C farmers|Fire Insurance Exchange|29.88
L PC1_PROPERTY:21.00,PC2_LIABILITY:8.17,FEE:0.42,FEE:0.30
F f0(30000)=1.087,,,
F f1(500)=1.0,,,
F f2(20)=1.0,,,
F f3(12)=1.0,,,
F f4(N)=1.0,,,
F f5(N)=1.0,,,
F f6(Y)=0.9,,,
F f7(N)=1.0,1.0,,
F f8(N)=1.0,1.0,,
F f9(N)=1.0,1.0,,
F f10(N)=1.0,1.0,,
F f11(N)=1.0,1.0,,
F f12(N)=1.0,1.0,,
F f13(N)=1.0,1.0,,
F f14(N)=1.0,1.0,,
F f15(90066)=1.423,,,
F f16(0)=1.0,,,
F f17(0)=1.0,,,
F f18(100000)=,1.0,,
F f19({})=,1.0,,
D deductible 500=100:+5.89,250:+1.85,500:+0.00,1000:-2.61,1500:-4.29,2500:-6.73
D coverage_c 30000=4000:-16.33,10000:-11.95,17000:-7.15,23000:-3.87,29000:-0.59,30000:+0.00,31000:+0.51,37000:+3.79,43000:+7.07,49000:+10.36,55000:+13.64,62000:+17.43,68000:+20.71,74000:+23.99,81000:+27.78,87000:+31.06,93000:+34.35,100000:+38.14,106000:+41.42,112000:+44.70,118000:+47.99,125000:+51.77,131000:+55.06,137000:+58.34,144000:+62.13,150000:+65.41
D coverage_e 100000=100000:+0.00,300000:+3.28,500000:+5.56,1000000:+10.69
present: Lead with the best option for this user — its price and a one-line reason — then a comparison sorted cheapest-first (Carrier · Monthly · 6-month total; a markdown table when your surface renders it) and the annual dollar spread between cheapest and priciest — that spread is the reason to compare. These are Foresee's estimates of what each carrier will charge; the assumptions and tighten_by blocks say how they were made and how to sharpen them. Foresee never takes payment: when the user settles on a carrier (or asks to buy), give that carrier's carrier_quote_url as a clickable link — the purchase completes on the carrier's own quoting portal.
Exemple : forfait automobile + locataire
Le même locataire de 27 ans, désormais avec une voiture. "incidents": [] signifie un dossier vierge, donc les questions sur l'historique de conduite laissent assumptions: entièrement vide.
{
"profile": {
"zip_code": "90066",
"age": 27,
"incidents": [],
"prior_insurance": {"insured": true, "carrier": "GEICO", "since": "2019"},
"auto": {"vehicles": [{"year": 2021, "make": "Honda", "model": "Civic", "annual_mileage": 9000}]},
"property": {"year_built": 1978, "square_feet": 850}
},
"lines": {
"auto": {"bi": "100/300", "pd": 100, "coll_deductible": 500, "comp_deductible": 500},
"renters": {"coverage_c": 30000, "coverage_e": 100000, "coverage_f": 1000, "deductible": 500}
},
"carriers": ["farmers", "mercury"]
}
Puisque nous fournissons désormais l'historique, le kilométrage et l'historique d'assurance, les assumptions: automobile se réduisent à cinq entrées et son tighten_by: à deux.
Cependant, la section locataire déclare ses propres valeurs de substitution pour le logement ; Mercury tarifie uniquement l'automobile — autonome, sans
forfait. Farmers tarifie les deux, offrant une remise de 20 %, documentée dans le B.
Le même résumé accompagne structuredContent sous forme de bundle: {farmers: {lines, bundle_total, standalone_total, savings}}.
Q CA auto sel={"bi":"100/300","coll_deductible":500,"comp_deductible":500,"pd":100}
format: Q state [line] sel=<coverage_selection priced, JSON> ; C=carrier|entity|monthly|ci lo-hi ; tighten_by=missing facts that most move the price — offer to re-quote with the user's answers ; L COV:$,.. = monthly $ per coverage ; F fid(selected)=v,v,.. = rating factor, one value per coverage in the L order, blank=not applied, single value=all coverages, suffix ?=estimated ~=derived none=exact ; D lever selected=option:±$/mo vs the carrier's monthly, others held at the selection (selected(asked X) = X is not an option; the price is at the selected rung shown) ; W = warning — e.g. an asked limit is not offered and the price covers the nearest offered rung instead ; B carrier|bundled $/mo|standalone $/mo|saves $/mo = this carrier priced the asked lines together; the per-line C prices ARE the bundled prices
factors: f0=BI Limit f1=Good Driver f2=Group Placement (Rule G) f3=PD Limit f4=UMBI Limit f5=Medical Payments Limit f6=Comprehensive Deductible f7=Collision Deductible f8=Business & Professional Group f9=UM Limit
assumptions: [{"assumed":"Male","field":"gender","high_impact":false},{"assumed":"Single","field":"marital_status","high_impact":false},{"assumed":null,"field":"homeowner","high_impact":false},{"assumed":null,"field":"occupation","high_impact":true},{"assumed":null,"field":"memberships","high_impact":true}]
tighten_by: occupation,memberships
C mercury|Mercury Insurance Company|289.94
L BI:66.80,PD:52.55,UMBI:17.38,MP:1.05,COMP:23.50,COLL:128.67
F f0(100/300)=1.51,,,,,
F f1(applied)=0.8
F f2(not applied)=1.0
F f3(100)=,1.38,,,,
F f4(30/60)=,,1.65,,,
F f5(1000)=,,,1.0,,
F f6(500)=,,,,0.89,
F f7(500)=,,,,,1.0
D bi 100/300=15/30 *available through December 31, 2024:-22.56,25/50 *available through December 31, 2024:-16.81,30/60 *available on or after January 1, 2025:-11.50,50/100:-7.96,100/300:+0.00,250/500:+14.60,300/300:+15.04,500/500:+27.43
D pd 100=5:-18.28,10:-14.47,15:-11.04,25:-9.52,50:-3.43,100:+0.00,250:+3.05,300:+4.57
D coll_deductible 500=100:+25.74,200:+19.30,250:+16.09,500:+0.00,1000:-12.87,2000:-38.60,2500:-51.47
D comp_deductible 500=25:+34.59,50:+24.03,100:+14.79,200:+8.19,250:+3.70,500:+0.00,1000:-3.70,2000:-7.66,2500:-10.83
C farmers|Farmers Insurance Exchange|398.00
L BI:111.83,PD:73.33,UMBI:28.33,UMPD:1.50,MED:13.33,COMP:34.00,COLL:133.17,FEE:2.50
F f0(100000/300000)=1.46,,,,,,,
F f1(applied)=0.8,0.8,0.8,0.8,0.8,0.8,0.8,
F f8(not applied)=1.0,1.0,1.0,1.0,1.0,1.0,1.0,
F f3(100000)=,1.2674,,,,,,
F f9(30000/60000)=,,1.2788,,,,,
F f6(500)=,,,,,1.0009,,
F f7(500)=,,,,,,1.1986,
D pd 100=15:-8.83,25:-5.00,50:-1.50,100:+0.00,250:+1.33,500:+3.17
D coll_deductible 500=250:+30.67,500:+0.00,750:-13.67,1000:-23.50,1500:-37.50,2500:-56.33,5000:-87.00
D comp_deductible 500=100:+23.67,250:+9.17,500:+0.00,750:-7.17,1000:-10.67,1500:-13.50,2500:-18.83,5000:-21.17
Q CA renters sel={"coverage_c":30000,"coverage_e":100000,"coverage_f":1000,"deductible":500}
format: Q state [line] sel=<coverage_selection priced, JSON> ; C=carrier|entity|monthly|ci lo-hi ; tighten_by=missing facts that most move the price — offer to re-quote with the user's answers ; L COV:$,.. = monthly $ per coverage ; F fid(selected)=v,v,.. = rating factor, one value per coverage in the L order, blank=not applied, single value=all coverages, suffix ?=estimated ~=derived none=exact ; D lever selected=option:±$/mo vs the carrier's monthly, others held at the selection (selected(asked X) = X is not an option; the price is at the selected rung shown) ; W = warning — e.g. an asked limit is not offered and the price covers the nearest offered rung instead ; B carrier|bundled $/mo|standalone $/mo|saves $/mo = this carrier priced the asked lines together; the per-line C prices ARE the bundled prices
factors: f0=Coverage C - Personal Property f1=Deductible f2=Coverage D - Loss of Use (% of C) f3=Additional Living Expense Term (months) f4=Contents Loss Settlement (ACV) f5=Enhanced Personal Property Coverage f6=Claims Free Discount f7=Multi-Policy Discount - Renter/auto f8=Multi-Policy Discount - Renter/life f9=Multi-Policy Discount - Renter/umbrella f10=Multi-Policy Discount - Renter/business f11=Multi-Policy Discount - Renter/boat f12=Multi-Policy Discount - Renter/motorhome f13=Multi-Policy Discount - Renter/recreational_vehicle f14=Multi-Policy Discount - Renter/cea f15=ZIP Code f16=Fireline Score f17=Experience Rating (points) f18=Coverage E - Personal Liability f19=Premises Rented to Others Solely Used as a Private Residence
assumptions: [{"assumed":5,"field":"protection_class","high_impact":false},{"assumed":"Single","field":"marital_status","high_impact":false},{"assumed":[],"field":"home_losses","high_impact":true}]
tighten_by: home_losses
C farmers|Fire Insurance Exchange|24.06
L PC1_PROPERTY:16.80,PC2_LIABILITY:6.54,FEE:0.42,FEE:0.30
F f0(30000)=1.087,,,
F f1(500)=1.0,,,
F f2(20)=1.0,,,
F f3(12)=1.0,,,
F f4(N)=1.0,,,
F f5(N)=1.0,,,
F f6(Y)=0.9,,,
F f7(Y - Farmers)=0.8,0.8,,
F f8(N)=1.0,1.0,,
F f9(N)=1.0,1.0,,
F f10(N)=1.0,1.0,,
F f11(N)=1.0,1.0,,
F f12(N)=1.0,1.0,,
F f13(N)=1.0,1.0,,
F f14(N)=1.0,1.0,,
F f15(90066)=1.423,,,
F f16(0)=1.0,,,
F f17(0)=1.0,,,
F f18(100000)=,1.0,,
F f19({})=,1.0,,
D deductible 500=100:+4.71,250:+1.48,500:+0.00,1000:-2.09,1500:-3.43,2500:-5.38
D coverage_c 30000=4000:-13.06,10000:-9.56,17000:-5.72,23000:-3.10,29000:-0.47,30000:+0.00,31000:+0.41,37000:+3.03,43000:+5.66,49000:+8.29,55000:+10.91,62000:+13.94,68000:+16.57,74000:+19.19,81000:+22.22,87000:+24.85,93000:+27.48,100000:+30.51,106000:+33.14,112000:+35.76,118000:+38.39,125000:+41.42,131000:+44.05,137000:+46.67,144000:+49.70,150000:+52.33
D coverage_e 100000=100000:+0.00,300000:+2.62,500000:+4.45,1000000:+8.55
B farmers|422.06|427.88|5.82
present: Lead with the best option for this user — its price and a one-line reason — then a comparison sorted cheapest-first (Carrier · Monthly · 6-month total; a markdown table when your surface renders it) and the annual dollar spread between cheapest and priciest — that spread is the reason to compare. A B row's per-line prices assume every bundled line is placed with that carrier; for a cross-carrier mix, compare standalone totals. These are Foresee's estimates of what each carrier will charge; the assumptions and tighten_by blocks say how they were made and how to sharpen them. Foresee never takes payment: when the user settles on a carrier (or asks to buy), give that carrier's carrier_quote_url as a clickable link — the purchase completes on the carrier's own quoting portal.
Outil 2 : live_carrier_quotes
Objectif : confirmer les estimations de devis sur les sites de devis des assureurs eux-mêmes.
Cet outil est idempotent : le premier appel commissionne les agents d'utilisation informatique ; rappeler avec les mêmes arguments collecte la progression et les résultats du premier appel.
Un envoi en direct soumet les véritables informations de l'utilisateur aux assureurs, qui peuvent effectuer une vérification de crédit douce. Le consentement de l'utilisateur est recueilli avant l'appel de l'outil.
Foresee ne collecte que des devis ; il ne prend pas de paiement et ne lie pas d'assurance.
Paramètres d'entrée
| Paramètre | Type | Requis | Détails |
|---|---|---|---|
profile | objet | oui | Mêmes champs que quote_insurance — les faits de tarification |
lines | objet | oui | Une clé par ligne à parcourir, chaque valeur étant la demande de cette ligne (voir ci-dessous) ; plusieurs clés commissionnent des parcours groupés |
user_authorization | chaîne | oui | L'affirmation de l'utilisateur dans la conversation, textuellement (ex. yes, go ahead) |
identity | objet | généralement | Les informations de l'utilisateur. |
carriers | chaîne[] | non | Restreindre l'éventail ; par défaut, chaque assureur avec un parcours validé pour les lignes + l'État |
lines
| Ligne | Demande | Pourquoi |
|---|---|---|
auto | requis — les mêmes quatre axes que quote_insurance (bi, pd, coll_deductible, comp_deductible), sous forme de nombres réels | Les limites et franchises que les agents saisissent dans les formulaires des assureurs |
home | aucun — {"home": null} | Le formulaire de l'assureur fixe lui-même le prix de son package (montant de l'habitation issu de son estimation du coût de remplacement) ; les agents rapportent ce qu'il a choisi. Une demande fournie est refusée explicitement, pas ignorée silencieusement |
renters | requis — coverage_c, coverage_e, coverage_f, deductible, sous forme de dollars réels | Les agents saisissent les chiffres de l'utilisateur sur le formulaire au lieu d'accepter les valeurs par défaut ; Foresee ne les invente jamais |
Plusieurs clés déclenchent d'un coup des parcours groupés : chaque assureur qui couvre toutes les lignes nommées est piloté à travers son propre flux de devis multi-lignes et rapporte les primes par ligne plus son propre total groupé ; un assureur ne couvrant que certaines lignes est parcouru pour celles-ci uniquement. Les règles de demande par ligne sont inchangées par le groupement.
identity
| Champ | Type | Requis | Détails |
|---|---|---|---|
first_name | string | oui | Prénom légal |
last_name | string | oui | Nom légal |
dob | string, YYYY-MM-DD | oui | |
street | string | oui | Adresse (ligne 1) |
unit | string | non | Appartement/unité (ligne 2) |
city | string | oui | |
zip_code | string | non | Uniquement si elle diffère de celle du profil |
email | string | oui | Les assureurs envoient le devis ici |
phone | string | non |
Réponse
| Champ | Signification |
|---|---|
status | in_progress / partial / complete — rappeler avec les mêmes arguments pour collecter |
agents | Une entrée par assureur (voir ci-dessous) |
note | Que faire ensuite, par ex. le moment du rappel, ou que les résultats d'une exécution précédente ont été renvoyés |
authorization_recorded | Sur le reçu : l'enregistrement du consentement a été stocké avant que tout assureur ne voie le risque |
skipped | Assureurs NON envoyés, chacun avec la raison (no_deterministic_walk, missing_facts avec les faits nommés) |
not_dispatched | Assureurs tarifés par moteur que cet envoi ne parcourra pas, avec la raison (held: …, no_walk, not_walked, offline, not_sold) — une recommandation que le parcours ne peut pas confirmer ne disparaît jamais silencieusement |
needs | En cas de refus missing_facts : faits par assureur à collecter auprès de l'utilisateur, avec chemins de schéma exacts — et, pour les champs à vocabulaire fermé, les values acceptés |
assumptions | Faits mineurs de formulaire non affirmés que les parcours ont résolus en réponses de non-réclamation déclarées : le chemin du profil (field) et la valeur soumise (assumed) — les relayer tous avec les résultats |
confirmation | Par assureur : l'estimation instantanée du moteur à côté de la prime imprimée sur la page — l'estimation groupée lorsque plusieurs lignes ont été parcourues |
error / detail | Chaque refus est un dict {"error", "detail"} structuré |
Chaque entrée agents :
| Champ | Quand | Signification |
|---|---|---|
carrier_key, carrier | toujours | Clé du registre + nom affiché |
status | toujours | in_progress / complete / failed |
lines | toujours | Les lignes couvertes par ce parcours — plusieurs lors d'un parcours groupé |
stage, eta_seconds_remaining | en cours | Où en est le parcours ; temps restant par rapport au flux typique de l'assureur |
quote.premium | devisé | Textuellement tel que la page de l'assureur l'a imprimé ("$857.80") — jamais analysé, arrondi ou dérivé |
quote.term_months | devisé | La durée couverte par la prime imprimée |
quote.premium_by_line | devisé, parcours groupé | La prime de chaque ligne telle que la page l'a imprimée, à côté du total groupé dans quote.premium |
quote.breakdown | devisé | Les postes de la page elle-même, ses propres libellés |
quote.bound | devisé, parcours plus récents | Couverture lue sur la page tarifée — ce que le formulaire a réellement lié, par rapport à ce qui a été demandé |
quote.variants | devisé | Packages tarifés supplémentaires proposés par la page |
quote.quote_number | devisé | Le numéro de récupération de l'assureur, lorsque la page en affiche un |
quote.evidence_recorded | devisé | Une preuve par capture d'écran existe côté serveur (les URI internes ne transitent jamais sur le fil) |
declined: true + detail | refusé | L'assureur a examiné les détails et a refusé de deviser. Une réponse, pas une erreur — la relayer |
detail | échoué | Les propres mots du parcours pour indiquer où et pourquoi il s'est arrêté |
Refus
Chaque refus est un objet {"error", "detail"} structuré — rien n'a été
soumis à un assureur sauf si la ligne ci-dessous dit le contraire.
| Code | Quand | Que faire |
|---|---|---|
profile_required | Faits du ménage envoyés au niveau supérieur, sans wrapper profile | Rappeler avec les faits enveloppés comme indiqué dans le example_arguments du refus |
authorization_required | Appelé sans l'accord de l'utilisateur | Expliquer les faits de consentement, obtenir un oui, le transmettre textuellement dans user_authorization |
bad_identity | Un drivers_license_number en forme de SSN | Les SSN ne sont jamais collectés ; envoyer le numéro de permis tel qu'imprimé sur le permis |
bad_profile | Un champ du profil échoue à la validation | detail nomme le champ |
one_line_per_dispatch | Une carte lines vide | Nommer au moins une ligne à parcourir |
unknown_line | Une ligne sans parcours (par ex. umbrella) | detail liste les lignes connues de l'envoi en direct |
coverage_selection_required | Un parcours auto ou locataire sans limites et franchises complètes | Rappeler avec les chiffres — les parcours saisissent des valeurs réelles, jamais des valeurs par défaut |
bad_ask | Un parcours habitation avec une demande de couverture | Envoyer {"home": null} — le formulaire de l'assureur fixe lui-même le prix de son package |
missing_facts | Aucun formulaire d'assureur demandé ne peut être rempli à partir du profil | Demander à l'utilisateur les faits needs[].fields[] (en utilisant leur values là où il est servi) et rappeler — voir ci-dessous |
no_carriers | Aucun assureur n'a de parcours validé pour cette ligne + état | Replier sur quote_insurance |
launch_failed | Les agents n'ont pas pu démarrer | Rien n'a atteint un assureur — réessayer est sûr |
Exemple : auto
Un ménage de Fresno confirmant le propre chiffre de GEICO. Le profil contient les faits
que le formulaire de GEICO exige (propriété, moment de l'achat, assurance antérieure, âge
du premier permis…) ; identity est le vrai demandeur ; la demande est les mêmes quatre axes que
quote_insurance.
{
"profile": {
"zip_code": "93722",
"dob": "1954-07-02",
"gender": "Male",
"marital_status": "Married",
"education": "Bachelors",
"employment_status": "Employed",
"occupation": "Accountant or CPA",
"home_ownership_status": "Own",
"prior_insurance": {"insured": true, "limits": "not sure"},
"auto": {
"vehicles": [{
"year": 2024, "make": "Ford", "model": "Maverick",
"ownership": "Financed", "annual_mileage": 11000,
"primary_use": "pleasure", "purchase_date": "2026-08"
}],
"drivers": [{
"relation": "self", "age_first_licensed": 16,
"years_licensed_outside_us": 0, "defensive_driving_course": true,
"accidents": [], "violations": []
}]
}
},
"identity": {
"first_name": "Cornelius", "last_name": "Beaumont", "dob": "1954-07-02",
"street": "4381 W Spruce Ave", "city": "Fresno", "zip_code": "93722",
"email": "cornelius.beaumont@example.com", "phone": "559-555-0164"
},
"lines": {"auto": {"bi": "100/300", "pd": 100, "coll_deductible": 500, "comp_deductible": 500}},
"carriers": ["geico"],
"user_authorization": "yes, go ahead and get me GEICO's real quote"
}
{
"status": "in_progress",
"authorization_recorded": true,
"agents": [
{
"carrier_key": "geico",
"carrier": "GEICO",
"method": "browser_agent",
"detail": "deterministic Foresee agent completing the carrier's own quote flow with the user's details",
"eta_seconds": 480
}
],
"skipped": [],
"note": "1 carrier(s) are being quoted live. Collect results by calling this tool again with the same arguments after a few minutes."
}
Rappeler avec les mêmes arguments plus tard collecte le parcours terminé.
La prime est la propre chaîne de la page ; breakdown sont les propres libellés de la page
(GEICO a imprimé deux packages côte à côte) ; term_months indique ce que le chiffre
couvre — 857,80 $ par 6 mois, pas par mois.
{
"status": "complete",
"agents": [
{
"carrier_key": "geico",
"carrier": "GEICO",
"method": "browser_agent",
"status": "complete",
"quote": {
"premium": "$857.80",
"currency": "USD",
"term_months": 6,
"quote_number": null,
"breakdown": {
"Less Coverage": "$857.80",
"More Coverage": "$870.70"
},
"evidence_recorded": true
}
}
]
}