Jerry

Jerry for AI assistants

Get and compare insurance quotes from 100+ insurers in your AI assistant, then buy in the Jerry app.

MCP endpointhttps://mcp.jerry.ai/mcpSign-inPhone number and codeTools8

What is Jerry?

Jerry is a licensed insurance broker and an app that helps you navigate insurance, maintenance, repairs, driver safety, and everything else that comes with owning a car or home. Think of us as a proactive assistant that helps you spend less time and money on the tedious parts of ownership.

As a broker, Jerry compares real quotes from 100+ insurers in minutes, surfaces every discount you qualify for, and lets you buy, bundle, or switch car, home, motorcycle, and renters policies right in the app. We also handle the car care that tends to slip through the cracks: maintenance reminders, repair quotes, and diagnostics.

With Jerry you get no spam, no unwanted phone calls, and we never share your data with third parties for marketing purposes. Sign up once – it takes less than 5 minutes – and we’ll take care of the rest.

Use Jerry in your AI assistant

Ask your AI assistant to shop insurance for you. Jerry gets quotes from 100+ insurers, your assistant compares them with you, and you buy the policy you pick in the Jerry app.

In Claude

  1. Go to Customize > Connectors and click Add custom connector.
  2. Enter the URL https://mcp.jerry.ai/mcp and click Add. If Claude asks how to identify itself, choose Register automatically.
  3. Click Connect next to Jerry and sign in.

In other assistants

Add Jerry as a connector (some assistants call it an app or a remote MCP server) with the URL https://mcp.jerry.ai/mcp, then sign in.

Signing in

Sign in with your phone number and the code Jerry texts you. If you don't have a Jerry account yet, you can create one there. Then review what the assistant will be allowed to do, and allow it.

What you can ask

  • Find me cheaper car insurance. I'm paying about $180 a month with Geico for my 2019 Honda Civic.
  • Get me car insurance quotes for me and my wife. We have two cars and live in Austin.
  • Compare the three cheapest quotes Jerry found. What's different about the coverage and discounts?
  • I want full coverage with a $500 deductible. Can you get me quotes for that?
  • Get me the final price on the Progressive quote.
  • I just moved into an apartment. Can you get me renters insurance quotes through Jerry?

What happens next

  • Your assistant asks only for what Jerry still needs. You can also paste or attach a declarations page to save typing.
  • Before anything goes to insurers, your assistant shows you a summary and waits for your yes.
  • Quotes take a few minutes. Prices are estimates until you ask for the final price on the quote you like.
  • To buy, open the quote in the Jerry app.
  • Jerry keeps rechecking your rates afterwards and lets you know when it finds savings.

To stop your assistant using Jerry, remove the Jerry connector in its settings. In Claude, that's Customize > Connectors.

For developers and platforms

Jerry shops car, motorcycle, home, condo, townhouse and renters insurance across 100+ insurers. This MCP server lets an AI assistant do that for a Jerry customer: fill in the application, get quotes, compare them, and get the final price on the quote the customer picks.

Buying a policy isn't part of it. That continues in the Jerry app, and the tools return links that open it. Prices are estimates until a final price comes back.

Connect

EnvironmentMCP endpoint
ProductionThis serverhttps://mcp.jerry.ai/mcp
Testhttps://mcp.stage.jerry.ai/mcp

The server speaks MCP over Streamable HTTP and is stateless: there's no session, and every request carries its own bearer token. initialize and tools/list work without a token. Every tool call needs a token for a Jerry customer.

Authentication

Customers sign in with OAuth 2.1, so the assistant acts for one customer and sees only their data.

  1. Call a tool without a token. The server answers 401 with WWW-Authenticate: Bearer resource_metadata="…", scope="…". A client that starts sign-in only when connecting fails can send X-Jerry-Require-Sign-In: true on every request, and initialize then gets the same 401.
  2. Read the protected resource metadata at https://mcp.jerry.ai/.well-known/oauth-protected-resource. It names the resource, https://mcp.jerry.ai/mcp, and the authorization server, https://auth-micro.prod.getjerry.com/customer.
  3. Register a client with dynamic client registration at https://auth-micro.prod.getjerry.com/customer/oauth/register. Platforms that need a pre-registered client can ask Jerry for one.
  4. Run the authorization code flow with PKCE (S256). The customer signs in with their phone number and a one-time code, or creates an account, then reviews and approves the permissions.
  5. Ask for offline_access to get a refresh token. Refresh tokens rotate on every use. Reusing an old one ends the whole grant.
  6. Revoke with the RFC 7009 endpoint at https://auth-micro.prod.getjerry.com/customer/oauth/revoke. Revoking either token ends the grant at once.

Scopes

Each tool needs one scope, and the metadata lists exactly the scopes these tools use. Every scope identifier starts with https://api.jerry.ai/app/, so quotes:read is https://api.jerry.ai/app/quotes:read.

ScopeAllowsTools
account.profile:readRead the contact details on the customer's Jerry account.jerry_get_account
insurance.profile:writeUpdate the customer's insurance application and create their profile.jerry_update_application
quotes.final_prices:writeRequest a final price from an insurer.jerry_request_final_price
quotes:readRead the customer's quotes and quote progress.jerry_get_quotes
quotes:writeRequest insurance quotes from insurers.jerry_request_quotes
shopping.intents:readRead the customer's shopping rounds, plans and applications.jerry_wait jerry_get_status
shopping.intents:writeCreate and update shopping rounds and confirm application reviews.jerry_start_shopping

Tools

Every tool has a title and read, destructive, idempotent and open-world hints. This list comes from the server itself, so it always matches tools/list.

Read: Reads only. Changes nothing.Write: Saves to the customer's application.Sends to insurers: Sends the customer's information to insurers. Needs their yes.

Account details

jerry_get_accountRead

Reads the name, email and phone on the customer's Jerry account.

What the agent sees

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.

Scope: https://api.jerry.ai/app/account.profile:read

Start shopping

jerry_start_shoppingWrite

Starts shopping for the insurance the customer wants, or picks up where they left off, and saves what they've said so far.

What the agent sees

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.

Scope: https://api.jerry.ai/app/shopping.intents:write

Update application

jerry_update_applicationWrite

Saves what the customer tells you: drivers, cars, address, coverage and insurance history. It also adds the drivers and cars Jerry found, once the customer confirms them.

What the agent sees

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.

Scope: https://api.jerry.ai/app/insurance.profile:write

Request quotes

jerry_request_quotesSends to insurers

Asks insurers for quotes, after the customer has seen the summary and said yes.

What the agent sees

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.

Scope: https://api.jerry.ai/app/quotes:write

Request final price

jerry_request_final_priceSends to insurers

Selects the quote the customer picked and, after their yes, asks the insurer for its final price.

What the agent sees

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.

Scope: https://api.jerry.ai/app/quotes.final_prices:write

Wait for results

jerry_waitRead

Waits while quotes or a final price come in, and returns them as soon as they're ready.

What the agent sees

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.

Scope: https://api.jerry.ai/app/shopping.intents:read

Shopping status

jerry_get_statusRead

Shows where shopping stands: what's still needed, what Jerry found, and the summary to confirm when a request is ready.

What the agent sees

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.

Scope: https://api.jerry.ai/app/shopping.intents:read

View quotes

jerry_get_quotesRead

Lists the quotes, cheapest first, and the coverages, discounts and payment plans of up to 4 of them to compare.

What the agent sees

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.

Scope: https://api.jerry.ai/app/quotes:read

How requests work

  1. Start with jerry_start_shopping, then save what the customer tells you with jerry_update_application. The status says what's still needed.
  2. Requests that reach insurers need the customer's yes. When the application is ready, the status includes a confirmation with a summary and a token. Show the summary, get an explicit yes, then call jerry_request_quotes or jerry_request_final_price with the token and the customer's exact reply. If the facts change, the status shows a new confirmation.
  3. Quotes take a few minutes. Call jerry_wait until they're ready, then use jerry_get_quotes to compare them.
  4. Write tools take an idempotencyKey. The same key with the same input returns the first result and doesn't repeat the request. The same key with different input is refused (IDEMPOTENCY_KEY_REUSED), so use a new key for each new request. If a call with the key is still running or its outcome is unknown (REQUEST_IN_PROGRESS_OR_UNKNOWN, ACTION_OUTCOME_UNKNOWN), the key stays blocked: check jerry_get_status to see whether it happened, and send it again with a new key only if it didn't. A refused call frees its key, so the same request can be sent again.

Errors and limits

StatusMeansWhat to do
401No token, or the token is expired or revoked (invalid_token).Refresh, or sign the customer in again.
403The token lacks the tool's scope (insufficient_scope).Ask the customer to approve that scope.
400The request is malformed.Fix the request.
429A request limit was reached.Wait, then try again.
503Sign-in checks are briefly unavailable.Try again shortly.

A tool that can't do what was asked returns a result with isError and a plain message saying what to change. Write tools also return rejected and clarify lists for values to correct or choose.

Limits: 120 requests a minute for each customer and client, and 12 quote or final price requests an hour for each customer.

Privacy and support

Jerry uses what the customer provides to fill in their application and get their quotes, and shares it with insurers only to quote and price. It keeps the customer's yes on each request as the record of their consent. See the privacy policy, the terms of use and Jerry's insurance licenses.

Questions or problems: hi@jerry.ai.