{
  "$comment": "Boleron's own description of this MCP server: a convenience for discovery, not a document the MCP specification defines. The server itself is authoritative: it answers server/discover (MCP 2026-07-28) and initialize (earlier revisions). A standard MCP server card (SEP-2127) is still a draft and is not published here.",
  "name": "Boleron EU Quotes",
  "version": "1.0.0",
  "description": "MCP server that prices insurance from insurers' own tariffs for the user's own answers: non-binding quotes with a line-item breakdown, the covers each package buys, and referral or decline reasons. Travel only today, and only where a tariff can be quoted; get_quote_schema says what can be.",
  "endpoint": "https://boleron.eu/api/quote/mcp/",
  "transport": "streamable-http",
  "protocolVersion": "2026-07-28",
  "supportedProtocolVersions": [
    "2026-07-28",
    "2025-11-25",
    "2025-06-18",
    "2025-03-26",
    "2024-11-05"
  ],
  "authentication": {
    "type": "none",
    "access": "public-anonymous"
  },
  "organization": {
    "name": "Boleron",
    "website": "https://boleron.eu"
  },
  "documentation": {
    "llms": "https://boleron.eu/llms.txt",
    "catalogServer": "https://boleron.eu/.well-known/mcp.json"
  },
  "categories": ["insurance", "finance"],
  "quotes": {
    "binding": false,
    "personalData": "none — travellers are described by age only",
    "money": "integer minor units of each quote's currency; rates in basis points",
    "audited": true
  },
  "tools": [
    {
      "name": "get_quote_schema",
      "annotations": {
        "title": "Get the questions for a quote",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      },
      "description": "Get everything needed to quote a product line in a country: a JSON Schema for the complete answer set, and each insurer that can be quoted with its packages — tier, covers and limits, and the traveller ages each package is sold to — plus the assumptions its tariff makes where the insurer's documents leave a point open, and priceFactors: for each answer, whether changing it alone from a reference trip changes the price or who can be insured, and for destinations and purpose the values that do. Ask first about the answers that matter, and follow up only on values that change something; every answer is still required, because answers can matter together in ways one-at-a-time changes do not show. Call this first, collect every answer from the user in one turn, then call submit_quote.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "country": {
            "type": "string",
            "description": "Country slug, e.g. 'bulgaria'."
          },
          "type": {
            "type": "string",
            "enum": ["travel"],
            "description": "Product line. Only travel can be quoted today."
          },
          "insurer": {
            "type": "string",
            "description": "Insurer slug, as the catalog tools return it. Omit to describe every insurer."
          }
        },
        "required": ["country", "type"]
      }
    },
    {
      "name": "submit_quote",
      "annotations": {
        "title": "Price a non-binding quote",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      },
      "description": "Price a complete answer set with every insurer's tariff for the line, or one insurer's, or one package. Returns non-binding quotes for the user's own answers: a line-item breakdown and totals as integer minor units (cents) of the quote's own currency, named in each result's currency field, the covers each package buys and leaves out, referral or decline reasons where the tariff gives no price, the ids of the tariff's open assumptions, and the distributor disclosure. With insurer omitted it adds a comparison: per tier, the priced packages cheapest first with each one's difference from the cheapest and the cover it gives above the tier's minimum (a tier's minimum is the same at every insurer), then the packages referred or declined and why. Travellers are described by age only: never send names, birth dates or health information.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "country": {
            "type": "string",
            "description": "Country slug, e.g. 'bulgaria'."
          },
          "type": {
            "type": "string",
            "enum": ["travel"],
            "description": "Product line. Only travel can be quoted today."
          },
          "insurer": {
            "type": "string",
            "description": "Insurer slug. Omit to quote every insurer with a tariff."
          },
          "package": {
            "type": "string",
            "description": "Package id from get_quote_schema. Omit to quote every package."
          },
          "answers": {
            "type": "object",
            "description": "The answer set, matching answersSchema from get_quote_schema."
          }
        },
        "required": ["country", "type", "answers"]
      }
    }
  ]
}
