Skip to main content
Glama

Assurs LAMal comparator

Compare official LAMal premiums

compare_lamal_premiums
Read-onlyIdempotent

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.

Input Schema

NameRequiredDescriptionDefault
textsNoClient 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.requested
languageNoLanguage of the client texts, model names and HTML pages; a region suffix is ignored.fr
birth_yearYesExact four-digit birth year, not an age.
model_groupYesany = all categories; BASE = free choice of doctor; PRAXIS = family doctor / HMO network; FLEX = hybrid model; TEL_DIG = telemedicine first; PHARM = pharmacy first.
postal_codeYes
municipalityNoOfficial municipality name; required with ambiguous region/model availability unless municipality_bfs is given.
premium_yearYesTariff year: always 2027, the only imported year (metadata.supported_years). Required, no default.
deductible_chfYesAnnual 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_bfsNo
accident_includedYesExplicit 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.

Output Schema

NameRequiredDescriptionDefault
dataYesOrigin and freshness of the official data; manifest_url lists source files and the last official sync.
offersYesTop 10 by net premium, same ranking as assurs.ch.
statusYes
pricingYes
profileYesCriteria as applied plus resolved municipality, canton and region.
cashbackYesPremium 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.
operatorYes
switchingYesSwitching deadline and free SPI help (cancellation, premium subsidies). Say client_sentence with the offers; a request to SPI cancels nothing by itself.
submissionYesHow to send the client-approved request. Keep comparisonToken private; never put it in a link.
adviser_urlNoPage where the client submits alone; null when the form is disabled.
request_urlNoShort 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_typeYes
results_urlYesHTML results page to share with the client; no token.
model_groupsNoFirst-contact rule per model_group code present in offers.
comparison_idYesReference for submitOfferRequest; valid 30 days.
model_detailsNo
texts_languageNoLanguage of the client texts in this response.
eligible_modelsYesEvery eligible model as a table, same engine and filters as offers; complete coverage, not limited to broker agreements.
link_expires_atNo
response_formatYes
accident_questionNoAsk before quoting: employees working at least 8 hours a week for the same employer usually exclude accident cover (accident_included false).
full_response_urlYesFull response for independent verification; no token or contact data.
languages_availableNo
eligible_model_countYes
eligible_insurer_countNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed28 schema fields changed
    • changedInput schema / description
      Previous value: -"Criteria for one person. For a household (2-12 people, one insurer for all) use calculateHousehold."New value: +"Criteria for one person. For a household (2-12 people, one insurer for all) use prepareHouseholdQuote."
    • changedInput schema / properties / accident_included / description
      Previous value: -"Explicit JSON boolean required (not the string \"true\"). Do not infer legal eligibility to exclude accident cover."New value: +"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."
    • changedInput schema / properties / language / description
      Previous value: -"Language of the client texts and HTML pages; a region suffix is ignored."New value: +"Language of the client texts, model names and HTML pages; a region suffix is ignored."
    • addedInput schema / properties / texts
      Added value: +{
      +  "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.",
      +  "enum": [
      +    "requested",
      +    "all"
      +  ],
      +  "type": "string"
      +}
    • addedOutput schema / properties / accident_question
      Added value: +{
      +  "description": "Ask before quoting: employees working at least 8 hours a week for the same employer usually exclude accident cover (accident_included false).",
      +  "properties": {
      +    "ask_before_quoting": {
      +      "const": true
      +    },
      +    "question": {
      +      "properties": {
      +        "de": {
      +          "type": "string"
      +        },
      +        "en": {
      +          "type": "string"
      +        },
      +        "fr": {
      +          "type": "string"
      +        },
      +        "it": {
      +          "type": "string"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "rule": {
      +      "type": "string"
      +    }
      +  },
      +  "type": "object"
      +}
    • changedOutput schema / properties / cashback / description
      Previous value: -"Cashback SPI pays the client once a contract is concluded through SPI and approved by the insurer. Never a lower premium."New value: +"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."
    • addedOutput schema / properties / cashback / properties / benefit_form
      Added value: +{
      +  "const": "premium_reduction"
      +}
    • addedOutput schema / properties / cashback / properties / changes_premium / description
      Added value: +"The official premium used for the ranking is not altered; the client benefit is the reduction in benefit_form."
    • changedOutput schema / properties / cashback / properties / client_sentence / description
      Previous value: -"Say verbatim in the client language; fr, de, it and en on both routes; null when disabled."New value: +"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."
    • addedOutput schema / properties / cashback / properties / insured_persons
      Added value: +{
      +  "description": "Household results only: number of insured persons.",
      +  "type": "integer"
      +}
    • changedOutput schema / properties / cashback / properties / lamal / properties / basis / description
      Previous value: -"fixed_chf"New value: +"fixed_chf, per insured person"
    • addedOutput schema / properties / cashback / properties / lamal_total_chf
      Added value: +{
      +  "description": "Household results only: CHF 30 × insured_persons.",
      +  "type": "number"
      +}
    • changedOutput schema / properties / cashback / properties / lca / properties / basis / description
      Previous value: -"one_month_premium; amount set by SPI after review."New value: +"one_month_premium per insured person and contract; amount set by SPI after review."
    • addedOutput schema / properties / cashback / properties / per
      Added value: +{
      +  "const": "insured_person"
      +}
    • addedOutput schema / properties / cashback / properties / ranking_uses_official_premium
      Added value: +{
      +  "const": true
      +}
    • changedOutput schema / properties / cashback / properties / rationale / description
      Previous value: -"fr, de, it and en; null when disabled."New value: +"Same languages as client_sentence; null when disabled."
    • addedOutput schema / properties / cashback / properties / scope
      Added value: +{
      +  "const": "agent_originated_requests_only"
      +}
    • addedOutput schema / properties / languages_available
      Added value: +{
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • changedOutput schema / properties / offers / items / properties / model_name / description
      Previous value: -"Official French model name."New value: +"Model name in the requested language (display translation of the official name)."
    • addedOutput schema / properties / offers / items / properties / model_name_official
      Added value: +{
      +  "description": "Official French model name from the OFSP file.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / request_url
      Added value: +{
      +  "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.",
      +  "format": "uri",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • changedOutput schema / properties / submission / properties / client_messages / description
      Previous value: -"fr, de, it and en."New value: +"Quote and household: requested language only (texts=all for fr, de, it, en); full premiums route: four languages."
    • addedOutput schema / properties / submission / properties / client_messages / properties / channel_labels
      Added value: +{
      +  "description": "Localised {channel} values for email, phone and email_or_phone.",
      +  "type": "object"
      +}
    • addedOutput schema / properties / submission / properties / client_messages / properties / consent_confirmation / description
      Added value: +"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)."
    • changedOutput schema / properties / submission / properties / client_messages / properties / consent_request / description
      Previous value: -"Ask this once in the client language, filling {insurer}, {model} and {premium}; a reply giving an email or phone is the consent."New value: +"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."
    • addedOutput schema / properties / switching
      Added value: +{
      +  "description": "Switching deadline and free SPI help (cancellation, premium subsidies). Say client_sentence with the offers; a request to SPI cancels nothing by itself.",
      +  "properties": {
      +    "cancellation_help": {
      +      "type": "string"
      +    },
      +    "client_sentence": {
      +      "description": "Deadline, free cancellation help and free subsidy help; requested language only unless texts=all.",
      +      "properties": {
      +        "de": {
      +          "type": "string"
      +        },
      +        "en": {
      +          "type": "string"
      +        },
      +        "fr": {
      +          "type": "string"
      +        },
      +        "it": {
      +          "type": "string"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "deadline": {
      +      "const": "2026-11-30",
      +      "description": "Date by which the cancellation must REACH the current insurer.",
      +      "format": "date",
      +      "type": "string"
      +    },
      +    "deadline_rule": {
      +      "type": "string"
      +    },
      +    "effective": {
      +      "const": "2027-01-01",
      +      "format": "date",
      +      "type": "string"
      +    },
      +    "instructions": {
      +      "type": "string"
      +    },
      +    "request_cancels_current_insurance": {
      +      "const": false
      +    },
      +    "subsidy_help": {
      +      "type": "string"
      +    },
      +    "subsidy_sentence": {
      +      "description": "Say it when the client mentions a modest income or asks about premium subsidies.",
      +      "properties": {
      +        "de": {
      +          "type": "string"
      +        },
      +        "en": {
      +          "type": "string"
      +        },
      +        "fr": {
      +          "type": "string"
      +        },
      +        "it": {
      +          "type": "string"
      +        }
      +      },
      +      "type": "object"
      +    }
      +  },
      +  "required": [
      +    "deadline",
      +    "effective",
      +    "client_sentence"
      +  ],
      +  "type": "object"
      +}
    • addedOutput schema / properties / texts_language
      Added value: +{
      +  "description": "Language of the client texts in this response.",
      +  "enum": [
      +    "fr",
      +    "de",
      +    "it",
      +    "en",
      +    "all"
      +  ],
      +  "type": "string"
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "status",
      -  "result_type",
      -  "response_format",
      -  "profile",
      -  "comparison_id",
      -  "cashback",
      -  "submission",
      -  "offers",
      -  "eligible_models",
      -  "eligible_model_count",
      -  "data",
      -  "pricing",
      -  "full_response_url",
      -  "results_url",
      -  "operator"
      -]New value: +[
      +  "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"
      +]
  2. Changed1 schema field changed
    • changedOutput schema / properties / submission / properties / client_messages / properties / consent_request / description
      Previous value: -"Ask this verbatim in the client language, filling {fields}, {insurer}, {model} and {premium}."New value: +"Ask this once in the client language, filling {insurer}, {model} and {premium}; a reply giving an email or phone is the consent."
  3. First observed

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and closed-world, so safety is covered; the description adds real context beyond that: no contact details are returned, the ranking is based on official premiums, technical fields stay with the agent and the client fills no website form. It is somewhat tangled with return-content detail that the output schema also carries, which keeps it from a 5.

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

Conciseness3/5

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

Purpose is front-loaded and no sentence is purely filler, but the body is a dense run of clipped clauses, some of which repeat schema text, and a few are cryptic ('texts all for four'). It reads as internal shorthand rather than a cleanly structured description.

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

Completeness4/5

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

For a 10-parameter tool, the description covers the decisions that matter (accident question, model_group scope, one-person scope) and the output schema plus annotations carry return values and safety. Remaining gaps, such as municipality/municipality_bfs ambiguity handling, are left to the schema, so it is complete but not exhaustive.

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

Parameters3/5

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

Schema description coverage is 80%, so the schema already documents birth_year, model_group, accident_included and deductible ranges. The description largely restates those same rules (exact birth year, 'any means all categories', the 8-hour accident rule) rather than adding new semantics, so it lands at the baseline for high-coverage schemas.

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

Purpose5/5

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

Opens with a specific verb, resource and data source ('Read-only compact comparison of official LAMal premiums from the OFSP data'), and closes by explicitly bounding scope to one person while naming compare_lamal_household as the household alternative. An agent can route between the two without opening either schema.

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

Usage Guidelines5/5

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

Gives concrete pre-call workflow: 'Use the exact birth year and ask for every material choice' and the explicit accident-coverage decision rule (8h/week with same employer => accident_included false). It also names the sibling used for households and states 'One person per call', so both when-to-use and when-not-to-use are covered.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources