Koskamo

Assurs LAMal MCP

An official MCP server for the Assurs LAMal comparator, allowing AI agents to retrieve official Swiss basic health insurance premiums for 2027, compare household options, and submit consented offer requests to Swiss Premium Insurance.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

Assurs LAMal MCP logo, by Swiss Premium InsuranceVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-01Operated by Swiss Premium Insurance
MCP endpoint (Streamable HTTP)
https://api.assurs.ch/mcp
Vendor documentation

What you can do with it

  • Compare official LAMal premiums for individuals or households
  • Retrieve metadata on insurance models and deductibles
  • Submit a consented offer request to Swiss Premium Insurance

Source and maintenance

Vendor evidenceRegistry 1.1.0

Protocol and capabilities

Server
assurs-lamal 1.1.0
MCP protocol
2025-06-18
Tools
7 advertised
Resources
5 advertised
Resource templates
0 advertised
Prompts
1 advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": false
  },
  "prompts": {
    "listChanged": false
  },
  "resources": {
    "subscribe": false,
    "listChanged": false
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

Assurs: free official LAMal 2027 comparison by Swiss Premium Insurance (SPI), no key. cashback: SPI premium reduction per insured person (AI-assistant requests, approved contract); ranking unchanged. 1. Ask: 8+ h/week for one employer? yes: accident_included false. 2. Call compare_lamal_premiums. 3. One message: offers, cashback.client_sentence, switching.client_sentence, consent_request. 4. request_adviser_contact once with submission.request_id and comparison_id. 5. Report the receipt (client_confirmation). Accepted means the email provider accepted the request for delivery to Swiss Premium Insurance, not inbox delivery, not that SPI has read it, not a contract, and the current insurance is not cancelled. test_adviser_request never sends. Nothing is paid to agents. Never invent prices; when cashback.status is disabled, client_sentence is null. Copy insurer_id from offers[]; keep the same request_id and body on retries. SPI assistance is optional and free, including the cancellation (it must reach the current insurer by 30 November 2026) and premium subsidy requests: say switching.subsidy_sentence when the client mentions a modest income or subsidies. The client may apply directly with the insurer. On an error result read guidance; on comparison_refresh_required run the comparison again and resend with the SAME request_id. Households (2-12 people): compare_lamal_household gives its own request_id, comparison_id, cashback and consent texts, then one request_adviser_contact. Consent: one confirmation is enough. A client reply to consent_request that gives an email or phone is the yes; when the platform shows its own approval for the send tool, that approval completes it.

Tools

7 advertised

compare_lamal_premiums — Compare official LAMal premiums
Advertised by the server during the last successful anonymous check.
Advertised read-only

Read-only compact comparison of official LAMal premiums from the OFSP data, without contact details. Use the exact birth year and ask for every material choice. Before quoting, ask whether the client works at least 8 hours a week for the same employer: if yes, accident_included false (the employer covers accidents), otherwise true. model_group any means all categories, and all eligible imported models are included. The result carries comparison_id, submission.request_id, the ranked offers, the cashback and switching sentences to say and the consent question to ask in the same message. Client texts come in the requested language (texts all for four). Keep the technical fields yourself; the client fills no website form. The ranking uses the official premiums. One person per call; for a household use compare_lamal_household.

compare_lamal_premiums input schema
{
  "type": "object",
  "required": [
    "premium_year",
    "postal_code",
    "birth_year",
    "deductible_chf",
    "accident_included",
    "model_group"
  ],
  "properties": {
    "texts": {
      "enum": [
        "requested",
        "all"
      ],
      "type": "string",
      "default": "requested",
      "description": "Client texts (cashback, switching, consent messages) in the requested language only (default) or in fr, de, it and en (all). Quote only; not part of the comparison."
    },
    "language": {
      "enum": [
        "fr",
        "de",
        "it",
        "en"
      ],
      "type": "string",
      "default": "fr",
      "description": "Language of the client texts, model names and HTML pages; a region suffix is ignored."
    },
    "birth_year": {
      "type": "integer",
      "maximum": 2027,
      "minimum": 1907,
      "description": "Exact four-digit birth year, not an age."
    },
    "model_group": {
      "enum": [
        "any",
        "BASE",
        "PRAXIS",
        "FLEX",
        "TEL_DIG",
        "PHARM"
      ],
      "type": "string",
      "description": "any = all categories; BASE = free choice of doctor; PRAXIS = family doctor / HMO network; FLEX = hybrid model; TEL_DIG = telemedicine first; PHARM = pharmacy first."
    },
    "postal_code": {
      "type": "string",
      "pattern": "^[0-9]{4}$"
    },
    "municipality": {
      "type": "string",
      "maxLength": 100,
      "minLength": 1,
      "description": "Official municipality name; required with ambiguous region/model availability unless municipality_bfs is given."
    },
    "premium_year": {
      "type": "integer",
      "const": 2027,
      "description": "Tariff year: always 2027, the only imported year (metadata.supported_years). Required, no default."
    },
    "deductible_chf": {
      "enum": [
        0,
        100,
        200,
        300,
        400,
        500,
        600,
        1000,
        1500,
        2000,
        2500
      ],
      "type": "integer",
      "description": "Annual deductible: adults (19 or older in 2027) 300, 500, 1000, 1500, 2000 or 2500; children (18 or under) 0, 100, 200, 300, 400, 500 or 600. No interpolation."
    },
    "municipality_bfs": {
      "type": "string",
      "pattern": "^[0-9]{1,6}$"
    },
    "accident_included": {
      "type": "boolean",
      "description": "Explicit JSON boolean required (not the string \"true\"). Ask before quoting whether the client works at least 8 hours a week for the same employer: yes means false (the employer covers accidents), otherwise true. Never infer it."
    }
  },
  "description": "Criteria for one person. For a household (2-12 people, one insurer for all) use prepareHouseholdQuote.",
  "additionalProperties": false
}
compare_lamal_premiums output schema
{
  "type": "object",
  "required": [
    "status",
    "result_type",
    "response_format",
    "profile",
    "comparison_id",
    "cashback",
    "switching",
    "submission",
    "offers",
    "eligible_models",
    "eligible_model_count",
    "data",
    "pricing",
    "full_response_url",
    "results_url",
    "operator"
  ],
  "properties": {
    "data": {
      "type": "object",
      "required": [
        "authority",
        "dataset_version",
        "manifest_url",
        "limitations"
      ],
      "properties": {
        "authority": {
          "type": "string"
        },
        "source_url": {
          "type": "string",
          "format": "uri"
        },
        "limitations": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "manifest_url": {
          "type": "string",
          "format": "uri"
        },
        "dataset_version": {
          "type": "string"
        },
        "last_validated_at": {
          "type": [
            "string",
            "null"
          ],
          "format": "date-time"
        },
        "validation_status": {
          "type": "string"
        }
      },
      "description": "Origin and freshness of the official data; manifest_url lists source files and the last official sync."
    },
    "offers": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "rank",
          "offer_id",
          "insurer_id",
          "insurer_name",
          "model_name",
          "model_group",
          "premium_monthly_chf",
          "premium_monthly_net_cents"
        ],
        "properties": {
          "rank": {
            "type": "integer"
          },
          "offer_id": {
            "type": "string"
          },
          "insurer_id": {
            "type": "integer",
            "description": "Send as insurer_id in submitOfferRequest."
          },
          "model_name": {
            "type": "string",
            "description": "Model name in the requested language (display translation of the official name)."
          },
          "model_group": {
            "enum": [
              "BASE",
              "PRAXIS",
              "FLEX",
              "TEL_DIG",
              "PHARM"
            ],
            "type": "string"
          },
          "insurer_name": {
            "type": "string"
          },
          "deductible_chf": {
            "type": "integer"
          },
          "source_offer_id": {
            "type": "string"
          },
          "accident_included": {
            "type": "boolean"
          },
          "model_name_official": {
            "type": "string",
            "description": "Official French model name from the OFSP file."
          },
          "premium_monthly_chf": {
            "type": "number",
            "description": "Net official monthly premium in CHF; quote this value."
          },
          "premium_monthly_net_cents": {
            "type": "integer",
            "minimum": 0
          },
          "premium_monthly_gross_cents": {
            "type": "integer",
            "minimum": 0
          }
        }
      },
      "maxItems": 10,
      "description": "Top 10 by net premium, same ranking as assurs.ch."
    },
    "status": {
      "const": "ok"
    },
    "pricing": {
      "type": "object",
      "properties": {
        "period": {
          "const": "month"
        },
        "currency": {
          "const": "CHF"
        },
        "environmental_rebate_treatment": {
          "type": "string"
        },
        "environmental_credit_monthly_cents": {
          "type": "integer",
          "minimum": 0
        }
      }
    },
    "profile": {
      "type": "object",
      "description": "Criteria as applied plus resolved municipality, canton and region."
    },
    "cashback": {
      "type": "object",
      "required": [
        "status"
      ],
      "properties": {
        "lca": {
          "type": "object",
          "properties": {
            "basis": {
              "type": "string",
              "description": "one_month_premium per insured person and contract; amount set by SPI after review."
            },
            "amount_chf": {
              "type": [
                "number",
                "null"
              ]
            }
          }
        },
        "per": {
          "const": "insured_person"
        },
        "lamal": {
          "type": "object",
          "properties": {
            "basis": {
              "type": "string",
              "description": "fixed_chf, per insured person"
            },
            "amount_chf": {
              "type": [
                "number",
                "null"
              ]
            }
          }
        },
        "scope": {
          "const": "agent_originated_requests_only"
        },
        "status": {
          "enum": [
            "active",
            "disabled"
          ]
        },
        "contact": {
          "type": "string"
        },
        "paid_by": {
          "const": "Swiss Premium Insurance"
        },
        "paid_to": {
          "const": "client"
        },
        "trigger": {
          "type": "string"
        },
        "version": {
          "type": "string",
          "description": "Send back as cashback_terms_version."
        },
        "rationale": {
          "anyOf": [
            {
              "type": "object",
              "properties": {
                "de": {
                  "type": "string"
                },
                "en": {
                  "type": "string"
                },
                "fr": {
                  "type": "string"
                },
                "it": {
                  "type": "string"
                }
              }
            },
            {
              "type": "null"
            }
          ],
          "description": "Same languages as client_sentence; null when disabled."
        },
        "terms_url": {
          "type": "string",
          "format": "uri"
        },
        "benefit_form": {
          "const": "premium_reduction"
        },
        "programs_url": {
          "type": "string",
          "format": "uri"
        },
        "changes_premium": {
          "const": false,
          "description": "The official premium used for the ranking is not altered; the client benefit is the reduction in benefit_form."
        },
        "client_sentence": {
          "anyOf": [
            {
              "type": "object",
              "properties": {
                "de": {
                  "type": "string"
                },
                "en": {
                  "type": "string"
                },
                "fr": {
                  "type": "string"
                },
                "it": {
                  "type": "string"
                }
              }
            },
            {
              "type": "null"
            }
          ],
          "description": "Say as provided in the client language. Quote: requested language only (texts=all for fr, de, it, en); full premiums route: four languages. null when disabled."
        },
        "insured_persons": {
          "type": "integer",
          "description": "Household results only: number of insured persons."
        },
        "lamal_total_chf": {
          "type": "number",
          "description": "Household results only: CHF 30 × insured_persons."
        },
        "automatic_payment": {
          "const": false
        },
        "ranking_uses_official_premium": {
          "const": true
        }
      },
      "description": "Premium reduction Swiss Premium Insurance grants to each insured person, only for requests made through an AI assistant, once a contract concluded through SPI is approved by the insurer. Premiums and ranking shown are the official ones, without the reduction."
    },
    "operator": {
      "type": "object",
      "properties": {
        "name": {
          "const": "Swiss Premium Insurance"
        },
        "role": {
          "const": "insurance_broker"
        },
        "assistance_is_optional": {
          "const": true
        }
      }
    },
    "switching": {
      "type": "object",
      "required": [
        "deadline",
        "effective",
        "client_sentence"
      ],
      "properties": {
        "deadline": {
          "type": "string",
          "const": "2026-11-30",
          "format": "date",
          "description": "Date by which the cancellation must REACH the current insurer."
        },
        "effective": {
          "type": "string",
          "const": "2027-01-01",
          "format": "date"
        },
        "instructions": {
          "type": "string"
        },
        "subsidy_help": {
          "type": "string"
        },
        "deadline_rule": {
          "type": "string"
        },
        "client_sentence": {
          "type": "object",
          "properties": {
            "de": {
              "type": "string"
            },
            "en": {
              "type": "string"
            },
            "fr": {
              "type": "string"
            },
            "it": {
              "type": "string"
            }
          },
          "description": "Deadline, free cancellation help and free subsidy help; requested language only unless texts=all."
        },
        "subsidy_sentence": {
          "type": "object",
          "properties": {
            "de": {
              "type": "string"
            },
            "en": {
              "type": "string"
            },
            "fr": {
              "type": "string"
            },
            "it": {
              "type": "string"
            }
          },
          "description": "Say it when the client mentions a modest income or asks about premium subsidies."
        },
        "cancellation_help": {
          "type": "string"
        },
        "request_cancels_current_insurance": {
          "const": false
        }
      },
      "description": "Switching deadline and free SPI help (cancellation, premium subsidies). Say client_sentence with the offers; a request to SPI cancels nothing by itself."
    },
    "submission": {
      "type": "object",
      "properties": {
        "method": {
          "const": "POST"
        },
        "enabled": {
          "type": "boolean",
          "description": "false: sending is disabled; offer adviser_url instead."
        },
        "endpoint": {
          "type": "string",
          "format": "uri",
          "description": "POST target of submitOfferRequest."
        },
        "on_error": {
          "type": "object",
          "description": "Error code to action.",
          "additionalProperties": {
            "type": "string"
          }
        },
        "expiresAt": {
          "type": "string",
          "format": "date-time",
          "deprecated": true,
          "description": "Alias of token_valid_until."
        },
        "comparison": {
          "type": "object",
          "description": "Legacy criteria; copy unchanged with comparisonToken when comparison_id is unavailable."
        },
        "request_id": {
          "type": "string",
          "format": "uuid",
          "description": "Fresh per response; copy it as request_id of the submission."
        },
        "content_type": {
          "const": "application/json"
        },
        "instructions": {
          "type": [
            "string",
            "array"
          ],
          "items": {
            "type": "string"
          },
          "description": "Numbered steps to follow."
        },
        "no_post_tool": {
          "type": "string"
        },
        "testEndpoint": {
          "type": "string",
          "format": "uri",
          "deprecated": true,
          "description": "Alias of test_endpoint."
        },
        "comparison_id": {
          "type": [
            "string",
            "null"
          ]
        },
        "test_endpoint": {
          "type": "string",
          "format": "uri"
        },
        "client_messages": {
          "type": "object",
          "properties": {
            "channel_labels": {
              "type": "object",
              "description": "Localised {channel} values for email, phone and email_or_phone."
            },
            "consent_request": {
              "type": "object",
              "properties": {
                "de": {
                  "type": "string"
                },
                "en": {
                  "type": "string"
                },
                "fr": {
                  "type": "string"
                },
                "it": {
                  "type": "string"
                }
              },
              "description": "Ask this once, in the same message as the offers, filling {insurer}, {model} and {premium} (household: {insurer}, {persons}, {premium} total); a reply giving an email or phone is the consent."
            },
            "consent_confirmation": {
              "type": "object",
              "properties": {
                "de": {
                  "type": "string"
                },
                "en": {
                  "type": "string"
                },
                "fr": {
                  "type": "string"
                },
                "it": {
                  "type": "string"
                }
              },
              "description": "Fill {request_id} and {channel}; it says the request cancels nothing, the 30 November deadline and the free SPI help. The receipt also returns it filled (client_confirmation)."
            }
          },
          "description": "Quote and household: requested language only (texts=all for fr, de, it, en); full premiums route: four languages."
        },
        "comparisonToken": {
          "type": "string"
        },
        "request_template": {
          "type": "object",
          "description": "submitOfferRequest body to fill; contact.email and contact.phone are empty strings: fill the ones you have."
        },
        "token_valid_until": {
          "type": "string",
          "format": "date-time",
          "description": "comparison_token lifetime (24 h)."
        },
        "clientConsentRequired": {
          "const": true
        },
        "comparison_id_valid_until": {
          "type": [
            "string",
            "null"
          ],
          "format": "date-time",
          "description": "comparison_id lifetime (30 days); results_url and adviser_url follow it. Prefer comparison_id over the token."
        }
      },
      "description": "How to send the client-approved request. Keep comparisonToken private; never put it in a link."
    },
    "adviser_url": {
      "type": [
        "string",
        "null"
      ],
      "format": "uri",
      "description": "Page where the client submits alone; null when the form is disabled."
    },
    "request_url": {
      "type": [
        "string",
        "null"
      ],
      "format": "uri",
      "description": "Short readable form link built from the criteria (/adviser?premium_year=…&postal_code=…); append &agent=<your name>, optionally &insurer_id=. No contact data. null when the form is disabled."
    },
    "result_type": {
      "const": "non_binding_lamal_premium_comparison"
    },
    "results_url": {
      "type": [
        "string",
        "null"
      ],
      "format": "uri",
      "description": "HTML results page to share with the client; no token."
    },
    "model_groups": {
      "type": "object",
      "description": "First-contact rule per model_group code present in offers.",
      "additionalProperties": {
        "type": "string"
      }
    },
    "comparison_id": {
      "type": [
        "string",
        "null"
      ],
      "description": "Reference for submitOfferRequest; valid 30 days."
    },
    "model_details": {
      "type": "string"
    },
    "texts_language": {
      "enum": [
        "fr",
        "de",
        "it",
        "en",
        "all"
      ],
      "type": "string",
      "description": "Language of the client texts in this response."
    },
    "eligible_models": {
      "type": "object",
      "required": [
        "columns",
        "rows"
      ],
      "properties": {
        "rows": {
          "type": "array",
          "items": {
            "type": "array",
            "items": {
              "type": [
                "integer",
                "number",
                "string"
              ]
            }
          }
        },
        "columns": {
          "type": "array",
          "const": [
            "insurer_id",
            "insurer_name",
            "model_name",
            "model_group",
            "premium_monthly_chf"
          ],
          "items": {
            "type": "string"
          }
        }
      },
      "description": "Every eligible model as a table, same engine and filters as offers; complete coverage, not limited to broker agreements."
    },
    "link_expires_at": {
      "type": [
        "string",
        "null"
      ],
      "format": "date-time"
    },
    "response_format": {
      "const": "compact"
    },
    "accident_question": {
      "type": "object",
      "properties": {
        "rule": {
          "type": "string"
        },
        "question": {
          "type": "object",
          "properties": {
            "de": {
              "type": "string"
            },
            "en": {
              "type": "string"
            },
            "fr": {
              "type": "string"
            },
            "it": {
              "type": "string"
            }
          }
        },
        "ask_before_quoting": {
          "const": true
        }
      },
      "description": "Ask before quoting: employees working at least 8 hours a week for the same employer usually exclude accident cover (accident_included false)."
    },
    "full_response_url": {
      "type": "string",
      "format": "uri",
      "description": "Full response for independent verification; no token or contact data."
    },
    "languages_available": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "eligible_model_count": {
      "type": "integer"
    },
    "eligible_insurer_count": {
      "type": "integer"
    }
  }
}
compare_lamal_premiums annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
compare_lamal_household — Compare official LAMal premiums for a household
Advertised by the server during the last successful anonymous check.
Advertised read-only

