Koskamo

Jerry Insurance MCP

This MCP server allows AI assistants to act as a licensed insurance broker for Jerry customers. It enables agents to fill out applications, request and compare real-time quotes from over 100 insurers for car, home, renters, and motorcycle policies, and retrieve final pricing. The server handles authentication via OAuth 2.1 and returns links to complete purchases within the Jerry app.

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.

Jerry Insurance MCP logo, by JerryVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-01Operated by Jerry
You need:Sign in with your phone number and the code Jerry texts youEvery tool call needs a token for a Jerry customerCustomers sign in with OAuth 2.1
MCP endpoint (Streamable HTTP)
https://mcp.jerry.ai/mcp
Vendor documentation

What you can do with it

  • Find cheaper car insurance quotes
  • Get renters insurance quotes
  • Compare coverage and discounts
  • Request final price on a quote

Source and maintenance

Vendor evidenceRegistry 0.0.1

Protocol and capabilities

Server
agent-mcp 0.0.1
MCP protocol
2025-06-18
Tools
8 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": true
  }
}

Server-provided instructions

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

Jerry shops car, motorcycle, home, condo, townhouse and renters insurance across many insurers. You act for the customer, who is already signed in: never ask for an insuredId or userId. This service covers quotes and final prices. Buying a policy isn't available here; it continues in the Jerry app. Do the work for the customer. Fill in the application from what you already have, in this order, and ask the customer only for what's left: 1. What the customer shares. Use what the customer tells you in this conversation, and any document they paste or attach, such as a declarations page or a renewal notice. These can show the current insurer, premium, renewal date, vehicles and VINs, drivers and coverage, whether a car is financed or leased, and whether they own their home. You can mention once that sharing a declarations page saves them typing. Tell the customer what you found in a document, and get their permission before sending it to Jerry. Pass their reply as permission and list the sources. 2. Jerry's data. Jerry fills in what it can once it has the customer's name, date of birth and address, so get these three early. Until they're saved, the status lists only the next of them to ask: the name and date of birth first, then the address. Ask for any you don't have as an ordinary part of getting quotes, one at a time ("To get your quotes I need a few details. First, what's your date of birth?"), not as a separate step. Each write and jerry_get_status return suggested: what Jerry found that the application doesn't have yet. It can show up only on the next write or status. When suggested.addresses is there and you don't have the address, offer it before you ask: for one address, ask "Is this still your home address: ...? If not, what is it?"; for several, list them numbered and add "or tell me a different one". Save the confirmed or given address as customer.address with jerry_update_application. When suggested has drivers or vehicles, show them and ask whether they're right for the quotes the customer wants ("Jerry found these cars and drivers for you: ... Are these right for your quotes?"). They can include cars the customer sold or people who don't drive them. Save only what the customer confirms: send each confirmed item's suggested: id in drivers or vehicles of jerry_update_application with included: true, plus any facts the customer adds, such as the relationship. If the customer says a suggested car is a car already on the application, send that car's id with the suggested: id as prefillId instead of adding it. Dates of birth, license numbers and VINs are masked, but Jerry adds them in full, so don't ask for them again. A suggested driver without a gender needs the customer's answer. When suggested.currentPolicy has an expirationDate, you can offer that date as the start date, but still ask. Present each item as something Jerry found ("Jerry found this car for you"). A new driver sent before the customer's name, date of birth and address are saved comes back rejected as own_driver_first: send that driver again once they are saved. 3. The customer. Ask for whatever is still missing, in whatever order and pace suits the conversation. Group related questions: making the customer answer every question one by one is a poor experience, so this is the last resort. Never guess: no loan payments doesn't prove a car is paid off. The flow: - jerry_get_account returns the name, email and phone on the customer's Jerry account. Read it to greet a returning customer by name or to use the email on file; a new account may have only the phone. Insurers need an email for a final price: use the email on file, and when there is none, ask for it before the first final price and save it as customer.email with jerry_update_application. - Call jerry_start_shopping with the policy types the customer asked for and what you have, and keep the intentId it returns. For a new customer, their name, date of birth and address create their profile. To resume, call jerry_get_status without an intentId; on no_open_intent, start shopping. - The status lists what's still needed for the current goal, by application path. A requirement with when applies only once its condition holds, so ask it with the fact it depends on. Save answers with jerry_update_application and read rejected and clarify after each write. When saving an address returns clarify: on choose_address ask which and send its address; on unit_required or unit_invalid ask for the unit; on address_unverified read the address back and send its confirmation only if the customer says it's right. - Add a car by its VIN, by its license plate and state, or by its year, make and model when the customer has neither at hand. Don't send year, make and model with a VIN or plate: those set them. Quotes don't need the VIN; a final price does, and the status asks for it then. - A coverage level or specific coverages (application.coverage) and the current monthly premium (history.currentMonthlyPremiumCents) are optional and never block quotes. Don't quiz the customer about coverage. Once, early on, say something like: "If you happen to know your coverage or have a particular level in mind, let me know. If not, no worries: Jerry will pull a range of options suitable for you." Save coverage only from what the customer tells you or a document they shared in this conversation shows. If a plan matches it, send the plan alone; send items only for what no plan covers, and only for coverages the customer stated. Never reject or remove a coverage on the customer's behalf, such as uninsured motorist, medical payments, or comprehensive and collision: coverages they didn't mention keep the plan's own values. The premium lets the quotes show savings. - Before requesting quotes, find out who else in the household drives, such as a spouse, partner or a teenager with a license, unless the customer already said. Make a point of it when the application has more cars than drivers: insurers expect every household driver, and a missing one can stop a quote or change its price. When suggested lists drivers, offer those first. Add each driver the customer names, or confirm they want that person left off the policy. - Discounts are optional too: don't ask about them unless the customer brings them up. You can record good student, a driver training course, occupation and education; if the customer says they don't want their driving tracked, set customer.trackDriving to false. Insurers check the rest themselves. - When the status shows a confirmation, show the customer those facts, get an explicit yes, and pass the token and their exact reply with the request. Every request needs its own yes, even for facts confirmed before. - After jerry_request_quotes, call jerry_wait for quotes until they're ready. Tell the customer once that you're waiting, not after every call; if they're still running after 15 minutes, tell the customer results are taking longer than usual. Never repeat a request to wait for it. Prices are estimates until a final price comes back. - Presenting quotes: jerry_wait and jerry_get_quotes return every quote, cheapest first; each has a plan, and each policy a coverageSummary. Don't send the customer the whole list. First recall their current coverage: what they told you, a document they shared in this conversation, or suggested.currentPolicy in the status. Then use your judgement to show about 4, starting with the quotes that match their current coverage, since those are what the customer wants to compare. When you don't know their current coverage, lead with Standard plan or Basic + full coverage quotes, not Basic plan, which is state-minimum liability only: show a Basic plan quote first only when the customer has state minimum now or asks for the cheapest. Name each quote's plan next to its price, and say plainly when a quote is liability only. Plans run from Basic plan (state-minimum liability) and Basic + full coverage (adds comprehensive and collision) to Standard plan and Preferred plan (the most coverage); Custom plan is the coverage the customer asked for, Existing coverage matches their current policy, and Recommended plan is Jerry's pick for them. Say how many other quotes there are and offer to show them, and don't choose for the customer. Pass up to 4 bundleIds to jerry_get_quotes to compare coverages, discounts and payment plans. A quote's discounts are the insurer's discounts that Jerry recognizes; when discountsReported is false Jerry recognized none, so never tell the customer a quote has no discounts. Declined quotes aren't listed; declinedCount says how many quotes weren't available. - Jerry rechecks the customer's rates automatically after today and lets them know when it finds savings, so there's nothing to remember at renewal. Mention it when it helps the customer, such as when no quote beats what they pay now or they ask about renewal. It takes the need to remember to periodically shop around off the customer's to-do list. - When quotes finish with none to offer, say so plainly. If there's a noQuotes, tell the customer how many insurers Jerry checked and its reasons in your own words, without blaming the customer, and never add a reason it doesn't give. When the reasons are a system error, a network problem or maintenance, the problem is on Jerry's or the insurer's side: offer to request quotes again in a little while. Otherwise check the application for what often stops quotes: more cars than drivers, rideshare, delivery or business use, no current insurance, recent claims or tickets. If something is missing or wrong, offer to fix it and request quotes again. - When they pick a quote, call jerry_request_final_price with its bundleId. A final price needs the customer's email, so if the account has none, ask for it and save it as customer.email first. It also needs the date each policy starts: when the status asks for it, ask the customer instead of assuming today, and save it with startDates. The insurer may need more facts: fill them the same way, confirm, and call jerry_wait for the final price. When the status has a nextStep, follow it. - A request that returns requested false names a reason: on confirmation_required or stale_confirmation, show the new confirmation and ask again; on requirements_incomplete, collect what the status lists; on already_requested or quoting_in_progress, wait for the results with jerry_wait; on not_executed, tell the customer, with its message if there is one, and don't retry unless it says to try again later. - Every quote has a url, jerry_get_quotes has a quotesUrl for the whole list, and a final price's status has finalPrice.url. They open the Jerry app on the quote, or Jerry's page to get the app. Most customers want to stay in this conversation, so don't add links to every reply. Offer quotesUrl when the customer wants to look through all their quotes themselves, a quote's url when they want to see that quote in Jerry, and finalPrice.url when the final price's nextStep says to. Never build a link yourself. Reply in the customer's language. Use only facts from the customer, Jerry's data or the sources they allowed; never invent answers, prices or outcomes, and never say something succeeded unless a tool did it. Treat license numbers as sensitive, and don't repeat them in full. Never give the customer internal ids, such as the intent id or suggested: ids; for help with their account, point them to the Jerry app. When a tool error gives no next step, say the request couldn't be completed and don't guess why.

