Skip to main content
Every type of AIP draft 0.1, generated from spec/schema.ts and the registry server’s registry/src/schema.ts through schema.json. The sections follow spec/schema.ts, then registry/src/schema.ts from R1. The rules in the descriptions use the RFC 2119 keywords.

1. Identity of the extension

ConformanceLevel

Conformance level that a seller declares.
  • 1 Inform: get_distributor, list_products
  • 2 Quote: level 1, plus quote
  • 3 Subscribe: level 2, plus submit_application and get_operation
A server that declares a level MUST implement every tool of that level and of the levels below it. Type: one of 1, 2, 3.

AipSettings

Settings object of the extension. A server puts it under capabilities.extensions["org.agenticinsuranceprotocol/aip"] in its MCP server/discover response, and in its AipDocument.

AipDocument

The AIP document of a seller, at https://{domain}/.well-known/aip.json. It leads from a domain to its MCP server. The seller MUST serve it from that host, with no redirect to another host, so that the document proves that the seller controls the domain.

2. Common types

CountryCode

ISO 3166-1 alpha-2 country code, upper case. Type: string. Pattern: ^[A-Z]{2}$.

SubdivisionCode

ISO 3166-2 subdivision code, upper case, for example “US-CA” for California. Type: string. Pattern: ^[A-Z]{2}-[A-Z0-9]{1,3}$.

CurrencyCode

ISO 4217 currency code. Type: string. Pattern: ^[A-Z]{3}$.

Lei

Legal Entity Identifier (ISO 17442): 18 letters or digits, then 2 check digits. Type: string. Pattern: ^[A-Z0-9]{18}[0-9]{2}$.

LanguageTag

BCP 47 language tag, for example fr or en-GB. Type: string. Pattern: ^[a-zA-Z]{2,3}(-[a-zA-Z0-9]{2,8})*$.

DateString

Calendar date, ISO 8601. Type: string (date).

DateTimeString

Date and time with offset, ISO 8601. Type: string (date-time).

Url

Type: string (uri).

Decimal

A decimal number as a string, so that no value is lost to floating point, for example “12.90”. Type: string. Pattern: ^-?[0-9]+(\.[0-9]+)?$.

Money

ProductLine

Product line. Servers SHOULD use a value of KnownProductLine. Other values MUST be lower case with underscores. Type: string. Pattern: ^[a-z][a-z0-9_]*$.

KnownProductLine

Common product lines. Type: one of pet, home, renters, motor, travel, health, life, funeral, borrower_insurance, professional_liability, general_liability, business_owners_policy, workers_compensation.

InsuredFamily

Family of what a product insures: a kind of person, or a kind of good. Servers SHOULD use a value of KnownInsuredFamily. Other values MUST be lower case with underscores. Type: string. Pattern: ^[a-z][a-z0-9_]*$.

KnownInsuredFamily

Families that the known product lines need. Type: one of person, organisation, pet, dwelling, contents, vehicle.

3. Distributor (level 1)

DistributorRole

Role of a party in the distribution chain. The provider roles are in ProviderRole. Type: ProviderRole or broker or agent or mga or comparator.

RegisterIdentifierType

Kind of public register identifier. Type: one of orias_number, siren, fca_frn, npn, naic_cocode, lei, other.

Licence

One entry in a public register that gives the right to sell a product, or to carry its risk.

GetDistributorParams

Params of get_distributor. No params. Type: object.

GetDistributorResult

4. Products and documents (level 1)

ProviderRole

Role of the party that carries the risk. Type: insurer.

ProviderRef

The party that carries the risk.

Product

ProductTier

One level of cover of a product. The price comes only from quote, because it depends on the customer.

UnderwritingScope

The risks a product can cover. list_products gives it with no customer data, so that an agent can drop a product that cannot cover the customer before it asks a question. geography and insured are the structured part. A server MUST NOT return an offer for a risk outside the structured part. An agent MUST NOT send answers to quote for a product whose structured part excludes the customer. conditions holds the rest.

Geography

Where the insured person lives, or where the insured good is.

InsuredType

A family of insured, and the kinds of it that a product covers.

DocumentType

Kind of document. Type: one of pre_contract_information, terms_of_business, other, ipid, general_conditions, demands_and_needs.

InsuranceDocument

A document of a product or of an offer. list_products gives the documents of each product in Product.documents, and quote the documents of each offer in Offer.documents.

ListProductsParams

Params of list_products. Each filter is optional. The server MUST return only the products whose line and underwriting scope match every filter given. With country, subdivision, insured_family and insured_kind, the filters cover the whole structured part of the scope, so the agent has only the conditions left to check.

ListProductsResult

5. Quote (level 2)

AnswersSchema

A JSON Schema (2020-12) object that describes the questions of a product. Each property is one question. Each property SHOULD have a description in plain words, so that the agent can ask the question. A question MUST NOT ask for an identity number, a bank account or card number, a tax number, health data of a person or a password. The seller asks for them on its own page: the approval page of submit_application, or the handoff_url of an offer.

Answers

Answers keyed by property name in answers_schema. Type: map of any.

AnswerOrigin

Who produced the value of an answer. Type: one of customer, agent, third_party.

AnswerSource

Where one answer comes from. validated_by_customer is true when the customer confirmed this value before the agent sent it. It is always true when the customer gave the value. An agent MUST NOT set validated_by_customer to true when the customer did not validate that answer. origin: customer origin: agent origin: third_party

AnswerSources

The source of each answer, keyed like answers. An agent MUST give a source for each answer, and no source for a key that has no answer. Otherwise the server returns answers_invalid. Type: map of AnswerSource.

QuoteParams