Household comparison (2-12 people, one insurer for all, household total) with the engine body { year:2027, members:[{ birthYear, postcode, bfs?, franchise, accident:"MIT"|"OHN", careType:"any"|"BASE"|"PRAXIS"|"FLEX"|"TEL_DIG"|"PHARM" }], language? }: bfs only when the postcode spans several communes (the error lists the choices); franchise child 0-600, adult 300-2500; MIT means accident included (ask each adult whether they work at least 8 hours a week for one employer: yes means OHN). The result holds offers[] (household total and people[] with translated model names), comparison_id, submission.request_id, the cashback object per insured person, switching and the household consent question. Present, ask consent_request in the same message, then ONE request_adviser_contact with comparison_id. One person: compare_lamal_premiums.

compare_lamal_household input schema
{
  "type": "object",
  "title": "Household LAMal comparison",
  "required": [
    "year",
    "members"
  ],
  "properties": {
    "year": {
      "type": "integer",
      "const": 2027
    },
    "texts": {
      "enum": [
        "requested",
        "all"
      ],
      "type": "string",
      "default": "requested"
    },
    "members": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "birthYear",
          "postcode",
          "franchise",
          "accident",
          "careType"
        ],
        "properties": {
          "bfs": {
            "type": "string",
            "description": "Only when the postcode spans several communes; the error lists the choices."
          },
          "accident": {
            "enum": [
              "MIT",
              "OHN"
            ],
            "description": "MIT: accident included. Ask each adult whether they work at least 8 hours a week for one employer: yes means OHN."
          },
          "careType": {
            "enum": [
              "any",
              "BASE",
              "PRAXIS",
              "FLEX",
              "TEL_DIG",
              "PHARM"
            ]
          },
          "postcode": {
            "type": "string",
            "pattern": "^[0-9]{4}$"
          },
          "birthYear": {
            "type": "integer"
          },
          "franchise": {
            "type": "integer",
            "description": "Child 0-600, adult 300-2500."
          }
        },
        "additionalProperties": false
      },
      "maxItems": 12,
      "minItems": 2,
      "description": "2-12 insured persons, no names or contact data (one person: prepareLamalQuote)."
    },
    "language": {
      "enum": [
        "fr",
        "de",
        "it",
        "en"
      ],
      "type": "string",
      "default": "fr"
    }
  },
  "additionalProperties": false
}
compare_lamal_household output schema
{
  "type": "object",
  "required": [
    "status",
    "response_format",
    "comparison_id",
    "profile",
    "offers",
    "cashback",
    "switching",
    "submission"
  ],
  "properties": {
    "data": {
      "type": "object",
      "required": [
        "authority",
        "dataset_version",
        "manifest_url",
        "limitations"
      ],
      "properties": {
        "authority": {
          "type": "string"
        },
        "source_url": {
          "type": "string",
          "format": "uri"
        },
        "limitations": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "manifest_url": {
          "type": "string",
          "format": "uri"
        },
        "dataset_version": {
          "type": "string"
        },
        "last_validated_at": {
          "type": [
            "string",
            "null"
          ],
          "format": "date-time"
        },
        "validation_status": {
          "type": "string"
        }
      },
      "description": "Origin and freshness of the official data; manifest_url lists source files and the last official sync."
    },
    "offers": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "rank": {
            "type": "integer"
          },
          "people": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "birth_year": {
                  "type": "integer"
                },
                "model_name": {
                  "type": "string"
                },
                "model_group": {
                  "type": "string"
                },
                "member_index": {
                  "type": "integer"
                },
                "model_name_official": {
                  "type": "string"
                },
                "premium_monthly_chf": {
                  "type": "number"
                }
              }
            }
          },
          "insurer_id": {
            "type": "integer"
          },
          "model_name": {
            "type": "string"
          },
          "insurer_name": {
            "type": "string"
          },
          "premium_annual_chf": {
            "type": "number"
          },
          "premium_monthly_chf": {
            "type": "number",
            "description": "Household total per month."
          },
          "premium_monthly_net_cents": {
            "type": "integer",
            "minimum": 0
          }
        }
      },
      "maxItems": 10
    },
    "status": {
      "const": "ok"
    },
    "persons": {
      "type": "integer"
    },
    "pricing": {
      "type": "object"
    },
    "profile": {
      "type": "object",
      "description": "Household criteria: persons, postcode, members[]."
    },
    "ranking": {
      "type": "string"
    },
    "cashback": {
      "type": "object",
      "required": [
        "status"
      ],
      "properties": {
        "lca": {
          "type": "object",
          "properties": {
            "basis": {
              "type": "string",
              "description": "one_month_premium per insured person and contract; amount set by SPI after review."
            },
            "amount_chf": {
              "type": [
                "number",
                "null"
              ]
            }
          }
        },
        "per": {
          "const": "insured_person"
        },
        "lamal": {
          "type": "object",
          "properties": {
            "basis": {
              "type": "string",
              "description": "fixed_chf, per insured person"
            },
            "amount_chf": {
              "type": [
                "number",
                "null"
              ]
            }
          }
        },
        "scope": {
          "const": "agent_originated_requests_only"
        },
        "status": {
          "enum": [
            "active",
            "disabled"
          ]
        },
        "contact": {
          "type": "string"
        },
        "paid_by": {
          "const": "Swiss Premium Insurance"
        },
        "paid_to": {
          "const": "client"
        },
        "trigger": {
          "type": "string"
        },
        "version": {
          "type": "string",
          "description": "Send back as cashback_terms_version."
        },
        "rationale": {
          "anyOf": [
            {
              "type": "object",
              "properties": {
                "de": {
                  "type": "string"
                },
                "en": {
                  "type": "string"
                },
                "fr": {
                  "type": "string"
                },
                "it": {
                  "type": "string"
                }
              }
            },
            {
              "type": "null"
            }
          ],
          "description": "Same languages as client_sentence; null when disabled."
        },
        "terms_url": {
          "type": "string",
          "format": "uri"
        },
        "benefit_form": {
          "const": "premium_reduction"
        },
        "programs_url": {
          "type": "string",
          "format": "uri"
        },
        "changes_premium": {
          "const": false,
          "description": "The official premium used for the ranking is not altered; the client benefit is the reduction in benefit_form."
        },
        "client_sentence": {
          "anyOf": [
            {
              "type": "object",
              "properties": {
                "de": {
                  "type": "string"
                },
                "en": {
                  "type": "string"
                },
                "fr": {
                  "type": "string"
                },
                "it": {
                  "type": "string"
                }
              }
            },
            {
              "type": "null"
            }
          ],
          "description": "Say as provided in the client language. Quote: requested language only (texts=all for fr, de, it, en); full premiums route: four languages. null when disabled."
        },
        "insured_persons": {
          "type": "integer",
          "description": "Household results only: number of insured persons."
        },
        "lamal_total_chf": {
          "type": "number",
          "description": "Household results only: CHF 30 × insured_persons."
        },
        "automatic_payment": {
          "const": false
        },
        "ranking_uses_official_premium": {
          "const": true
        }
      },
      "description": "Premium reduction Swiss Premium Insurance grants to each insured person, only for requests made through an AI assistant, once a contract concluded through SPI is approved by the insurer. Premiums and ranking shown are the official ones, without the reduction."
    },
    "operator": {
      "type": "object",
      "properties": {
        "name": {
          "const": "Swiss Premium Insurance"
        },
        "role": {
          "const": "insurance_broker"
        },
        "assistance_is_optional": {
          "const": true
        }
      }
    },
    "switching": {
      "type": "object",
      "required": [
        "deadline",
        "effective",
        "client_sentence"
      ],
      "properties": {
        "deadline": {
          "type": "string",
          "const": "2026-11-30",
          "format": "date",
          "description": "Date by which the cancellation must REACH the current insurer."
        },
        "effective": {
          "type": "string",
          "const": "2027-01-01",
          "format": "date"
        },
        "instructions": {
          "type": "string"
        },
        "subsidy_help": {
          "type": "string"
        },
        "deadline_rule": {
          "type": "string"
        },
        "client_sentence": {
          "type": "object",
          "properties": {
            "de": {
              "type": "string"
            },
            "en": {
              "type": "string"
            },
            "fr": {
              "type": "string"
            },
            "it": {
              "type": "string"
            }
          },
          "description": "Deadline, free cancellation help and free subsidy help; requested language only unless texts=all."
        },
        "subsidy_sentence": {
          "type": "object",
          "properties": {
            "de": {
              "type": "string"
            },
            "en": {
              "type": "string"
            },
            "fr": {
              "type": "string"
            },
            "it": {
              "type": "string"
            }
          },
          "description": "Say it when the client mentions a modest income or asks about premium subsidies."
        },
        "cancellation_help": {
          "type": "string"
        },
        "request_cancels_current_insurance": {
          "const": false
        }
      },
      "description": "Switching deadline and free SPI help (cancellation, premium subsidies). Say client_sentence with the offers; a request to SPI cancels nothing by itself."
    },
    "submission": {
      "type": "object",
      "properties": {
        "method": {
          "const": "POST"
        },
        "enabled": {
          "type": "boolean",
          "description": "false: sending is disabled; offer adviser_url instead."
        },
        "endpoint": {
          "type": "string",
          "format": "uri",
          "description": "POST target of submitOfferRequest."
        },
        "on_error": {
          "type": "object",
          "description": "Error code to action.",
          "additionalProperties": {
            "type": "string"
          }
        },
        "expiresAt": {
          "type": "string",
          "format": "date-time",
          "deprecated": true,
          "description": "Alias of token_valid_until."
        },
        "comparison": {
          "type": "object",
          "description": "Legacy criteria; copy unchanged with comparisonToken when comparison_id is unavailable."
        },
        "request_id": {
          "type": "string",
          "format": "uuid",
          "description": "Fresh per response; copy it as request_id of the submission."
        },
        "content_type": {
          "const": "application/json"
        },
        "instructions": {
          "type": [
            "string",
            "array"
          ],
          "items": {
            "type": "string"
          },
          "description": "Numbered steps to follow."
        },
        "no_post_tool": {
          "type": "string"
        },
        "testEndpoint": {
          "type": "string",
          "format": "uri",
          "deprecated": true,
          "description": "Alias of test_endpoint."
        },
        "comparison_id": {
          "type": [
            "string",
            "null"
          ]
        },
        "test_endpoint": {
          "type": "string",
          "format": "uri"
        },
        "client_messages": {
          "type": "object",
          "properties": {
            "channel_labels": {
              "type": "object",
              "description": "Localised {channel} values for email, phone and email_or_phone."
            },
            "consent_request": {
              "type": "object",
              "properties": {
                "de": {
                  "type": "string"
                },
                "en": {
                  "type": "string"
                },
                "fr": {
                  "type": "string"
                },
                "it": {
                  "type": "string"
                }
              },
              "description": "Ask this once, in the same message as the offers, filling {insurer}, {model} and {premium} (household: {insurer}, {persons}, {premium} total); a reply giving an email or phone is the consent."
            },
            "consent_confirmation": {
              "type": "object",
              "properties": {
                "de": {
                  "type": "string"
                },
                "en": {
                  "type": "string"
                },
                "fr": {
                  "type": "string"
                },
                "it": {
                  "type": "string"
                }
              },
              "description": "Fill {request_id} and {channel}; it says the request cancels nothing, the 30 November deadline and the free SPI help. The receipt also returns it filled (client_confirmation)."
            }
          },
          "description": "Quote and household: requested language only (texts=all for fr, de, it, en); full premiums route: four languages."
        },
        "comparisonToken": {
          "type": "string"
        },
        "request_template": {
          "type": "object",
          "description": "submitOfferRequest body to fill; contact.email and contact.phone are empty strings: fill the ones you have."
        },
        "token_valid_until": {
          "type": "string",
          "format": "date-time",
          "description": "comparison_token lifetime (24 h)."
        },
        "clientConsentRequired": {
          "const": true
        },
        "comparison_id_valid_until": {
          "type": [
            "string",
            "null"
          ],
          "format": "date-time",
          "description": "comparison_id lifetime (30 days); results_url and adviser_url follow it. Prefer comparison_id over the token."
        }
      },
      "description": "How to send the client-approved request. Keep comparisonToken private; never put it in a link."
    },
    "adviser_url": {
      "type": [
        "string",
        "null"
      ],
      "format": "uri"
    },
    "result_type": {
      "const": "non_binding_lamal_household_comparison"
    },
    "results_url": {
      "type": [
        "string",
        "null"
      ],
      "format": "uri"
    },
    "readable_url": {
      "type": [
        "string",
        "null"
      ],
      "format": "uri",
      "description": "Readable GET household page (/compare-household?…) for browsing tools."
    },
    "comparison_id": {
      "type": [
        "string",
        "null"
      ],
      "description": "Send as comparison_id in submitOfferRequest."
    },
    "texts_language": {
      "type": "string"
    },
    "link_expires_at": {
      "type": [
        "string",
        "null"
      ],
      "format": "date-time"
    },
    "response_format": {
      "const": "household"
    },
    "accident_question": {
      "type": "object",
      "properties": {
        "rule": {
          "type": "string"
        },
        "question": {
          "type": "object",
          "properties": {
            "de": {
              "type": "string"
            },
            "en": {
              "type": "string"
            },
            "fr": {
              "type": "string"
            },
            "it": {
              "type": "string"
            }
          }
        },
        "ask_before_quoting": {
          "const": true
        }
      },
      "description": "Ask before quoting: employees working at least 8 hours a week for the same employer usually exclude accident cover (accident_included false)."
    },
    "languages_available": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "eligible_insurer_count": {
      "type": "integer"
    }
  },
  "description": "Household comparison with everything needed to present, ask consent and send."
}
compare_lamal_household annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_lamal_metadata — Read comparison rules and sources
Advertised by the server during the last successful anonymous check.
Advertised read-only

