Foresee
oficialForesee permite a los asistentes de IA comparar seguros de hogar y automóvil entre todas las aseguradoras y opciones de cobertura, proporcionando estimaciones de cotización instantáneas, precisas y detalladas.
¿Qué puedes hacer con Foresee MCP?
- Comparar cotizaciones de seguro de auto — Solicita estimaciones instantáneas y detalladas entre aseguradoras usando
quote_insurancecon los detalles de tu vehículo y cobertura. - Cotizar cobertura de hogar o inquilinos — Obtén cotizaciones detalladas de hogar o inquilinos especificando las propiedades y los límites de cobertura como
coverage_aocoverage_c. - Explorar compensaciones de cobertura — Observa cómo cambiar deducibles o límites afecta las primas mensuales mediante escalas de precios en la respuesta.
- Identificar factores faltantes — Pregunta qué detalles omitidos (como
annual_mileageo el historial de manejo) moverían más tu cotización, según las sugerencias detighten_by. - Confirmar estimaciones con aseguradoras — Usa
live_carrier_quotesen el servidor de agentes para verificar las estimaciones de cotización directamente con las aseguradoras.
Servidor MCP alojado
npx add-mcp 'https://agents.go-foresee.com/mcp'Se instala en Claude Code, Codex, Cursor y más
Documentación
Documentación
Foresee permite a los asistentes de IA comparar seguros de hogar y automóvil entre todas las aseguradoras y opciones de cobertura, proporcionando estimaciones de cotización instantáneas, precisas y detalladas.
Uso de Foresee
Foresee aloja dos servidores MCP:
Los usuarios que desean una estimación de cotización simple y de baja fricción sin entregar su PII utilizan:
https://mcp.go-foresee.com/mcp
Los usuarios que también desean confirmar las estimaciones de cotización directamente con las aseguradoras pueden enviar los agentes de uso de computadora de Foresee mediante:
https://agents.go-foresee.com/mcp
Ninguno de los servidores requiere autenticación.
Herramientas
Foresee publica dos herramientas en los servidores MCP:
| Herramienta | Propósito | agents. | mcp. |
|---|---|---|---|
quote_insurance | Generar estimaciones de cotización instantáneas, precisas y detalladas | ✅ | ✅ |
live_carrier_quotes | Confirmar estimaciones de cotización con las aseguradoras | ✅ | ❌ |
Herramienta 1: quote_insurance
Propósito: generar estimaciones de cotización instantáneas y desglosadas de las aseguradoras que Foresee respalda, en todas las líneas y estados que Foresee atiende actualmente, en una sola llamada.
Parámetros de entrada
| Parámetro | Tipo | Requerido | Detalles |
|---|---|---|---|
profile | objeto | sí | ver Perfil |
lines | objeto | sí | Las claves son las líneas a cotizar (auto, home, renters); los valores son las opciones de cobertura de esa línea (ver Opciones de cobertura) |
carriers | string[] | no | Por defecto "todas las aseguradoras" |
include_partial | booleano | no | false |
include_failures | booleano | no | true |
Perfil
Perfil principal
Hay una entrada principal profile, más bloques adicionales para seguro de automóvil y de hogar/inquilinos.
Los únicos campos requeridos son edad (o dob), código postal y (para seguro de automóvil) detalles del vehículo.
Los campos opcionales omitidos se convierten en supuestos declarados: elegimos un valor conservador de respaldo, reportado como assumptions — p. ej. annual_mileage = 12000, con una entrada tighten_by que lista los supuestos que más moverían el precio. prior_insurance significa seguro para la misma línea; companion_policies significa seguro para una línea diferente.
| Campo | Tipo | Requerido |
|---|---|---|
zip_code | string | sí |
age | entero | sí |
dob | string, YYYY-MM-DD | alternativa aceptada a age |
city | string | no |
gender | string | no |
marital_status | string | no |
education | string | no |
employment_status | string | no |
occupation | string | no |
credit_range | string | no |
home_ownership_status | string | no |
residence_type | string | no |
military_affiliation | string | no |
memberships | string[] | no |
effective_date | string | no |
prior_insurance | objeto | no |
companion_policies | string[] | no |
Perfil de seguro de automóvil
| Campo | Tipo | Requerido |
|---|---|---|
auto.vehicles[].year | entero | sí |
auto.vehicles[].make | string | sí |
auto.vehicles[].model | string | sí |
auto.vehicles[].ownership | string | no |
auto.vehicles[].annual_mileage | entero | no |
auto.vehicles[].primary_use | string | no |
auto.vehicles[].garaging_zip | string | no |
auto.drivers[].relation | string | no (self para el primero) |
auto.drivers[].dob | string | no |
auto.drivers[].years_licensed | entero | no |
auto.drivers[].accidents | objeto[] | no |
auto.drivers[].violations | objeto[] | no |
auto.drivers[].sr22_required | booleano | no |
accidents y violations son listas de objetos estructurados, donde una lista vacía es un historial limpio.
Perfil de seguro de hogar e inquilinos
| Campo | Tipo | Requerido |
|---|---|---|
property.year_built | entero | no |
property.construction_type | string | no |
property.roof_type | string | no |
property.square_feet | entero | no |
property.protection_class | string | no |
property.replacement_cost | entero | no |
property.devices | string[] | no |
property.losses | objeto[] | no |
Opciones de cobertura
Cada clave en lines toma las opciones de cobertura de esa línea. Nada se cotiza con un valor predeterminado del servidor: las opciones que pasas son las que se cotizan.
Automóvil
| Opción | Tipo | Requerido | Qué cubre |
|---|---|---|---|
bi | string | sí | Responsabilidad por lesiones corporales: lesiones que causas a otras personas. Límite por persona/por accidente en miles de $, p. ej. "100/300" |
pd | entero | sí | Responsabilidad por daños a la propiedad: daños que causas a los autos y propiedades de otras personas. Límite en miles de $, p. ej. 100 |
coll_deductible | entero | sí | Colisión: daños a tu propio auto por un choque, sin importar quién tenga la culpa. El deducible que pagas por reclamo, en dólares |
comp_deductible | entero | sí | Cobertura integral: daños a tu propio auto por cualquier cosa que no sea un choque — robo, incendio, granizo, vandalismo, golpear a un animal. El deducible que pagas por reclamo, en dólares |
um | string | no | Conductor sin seguro/subasegurado: tus lesiones cuando el conductor culpable no tiene seguro o tiene muy poco. Límite por persona/por accidente en miles de $, p. ej. "100/300" |
medpay | entero | no | Pagos médicos: facturas médicas para ti y tus pasajeros, sin importar quién tenga la culpa. Límite en dólares, p. ej. 5000 |
Hogar
| Opción | Tipo | Requerido | Qué cubre |
|---|---|---|---|
coverage_a | entero | sí | Vivienda: reconstrucción de la casa en sí. Límite en dólares, generalmente el costo de reposición |
coverage_e | entero | sí | Responsabilidad personal: lesiones o daños por los que eres legalmente responsable, dentro o fuera de la propiedad. Límite en dólares |
coverage_f | entero | sí | Pagos médicos a terceros: facturas médicas de un invitado tras una lesión en tu propiedad, sin importar quién tenga la culpa. Límite en dólares |
aop_deductible | entero | sí | Deducible para todos los demás riesgos: lo que pagas por reclamo por todo excepto riesgos con su propio deducible (como terremoto). En dólares |
Las coberturas B (otras estructuras, como un garaje separado o una cerca), C (propiedad personal — tus pertenencias) y D (pérdida de uso — costos de vivienda mientras la casa no puede habitarse) no se solicitan en dólares — regresan en sel como proporciones de la Cobertura A que fueron cotizadas.
Inquilinos
| Opción | Tipo | Requerido | Qué cubre |
|---|---|---|---|
coverage_c | entero | sí | Propiedad personal: tus pertenencias. Límite en dólares |
coverage_e | entero | sí | Responsabilidad personal: lesiones o daños por los que eres legalmente responsable. Límite en dólares |
coverage_f | entero | sí | Pagos médicos a terceros: facturas médicas de un invitado tras una lesión en tu hogar, sin importar quién tenga la culpa. Límite en dólares |
deductible | entero | sí | Lo que pagas por reclamo antes de que comience la cobertura. En dólares |
coverage_d | entero | no | Pérdida de uso: costos de vivienda adicionales si tienes que mudarte mientras el lugar se repara. Límite en dólares |
Formato de respuesta
| Prefijo | Frecuencia | Significado |
|---|---|---|
Q | una vez por línea | Lo que se cotizó: estado, línea de negocio, selección de cobertura |
format: factors: | una vez por línea | Leyenda autodescriptiva para todo lo siguiente |
assumptions: | una vez por línea | Supuestos hechos por Foresee; high_impact: true significa que este campo mueve materialmente la estimación de cotización |
tighten_by: | una vez por línea | Los supuestos/hechos faltantes que más moverían el precio |
not_priced: | cuando corresponda | Aseguradoras excluidas, con el motivo |
C | una vez por aseguradora | Aseguradora, entidad emisora, prima mensual (estimación puntual e intervalo de confianza) |
W | según sea necesario | Advertencia adjunta a la aseguradora anterior — p. ej. "No emite BI / PD mínimo estatal" |
L | una vez por aseguradora | Costo mensual por cobertura o riesgo |
F | muchas por aseguradora | Un factor de calificación por línea, nombrado en la leyenda factors:. Los valores se alinean uno a uno con los códigos L: en blanco = no afecta esa cobertura, un solo valor = aplica a cada cobertura. El paréntesis es la fila en la que aterrizó el perfil (un escalón como 100/300, un hecho como 90066, o applied / not applied). Sufijo del valor: ninguno = exacto, ~ = derivado, ? = estimado |
D | por aseguradora | Escaleras de precios: para cada palanca de cobertura, cada escalón ofrecido como ±$/mes contra el mensual cotizado, todo lo demás mantenido en la selección. +0.00 marca el escalón seleccionado; (asked X) = X no se ofrece y el precio se ubica en el escalón ofrecido más cercano. Re-cotizar desde D; no volver a llamar |
Ejemplo: automóvil
Una persona de 41 años en el código postal 90066 con un Honda Civic 2021.
Mercury muestra la celda de aseguradora simple; Travelers cotiza a través de dos posibles entidades emisoras, por lo que su celda lleva un segmento ci (el intervalo de colocación). USAA aparece en not_priced con el motivo propio de la aseguradora.
{
"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"]
}
Cada campo de perfil omitido regresa como un supuesto declarado — el bloque assumptions:
grueso a continuación es causado por la solicitud delgada anterior, y tighten_by: lista las siete respuestas
que más moverían el precio. Mercury muestra la celda de aseguradora simple; Travelers cotiza a través de
dos posibles entidades emisoras, por lo que su celda lleva un segmento ci (el intervalo de colocación). USAA aparece en not_priced
con el motivo propio de la aseguradora.
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.
Los códigos L de automóvil son las coberturas que la aseguradora cotiza (combinadas BIPD, o divididas BI/PD, más colisión, integral, UM, tarifas). No están normalizados en todo el panel.
Ejemplo: hogar
La misma persona de 41 años de arriba, asegurando una casa de estructura de madera construida en 1998 con un costo de reposición 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 refleja B/C/D como las proporciones de la Cobertura A que fueron cotizadas. El L de Mercury es una
descomposición por riesgo (incendio, agua, incendio forestal, tarifas); AAA presenta una prima empaquetada en su lugar. Los hechos de la vivienda están en assumptions:/tighten_by: — aquí tipo de techo, clase de protección y un historial de pérdidas limpio.
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.
Ejemplo: inquilinos
Un hogar diferente en el mismo código postal: un inquilino de 27 años:
{
"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.
Ejemplo: paquete de automóvil + inquilinos
El mismo inquilino de 27 años, ahora con un auto. "incidents": [] significa un historial limpio, por lo que las preguntas sobre el historial de conducción dejan assumptions: por completo.
{
"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"]
}
Dado que ahora proporcionamos historial, kilometraje e historial de seguro, los assumptions: de automóvil se reducen a cinco entradas y su tighten_by: a dos.
Sin embargo, la sección de inquilinos declara sus propios valores de respaldo para la vivienda; Mercury cotiza solo automóvil — independiente, sin
paquete. Farmers cotiza ambos, proporcionando un descuento del 20%, documentado en el B.
El mismo resumen viaja como structuredContent como 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.
Herramienta 2: live_carrier_quotes
Propósito: confirmar las estimaciones de cotización en los sitios de cotización propios de las aseguradoras.
Esta herramienta es idempotente: la primera llamada comisiona a los agentes de uso de computadora; llamar nuevamente con los mismos argumentos recopila el progreso y los resultados de la primera llamada.
Un envío en vivo envía los datos reales del usuario a las aseguradoras, quienes pueden realizar una verificación de crédito suave. El consentimiento del usuario se recopila antes de llamar a la herramienta.
Foresee solo recopila cotizaciones; no toma pagos ni vincula seguros.
Parámetros de entrada
| Parámetro | Tipo | Requerido | Detalles |
|---|---|---|---|
profile | objeto | sí | Mismos campos que quote_insurance — los hechos de calificación |
lines | objeto | sí | Una clave por línea a recorrer, cada valor es la solicitud de esa línea (ver abajo); varias claves comisionan recorridos combinados |
user_authorization | string | sí | La afirmación del usuario en el chat, textual (p. ej. yes, go ahead) |
identity | objeto | generalmente | Los datos del usuario. |
carriers | string[] | no | Restringe el abanico; por defecto cada aseguradora con un recorrido validado para las líneas + estado |
lines
| Línea | Ask | Por qué |
|---|---|---|
auto | obligatorio — los mismos cuatro ejes que quote_insurance (bi, pd, coll_deductible, comp_deductible), como números reales | Los límites y deducibles que los agentes preguntan en los formularios de las aseguradoras |
home | ninguno — {"home": null} | El formulario propio de la aseguradora fija el precio de su paquete (monto de la vivienda según su estimación de costo de reposición); los agentes informan lo que eligió. Un ask proporcionado se rechaza de forma explícita, no se ignora en silencio |
renters | obligatorio — coverage_c, coverage_e, coverage_f, deductible, como dólares reales | Los agentes escriben los números del usuario en el formulario en lugar de aceptar los valores predeterminados; Foresee nunca los inventa |
Varias claves a la vez comisionan recorridos combinados: cada aseguradora que cubre todas las líneas nombradas se procesa a través de su propio flujo de cotización de múltiples líneas e informa las primas por línea más su propio total combinado; una aseguradora que solo cubre algunas de las líneas se procesa solo para esas. Las reglas de ask por línea no cambian con la combinación.
identity
| Campo | Tipo | Obligatorio | Detalles |
|---|---|---|---|
first_name | string | sí | Nombre legal |
last_name | string | sí | Apellido legal |
dob | string, YYYY-MM-DD | sí | |
street | string | sí | Dirección (línea 1) |
unit | string | no | Apartamento/unidad (línea 2) |
city | string | sí | |
zip_code | string | no | Solo cuando difiere del perfil |
email | string | sí | Las aseguradoras envían la cotización aquí |
phone | string | no |
Respuesta
| Campo | Significado |
|---|---|
status | in_progress / partial / complete — volver a llamar con los mismos argumentos para recopilar |
agents | Una entrada por aseguradora (ver más abajo) |
note | Qué hacer a continuación, p. ej., el momento para volver a llamar, o que se devolvieron los resultados de una ejecución anterior |
authorization_recorded | En el recibo: el registro de consentimiento se almacenó antes de que cualquier aseguradora viera el riesgo |
skipped | Aseguradoras NO enviadas, cada una con el motivo (no_deterministic_walk, missing_facts con los hechos nombrados) |
not_dispatched | Aseguradoras con precio por motor que este envío no recorrerá, con el motivo (held: …, no_walk, not_walked, offline, not_sold) — una recomendación que el carril de recorrido no puede confirmar nunca desaparece en silencio |
needs | Ante un rechazo de missing_facts: hechos por aseguradora que recopilar del usuario, con rutas de esquema exactas — y, para campos de vocabulario cerrado, los values aceptados |
assumptions | Hechos menores de formulario no confirmados que los recorridos resolvieron como respuestas declaradas de no reclamo: la ruta del perfil (field) y el valor enviado (assumed) — transmite cada uno con los resultados |
confirmation | Por aseguradora: la estimación instantánea del motor junto a la prima impresa en la página — la estimación combinada cuando se recorrieron varias líneas |
error / detail | Cada rechazo es un dict {"error", "detail"} estructurado |
Cada entrada de agents:
| Campo | Cuándo | Significado |
|---|---|---|
carrier_key, carrier | siempre | Clave del registro + nombre para mostrar |
status | siempre | in_progress / complete / failed |
lines | siempre | Las líneas que cubre este recorrido — varias en un recorrido combinado |
stage, eta_seconds_remaining | en curso | Dónde está el recorrido; tiempo restante frente al flujo típico de la aseguradora |
quote.premium | cotizado | Textualmente como lo imprimió la página de la aseguradora ("$857.80") — nunca analizado, redondeado ni derivado |
quote.term_months | cotizado | El período que cubre la prima impresa |
quote.premium_by_line | cotizado, recorrido combinado | La prima de cada línea como la imprimió la página, junto al total combinado en quote.premium |
quote.breakdown | cotizado | Los conceptos propios de la página, sus propias etiquetas |
quote.bound | cotizado, recorridos más recientes | Cobertura leída de la página con precio — lo que el formulario realmente vinculó, frente a lo que se pidió |
quote.variants | cotizado | Paquetes adicionales con precio que ofreció la página |
quote.quote_number | cotizado | El número de recuperación de la aseguradora, cuando la página muestra uno |
quote.evidence_recorded | cotizado | Existe evidencia de captura de pantalla en el servidor (los URI internos nunca viajan por la red) |
declined: true + detail | rechazado | La aseguradora revisó los detalles y se negó a cotizar. Una respuesta, no un error — transmítela |
detail | fallido | Las propias palabras del recorrido sobre dónde y por qué se detuvo |
Rechazos
Cada rechazo es un objeto {"error", "detail"} estructurado — no se envió nada
a ninguna aseguradora salvo que la fila siguiente indique lo contrario.
| Código | Cuándo | Qué hacer |
|---|---|---|
profile_required | Hechos del hogar enviados en el nivel superior, sin envoltorio profile | Volver a llamar con los hechos envueltos como se muestra en el example_arguments del rechazo |
authorization_required | Llamado sin la aprobación del usuario | Explica los hechos de consentimiento, obtén un sí, pásalo textualmente en user_authorization |
bad_identity | Un drivers_license_number con forma de SSN | Los SSN nunca se recopilan; envía el número de licencia tal como aparece impreso en la licencia |
bad_profile | Un campo del perfil falla la validación | detail nombra el campo |
one_line_per_dispatch | Un mapa lines vacío | Nombra al menos una línea para recorrer |
unknown_line | Una línea sin recorrido (p. ej., umbrella) | detail enumera las líneas que conoce el envío en vivo |
coverage_selection_required | Un recorrido de auto o inquilinos sin límites y deducibles completos | Volver a llamar con los números — los recorridos escriben valores reales, nunca valores predeterminados |
bad_ask | Un recorrido de hogar con un ask de cobertura | Envía {"home": null} — el formulario propio de la aseguradora fija el precio de su paquete |
missing_facts | Ningún formulario de la aseguradora solicitada puede completarse desde el perfil | Pide al usuario los hechos de needs[].fields[] (usando su values donde se sirva) y vuelve a llamar — ver más abajo |
no_carriers | Ninguna aseguradora tiene un recorrido validado para esa línea + estado | Recurre a quote_insurance |
launch_failed | Los agentes no pudieron comenzar | Nada llegó a ninguna aseguradora — reintentar es seguro |
Ejemplo: auto
Un hogar de Fresno que confirma el número propio de GEICO. El perfil contiene los hechos
que el formulario de GEICO exige (propiedad, momento de compra, seguro anterior, edad del
primer licenciamiento…); identity es el solicitante real; el ask son los mismos cuatro ejes 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."
}
Volver a llamar con los mismos argumentos más tarde recopila el recorrido terminado.
La prima es la cadena propia de la página; breakdown son las etiquetas propias de la página
(GEICO imprimió dos paquetes lado a lado); term_months dice qué cubre el
número — $857.80 por 6 meses, no por mes.
{
"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
}
}
]
}