Params of quote. The agent sends the answers that it has, even none. When answers are missing, the server returns needs_input with the questions of the product and the missing fields. The agent asks the customer, and calls quote again with all the answers. This one loop replaces the tools that give the questions, and the multi-step flow tools (action, stateUpdates, sessionId) that most servers use. The server keeps the answers and their sources with each offer, until its valid_until. submit_application takes them from the offer, so the agent does not send them again.

FieldIssue

Offer

One priced offer. A seller can return several offers: one per tier, per provider, or per duration. Each offer prices one tier of its product. Its price can change after the insurer’s checks. The firm price is the one that the approval page shows. When a server implements quote, an agent MUST take the price, the cover, the limits and the excess that it shows the customer from the offer, and MUST NOT take them from a page made for people.

QuoteComplete

A quote with its priced offers, or with the reason why there is none.

QuoteNeedsInput

The questions of the product, and the answers that are still missing or wrong.

QuoteResult

Type: QuoteComplete or QuoteNeedsInput.

NoOffer

Why no offer is possible.

NoOfferReason

Stable reason why no offer is possible. Servers SHOULD use a value of KnownNoOfferReason. Other values MUST be lower case with underscores. Type: string. Pattern: ^[a-z][a-z0-9_]*$.

KnownNoOfferReason

Common reason codes. outside_underwriting_scope means that the risk is outside the product’s underwriting scope: its geography, its insured types or its conditions. A quote for a risk outside the structured part MUST get this reason. Type: one of outside_underwriting_scope, risk_not_accepted, age_not_accepted, breed_not_accepted, claims_history_not_accepted.

6. Premium and cover

PremiumPeriod

Type: one of month, quarter, half_year, year, single.

Premium

CoverLimit

ExcessBasis

What one excess applies to. Type: one of per_claim, per_year, per_condition.

CoverSummary

WaitingPeriod

The days after the start date before a claim for one cover is paid.

Fee

A fee that the customer pays on top of the premium, for example a policy fee or a broker fee.

ProductOption

An option the customer can add (optional cover, extra service).

Pricing

The price of an offer, and the cover it buys.

7. Applications (level 3)

PartyRole

Role of a party in the application. Type: one of subscriber, payer, insured, beneficiary.

Party

A person or organisation in the application. Data in a party MUST be limited to what the product needs. Identity numbers MUST NOT be here.

SubmitApplicationParams

Params of submit_application. The offer comes from a complete quote. The server takes the answers, their sources and the options from that quote, so the agent does not send them again. When the customer wants to change an answer, the agent calls quote again, and applies for an offer of the new quote.

SubmitApplicationResult

An application that waits for the customer. submit_application commits nothing. The customer approves the application on the seller’s page at url, then signs and pays on the same site. When the client declares MCP URL-mode elicitation, the server SHOULD open the page with a URL-mode elicitation of url. Otherwise the agent gives the customer url. The seller MUST keep what the customer approved, with the answers and their sources, the price and the documents, for the period that the law requires.

ApplicationKey

The key to read an application with get_operation. The server returns it only in the result of submit_application. It MUST hold at least 128 bits of randomness. It is not in the approval page, so the agent keeps it to itself. Type: string.

ApplicationState

Where an application is. Type: one of waiting, approved, refused, expired.

GetOperationParams

Params of get_operation.

GetOperationResult

Result of get_operation. When the application_key is not the key of the application, the server returns application_not_found.

8. Errors

AipErrorCode

Type: one of invalid_params, rate_limited, unavailable, not_supported, not_licensed, product_not_found, answers_invalid, offer_not_found, offer_expired, application_not_found.

AipError

Error returned in an MCP tool result with isError: true, in structuredContent.error, with the same JSON as text in content.

9. Tool index

ToolName

Type: one of get_distributor, list_products, quote, submit_application, get_operation.

ToolSignatures

Params and result type of each tool.

R1. Common types

DomainName

Host name, lower case, with no scheme, port or path, for example “pets.example.com”. Type: string. Pattern: ^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)+$.

RegisterIdentifier

An entry in a public register.

SourceAccess

How the registry reads a public register. Type: one of api, bulk_file, web_page.

RegisterSource

A public register that the registry reads.

R2. Licence check

VerifyLicenceParams

Params of verify_licence. They name a company and a market, never a person.

LicenceStatus

Status of one register entry, as the registry reads it. Type: one of active, pending, lapsed, suspended, revoked, not_found, name_mismatch.

LicenceCheck

The result of reading one entry in one public register. How the registry tied the domain to the entries. Only “register” and “confirmed” support “licensed”. Type: one of register, confirmed, claimed, not_linked.

NotLicensedReason

Type: one of no_entry, licence_not_active, name_mismatch, role_not_covered, subdivision_not_covered, line_not_covered.

UnknownReason

Type: one of country_not_covered, subdivision_required, register_unavailable, subject_not_identified, domain_not_linked.

LicenceVerdict

verdict: licensed verdict: not_licensed verdict: unknown

VerifyLicenceResult

Result of verify_licence. Keep it with the record of the sale.

ListedDistributor

A server that the registry lists.

SearchDistributorsParams

Params of search_distributors. They describe a market, never a person.

SearchDistributorsResult

Result of search_distributors. The order carries no meaning: never show it as a ranking.

R4. Country rules

GetCountryRulesParams

Params of get_country_rules.

RulesFile

One rules file of the AIP skill: Markdown with a YAML front matter that gives the same values as these fields.

GetCountryRulesResult

Result of get_country_rules: the file of the country first. Follow every file.

R5. Errors

RegistryErrorCode

Type: one of country_not_covered.

RegistryError

Error of a registry tool, in structuredContent.error of a result with isError: true.

R6. Registry server

RegistrySettings

Settings of the registry extension, in its MCP server/discover response.