Read supported years, model categories, deductibles, source freshness, exclusions and contact availability. No lead is created.

get_lamal_metadata input schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
get_lamal_metadata output schema
{
  "type": "object",
  "properties": {
    "data": {
      "type": "object",
      "required": [
        "authority",
        "dataset_version",
        "manifest_url",
        "limitations"
      ],
      "properties": {
        "authority": {
          "type": "string"
        },
        "source_url": {
          "type": "string",
          "format": "uri"
        },
        "limitations": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "manifest_url": {
          "type": "string",
          "format": "uri"
        },
        "dataset_version": {
          "type": "string"
        },
        "last_validated_at": {
          "type": [
            "string",
            "null"
          ],
          "format": "date-time"
        },
        "validation_status": {
          "type": "string"
        }
      },
      "description": "Origin and freshness of the official data; manifest_url lists source files and the last official sync."
    },
    "models": {
      "type": "object",
      "description": "model_group codes and their meaning.",
      "additionalProperties": {
        "type": "string"
      }
    },
    "operator": {
      "type": "object",
      "properties": {
        "name": {
          "const": "Swiss Premium Insurance"
        },
        "role": {
          "const": "insurance_broker"
        },
        "assistance_is_optional": {
          "const": true
        }
      }
    },
    "switching": {
      "type": "object",
      "required": [
        "deadline",
        "effective",
        "client_sentence"
      ],
      "properties": {
        "deadline": {
          "type": "string",
          "const": "2026-11-30",
          "format": "date",
          "description": "Date by which the cancellation must REACH the current insurer."
        },
        "effective": {
          "type": "string",
          "const": "2027-01-01",
          "format": "date"
        },
        "instructions": {
          "type": "string"
        },
        "subsidy_help": {
          "type": "string"
        },
        "deadline_rule": {
          "type": "string"
        },
        "client_sentence": {
          "type": "object",
          "properties": {
            "de": {
              "type": "string"
            },
            "en": {
              "type": "string"
            },
            "fr": {
              "type": "string"
            },
            "it": {
              "type": "string"
            }
          },
          "description": "Deadline, free cancellation help and free subsidy help; requested language only unless texts=all."
        },
        "subsidy_sentence": {
          "type": "object",
          "properties": {
            "de": {
              "type": "string"
            },
            "en": {
              "type": "string"
            },
            "fr": {
              "type": "string"
            },
            "it": {
              "type": "string"
            }
          },
          "description": "Say it when the client mentions a modest income or asks about premium subsidies."
        },
        "cancellation_help": {
          "type": "string"
        },
        "request_cancels_current_insurance": {
          "const": false
        }
      },
      "description": "Switching deadline and free SPI help (cancellation, premium subsidies). Say client_sentence with the offers; a request to SPI cancels nothing by itself."
    },
    "operations": {
      "type": "object",
      "description": "URL of every operation and document.",
      "additionalProperties": {
        "type": "string",
        "description": "Absolute URL; rewards_terms is a URI template with {program_id}."
      }
    },
    "api_version": {
      "type": "string"
    },
    "contact_action": {
      "type": "object",
      "properties": {
        "enabled": {
          "type": "boolean"
        },
        "test_endpoint": {
          "type": "string",
          "format": "uri"
        },
        "submit_endpoint": {
          "type": "string",
          "format": "uri"
        },
        "request_id_policy": {
          "type": "string"
        },
        "handoff_form_enabled": {
          "type": "boolean"
        },
        "token_lifetime_hours": {
          "type": "integer"
        },
        "client_consent_required": {
          "const": true
        },
        "requires_integration_key": {
          "type": "boolean"
        }
      }
    },
    "deductibles_chf": {
      "type": "object",
      "description": "Accepted deductibles for child and adult."
    },
    "supported_years": {
      "type": "array",
      "items": {
        "type": "integer"
      }
    },
    "accident_question": {
      "type": "object",
      "properties": {
        "rule": {
          "type": "string"
        },
        "question": {
          "type": "object",
          "properties": {
            "de": {
              "type": "string"
            },
            "en": {
              "type": "string"
            },
            "fr": {
              "type": "string"
            },
            "it": {
              "type": "string"
            }
          }
        },
        "ask_before_quoting": {
          "const": true
        }
      },
      "description": "Ask before quoting: employees working at least 8 hours a week for the same employer usually exclude accident cover (accident_included false)."
    }
  }
}
get_lamal_metadata annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_active_customer_rewards — Read the customer cashback programme
Advertised by the server during the last successful anonymous check.
Advertised read-only

Read the published cashback programme of Swiss Premium Insurance: status, version, scope, beneficiary, trigger, conditions and terms links. It is a premium reduction SPI grants to each insured person, only for requests made through an AI assistant, once a contract concluded through SPI is approved by the insurer; never anything for an AI agent. No lead is created and this API creates no payment.

get_active_customer_rewards input schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
get_active_customer_rewards output schema
{
  "type": "object",
  "required": [
    "status",
    "programs"
  ],
  "properties": {
    "status": {
      "enum": [
        "disabled",
        "active"
      ]
    },
    "programs": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "program_id",
          "version",
          "status",
          "product_line",
          "payer",
          "basis",
          "amount_chf",
          "trigger",
          "conditions",
          "terms_url",
          "approval"
        ],
        "properties": {
          "basis": {
            "enum": [
              "fixed_chf",
              "one_month_equivalent"
            ]
          },
          "payer": {
            "const": "Swiss Premium Insurance"
          },
          "status": {
            "const": "active"
          },
          "contact": {
            "type": "string"
          },
          "trigger": {
            "const": "contract_concluded_and_insurer_approved"
          },
          "version": {
            "type": "string"
          },
          "approval": {
            "type": "object",
            "description": "Programme published and paid by Swiss Premium Insurance Sàrl; SPI confirms each concluded contract with the insurer."
          },
          "currency": {
            "const": "CHF"
          },
          "rationale": {
            "type": "object",
            "properties": {
              "de": {
                "type": "string"
              },
              "en": {
                "type": "string"
              },
              "fr": {
                "type": "string"
              },
              "it": {
                "type": "string"
              }
            }
          },
          "terms_url": {
            "type": "string",
            "format": "uri"
          },
          "amount_chf": {
            "type": [
              "number",
              "null"
            ]
          },
          "conditions": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "program_id": {
            "type": "string"
          },
          "valid_from": {
            "type": "string"
          },
          "valid_until": {
            "type": [
              "string",
              "null"
            ]
          },
          "product_line": {
            "enum": [
              "LAMAL",
              "LCA"
            ]
          },
          "client_summary": {
            "type": "object",
            "properties": {
              "de": {
                "type": "string"
              },
              "en": {
                "type": "string"
              },
              "fr": {
                "type": "string"
              },
              "it": {
                "type": "string"
              }
            }
          },
          "how_to_request": {
            "type": "string"
          },
          "terms_page_url": {
            "type": "string",
            "format": "uri"
          },
          "automatic_payment": {
            "const": false
          },
          "amount_determination": {
            "type": "string"
          },
          "changes_insurer_premium": {
            "const": false
          }
        }
      }
    }
  }
}
get_active_customer_rewards annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
create_adviser_handoff_link — Prepare an optional adviser link
Advertised by the server during the last successful anonymous check.
Advertised read-only