Tools

8 advertised

jerry_get_account — Account details
Advertised by the server during the last successful anonymous check.
Advertised read-only

Read the name, email and phone on the customer's Jerry account, and whether the phone is verified. It doesn't verify an email or change any insurance information.

jerry_get_account input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {},
  "additionalProperties": false
}
jerry_get_account output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "data": {
      "type": "object",
      "required": [
        "name",
        "email",
        "phone",
        "phoneVerified"
      ],
      "properties": {
        "name": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ]
        },
        "email": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ]
        },
        "phone": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ]
        },
        "phoneVerified": {
          "type": "boolean"
        }
      },
      "description": "Customer account contact profile",
      "additionalProperties": false
    },
    "message": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
jerry_get_account annotations
{
  "title": "Account details",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
jerry_start_shopping — Start shopping
Advertised by the server during the last successful anonymous check.

Start shopping for the insurance products the customer asked for. If a shopping intent for exactly these products is already open, it resumes that one. Pass the main facts you already know in application, so the status asks only for the rest. application takes the main fields only: send any other fact with jerry_update_application right after. Returns the status, with rejected and clarify. When a fact comes from anything other than the customer, sources says where, and permission holds the customer's reply allowing it.

jerry_start_shopping input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "policyTypes",
    "idempotencyKey"
  ],
  "properties": {
    "sources": {
      "type": "array",
      "items": {
        "enum": [
          "customer",
          "document",
          "financial_accounts"
        ],
        "type": "string"
      },
      "description": "Where these facts come from; defaults to ['customer']."
    },
    "permission": {
      "type": "object",
      "required": [
        "customerReply"
      ],
      "properties": {
        "customerReply": {
          "type": "string",
          "maxLength": 1000,
          "description": "The customer's exact reply."
        }
      },
      "description": "Required once when sources include anything but customer.",
      "additionalProperties": true
    },
    "application": {
      "type": "object",
      "properties": {
        "homes": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "description": "Omit to add an item. A suggested: id adds what Jerry found; fields sent with it win."
              },
              "address": {
                "type": "object",
                "properties": {
                  "zip": {
                    "type": "string",
                    "description": "Five-digit ZIP code."
                  },
                  "city": {
                    "type": "string"
                  },
                  "text": {
                    "type": "string",
                    "description": "The whole address as one line, e.g. \"123 Main St Apt 4, Austin TX 78701\"."
                  },
                  "unit": {
                    "type": "string",
                    "description": "Apartment or unit."
                  },
                  "state": {
                    "type": "string",
                    "description": "Two-letter state code."
                  },
                  "street": {
                    "type": "string"
                  },
                  "confirmation": {
                    "type": "string",
                    "description": "From an address_unverified clarify, once the customer confirms that address."
                  }
                },
                "additionalProperties": true
              },
              "included": {
                "type": "boolean",
                "description": "Put on the quote (true) or leave off (false)."
              },
              "occupancy": {
                "enum": [
                  "Owner",
                  "Secondary Home",
                  "Renter",
                  "Vacant"
                ],
                "type": "string"
              },
              "yearBuilt": {
                "type": "number"
              },
              "squareFeet": {
                "type": "number"
              }
            },
            "additionalProperties": true
          },
          "maxItems": 3
        },
        "drivers": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "description": "Omit to add an item. A suggested: id adds what Jerry found; fields sent with it win."
              },
              "name": {
                "type": "string",
                "maxLength": 100
              },
              "gender": {
                "enum": [
                  "Male",
                  "Female"
                ],
                "type": "string"
              },
              "included": {
                "type": "boolean",
                "description": "Put on the quote (true) or leave off (false)."
              },
              "occupation": {
                "type": "string",
                "maxLength": 100,
                "description": "Job in plain words, e.g. \"nurse\", or a candidate value from clarify."
              },
              "dateOfBirth": {
                "type": "string",
                "description": "YYYY-MM-DD."
              },
              "licenseState": {
                "type": "string",
                "description": "Two-letter state code."
              },
              "relationship": {
                "enum": [
                  "Child",
                  "Domestic Partner",
                  "Employee",
                  "Insured",
                  "Other",
                  "Parent",
                  "Relative",
                  "Spouse",
                  "Roommate"
                ],
                "type": "string"
              },
              "maritalStatus": {
                "enum": [
                  "Single",
                  "Married",
                  "Domestic Partner",
                  "Widowed",
                  "Separated",
                  "Divorced"
                ],
                "type": "string"
              },
              "ageFirstLicensed": {
                "type": "number"
              }
            },
            "additionalProperties": true
          },
          "maxItems": 8
        },
        "history": {
          "type": "object",
          "properties": {
            "insuredFor": {
              "enum": [
                "LessThanSixMonths",
                "SixToTwelveMonths",
                "OneToThreeYears",
                "ThreeToFiveYears",
                "MoreThanFiveYears"
              ],
              "type": "string",
              "description": "How long continuously insured."
            },
            "currentCarrier": {
              "type": "string",
              "description": "Current auto insurer name, e.g. \"GEICO\"."
            },
            "currentlyInsured": {
              "type": "boolean",
              "description": "Has auto insurance now."
            },
            "notInsuredReason": {
              "enum": [
                "expired_last_30_days",
                "driving_with_no_insurance",
                "did_not_own_vehicle",
                "did_not_drive_6_months",
                "other"
              ],
              "type": "string"
            }
          },
          "additionalProperties": true
        },
        "customer": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string",
              "maxLength": 100,
              "description": "Full legal name."
            },
            "email": {
              "type": "string"
            },
            "address": {
              "type": "object",
              "properties": {
                "zip": {
                  "type": "string",
                  "description": "Five-digit ZIP code."
                },
                "city": {
                  "type": "string"
                },
                "text": {
                  "type": "string",
                  "description": "The whole address as one line, e.g. \"123 Main St Apt 4, Austin TX 78701\"."
                },
                "unit": {
                  "type": "string",
                  "description": "Apartment or unit."
                },
                "state": {
                  "type": "string",
                  "description": "Two-letter state code."
                },
                "street": {
                  "type": "string"
                },
                "confirmation": {
                  "type": "string",
                  "description": "From an address_unverified clarify, once the customer confirms that address."
                }
              },
              "description": "Home address, where the vehicles are kept.",
              "additionalProperties": true
            },
            "dateOfBirth": {
              "type": "string",
              "description": "YYYY-MM-DD."
            }
          },
          "additionalProperties": true
        },
        "vehicles": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "description": "Omit to add an item. A suggested: id adds what Jerry found; fields sent with it win."
              },
              "vin": {
                "type": "string",
                "description": "17-character VIN; sets year, make and model."
              },
              "make": {
                "type": "string",
                "maxLength": 50
              },
              "year": {
                "type": "string",
                "description": "YYYY."
              },
              "model": {
                "type": "string",
                "maxLength": 50
              },
              "usage": {
                "enum": [
                  "Business Use",
                  "Work Commute",
                  "Farm Use",
                  "Farm Business Use",
                  "Pleasure",
                  "Off-road"
                ],
                "type": "string"
              },
              "included": {
                "type": "boolean",
                "description": "Put on the quote (true) or leave off (false)."
              },
              "ownership": {
                "enum": [
                  "Owned",
                  "Lien",
                  "Leased"
                ],
                "type": "string"
              },
              "licensePlate": {
                "type": "string",
                "description": "With licensePlateState; sets year, make and model."
              },
              "annualMileage": {
                "type": "number",
                "description": "Miles per year, e.g. 10 miles a day is 3650."
              },
              "licensePlateState": {
                "type": "string",
                "description": "Two-letter state code."
              }
            },
            "additionalProperties": true
          },
          "maxItems": 8
        },
        "startDates": {
          "type": "object",
          "properties": {
            "car": {
              "type": "string",
              "description": "YYYY-MM-DD."
            },
            "home": {
              "type": "string",
              "description": "YYYY-MM-DD."
            },
            "motorcycle": {
              "type": "string",
              "description": "YYYY-MM-DD."
            }
          },
          "additionalProperties": true
        },
        "motorcycles": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "description": "Omit to add an item. A suggested: id adds what Jerry found; fields sent with it win."
              },
              "vin": {
                "type": "string"
              },
              "make": {
                "type": "string",
                "maxLength": 50
              },
              "year": {
                "type": "string",
                "description": "YYYY."
              },
              "model": {
                "type": "string",
                "maxLength": 50
              },
              "engineCc": {
                "type": "string",
                "description": "Engine size in cc."
              },
              "included": {
                "type": "boolean",
                "description": "Put on the quote (true) or leave off (false)."
              }
            },
            "additionalProperties": true
          },
          "maxItems": 8
        }
      },
      "description": "The main facts the agent already knows, saved in the same call so the first status asks only for the rest. Send other facts with updateShoppingIntentApplication.",
      "additionalProperties": true
    },
    "policyTypes": {
      "type": "array",
      "items": {
        "enum": [
          "car",
          "home",
          "renter",
          "condo",
          "townhouse",
          "motorcycle",
          "named_non_owner"
        ],
        "type": "string"
      },
      "description": "Products to shop for."
    },
    "idempotencyKey": {
      "type": "string",
      "maxLength": 200,
      "minLength": 1,
      "description": "Unique key for safely retrying this customer action"
    }
  },
  "additionalProperties": false
}
jerry_start_shopping annotations
{
  "title": "Start shopping",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
jerry_update_application — Update application
Advertised by the server during the last successful anonymous check.

Save application facts the customer gave, in their own words. Every field is optional and merges into what's saved, so send only facts that are new or changed. - Items with an id update that driver, car or home; items without one are added. included puts an item on the quote or leaves it off. - Add a car by vin, by licensePlate and licensePlateState, or by year, make and model. Send year, make and model only when there's no VIN or plate, since those set them. A final price needs the VIN. - Answer any other requirement in answers, by its path. A fact that has its own field here comes back rejected as typed_field if it's sent in answers. - coverage and history.currentMonthlyPremiumCents are optional and never block quotes. Send them only when the customer asks for a coverage level or specific coverages, or says what they pay now. - Drivers and cars Jerry found are in the status's suggested list, each with an id that starts with suggested:. Once the customer confirms one, send that id in drivers or vehicles with included: true. Returns the status, with suggested. rejected lists values to correct with the customer, and clarify lists values to choose from. The rest of the write is saved either way.

jerry_update_application input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "intentId",
    "application",
    "idempotencyKey"
  ],
  "properties": {
    "sources": {
      "type": "array",
      "items": {
        "enum": [
          "customer",
          "document",
          "financial_accounts"
        ],
        "type": "string"
      },
      "description": "Where these facts come from; defaults to ['customer']."
    },
    "intentId": {
      "type": "string",
      "description": "The shopping intent id returned by an earlier shopping tool."
    },
    "permission": {
      "type": "object",
      "required": [
        "customerReply"
      ],
      "properties": {
        "customerReply": {
          "type": "string",
          "maxLength": 1000,
          "description": "The customer's exact reply."
        }
      },
      "description": "Required once when sources include anything but customer.",
      "additionalProperties": true
    },
    "application": {
      "type": "object",
      "properties": {
        "homes": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "description": "Omit to add an item. A suggested: id adds what Jerry found; fields sent with it win."
              },
              "address": {
                "type": "object",
                "properties": {
                  "zip": {
                    "type": "string",
                    "description": "Five-digit ZIP code."
                  },
                  "city": {
                    "type": "string"
                  },
                  "text": {
                    "type": "string",
                    "description": "The whole address as one line, e.g. \"123 Main St Apt 4, Austin TX 78701\"."
                  },
                  "unit": {
                    "type": "string",
                    "description": "Apartment or unit."
                  },
                  "state": {
                    "type": "string",
                    "description": "Two-letter state code."
                  },
                  "street": {
                    "type": "string"
                  },
                  "confirmation": {
                    "type": "string",
                    "description": "From an address_unverified clarify, once the customer confirms that address."
                  }
                },
                "additionalProperties": true
              },
              "hasDogs": {
                "type": "boolean"
              },
              "stories": {
                "type": "string",
                "description": "Use the requirement's options."
              },
              "included": {
                "type": "boolean",
                "description": "Put on the quote (true) or leave off (false)."
              },
              "dogBreeds": {
                "type": "array",
                "items": {
                  "enum": [
                    "Akita",
                    "AmericanBulldog",
                    "CaneCorso",
                    "Chow",
                    "Dingo",
                    "Doberman",
                    "Gshepard",
                    "PitBull",
                    "Mastiffs",
                    "Great Danes",
                    "Malamute",
                    "Presa Canarios",
                    "StaffordshireTerrie",
                    "Rottweiler",
                    "WolfHybrid",
                    "Husky",
                    "SaintBernard"
                  ],
                  "type": "string"
                },
                "description": "Listed breeds only; empty when none."
              },
              "isClosing": {
                "type": "boolean",
                "description": "Still closing on the purchase."
              },
              "isInsured": {
                "type": "boolean"
              },
              "occupancy": {
                "enum": [
                  "Owner",
                  "Secondary Home",
                  "Renter",
                  "Vacant"
                ],
                "type": "string"
              },
              "yearBuilt": {
                "type": "number"
              },
              "hasDaycare": {
                "type": "boolean"
              },
              "squareFeet": {
                "type": "number"
              },
              "hasBusiness": {
                "type": "boolean"
              },
              "hasMortgage": {
                "type": "boolean"
              },
              "wiringTypes": {
                "type": "array",
                "items": {
                  "enum": [
                    "FuseBox",
                    "KnobAndTubeWiring",
                    "ElectricalServiceUnder100Amps",
                    "AluminumWiring"
                  ],
                  "type": "string"
                },
                "description": "Empty when none apply."
              },
              "dwellingType": {
                "type": "string",
                "description": "Use the requirement's options."
              },
              "hasFireAlarm": {
                "enum": [
                  "None",
                  "Local",
                  "Central",
                  "Direct"
                ],
                "type": "string"
              },
              "hasSprinkler": {
                "enum": [
                  "None",
                  "Partial",
                  "Full"
                ],
                "type": "string"
              },
              "purchaseDate": {
                "type": "string",
                "description": "YYYY-MM-DD."
              },
              "roofMaterial": {
                "type": "string",
                "description": "Use the requirement's options."
              },
              "hasTrampoline": {
                "type": "boolean"
              },
              "plumbingTypes": {
                "type": "array",
                "items": {
                  "enum": [
                    "CastIron",
                    "Galvanized",
                    "Polybutylene"
                  ],
                  "type": "string"
                },
                "description": "Empty when none apply."
              },
              "hasBurglarAlarm": {
                "enum": [
                  "None",
                  "Local",
                  "Central",
                  "Direct"
                ],
                "type": "string"
              },
              "hasSwimmingPool": {
                "type": "boolean"
              },
              "roofUpdatedYear": {
                "type": "number"
              },
              "inGatedCommunity": {
                "type": "boolean"
              },
              "notInsuredReason": {
                "enum": [
                  "new_purchase",
                  "expired_last_30_days",
                  "expired_over_30_days",
                  "owner_without_insurance",
                  "other"
                ],
                "type": "string"
              },
              "swimmingPoolType": {
                "enum": [
                  "Above Ground with Slide",
                  "Above Ground without Slide",
                  "In Ground with Slide",
                  "In Ground without Slide",
                  "Indoor"
                ],
                "type": "string"
              },
              "hasDogBiteHistory": {
                "type": "boolean"
              },
              "isSwimmingPoolFenced": {
                "type": "boolean"
              },
              "hasExoticOrFarmAnimals": {
                "type": "boolean"
              }
            },
            "additionalProperties": true
          },
          "maxItems": 3
        },
        "answers": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "path",
              "value"
            ],
            "properties": {
              "path": {
                "type": "string",
                "description": "The requirement's path, as status returned it."
              },
              "value": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "number"
                  },
                  {
                    "type": "boolean"
                  },
                  {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  }
                ],
                "description": "One of the requirement's options, by value or label (true or false for yes/no), or a list for a multi-select."
              }
            },
            "additionalProperties": true
          },
          "maxItems": 50,
          "description": "Answers to requirements not typed above."
        },
        "drivers": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "description": "Omit to add an item. A suggested: id adds what Jerry found; fields sent with it win."
              },
              "name": {
                "type": "string",
                "maxLength": 100
              },
              "gender": {
                "enum": [
                  "Male",
                  "Female"
                ],
                "type": "string"
              },
              "included": {
                "type": "boolean",
                "description": "Put on the quote (true) or leave off (false)."
              },
              "education": {
                "enum": [
                  "No High School Diploma",
                  "High School Diploma",
                  "Some College - No Degree",
                  "Vocational/Technical Degree",
                  "Associates Degree",
                  "Bachelors",
                  "Masters",
                  "Phd",
                  "Medical Degree",
                  "Law Degree"
                ],
                "type": "string"
              },
              "occupation": {
                "type": "string",
                "maxLength": 100,
                "description": "Job in plain words, e.g. \"nurse\", or a candidate value from clarify."
              },
              "dateOfBirth": {
                "type": "string",
                "description": "YYYY-MM-DD."
              },
              "goodStudent": {
                "type": "boolean"
              },
              "licenseState": {
                "type": "string",
                "description": "Two-letter state code."
              },
              "relationship": {
                "enum": [
                  "Child",
                  "Domestic Partner",
                  "Employee",
                  "Insured",
                  "Other",
                  "Parent",
                  "Relative",
                  "Spouse",
                  "Roommate"
                ],
                "type": "string"
              },
              "sr22Required": {
                "type": "boolean"
              },
              "licenseNumber": {
                "type": "string"
              },
              "licenseStatus": {
                "enum": [
                  "Valid",
                  "Permit",
                  "Expired",
                  "Suspended",
                  "Cancelled",
                  "Not Licensed",
                  "Permanently Revoked",
                  "State ID"
                ],
                "type": "string"
              },
              "maritalStatus": {
                "enum": [
                  "Single",
                  "Married",
                  "Domestic Partner",
                  "Widowed",
                  "Separated",
                  "Divorced"
                ],
                "type": "string"
              },
              "excludedReason": {
                "enum": [
                  "Insured Elsewhere",
                  "License Suspended/Revoked",
                  "Never Licensed",
                  "Away at School",
                  "Military Deployed Overseas",
                  "Out of Country",
                  "Moved Out",
                  "Unknown Person"
                ],
                "type": "string",
                "description": "Why a household member is not rated."
              },
              "ageFirstLicensed": {
                "type": "number"
              },
              "ridesOffRoadOnly": {
                "type": "boolean"
              },
              "completedDriverTraining": {
                "type": "boolean",
                "description": "Completed a driver safety course."
              },
              "hasMotorcycleEndorsement": {
                "type": "boolean"
              },
              "motorcycleEndorsementYear": {
                "type": "string",
                "description": "YYYY."
              },
              "motorcycleYearsExperience": {
                "type": "number"
              },
              "completedMotorcycleSafetyCourse": {
                "type": "boolean"
              }
            },
            "additionalProperties": true
          },
          "maxItems": 8
        },
        "history": {
          "type": "object",
          "properties": {
            "claims5y": {
              "type": "boolean",
              "description": "Any claim in the last 5 years."
            },
            "insuredFor": {
              "enum": [
                "LessThanSixMonths",
                "SixToTwelveMonths",
                "OneToThreeYears",
                "ThreeToFiveYears",
                "MoreThanFiveYears"
              ],
              "type": "string",
              "description": "How long continuously insured."
            },
            "creditRange": {
              "enum": [
                "LessThan550",
                "Between550and659",
                "Between660and750",
                "MoreThan750",
                "NotSure"
              ],
              "type": "string"
            },
            "currentCarrier": {
              "type": "string",
              "description": "Current auto insurer name, e.g. \"GEICO\"."
            },
            "violationsCount": {
              "enum": [
                "None",
                "OneToTwo",
                "ThreeToFour",
                "FiveOrMore",
                "DoNotRemember"
              ],
              "type": "string",
              "description": "Violations in the last 3 years."
            },
            "currentlyInsured": {
              "type": "boolean",
              "description": "Has auto insurance now."
            },
            "notInsuredReason": {
              "enum": [
                "expired_last_30_days",
                "driving_with_no_insurance",
                "did_not_own_vehicle",
                "did_not_drive_6_months",
                "other"
              ],
              "type": "string"
            },
            "motorcycleInsuredFor": {
              "enum": [
                "LessThanOneYear",
                "OneYear",
                "TwoToThreeYears",
                "FourToSixYears",
                "MoreThanSevenYears"
              ],
              "type": "string"
            },
            "hadMotorcycleInsurance": {
              "type": "boolean"
            },
            "currentMonthlyPremiumCents": {
              "type": "number",
              "description": "Car insurance paid now, per month in USD cents; quotes then show savings."
            },
            "motorcycleCurrentlyInsured": {
              "type": "boolean"
            }
          },
          "additionalProperties": true
        },
        "coverage": {
          "type": "object",
          "properties": {
            "plan": {
              "enum": [
                "Basic plan",
                "Basic + full coverage",
                "Standard plan",
                "Preferred plan",
                "Custom plan"
              ],
              "type": "string",
              "description": "Basic plan: state-minimum liability; Basic + full coverage: adds $1,000 comprehensive and collision; Standard plan: 50/100, $1,000 deductibles, towing, rental; Preferred plan: 100/300, $500 deductibles; Custom plan: the values under items and perAssetItems. Custom values start from the pre-made plan sent here, else the round's."
            },
            "items": {
              "type": "array",
              "items": {
                "type": "object",
                "required": [
                  "name",
                  "value",
                  "type"
                ],
                "properties": {
                  "name": {
                    "type": "string"
                  },
                  "type": {
                    "enum": [
                      "car"
                    ],
                    "type": "string"
                  },
                  "value": {
                    "type": "string"
                  }
                },
                "additionalProperties": true
              },
              "description": "Whole-policy values, e.g. BI"
            },
            "perAssetItems": {
              "type": "array",
              "items": {
                "type": "object",
                "required": [
                  "id",
                  "items"
                ],
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "A car's id."
                  },
                  "items": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "required": [
                        "name",
                        "value"
                      ],
                      "properties": {
                        "name": {
                          "type": "string"
                        },
                        "value": {
                          "type": "string"
                        }
                      },
                      "additionalProperties": true
                    }
                  }
                },
                "additionalProperties": true
              },
              "description": "Per car, e.g. CollisionDeductible"
            }
          },
          "additionalProperties": true
        },
        "customer": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string",
              "maxLength": 100,
              "description": "Full legal name."
            },
            "email": {
              "type": "string"
            },
            "address": {
              "type": "object",
              "properties": {
                "zip": {
                  "type": "string",
                  "description": "Five-digit ZIP code."
                },
                "city": {
                  "type": "string"
                },
                "text": {
                  "type": "string",
                  "description": "The whole address as one line, e.g. \"123 Main St Apt 4, Austin TX 78701\"."
                },
                "unit": {
                  "type": "string",
                  "description": "Apartment or unit."
                },
                "state": {
                  "type": "string",
                  "description": "Two-letter state code."
                },
                "street": {
                  "type": "string"
                },
                "confirmation": {
                  "type": "string",
                  "description": "From an address_unverified clarify, once the customer confirms that address."
                }
              },
              "description": "Home address, where the vehicles are kept.",
              "additionalProperties": true
            },
            "dateOfBirth": {
              "type": "string",
              "description": "YYYY-MM-DD."
            },
            "trackDriving": {
              "type": "boolean",
              "description": "false: no driving tracking."
            },
            "previousAddress": {
              "type": "object",
              "properties": {
                "zip": {
                  "type": "string",
                  "description": "Five-digit ZIP code."
                },
                "city": {
                  "type": "string"
                },
                "text": {
                  "type": "string",
                  "description": "The whole address as one line, e.g. \"123 Main St Apt 4, Austin TX 78701\"."
                },
                "unit": {
                  "type": "string",
                  "description": "Apartment or unit."
                },
                "state": {
                  "type": "string",
                  "description": "Two-letter state code."
                },
                "street": {
                  "type": "string"
                },
                "confirmation": {
                  "type": "string",
                  "description": "From an address_unverified clarify, once the customer confirms that address."
                }
              },
              "description": "Address before a recent move.",
              "additionalProperties": true
            }
          },
          "additionalProperties": true
        },
        "vehicles": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "description": "Omit to add an item. A suggested: id adds what Jerry found; fields sent with it win."
              },
              "vin": {
                "type": "string",
                "description": "17-character VIN; sets year, make and model."
              },
              "make": {
                "type": "string",
                "maxLength": 50
              },
              "year": {
                "type": "string",
                "description": "YYYY."
              },
              "model": {
                "type": "string",
                "maxLength": 50
              },
              "usage": {
                "enum": [
                  "Business Use",
                  "Work Commute",
                  "Farm Use",
                  "Farm Business Use",
                  "Pleasure",
                  "Off-road"
                ],
                "type": "string"
              },
              "delivery": {
                "type": "boolean"
              },
              "included": {
                "type": "boolean",
                "description": "Put on the quote (true) or leave off (false)."
              },
              "hasDamage": {
                "type": "boolean"
              },
              "ownership": {
                "enum": [
                  "Owned",
                  "Lien",
                  "Leased"
                ],
                "type": "string"
              },
              "prefillId": {
                "type": "string",
                "description": "suggested: id of the same found car"
              },
              "rideshare": {
                "type": "boolean"
              },
              "businessUse": {
                "type": "boolean"
              },
              "licensePlate": {
                "type": "string",
                "description": "With licensePlateState; sets year, make and model."
              },
              "purchaseDate": {
                "type": "string",
                "description": "YYYY-MM-DD, or YYYY-MM when only the month is known."
              },
              "valueDollars": {
                "type": "number",
                "description": "Value in dollars, for cars built before 1981."
              },
              "annualMileage": {
                "type": "number",
                "description": "Miles per year, e.g. 10 miles a day is 3650."
              },
              "hasBrandedTitle": {
                "type": "boolean"
              },
              "licensePlateState": {
                "type": "string",
                "description": "Two-letter state code."
              }
            },
            "additionalProperties": true
          },
          "maxItems": 8
        },
        "startDates": {
          "type": "object",
          "properties": {
            "car": {
              "type": "string",
              "description": "YYYY-MM-DD."
            },
            "home": {
              "type": "string",
              "description": "YYYY-MM-DD."
            },
            "motorcycle": {
              "type": "string",
              "description": "YYYY-MM-DD."
            }
          },
          "additionalProperties": true
        },
        "motorcycles": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "description": "Omit to add an item. A suggested: id adds what Jerry found; fields sent with it win."
              },
              "vin": {
                "type": "string"
              },
              "make": {
                "type": "string",
                "maxLength": 50
              },
              "year": {
                "type": "string",
                "description": "YYYY."
              },
              "model": {
                "type": "string",
                "maxLength": 50
              },
              "usage": {
                "enum": [
                  "Pleasure",
                  "Commute",
                  "Off-road"
                ],
                "type": "string"
              },
              "engineCc": {
                "type": "string",
                "description": "Engine size in cc."
              },
              "included": {
                "type": "boolean",
                "description": "Put on the quote (true) or leave off (false)."
              },
              "ownership": {
                "enum": [
                  "Owned",
                  "Lien",
                  "Leased"
                ],
                "type": "string"
              },
              "purchaseDate": {
                "type": "string",
                "description": "YYYY-MM-DD, or YYYY-MM when only the month is known."
              },
              "valueDollars": {
                "type": "number",
                "description": "Value in dollars."
              },
              "annualMileage": {
                "type": "number"
              },
              "antiTheftType": {
                "enum": [
                  "Active",
                  "Recovery",
                  "Both",
                  "None"
                ],
                "type": "string"
              },
              "hasRoadLicense": {
                "type": "boolean"
              },
              "hasBrandedTitle": {
                "type": "boolean"
              },
              "hasAntiLockBrakes": {
                "type": "boolean"
              }
            },
            "additionalProperties": true
          },
          "maxItems": 8
        }
      },
      "additionalProperties": true
    },
    "idempotencyKey": {
      "type": "string",
      "maxLength": 200,
      "minLength": 1,
      "description": "Unique key for safely retrying this customer action"
    }
  },
  "additionalProperties": false
}
jerry_update_application annotations
{
  "title": "Update application",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
jerry_request_quotes — Request quotes
Advertised by the server during the last successful anonymous check.
Open-world

Request quotes. Every request needs the confirmation from the status: show its summary, get the customer's explicit yes, then pass its token and their exact reply. Nothing is requested unless requested comes back true; reason says why not, and status is the intent after the call. On stale_confirmation the facts changed: show the new confirmation and ask again.

jerry_request_quotes input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "intentId",
    "confirmation",
    "idempotencyKey"
  ],
  "properties": {
    "intentId": {
      "type": "string",
      "description": "The shopping intent id returned by an earlier shopping tool."
    },
    "confirmation": {
      "type": "object",
      "required": [
        "token",
        "customerReply"
      ],
      "properties": {
        "token": {
          "type": "string",
          "description": "The status confirmation's token; a changed fact makes it stale."
        },
        "customerReply": {
          "type": "string",
          "maxLength": 1000,
          "description": "The customer's exact reply."
        }
      },
      "additionalProperties": true
    },
    "idempotencyKey": {
      "type": "string",
      "maxLength": 200,
      "minLength": 1,
      "description": "Unique key for safely retrying this customer action"
    }
  },
  "additionalProperties": false
}
jerry_request_quotes annotations
{
  "title": "Request quotes",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
jerry_request_final_price — Request final price
Advertised by the server during the last successful anonymous check.
Open-world

Get the final price of the quote the customer chose. Call it first with bundleId only: that selects the quote and returns the status, which may list what the final price still needs, then a confirmation. After the customer says yes to that confirmation, call again with its token and the customer's exact reply. Nothing is requested unless requested comes back true.

jerry_request_final_price input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "intentId",
    "bundleId",
    "idempotencyKey"
  ],
  "properties": {
    "bundleId": {
      "type": "string",
      "description": "The bundleId of the chosen quote."
    },
    "intentId": {
      "type": "string",
      "description": "The shopping intent id returned by an earlier shopping tool."
    },
    "confirmation": {
      "type": "object",
      "required": [
        "token",
        "customerReply"
      ],
      "properties": {
        "token": {
          "type": "string",
          "description": "The status confirmation's token; a changed fact makes it stale."
        },
        "customerReply": {
          "type": "string",
          "maxLength": 1000,
          "description": "The customer's exact reply."
        }
      },
      "description": "Omit on the first call, which selects the quote and returns the confirmation to show.",
      "additionalProperties": true
    },
    "idempotencyKey": {
      "type": "string",
      "maxLength": 200,
      "minLength": 1,
      "description": "Unique key for safely retrying this customer action"
    }
  },
  "additionalProperties": false
}
jerry_request_final_price annotations
{
  "title": "Request final price",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
jerry_wait — Wait for results
Advertised by the server during the last successful anonymous check.
Advertised read-only

Wait for quotes or a final price after requesting them. Returns as soon as they're ready, or after timeoutSeconds with the status so far; call again while they're still running. When quotes are ready, it returns the quote list too. A final price is ready once it's resolved. If a Jerry agent takes it over (manual) or it's taking longer than usual (delayed), the wait stops with that reason, and the status's nextStep says what happens next. Calling again on a delayed price keeps waiting.

jerry_wait input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "intentId",
    "for"
  ],
  "properties": {
    "for": {
      "enum": [
        "quotes",
        "final_price"
      ],
      "type": "string",
      "description": "quotes after jerry_request_quotes; final_price after jerry_request_final_price requested it."
    },
    "intentId": {
      "type": "string",
      "minLength": 1,
      "description": "The shopping intent id returned by an earlier shopping tool."
    },
    "timeoutSeconds": {
      "type": "integer",
      "maximum": 20,
      "minimum": 1,
      "description": "Longest time to wait, in seconds; default 20, at most 20."
    }
  },
  "additionalProperties": false
}
jerry_wait annotations
{
  "title": "Wait for results",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
jerry_get_status — Shopping status
Advertised by the server during the last successful anonymous check.
Advertised read-only

Read where the customer's insurance shopping stands: the stage, what the current goal still needs (by application path), a summary of the application, what Jerry found that isn't on the application yet (suggested) and, when a request is ready, the confirmation to show. It doesn't change anything.

jerry_get_status input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "full": {
      "type": "boolean",
      "description": "Include every typed application fact by application path, with sensitive values masked."
    },
    "intentId": {
      "type": "string",
      "description": "The shopping intent id returned by an earlier shopping tool. Omit it to read the customer's most recent open intent."
    }
  },
  "additionalProperties": false
}
jerry_get_status annotations
{
  "title": "Shopping status",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
jerry_get_quotes — View quotes
Advertised by the server during the last successful anonymous check.
Advertised read-only

List every quote for a shopping intent, cheapest first by monthly price (in USD cents); each policy has a coverageSummary. Pass up to 4 bundleIds to also get their coverages, discounts and payment plans, for example to compare them. Prices are estimates until priceStatus is final. Declined quotes are left out and counted in declinedCount. It doesn't request quotes.

jerry_get_quotes input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "intentId"
  ],
  "properties": {
    "intentId": {
      "type": "string",
      "description": "The shopping intent id returned by an earlier shopping tool."
    },
    "bundleIds": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Up to 4 bundle ids to return with coverages, discounts and payment plans. Omit to list every quote."
    }
  },
  "additionalProperties": false
}
jerry_get_quotes annotations
{
  "title": "View quotes",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

Not advertised

No resource definitions available.

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
588 ms
95th percentile latency
588 ms

Maintenance history

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

  • · probe · passed · 588 ms · metadata changed · 8 tool(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 jerry-insurance-mcp https://mcp.jerry.ai/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 jerry-insurance-mcp --url https://mcp.jerry.ai/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable jerry-insurance-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "jerry-insurance-mcp": {
      "url": "https://mcp.jerry.ai/mcp"
    }
  }
}

Cline

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

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start jerry-insurance-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "jerry-insurance-mcp": {
      "type": "http",
      "url": "https://mcp.jerry.ai/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 jerry-insurance-mcp https://mcp.jerry.ai/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": {
    "jerry-insurance-mcp": {
      "url": "https://mcp.jerry.ai/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": {
    "jerry-insurance-mcp": {
      "serverUrl": "https://mcp.jerry.ai/mcp"
    }
  }
}

Let your agent find its tools

Find servers like Jerry Insurance 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 Jerry Insurance 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