Skip to main content
Glama

Assurs LAMal comparator

Compare official LAMal premiums for a household

compare_lamal_household
Read-onlyIdempotent

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.

Input Schema

NameRequiredDescriptionDefault
yearYes
textsNorequested
membersYes2-12 insured persons, no names or contact data (one person: prepareLamalQuote).
languageNofr

Output Schema

NameRequiredDescriptionDefault
dataNoOrigin and freshness of the official data; manifest_url lists source files and the last official sync.
offersYes
statusYes
personsNo
pricingNo
profileYesHousehold criteria: persons, postcode, members[].
rankingNo
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.
operatorNo
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_urlNo
result_typeNo
results_urlNo
readable_urlNoReadable GET household page (/compare-household?…) for browsing tools.
comparison_idYesSend as comparison_id in submitOfferRequest.
texts_languageNo
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).
languages_availableNo
eligible_insurer_countNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed84 schema fields changed
    • addedInput schema / properties / language
      Added value: +{
      +  "default": "fr",
      +  "enum": [
      +    "fr",
      +    "de",
      +    "it",
      +    "en"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / members / description
      Added value: +"2-12 insured persons, no names or contact data (one person: prepareLamalQuote)."
    • changedInput schema / properties / members / items / properties / accident / description
      Previous value: -"MIT : inclus ; OHN : exclu. Ne pas déduire ce choix de l’âge ou de la profession."New value: +"MIT: accident included. Ask each adult whether they work at least 8 hours a week for one employer: yes means OHN."
    • removedInput schema / properties / members / items / properties / accident / type
      Removed value: -"string"
    • changedInput schema / properties / members / items / properties / bfs / description
      Previous value: -"Commune OFS, obligatoire uniquement si le NPA couvre des régions ou des modèles disponibles différents. Vérifier requiresCommune dans places(postcode)."New value: +"Only when the postcode spans several communes; the error lists the choices."
    • removedInput schema / properties / members / items / properties / bfs / pattern
      Removed value: -"^[0-9]{1,6}$"
    • removedInput schema / properties / members / items / properties / birthYear / maximum
      Removed value: -2027
    • removedInput schema / properties / members / items / properties / birthYear / minimum
      Removed value: -1907
    • removedInput schema / properties / members / items / properties / careType / type
      Removed value: -"string"
    • removedInput schema / properties / members / items / properties / currentPremium
      Removed value: -{
      -  "description": "CHF par mois, base seule, nette de redistribution, avant subsides. Remplace la référence calculée.",
      -  "pattern": "^[0-9]{1,5}([.,][0-9]{1,2})?$",
      -  "type": "string"
      -}
    • removedInput schema / properties / members / items / properties / currentProduct
      Removed value: -{
      -  "description": "Clé renvoyée par searchReferences ; facultative.",
      -  "maxLength": 100,
      -  "pattern": "^[0-9]+\\|[^|]+$",
      -  "type": "string"
      -}
    • addedInput schema / properties / members / items / properties / franchise / description
      Added value: +"Child 0-600, adult 300-2500."
    • removedInput schema / properties / members / items / properties / franchise / enum
      Removed value: -[
      -  0,
      -  100,
      -  200,
      -  300,
      -  400,
      -  500,
      -  600,
      -  1000,
      -  1500,
      -  2000,
      -  2500
      -]
    • changedInput schema / properties / members / minItems
      Previous value: -1New value: +2
    • addedInput schema / properties / texts
      Added value: +{
      +  "default": "requested",
      +  "enum": [
      +    "requested",
      +    "all"
      +  ],
      +  "type": "string"
      +}
    • changedInput schema / title
      Previous value: -"SPI — comparaison LAMal 2027"New value: +"Household LAMal comparison"
    • changedOutput schema / description
      Previous value: -"Legacy engine result: integer centimes, one insurer for all members. No cashback object, client_messages or request_id here: take them from prepareLamalQuote and mint any RFC 4122 request_id."New value: +"Household comparison with everything needed to present, ask consent and send."
    • 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"
      +}
    • addedOutput schema / properties / adviser_url
      Added value: +{
      +  "format": "uri",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / cashback
      Added value: +{
      +  "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.",
      +  "properties": {
      +    "automatic_payment": {
      +      "const": false
      +    },
      +    "benefit_form": {
      +      "const": "premium_reduction"
      +    },
      +    "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": [
      +        {
      +          "properties": {
      +            "de": {
      +              "type": "string"
      +            },
      +            "en": {
      +              "type": "string"
      +            },
      +            "fr": {
      +              "type": "string"
      +            },
      +            "it": {
      +              "type": "string"
      +            }
      +          },
      +          "type": "object"
      +        },
      +        {
      +          "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."
      +    },
      +    "contact": {
      +      "type": "string"
      +    },
      +    "insured_persons": {
      +      "description": "Household results only: number of insured persons.",
      +      "type": "integer"
      +    },
      +    "lamal": {
      +      "properties": {
      +        "amount_chf": {
      +          "type": [
      +            "number",
      +            "null"
      +          ]
      +        },
      +        "basis": {
      +          "description": "fixed_chf, per insured person",
      +          "type": "string"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "lamal_total_chf": {
      +      "description": "Household results only: CHF 30 × insured_persons.",
      +      "type": "number"
      +    },
      +    "lca": {
      +      "properties": {
      +        "amount_chf": {
      +          "type": [
      +            "number",
      +            "null"
      +          ]
      +        },
      +        "basis": {
      +          "description": "one_month_premium per insured person and contract; amount set by SPI after review.",
      +          "type": "string"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "paid_by": {
      +      "const": "Swiss Premium Insurance"
      +    },
      +    "paid_to": {
      +      "const": "client"
      +    },
      +    "per": {
      +      "const": "insured_person"
      +    },
      +    "programs_url": {
      +      "format": "uri",
      +      "type": "string"
      +    },
      +    "ranking_uses_official_premium": {
      +      "const": true
      +    },
      +    "rationale": {
      +      "anyOf": [
      +        {
      +          "properties": {
      +            "de": {
      +              "type": "string"
      +            },
      +            "en": {
      +              "type": "string"
      +            },
      +            "fr": {
      +              "type": "string"
      +            },
      +            "it": {
      +              "type": "string"
      +            }
      +          },
      +          "type": "object"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "description": "Same languages as client_sentence; null when disabled."
      +    },
      +    "scope": {
      +      "const": "agent_originated_requests_only"
      +    },
      +    "status": {
      +      "enum": [
      +        "active",
      +        "disabled"
      +      ]
      +    },
      +    "terms_url": {
      +      "format": "uri",
      +      "type": "string"
      +    },
      +    "trigger": {
      +      "type": "string"
      +    },
      +    "version": {
      +      "description": "Send back as cashback_terms_version.",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "status"
      +  ],
      +  "type": "object"
      +}
    • addedOutput schema / properties / comparison_id
      Added value: +{
      +  "description": "Send as comparison_id in submitOfferRequest.",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / data
      Added value: +{
      +  "description": "Origin and freshness of the official data; manifest_url lists source files and the last official sync.",
      +  "properties": {
      +    "authority": {
      +      "type": "string"
      +    },
      +    "dataset_version": {
      +      "type": "string"
      +    },
      +    "last_validated_at": {
      +      "format": "date-time",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "limitations": {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "manifest_url": {
      +      "format": "uri",
      +      "type": "string"
      +    },
      +    "source_url": {
      +      "format": "uri",
      +      "type": "string"
      +    },
      +    "validation_status": {
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "authority",
      +    "dataset_version",
      +    "manifest_url",
      +    "limitations"
      +  ],
      +  "type": "object"
      +}
    • removedOutput schema / properties / eligibleInsurerCount
      Removed value: -{
      -  "type": "integer"
      -}
    • addedOutput schema / properties / eligible_insurer_count
      Added value: +{
      +  "type": "integer"
      +}
    • addedOutput schema / properties / languages_available
      Added value: +{
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / link_expires_at
      Added value: +{
      +  "format": "date-time",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • removedOutput schema / properties / offers / items / properties / annualCents
      Removed value: -{
      -  "minimum": 0,
      -  "type": "integer"
      -}
    • removedOutput schema / properties / offers / items / properties / insurerId
      Removed value: -{
      -  "description": "Send as insurer_id in submitOfferRequest.",
      -  "type": "integer"
      -}
    • removedOutput schema / properties / offers / items / properties / insurerName
      Removed value: -{
      -  "type": "string"
      -}
    • addedOutput schema / properties / offers / items / properties / insurer_id
      Added value: +{
      +  "type": "integer"
      +}
    • addedOutput schema / properties / offers / items / properties / insurer_name
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / offers / items / properties / model_name
      Added value: +{
      +  "type": "string"
      +}
    • removedOutput schema / properties / offers / items / properties / monthlyCents
      Removed value: -{
      -  "description": "Household net premium per month, integer centimes.",
      -  "minimum": 0,
      -  "type": "integer"
      -}
    • addedOutput schema / properties / offers / items / properties / people / items / properties / birth_year
      Added value: +{
      +  "type": "integer"
      +}
    • removedOutput schema / properties / offers / items / properties / people / items / properties / careType
      Removed value: -{
      -  "type": "string"
      -}
    • removedOutput schema / properties / offers / items / properties / people / items / properties / memberIndex
      Removed value: -{
      -  "type": "integer"
      -}
    • addedOutput schema / properties / offers / items / properties / people / items / properties / member_index
      Added value: +{
      +  "type": "integer"
      +}
    • removedOutput schema / properties / offers / items / properties / people / items / properties / modelName
      Removed value: -{
      -  "description": "Official French model name.",
      -  "type": "string"
      -}
    • addedOutput schema / properties / offers / items / properties / people / items / properties / model_group
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / offers / items / properties / people / items / properties / model_name
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / offers / items / properties / people / items / properties / model_name_official
      Added value: +{
      +  "type": "string"
      +}
    • removedOutput schema / properties / offers / items / properties / people / items / properties / monthlyNetCents
      Removed value: -{
      -  "minimum": 0,
      -  "type": "integer"
      -}
    • addedOutput schema / properties / offers / items / properties / people / items / properties / premium_monthly_chf
      Added value: +{
      +  "type": "number"
      +}
    • removedOutput schema / properties / offers / items / properties / people / items / properties / productKey
      Removed value: -{
      -  "type": "string"
      -}
    • addedOutput schema / properties / offers / items / properties / premium_annual_chf
      Added value: +{
      +  "type": "number"
      +}
    • addedOutput schema / properties / offers / items / properties / premium_monthly_chf
      Added value: +{
      +  "description": "Household total per month.",
      +  "type": "number"
      +}
    • addedOutput schema / properties / offers / items / properties / premium_monthly_net_cents
      Added value: +{
      +  "minimum": 0,
      +  "type": "integer"
      +}
    • removedOutput schema / properties / ok
      Removed value: -{
      -  "const": true
      -}
    • addedOutput schema / properties / operator
      Added value: +{
      +  "properties": {
      +    "assistance_is_optional": {
      +      "const": true
      +    },
      +    "name": {
      +      "const": "Swiss Premium Insurance"
      +    },
      +    "role": {
      +      "const": "insurance_broker"
      +    }
      +  },
      +  "type": "object"
      +}
    • addedOutput schema / properties / persons
      Added value: +{
      +  "type": "integer"
      +}
    • addedOutput schema / properties / pricing
      Added value: +{
      +  "type": "object"
      +}
    • addedOutput schema / properties / profile
      Added value: +{
      +  "description": "Household criteria: persons, postcode, members[].",
      +  "type": "object"
      +}
    • addedOutput schema / properties / ranking
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / readable_url
      Added value: +{
      +  "description": "Readable GET household page (/compare-household?…) for browsing tools.",
      +  "format": "uri",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / response_format
      Added value: +{
      +  "const": "household"
      +}
    • addedOutput schema / properties / result_type
      Added value: +{
      +  "const": "non_binding_lamal_household_comparison"
      +}
    • addedOutput schema / properties / results_url
      Added value: +{
      +  "format": "uri",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / status
      Added value: +{
      +  "const": "ok"
      +}
    • addedOutput schema / properties / submission / description
      Added value: +"How to send the client-approved request. Keep comparisonToken private; never put it in a link."
    • addedOutput schema / properties / submission / properties / clientConsentRequired
      Added value: +{
      +  "const": true
      +}
    • addedOutput schema / properties / submission / properties / client_messages
      Added value: +{
      +  "description": "Quote and household: requested language only (texts=all for fr, de, it, en); full premiums route: four languages.",
      +  "properties": {
      +    "channel_labels": {
      +      "description": "Localised {channel} values for email, phone and email_or_phone.",
      +      "type": "object"
      +    },
      +    "consent_confirmation": {
      +      "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).",
      +      "properties": {
      +        "de": {
      +          "type": "string"
      +        },
      +        "en": {
      +          "type": "string"
      +        },
      +        "fr": {
      +          "type": "string"
      +        },
      +        "it": {
      +          "type": "string"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "consent_request": {
      +      "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.",
      +      "properties": {
      +        "de": {
      +          "type": "string"
      +        },
      +        "en": {
      +          "type": "string"
      +        },
      +        "fr": {
      +          "type": "string"
      +        },
      +        "it": {
      +          "type": "string"
      +        }
      +      },
      +      "type": "object"
      +    }
      +  },
      +  "type": "object"
      +}
    • addedOutput schema / properties / submission / properties / comparison
      Added value: +{
      +  "description": "Legacy criteria; copy unchanged with comparisonToken when comparison_id is unavailable.",
      +  "type": "object"
      +}
    • removedOutput schema / properties / submission / properties / comparisonToken / description
      Removed value: -"Send as comparison_token together with comparison = verification.criteria; valid 24 hours; never put it in a link."
    • addedOutput schema / properties / submission / properties / comparison_id
      Added value: +{
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / submission / properties / comparison_id_valid_until
      Added value: +{
      +  "description": "comparison_id lifetime (30 days); results_url and adviser_url follow it. Prefer comparison_id over the token.",
      +  "format": "date-time",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / submission / properties / content_type
      Added value: +{
      +  "const": "application/json"
      +}
    • addedOutput schema / properties / submission / properties / enabled
      Added value: +{
      +  "description": "false: sending is disabled; offer adviser_url instead.",
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / submission / properties / endpoint
      Added value: +{
      +  "description": "POST target of submitOfferRequest.",
      +  "format": "uri",
      +  "type": "string"
      +}
    • addedOutput schema / properties / submission / properties / expiresAt / deprecated
      Added value: +true
    • addedOutput schema / properties / submission / properties / expiresAt / description
      Added value: +"Alias of token_valid_until."
    • addedOutput schema / properties / submission / properties / instructions
      Added value: +{
      +  "description": "Numbered steps to follow.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": [
      +    "string",
      +    "array"
      +  ]
      +}
    • addedOutput schema / properties / submission / properties / method
      Added value: +{
      +  "const": "POST"
      +}
    • addedOutput schema / properties / submission / properties / no_post_tool
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / submission / properties / on_error
      Added value: +{
      +  "additionalProperties": {
      +    "type": "string"
      +  },
      +  "description": "Error code to action.",
      +  "type": "object"
      +}
    • addedOutput schema / properties / submission / properties / request_id
      Added value: +{
      +  "description": "Fresh per response; copy it as request_id of the submission.",
      +  "format": "uuid",
      +  "type": "string"
      +}
    • addedOutput schema / properties / submission / properties / request_template
      Added value: +{
      +  "description": "submitOfferRequest body to fill; contact.email and contact.phone are empty strings: fill the ones you have.",
      +  "type": "object"
      +}
    • addedOutput schema / properties / submission / properties / testEndpoint
      Added value: +{
      +  "deprecated": true,
      +  "description": "Alias of test_endpoint.",
      +  "format": "uri",
      +  "type": "string"
      +}
    • addedOutput schema / properties / submission / properties / test_endpoint
      Added value: +{
      +  "format": "uri",
      +  "type": "string"
      +}
    • addedOutput schema / properties / submission / properties / token_valid_until
      Added value: +{
      +  "description": "comparison_token lifetime (24 h).",
      +  "format": "date-time",
      +  "type": "string"
      +}
    • 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"
      +}
    • removedOutput schema / properties / tariffYear
      Removed value: -{
      -  "type": "integer"
      -}
    • addedOutput schema / properties / texts_language
      Added value: +{
      +  "type": "string"
      +}
    • removedOutput schema / properties / verification
      Removed value: -{
      -  "properties": {
      -    "criteria": {
      -      "additionalProperties": false,
      -      "description": "Copy unchanged as comparison in submitOfferRequest.",
      -      "properties": {
      -        "members": {
      -          "items": {
      -            "additionalProperties": false,
      -            "properties": {
      -              "accident": {
      -                "description": "MIT : inclus ; OHN : exclu. Ne pas déduire ce choix de l’âge ou de la profession.",
      -                "enum": [
      -                  "MIT",
      -                  "OHN"
      -                ],
      -                "type": "string"
      -              },
      -              "bfs": {
      -                "description": "Commune OFS, obligatoire uniquement si le NPA couvre des régions ou des modèles disponibles différents. Vérifier requiresCommune dans places(postcode).",
      -                "pattern": "^[0-9]{1,6}$",
      -                "type": "string"
      -              },
      -              "birthYear": {
      -                "maximum": 2027,
      -                "minimum": 1907,
      -                "type": "integer"
      -              },
      -              "careType": {
      -                "enum": [
      -                  "any",
      -                  "BASE",
      -                  "PRAXIS",
      -                  "FLEX",
      -                  "TEL_DIG",
      -                  "PHARM"
      -                ],
      -                "type": "string"
      -              },
      -              "currentPremium": {
      -                "description": "CHF par mois, base seule, nette de redistribution, avant subsides. Remplace la référence calculée.",
      -                "pattern": "^[0-9]{1,5}([.,][0-9]{1,2})?$",
      -                "type": "string"
      -              },
      -              "currentProduct": {
      -                "description": "Clé renvoyée par searchReferences ; facultative.",
      -                "maxLength": 100,
      -                "pattern": "^[0-9]+\\|[^|]+$",
      -                "type": "string"
      -              },
      -              "franchise": {
      -                "enum": [
      -                  0,
      -                  100,
      -                  200,
      -                  300,
      -                  400,
      -                  500,
      -                  600,
      -                  1000,
      -                  1500,
      -                  2000,
      -                  2500
      -                ],
      -                "type": "integer"
      -              },
      -              "postcode": {
      -                "pattern": "^[0-9]{4}$",
      -                "type": "string"
      -              }
      -            },
      -            "required": [
      -              "birthYear",
      -              "postcode",
      -              "franchise",
      -              "accident",
      -              "careType"
      -            ],
      -            "type": "object"
      -          },
      -          "maxItems": 12,
      -          "minItems": 1,
      -          "type": "array"
      -        },
      -        "year": {
      -          "const": 2027,
      -          "type": "integer"
      -        }
      -      },
      -      "required": [
      -        "year",
      -        "members"
      -      ],
      -      "title": "SPI — comparaison LAMal 2027",
      -      "type": "object"
      -    }
      -  },
      -  "type": "object"
      -}
    • changedOutput schema / required
      Previous value: -[
      -  "ok",
      -  "tariffYear",
      -  "offers",
      -  "verification",
      -  "submission"
      -]New value: +[
      +  "status",
      +  "response_format",
      +  "comparison_id",
      +  "profile",
      +  "offers",
      +  "cashback",
      +  "switching",
      +  "submission"
      +]
  2. First observed

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), and the description adds substantial extra context: it discloses the result contents (offers[], household total, people[], comparison_id, submission.request_id, cashback, switching, consent question), the 'one insurer for all' constraint, and the bfs error behaviour.

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?

Almost every clause carries real information, and the household-purpose is front-loaded, but the text is a single dense run-on with nested parentheticals and no segmentation, making it harder to scan than necessary for the amount of procedural content.

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?

With an output schema present, the description need not describe returns, yet it does outline them and adds the consent/hand-off workflow, making the tool callable correctly. The gap is the unaddressed 'texts' parameter and the mixed pointer to a different single-person tool name between schema and description.

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

Parameters4/5

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

Schema coverage is only 25%, so the description must compensate and largely does: it explains bfs conditionality, franchise ranges per age, MIT/OHN semantics with a concrete decision rule, the careType enum values, and language as optional. The 'texts' parameter (enum with default) is never mentioned and remains undocumented anywhere.

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

Purpose5/5

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

States a specific verb and resource ('Household comparison') plus scope constraints (2-12 people, one insurer for all, household total), and explicitly routes the single-person case to compare_lamal_premiums, so an agent can separate it from the sibling without opening the schema.

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

Usage Guidelines4/5

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

Gives the explicit alternative for one person, the per-adult accident question to ask before calling, and the downstream flow ('Present, ask consent_request in the same message, then ONE request_adviser_contact with comparison_id'). No explicit when-not-to-call beyond the single-person routing, and the schema's 'prepareLamalQuote' hint conflicts slightly with the named sibling.

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