Return a link when the client prefers to complete a website form, using comparison_id from the comparison. No contact details, lead or email are sent. When the web form is disabled the server answers 503 adviser_unavailable: offer contact@sp-insurance.ch instead. For a client who asks you to send the request in this conversation, use request_adviser_contact after explicit consent instead. Swiss Premium Insurance assistance is optional; clients may apply directly with insurers.

create_adviser_handoff_link input schema
{
  "type": "object",
  "required": [
    "comparison_id"
  ],
  "properties": {
    "agent": {
      "type": "object",
      "required": [
        "name"
      ],
      "properties": {
        "kind": {
          "enum": [
            "personal_assistant",
            "conversational_assistant",
            "coding_agent"
          ],
          "type": "string",
          "description": "Optional. Accepted values: personal_assistant, conversational_assistant, coding_agent (personal_agent and chat_assistant are read as personal_assistant and conversational_assistant)."
        },
        "name": {
          "type": "string",
          "pattern": "^[A-Za-z0-9_ -]{1,40}$",
          "description": "Agent name, lower-cased by the server (spaces become _; a literal <placeholder> counts as other). Known names: chatgpt, claude, gemini, grok, openclaw, muse, codex, claude_code, copilot, perplexity, mistral, coding_agent, other; any other short identifier is accepted."
        },
        "displayName": {
          "type": "string",
          "maxLength": 80,
          "minLength": 1,
          "description": "Optional custom agent name, no client name or conversation content."
        },
        "display_name": {
          "type": "string",
          "maxLength": 80,
          "minLength": 1,
          "description": "Optional custom agent name, no client name or conversation content."
        },
        "integrationId": {
          "type": "string",
          "pattern": "^[a-zA-Z0-9._-]{1,80}$",
          "description": "Self-declared integration identifier, NOT authentication."
        },
        "integration_id": {
          "type": "string",
          "pattern": "^[a-zA-Z0-9._-]{1,80}$",
          "description": "Self-declared integration identifier, NOT authentication."
        },
        "cashbackRequested": {
          "type": "boolean",
          "default": true,
          "description": "Records a request for SPI to consider a benefit. Not a claim, eligibility, approval, amount or payment promise. Does not change prices or ranking."
        },
        "cashback_requested": {
          "type": "boolean",
          "default": true,
          "description": "Records a request for SPI to consider a benefit. Not a claim, eligibility, approval, amount or payment promise. Does not change prices or ranking."
        }
      },
      "additionalProperties": false
    },
    "agentContext": {
      "type": "object",
      "required": [
        "name"
      ],
      "deprecated": true,
      "properties": {
        "kind": {
          "enum": [
            "personal_assistant",
            "conversational_assistant",
            "coding_agent"
          ],
          "type": "string",
          "description": "Optional. Accepted values: personal_assistant, conversational_assistant, coding_agent (personal_agent and chat_assistant are read as personal_assistant and conversational_assistant)."
        },
        "name": {
          "type": "string",
          "pattern": "^[A-Za-z0-9_ -]{1,40}$",
          "description": "Agent name, lower-cased by the server (spaces become _; a literal <placeholder> counts as other). Known names: chatgpt, claude, gemini, grok, openclaw, muse, codex, claude_code, copilot, perplexity, mistral, coding_agent, other; any other short identifier is accepted."
        },
        "displayName": {
          "type": "string",
          "maxLength": 80,
          "minLength": 1,
          "description": "Optional custom agent name, no client name or conversation content."
        },
        "display_name": {
          "type": "string",
          "maxLength": 80,
          "minLength": 1,
          "description": "Optional custom agent name, no client name or conversation content."
        },
        "integrationId": {
          "type": "string",
          "pattern": "^[a-zA-Z0-9._-]{1,80}$",
          "description": "Self-declared integration identifier, NOT authentication."
        },
        "integration_id": {
          "type": "string",
          "pattern": "^[a-zA-Z0-9._-]{1,80}$",
          "description": "Self-declared integration identifier, NOT authentication."
        },
        "cashbackRequested": {
          "type": "boolean",
          "default": true,
          "description": "Records a request for SPI to consider a benefit. Not a claim, eligibility, approval, amount or payment promise. Does not change prices or ranking."
        },
        "cashback_requested": {
          "type": "boolean",
          "default": true,
          "description": "Records a request for SPI to consider a benefit. Not a claim, eligibility, approval, amount or payment promise. Does not change prices or ranking."
        }
      },
      "description": "Deprecated alias of agent; not with agent.",
      "additionalProperties": false
    },
    "comparison_id": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
create_adviser_handoff_link output schema
{
  "type": "object",
  "required": [
    "handoff_url",
    "submits_lead",
    "transmits_contact_data"
  ],
  "properties": {
    "status": {
      "const": "ready"
    },
    "expires_at": {
      "type": "string",
      "format": "date-time"
    },
    "handoff_url": {
      "type": "string",
      "format": "uri"
    },
    "submits_lead": {
      "const": false
    },
    "transmits_contact_data": {
      "const": false
    }
  }
}
create_adviser_handoff_link annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
test_adviser_request — Validate a request without sending
Advertised by the server during the last successful anonymous check.
Advertised read-only

Harmless integration test with the same body as request_adviser_contact: validates the request and returns a preview with status validated_test and email_sent false. Use synthetic contact details only. No commercial lead, email, entitlement or payment. Never describe this as a real submission.

test_adviser_request input schema
{
  "type": "object",
  "anyOf": [
    {
      "required": [
        "comparison_id"
      ]
    },
    {
      "required": [
        "comparison",
        "comparison_token"
      ]
    }
  ],
  "required": [
    "request_id",
    "contact",
    "client_consent"
  ],
  "properties": {
    "agent": {
      "type": "object",
      "required": [
        "name"
      ],
      "properties": {
        "kind": {
          "enum": [
            "personal_assistant",
            "conversational_assistant",
            "coding_agent"
          ],
          "type": "string",
          "description": "Optional. Accepted values: personal_assistant, conversational_assistant, coding_agent (personal_agent and chat_assistant are read as personal_assistant and conversational_assistant)."
        },
        "name": {
          "type": "string",
          "pattern": "^[A-Za-z0-9_ -]{1,40}$",
          "description": "Agent name, lower-cased by the server (spaces become _; a literal <placeholder> counts as other). Known names: chatgpt, claude, gemini, grok, openclaw, muse, codex, claude_code, copilot, perplexity, mistral, coding_agent, other; any other short identifier is accepted."
        },
        "displayName": {
          "type": "string",
          "maxLength": 80,
          "minLength": 1,
          "description": "Optional custom agent name, no client name or conversation content."
        },
        "display_name": {
          "type": "string",
          "maxLength": 80,
          "minLength": 1,
          "description": "Optional custom agent name, no client name or conversation content."
        },
        "integrationId": {
          "type": "string",
          "pattern": "^[a-zA-Z0-9._-]{1,80}$",
          "description": "Self-declared integration identifier, NOT authentication."
        },
        "integration_id": {
          "type": "string",
          "pattern": "^[a-zA-Z0-9._-]{1,80}$",
          "description": "Self-declared integration identifier, NOT authentication."
        },
        "cashbackRequested": {
          "type": "boolean",
          "default": true,
          "description": "Records a request for SPI to consider a benefit. Not a claim, eligibility, approval, amount or payment promise. Does not change prices or ranking."
        },
        "cashback_requested": {
          "type": "boolean",
          "default": true,
          "description": "Records a request for SPI to consider a benefit. Not a claim, eligibility, approval, amount or payment promise. Does not change prices or ranking."
        }
      },
      "description": "Who is calling: { name:\"chatgpt\" } etc. Self-declared, not authentication.",
      "additionalProperties": false
    },
    "contact": {
      "type": "object",
      "anyOf": [
        {
          "required": [
            "email"
          ]
        },
        {
          "required": [
            "phone"
          ]
        }
      ],
      "properties": {
        "name": {
          "type": "string",
          "maxLength": 120,
          "minLength": 0
        },
        "email": {
          "type": "string",
          "maxLength": 160,
          "description": "Client email such as client@example.ch; an empty string or an omitted key means the client gave a phone instead."
        },
        "phone": {
          "type": "string",
          "maxLength": 30,
          "description": "Client telephone, 8-15 digits, optional spaces and + country code; an empty string or an omitted key means the client gave an email instead."
        },
        "message": {
          "type": "string",
          "maxLength": 1500,
          "minLength": 0
        }
      },
      "description": "Fill email or phone; leave the other as an empty string or omit it. Never invent a client name, email or phone.",
      "additionalProperties": false
    },
    "language": {
      "enum": [
        "fr",
        "de",
        "it",
        "en",
        "es",
        "pt",
        "zh"
      ],
      "type": "string",
      "description": "Client language; defaults to the comparison language. fr, de, it, en have localised client texts and pages; es, pt, zh are recorded for SPI (preview and pages fall back to en/fr)."
    },
    "offer_id": {
      "type": "string",
      "description": "offers[].offer_id or source_offer_id; alternative to insurer_id."
    },
    "comparison": {
      "type": "object",
      "description": "submission.comparison copied unchanged; only with comparison_token."
    },
    "insurer_id": {
      "type": [
        "integer",
        "string"
      ],
      "description": "insurer_id of the offer the client chose, from offers[]."
    },
    "request_id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$",
      "description": "Copy submission.request_id from the quote (any RFC 4122 UUID). Reuse the same value and body on every retry."
    },
    "comparison_id": {
      "type": "string",
      "description": "comparison_id from the quote; valid 30 days. Preferred."
    },
    "client_consent": {
      "type": "boolean",
      "const": true,
      "description": "true only after the client explicitly answered yes to consent_request. Never infer consent from a comparison."
    },
    "comparison_token": {
      "type": "string",
      "maxLength": 1000,
      "description": "submission.comparisonToken with the identical submission.comparison; alternative to comparison_id."
    },
    "subsidy_requested": {
      "type": "boolean",
      "default": false,
      "description": "Client wants information on premium subsidies."
    },
    "cashback_terms_version": {
      "type": "string",
      "description": "cashback.version shown to the client; 409 cashback_terms_outdated when stale."
    },
    "supplementary_interest": {
      "type": "boolean",
      "default": false,
      "description": "Client also wants supplementary (LCA) offers; enables the LCA cashback."
    }
  },
  "description": "Send exactly one of comparison_id or comparison + comparison_token. Copy request_id, comparison_id and insurer_id from the quote.",
  "additionalProperties": false
}
test_adviser_request output schema
{
  "type": "object",
  "required": [
    "status",
    "request_id",
    "email_sent",
    "payment_created",
    "recipient",
    "preview"
  ],
  "properties": {
    "status": {
      "const": "validated_test"
    },
    "preview": {
      "type": "object",
      "properties": {
        "people": {
          "type": "array",
          "items": {
            "type": "object"
          },
          "description": "Household only: each member with model and monthly premium."
        },
        "language": {
          "type": "string"
        },
        "model_name": {
          "type": "string"
        },
        "insurer_name": {
          "type": "string"
        },
        "cashback_line": {
          "type": [
            "string",
            "null"
          ]
        },
        "members_count": {
          "type": "integer"
        },
        "contact_fields": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "criteria_summary": {
          "type": "string"
        },
        "consent_statement": {
          "type": "string"
        },
        "model_name_official": {
          "type": "string"
        },
        "premium_monthly_chf": {
          "type": "number",
          "description": "Monthly premium; for a household the household total."
        },
        "consent_confirmation": {
          "type": "string",
          "description": "The confirmation a real send returns, filled."
        },
        "household_monthly_chf": {
          "type": "number"
        }
      },
      "description": "What a real send would contain."
    },
    "recipient": {
      "const": "contact@sp-insurance.ch"
    },
    "email_sent": {
      "const": false
    },
    "request_id": {
      "type": "string",
      "format": "uuid"
    },
    "payment_created": {
      "const": false
    }
  }
}
test_adviser_request annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
request_adviser_contact — Send an offer request by email to Swiss Premium Insurance
Advertised by the server during the last successful anonymous check.
Open-world

Sends the client request by email to contact@sp-insurance.ch through the server; no personal email account or mail tool is needed. Use once the client has answered the consent_request question with a yes or with their email or phone: that answer is the consent, and the platform approval for this tool completes it. Copy request_id and comparison_id from submission of compare_lamal_premiums and insurer_id from offers[]; reuse the same request_id and body on retries. Report the returned status and request_id: accepted means the email provider accepted the request for delivery to Swiss Premium Insurance, not inbox delivery, not that SPI has read it, not a contract. A draft or test is not a real send, and the request does not cancel the current insurance. The premium reduction applies only if the contract is concluded through SPI and approved by the insurer; never promise it.

request_adviser_contact input schema
{
  "type": "object",
  "anyOf": [
    {
      "required": [
        "comparison_id"
      ]
    },
    {
      "required": [
        "comparison",
        "comparison_token"
      ]
    }
  ],
  "required": [
    "request_id",
    "contact",
    "client_consent"
  ],
  "properties": {
    "agent": {
      "type": "object",
      "required": [
        "name"
      ],
      "properties": {
        "kind": {
          "enum": [
            "personal_assistant",
            "conversational_assistant",
            "coding_agent"
          ],
          "type": "string",
          "description": "Optional. Accepted values: personal_assistant, conversational_assistant, coding_agent (personal_agent and chat_assistant are read as personal_assistant and conversational_assistant)."
        },
        "name": {
          "type": "string",
          "pattern": "^[A-Za-z0-9_ -]{1,40}$",
          "description": "Agent name, lower-cased by the server (spaces become _; a literal <placeholder> counts as other). Known names: chatgpt, claude, gemini, grok, openclaw, muse, codex, claude_code, copilot, perplexity, mistral, coding_agent, other; any other short identifier is accepted."
        },
        "displayName": {
          "type": "string",
          "maxLength": 80,
          "minLength": 1,
          "description": "Optional custom agent name, no client name or conversation content."
        },
        "display_name": {
          "type": "string",
          "maxLength": 80,
          "minLength": 1,
          "description": "Optional custom agent name, no client name or conversation content."
        },
        "integrationId": {
          "type": "string",
          "pattern": "^[a-zA-Z0-9._-]{1,80}$",
          "description": "Self-declared integration identifier, NOT authentication."
        },
        "integration_id": {
          "type": "string",
          "pattern": "^[a-zA-Z0-9._-]{1,80}$",
          "description": "Self-declared integration identifier, NOT authentication."
        },
        "cashbackRequested": {
          "type": "boolean",
          "default": true,
          "description": "Records a request for SPI to consider a benefit. Not a claim, eligibility, approval, amount or payment promise. Does not change prices or ranking."
        },
        "cashback_requested": {
          "type": "boolean",
          "default": true,
          "description": "Records a request for SPI to consider a benefit. Not a claim, eligibility, approval, amount or payment promise. Does not change prices or ranking."
        }
      },
      "description": "Who is calling: { name:\"chatgpt\" } etc. Self-declared, not authentication.",
      "additionalProperties": false
    },
    "contact": {
      "type": "object",
      "anyOf": [
        {
          "required": [
            "email"
          ]
        },
        {
          "required": [
            "phone"
          ]
        }
      ],
      "properties": {
        "name": {
          "type": "string",
          "maxLength": 120,
          "minLength": 0
        },
        "email": {
          "type": "string",
          "maxLength": 160,
          "description": "Client email such as client@example.ch; an empty string or an omitted key means the client gave a phone instead."
        },
        "phone": {
          "type": "string",
          "maxLength": 30,
          "description": "Client telephone, 8-15 digits, optional spaces and + country code; an empty string or an omitted key means the client gave an email instead."
        },
        "message": {
          "type": "string",
          "maxLength": 1500,
          "minLength": 0
        }
      },
      "description": "Fill email or phone; leave the other as an empty string or omit it. Never invent a client name, email or phone.",
      "additionalProperties": false
    },
    "language": {
      "enum": [
        "fr",
        "de",
        "it",
        "en",
        "es",
        "pt",
        "zh"
      ],
      "type": "string",
      "description": "Client language; defaults to the comparison language. fr, de, it, en have localised client texts and pages; es, pt, zh are recorded for SPI (preview and pages fall back to en/fr)."
    },
    "offer_id": {
      "type": "string",
      "description": "offers[].offer_id or source_offer_id; alternative to insurer_id."
    },
    "comparison": {
      "type": "object",
      "description": "submission.comparison copied unchanged; only with comparison_token."
    },
    "insurer_id": {
      "type": [
        "integer",
        "string"
      ],
      "description": "insurer_id of the offer the client chose, from offers[]."
    },
    "request_id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$",
      "description": "Copy submission.request_id from the quote (any RFC 4122 UUID). Reuse the same value and body on every retry."
    },
    "comparison_id": {
      "type": "string",
      "description": "comparison_id from the quote; valid 30 days. Preferred."
    },
    "client_consent": {
      "type": "boolean",
      "const": true,
      "description": "true only after the client explicitly answered yes to consent_request. Never infer consent from a comparison."
    },
    "comparison_token": {
      "type": "string",
      "maxLength": 1000,
      "description": "submission.comparisonToken with the identical submission.comparison; alternative to comparison_id."
    },
    "subsidy_requested": {
      "type": "boolean",
      "default": false,
      "description": "Client wants information on premium subsidies."
    },
    "cashback_terms_version": {
      "type": "string",
      "description": "cashback.version shown to the client; 409 cashback_terms_outdated when stale."
    },
    "supplementary_interest": {
      "type": "boolean",
      "default": false,
      "description": "Client also wants supplementary (LCA) offers; enables the LCA cashback."
    }
  },
  "description": "Send exactly one of comparison_id or comparison + comparison_token. Copy request_id, comparison_id and insurer_id from the quote.",
  "additionalProperties": false
}
request_adviser_contact output schema
{
  "type": "object",
  "required": [
    "status",
    "request_id",
    "email_sent",
    "recipient",
    "accepted_at",
    "follow_up_by",
    "message"
  ],
  "properties": {
    "status": {
      "const": "accepted"
    },
    "message": {
      "type": "string"
    },
    "cashback": {
      "type": "object",
      "properties": {
        "lca_basis": {
          "type": [
            "string",
            "null"
          ]
        },
        "requested": {
          "type": "boolean"
        },
        "terms_url": {
          "type": "string",
          "format": "uri"
        },
        "next_steps": {
          "type": "string",
          "description": "Tell the client this."
        },
        "program_status": {
          "enum": [
            "active",
            "disabled"
          ]
        },
        "contract_status": {
          "const": "not_verified"
        },
        "payment_created": {
          "const": false
        },
        "program_version": {
          "type": "string"
        },
        "lamal_amount_chf": {
          "type": [
            "number",
            "null"
          ]
        }
      }
    },
    "recipient": {
      "const": "contact@sp-insurance.ch"
    },
    "switching": {
      "type": "object",
      "required": [
        "deadline",
        "effective",
        "client_sentence"
      ],
      "properties": {
        "deadline": {
          "type": "string",
          "const": "2026-11-30",
          "format": "date",
          "description": "Date by which the cancellation must REACH the current insurer."
        },
        "effective": {
          "type": "string",
          "const": "2027-01-01",
          "format": "date"
        },
        "instructions": {
          "type": "string"
        },
        "subsidy_help": {
          "type": "string"
        },
        "deadline_rule": {
          "type": "string"
        },
        "client_sentence": {
          "type": "object",
          "properties": {
            "de": {
              "type": "string"
            },
            "en": {
              "type": "string"
            },
            "fr": {
              "type": "string"
            },
            "it": {
              "type": "string"
            }
          },
          "description": "Deadline, free cancellation help and free subsidy help; requested language only unless texts=all."
        },
        "subsidy_sentence": {
          "type": "object",
          "properties": {
            "de": {
              "type": "string"
            },
            "en": {
              "type": "string"
            },
            "fr": {
              "type": "string"
            },
            "it": {
              "type": "string"
            }
          },
          "description": "Say it when the client mentions a modest income or asks about premium subsidies."
        },
        "cancellation_help": {
          "type": "string"
        },
        "request_cancels_current_insurance": {
          "const": false
        }
      },
      "description": "Switching deadline and free SPI help (cancellation, premium subsidies). Say client_sentence with the offers; a request to SPI cancels nothing by itself."
    },
    "email_sent": {
      "const": true,
      "description": "Provider acceptance; not inbox delivery or a contract."
    },
    "request_id": {
      "type": "string",
      "format": "uuid"
    },
    "accepted_at": {
      "type": "string",
      "format": "date-time"
    },
    "follow_up_by": {
      "const": "Swiss Premium Insurance"
    },
    "client_confirmation": {
      "type": "string",
      "description": "consent_confirmation filled in the client language; say it to the client."
    },
    "expected_contact_channel": {
      "enum": [
        "email",
        "phone",
        "email_or_phone"
      ],
      "type": "string"
    },
    "correction_or_cancellation": {
      "type": "string",
      "format": "uri",
      "description": "mailto link to correct or withdraw; give it to the client."
    },
    "expected_contact_channel_label": {
      "type": "string",
      "description": "expected_contact_channel in the client language."
    }
  }
}
request_adviser_contact annotations
{
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}

