Krankenkasse Copilot

Swiss health insurance 2027: rank every insurer, model and deductible with official BAG data.

Should I use this

Quality & Safety

B
Description quality
68%
Schema completeness
80%
Naming quality
85%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Findings (3)

  • LOWTool 'find_postcode' description lacks action verbin find_postcode
  • LOWTool 'compare_insurance' description lacks action verbin compare_insurance
  • LOWTool 'switching_deadlines' description lacks action verbin switching_deadlines

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~928Tokens (tool definitions)
~2.0 KBTypical response size
Moderate attention impact (0.73% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "krankenkasse-copilot": {
      "url": "https://krankenkasse-copilot.vercel.app/api/mcp"
    }
  }
}

Remote endpoints

https://krankenkasse-copilot.vercel.app/api/mcpstreamable-http

What it can do

Tool inventory

Tools (4)

🟒 Read-only🟑 WriteπŸ”΄ Deleteβšͺ Unknown
🟒find_postcode(postcode)

Look up a Swiss postcode: municipalities, canton and BAG premium region. Use it when a postcode may cover several municipalities.

Input Schema

{
  "type": "object",
  "properties": {
    "postcode": {
      "type": "integer",
      "minimum": 1000,
      "maximum": 9999,
      "description": "Swiss 4 digit postcode"
    }
  },
  "required": [
    "postcode"
  ]
}
🟒compare_insurance(postcode, municipality_bfs, age_group, works_8h_per_week, yearly_health_costs, ...)

Rank every insurer, model and deductible for one person by the full yearly cost for 2027 (premiums plus the bills they pay themselves). Returns the best options, the best deductible, the break-even point, the worst case and the saving against their current insurance.

Input Schema

{
  "type": "object",
  "properties": {
    "postcode": {
      "type": "integer",
      "minimum": 1000,
      "maximum": 9999,
      "description": "Swiss 4 digit postcode, e.g. 8001"
    },
    "municipality_bfs": {
      "type": "integer",
      "minimum": 0,
      "description": "BFS number from find_postcode, only needed if the postcode covers several municipalities"
    },
    "age_group": {
      "type": "string",
      "enum": [
        "19-25",
        "26+"
      ],
      "description": "Age in 2027"
    },
    "works_8h_per_week": {
      "type": "boolean",
      "description": "Works at least 8 hours a week for one employer. If true, accident cover is left out because the employer covers it"
    },
    "yearly_health_costs": {
      "type": "number",
      "minimum": 0,
      "maximum": 200000,
      "description": "Expected doctor bills per year in CHF. If missing, estimated from the visit counts below"
    },
    "gp_visits": {
      "type": "integer",
      "minimum": 0,
      "maximum": 100,
      "description": "Family doctor visits per year (about CHF 150 each)"
    },
    "specialist_visits": {
      "type": "integer",
      "minimum": 0,
      "maximum": 200,
      "description": "Specialist or therapy sessions per year (about CHF 280 each)"
    },
    "medication_per_month": {
      "type": "number",
      "minimum": 0,
      "maximum": 5000,
      "description": "Medication in CHF per month"
    },
    "model": {
      "type": "string",
      "enum": [
        "standard",
        "hausarzt",
        "hmo",
        "telmed",
        "flex"
      ],
      "description": "Only show this insurance model"
    },
    "franchise": {
      "type": "integer",
      "description": "Only show this deductible (300, 500, 1000, 1500, 2000 or 2500)"
    },
    "current_insurer": {
      "type": "string",
      "description": "Name of the current insurer, e.g. \"Helsana\""
    },
    "current_monthly_premium": {
      "type": "number",
      "minimum": 0,
      "maximum": 3000,
      "description": "What they pay today per month for basic insurance"
    },
    "current_franchise": {
      "type": "integer",
      "description": "Their deductible today"
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 20,
      "description": "How many options to return, default 5, best per insurer"
    }
  },
  "required": [
    "postcode",
    "age_group",
    "works_8h_per_week"
  ]
}
🟒draft_switch_letter(kind, full_name, street, postcode_town, current_insurer, ...)

Write the German letter to cancel basic insurance (KΓΌndigung) or to change deductible or model with the same insurer. The person prints it, signs it by hand and posts it so it arrives by 30 November. Nothing is stored.

Input Schema

{
  "type": "object",
  "properties": {
    "kind": {
      "type": "string",
      "enum": [
        "cancel",
        "change"
      ],
      "description": "\"cancel\" to leave the current insurer, \"change\" to stay and change deductible or model"
    },
    "full_name": {
      "type": "string"
    },
    "street": {
      "type": "string"
    },
    "postcode_town": {
      "type": "string",
      "description": "e.g. \"8008 ZΓΌrich\""
    },
    "current_insurer": {
      "type": "string"
    },
    "insurer_address": {
      "type": "string"
    },
    "insurance_number": {
      "type": "string"
    },
    "birth_date": {
      "type": "string"
    },
    "new_franchise": {
      "type": "integer",
      "description": "Only for kind \"change\""
    },
    "new_model": {
      "type": "string",
      "description": "Only for kind \"change\""
    }
  },
  "required": [
    "kind",
    "full_name",
    "street",
    "postcode_town",
    "current_insurer"
  ]
}
🟒switching_deadlines

The dates that matter for changing Krankenkasse, model or deductible for 2027, with days left from today.

Input Schema

{
  "type": "object",
  "properties": {}
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded4 tools