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_applicationandget_operation
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.
DomainLink
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.
R3. Search
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.