Prompts

1 advertised

lamal_compare_and_contact — Compare LAMal premiums and contact Swiss Premium Insurance

Advertised by the server during the last successful anonymous check.

Walks the five steps: compare official premiums, present the offers and the cashback sentence, obtain explicit consent, send the request with request_adviser_contact, report the receipt.

postal_code
Swiss postal code of the client (four digits). (required)
birth_year
Birth year of the insured person (four digits). (required)
deductible_chf
Annual deductible in CHF (adults 300-2500, children 0-600; see get_lamal_metadata).
accident_included
Ask first whether the client works at least 8 hours a week for the same employer: yes means false (employer accident cover), otherwise true.
model_group
Model category: any, BASE, PRAXIS, FLEX, TEL_DIG or PHARM.
language
Client language: fr, de, it or en.

Resources

5 advertised

Assurs agent protocol (llms.txt) — Assurs agent protocol (llms.txt)

Advertised by the server during the last successful anonymous check.

The four-step protocol with literal request bodies, consent and cashback sentences and error handling.

Assurs agent protocol (llms.txt) URI
docs://assurs/llms.txt

MIME type: text/markdown

Assurs LAMal skill (SKILL.md) — Assurs LAMal skill (SKILL.md)

Advertised by the server during the last successful anonymous check.

Installable agent skill for the comparison and contact flow.

Assurs LAMal skill (SKILL.md) URI
docs://assurs/skill.md

MIME type: text/markdown

Cashback terms — Cashback terms

Advertised by the server during the last successful anonymous check.

Conditions of the cashback Swiss Premium Insurance pays to the client.

Cashback terms URI
docs://assurs/cashback-terms

MIME type: text/html

Privacy notice — Privacy notice

Advertised by the server during the last successful anonymous check.

How contact data sent through the agent routes is processed (French; English summary at the top).

Privacy notice URI
docs://assurs/privacy

MIME type: text/html

Terms of use — Terms of use

Advertised by the server during the last successful anonymous check.

Terms of the agent routes and of Swiss Premium Insurance assistance (French; English summary at the top).

Terms of use URI
docs://assurs/terms

MIME type: text/html

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
1470 ms
95th percentile latency
1470 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 1470 ms · metadata changed · 7 tool(s), 5 resource(s), 0 resource template(s), 1 prompt(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http assurs-lamal-mcp https://api.assurs.ch/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add assurs-lamal-mcp --url https://api.assurs.ch/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable assurs-lamal-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "assurs-lamal-mcp": {
      "url": "https://api.assurs.ch/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "assurs-lamal-mcp": {
      "type": "streamableHttp",
      "url": "https://api.assurs.ch/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start assurs-lamal-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "assurs-lamal-mcp": {
      "type": "http",
      "url": "https://api.assurs.ch/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http assurs-lamal-mcp https://api.assurs.ch/mcp

Claude Desktop

Merge this into claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\), then restart Claude Desktop.
Claude Desktop configuration
{
  "mcpServers": {
    "assurs-lamal-mcp": {
      "url": "https://api.assurs.ch/mcp"
    }
  }
}

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "assurs-lamal-mcp": {
      "serverUrl": "https://api.assurs.ch/mcp"
    }
  }
}

Let your agent find its tools

Find servers like Assurs LAMal MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.

Do you run Assurs LAMal MCP?

Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.

Claim this listing