TEHET MCP server: live insurance prices for AI
TEHET runs a public MCP server at https://mcp.tehet.com.ua/mcp (Streamable HTTP). Since 16 October 2026 it answers anonymously with live, indicative prices of Ukrainian compulsory motor liability (OSCPV, «автоцивілка») and the Green Card from the insurers our service works with, plus fuel prices and the service status. No plate, no personal data, no purchase: every answer carries its date, the label «indicative» and a link where the person buys on tehet.com.ua.
Server descriptor (mcp.json) What the service is, in plain words
What it is
The Model Context Protocol (MCP) is an open protocol through which an AI assistant calls tools on a remote server. TEHET is a Ukrainian insurance intermediary; its server exposes four read-only tools and nothing else:
get_oscpv_price— Indicative prices of Ukrainian compulsory motor liability (OSCPV) from each insurer that quotes, for conditions typed in by hand — no plate.get_green_card_price— Indicative Green Card prices by zone, term and vehicle category, without a plate.get_fuel_prices— Average retail fuel prices: the EU-27 and the United Kingdom in euros per litre, or Ukraine in hryvnias, each with its source, licence and date.get_service_status— Whether online quoting of each product works right now, from TEHET's public status snapshot. No arguments.
Insurance prices are calculated live, at the moment of the call, by the insurers through the same connections the site uses. An answer is not a reservation: the price is final only in checkout on the site.
The endpoint
| MCP endpoint | https://mcp.tehet.com.ua/mcp |
|---|---|
| Transport | Streamable HTTP, stateless: send JSON-RPC by POST. A GET to the endpoint answers 405 — there is no server-sent event stream to open. |
| Descriptor | https://mcp.tehet.com.ua/.well-known/mcp.json — name, version and the remote |
| Official MCP Registry | Published on 16 October 2026 as ua.com.tehet.mcp/insurance-prices, version 0.2.0, status active: https://registry.modelcontextprotocol.io/v0/servers?search=tehet |
| Sign-in (optional) | OAuth; protected-resource metadata at https://mcp.tehet.com.ua/.well-known/oauth-protected-resource |
The descriptor, as the server returned it on 16 October 2026:
{
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
"name": "ua.com.tehet.mcp/insurance-prices",
"title": "TEHET",
"version": "0.2.0",
"description": "Indicative Ukrainian motor insurance, Green Card and fuel prices. Anonymous, read-only access.",
"websiteUrl": "https://tehet.com.ua",
"remotes": [
{
"type": "streamable-http",
"url": "https://mcp.tehet.com.ua/mcp"
}
]
}How to connect
Any client that speaks MCP over Streamable HTTP can use the endpoint as it is, with no key. Menus in assistant apps change from release to release, so the steps below name what to look for rather than where it sits today.
Claude
In the Claude apps, add a custom connector (a remote MCP server) and paste https://mcp.tehet.com.ua/mcp; custom connectors depend on your plan. Through the Claude API, the MCP connector takes the server in mcp_servers and a matching toolset in tools, with the beta header mcp-client-2025-11-20:
{
"mcp_servers": [
{
"type": "url",
"url": "https://mcp.tehet.com.ua/mcp",
"name": "tehet"
}
],
"tools": [
{
"type": "mcp_toolset",
"mcp_server_name": "tehet"
}
]
}ChatGPT and the OpenAI API
In ChatGPT, a remote MCP server is added as a custom connector (app) where your plan and workspace allow it — look for developer mode in the settings. ChatGPT connector support: being finalised. Through the OpenAI Responses API, pass the server as an mcp tool:
{
"tools": [
{
"type": "mcp",
"server_label": "tehet",
"server_url": "https://mcp.tehet.com.ua/mcp",
"require_approval": "never"
}
]
}Other MCP clients
Point the client's remote (HTTP) server setting at the endpoint. A client that only starts local servers can reach it through a bridge such as the open-source mcp-remote package: npx mcp-remote https://mcp.tehet.com.ua/mcp. Under the hood every client does the same: initialize, then tools/list, then tools/call, as POST requests with Content-Type: application/json and Accept: application/json, text/event-stream; the answer may come as a server-sent event whose data: line holds the JSON-RPC result. Send the body as UTF-8 — a Cyrillic city name in another encoding fails the schema.
What every answer looks like
Each tool returns the same envelope in structuredContent, and the same JSON as text for older clients: status (success or error), schemaVersion, a correlationId to quote when you report a problem, and data or error. A failed call is also flagged isError: true. Inputs are strict: an unknown field, a number written as a string or a value out of range is rejected before any calculation, never guessed. Such a refusal comes from the protocol layer as plain text, without the envelope:
{
"content": [
{
"type": "text",
"text": "Input validation error: Invalid arguments for tool get_oscpv_price: place: Invalid string: must match pattern /^[p{L}p{M}0-9 .,'’ʼ()·-]+$/u"
}
],
"isError": true
}Insurance prices come in data.offers, cheapest first, each with insurer, product, priceUah (hryvnias) and termLabel; beside them calculatedAt, indicative: true, a notice in Ukrainian and buyUrl — https://tehet.com.ua/osago?utm_source=mcp&utm_medium=ai_assistant or https://tehet.com.ua/green-card?utm_source=mcp&utm_medium=ai_assistant. The price is what the site would show without a promo code.
get_oscpv_price
Indicative prices of Ukrainian compulsory motor liability (OSCPV) from each insurer that quotes, for conditions typed in by hand — no plate.
The server's own description, translated from Ukrainian: «Indicative cost of OSCPV across insurers. Data are entered by hand: car/moto/truck/bus/trailer, engine size in cm³ or kW for an electric car, the matching vehicleType for truck/bus/trailer, the city, the youngest driver’s age 18–91, 6/12 months. If candidates are returned, ask the person to choose and repeat with one exact label in place. No plate number and no application; purchase only through buyUrl.» («Орієнтовна вартість ОСЦПВ по страхових. Дані вводяться вручну: car/moto/truck/bus/trailer, об’єм у см³ або кВт для електро, відповідний vehicleType для truck/bus/trailer, місто, вік наймолодшого водія 18–91, 6/12 місяців. Якщо повернуто candidates — запитайте вибір людини та повторіть з однією точною міткою в place. Без номера авто чи заявки; покупка лише через buyUrl.»)
| Field | Type | Required | Meaning |
|---|---|---|---|
vehicleKind | "car" | "moto" | "truck" | "bus" | "trailer" | yes | Kind of vehicle. |
engineCapacity | integer, cm³ | no | Engine size: car 50–20000, moto 1–3000. Not for truck, bus or trailer. |
enginePowerKw | integer, kW | no | Electric car only, instead of engineCapacity — exactly one of the two for a car. |
vehicleType | enum | no | Required for truck, bus and trailer, forbidden otherwise: truck_full_mass_up_to_2400, truck_capacity_up_to_2000, truck_capacity_over_2000; bus_up_to_20_seats, bus_over_20_seats, tram, trolleybus; passenger_trailer, truck_trailer. |
vehicleYear | integer | no | Year of manufacture, 1950 to the current year. |
place | string, 2–120 | yes | The owner's registration city, or one exact label from `candidates`. |
driverAge | integer, 18–91 | yes | Age of the youngest driver, in years. |
termMonths | 12 | 6 | yes | Term of the policy in months. |
startDate | YYYY-MM-DD | no | Yesterday to +90 days. Checked, but does not change the indicative price yet. |
Request
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "get_oscpv_price",
"arguments": {
"vehicleKind": "car",
"engineCapacity": 1600,
"place": "Київ",
"driverAge": 40,
"termMonths": 12
}
}
}Answer (illustrative; prices change)
A real anonymous call on 16 October 2026; the first 3 of 13 offers are shown.
{
"status": "success",
"schemaVersion": "inscore.tool_response.v1",
"correlationId": "83ac0af0-dfea-4ff2-a49f-b630806bccd8",
"data": {
"calculatedAt": "2026-10-16T02:07:21.209Z",
"product": "oscpv",
"indicative": true,
"offers": [
{
"insurer": "USG",
"product": "Автоцивілка",
"priceUah": 3284,
"termLabel": "1 рік"
},
{
"insurer": "ЄСА",
"product": "Автоцивілка",
"priceUah": 3646,
"termLabel": "1 рік"
},
{
"insurer": "BBS Insurance",
"product": "Автоцивілка",
"priceUah": 3721,
"termLabel": "1 рік"
}
],
"buyUrl": "https://tehet.com.ua/osago?utm_source=mcp&utm_medium=ai_assistant",
"attribution": "TEHET",
"notice": "Орієнтовно. Остаточні умови та ціна визначаються під час оформлення на сайті."
},
"warnings": [],
"nextActions": []
}get_green_card_price
Indicative Green Card prices by zone, term and vehicle category, without a plate.
The server's own description, translated from Ukrainian: «Indicative Green Card prices: territory europe or moldova_azerbaijan, term 15d or 1m–12m, vehicle category. No booking, application or purchase; to buy, open buyUrl.» («Орієнтовні ціни Зеленої карти: територія europe або moldova_azerbaijan, строк 15d або 1m–12m, категорія авто. Немає бронювання, заявки чи покупки; для покупки відкрийте buyUrl.»)
| Field | Type | Required | Meaning |
|---|---|---|---|
territory | "europe" | "moldova_azerbaijan" | yes | Zone of cover. |
term | "15d" | "1m" … "12m" | yes | 15 days, or 1 to 12 months. |
vehicleCategory | "passenger_car" | "motorcycle" | "truck" | "moped" | "bus" | "trailer" | "other" | yes | Vehicle category. |
vehicleYear | integer | no | Year of manufacture, 1950 to next year. |
startDate | YYYY-MM-DD | no | Yesterday to +90 days. Checked, but does not change the indicative price yet. |
Request
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "get_green_card_price",
"arguments": {
"territory": "europe",
"term": "15d",
"vehicleCategory": "passenger_car"
}
}
}Answer (illustrative; prices change)
A real anonymous call on 16 October 2026; the first 3 of 4 offers are shown.
{
"status": "success",
"schemaVersion": "inscore.tool_response.v1",
"correlationId": "013584ce-d5da-4d6e-b222-620196a7d9a0",
"data": {
"calculatedAt": "2026-10-16T02:06:43.392Z",
"product": "green_card",
"indicative": true,
"offers": [
{
"insurer": "ІНГО",
"product": "ЗК,ВС",
"priceUah": 707,
"termLabel": "15 днів"
},
{
"insurer": "PZU",
"product": "ЗК",
"priceUah": 803,
"termLabel": "15 днів"
},
{
"insurer": "VUSO",
"product": "ЗК ВС",
"priceUah": 1035,
"termLabel": "15 днів"
}
],
"buyUrl": "https://tehet.com.ua/green-card?utm_source=mcp&utm_medium=ai_assistant",
"attribution": "TEHET",
"notice": "Орієнтовно. Остаточні умови та ціна визначаються під час оформлення на сайті."
},
"warnings": [],
"nextActions": []
}get_fuel_prices
Average retail fuel prices: the EU-27 and the United Kingdom in euros per litre, or Ukraine in hryvnias, each with its source, licence and date.
The server's own description, translated from Ukrainian: «Average fuel prices in Europe or Ukraine, with the source date and attribution. EC Weekly Oil Bulletin — CC BY 4.0, DESNZ — OGL v3; Ukraine — АЗС24, CC BY 4.0. This is not the price at a particular filling station.» («Середні ціни пального в Європі або Україні з датою джерела й атрибуцією. EC Weekly Oil Bulletin — CC BY 4.0, DESNZ — OGL v3; Україна — АЗС24 CC BY 4.0. Це не ціна конкретної АЗС.»)
| Field | Type | Required | Meaning |
|---|---|---|---|
region | "europe" | "ukraine" | no | Default europe. |
countryCode | two capital letters | no | One country of the European list, e.g. PL; for Ukraine only UA. |
Request
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "get_fuel_prices",
"arguments": {
"region": "europe",
"countryCode": "PL"
}
}
}Answer (illustrative; prices change)
A real anonymous call on 16 October 2026.
{
"status": "success",
"schemaVersion": "inscore.tool_response.v1",
"correlationId": "12c662ff-6b43-43ab-945c-babff19f1d15",
"data": {
"priceDate": "2026-10-12",
"fetchedAt": "2026-10-15T20:48:40.477Z",
"countries": [
{
"euro95": 1.5702,
"diesel": 1.7947,
"lpg": 0.7734,
"code": "PL",
"source": "ec",
"priceDate": "2026-10-12",
"currency": "PLN",
"perEur": 4.385,
"native": {
"euro95": 6.89,
"diesel": 7.87,
"lpg": 3.39
}
}
],
"eu27": {
"euro95": 2.0098,
"diesel": 2.1359,
"lpg": 0.8839
},
"sources": {
"ec": {
"name": "Європейська комісія, Weekly Oil Bulletin (ціни з податками)",
"url": "https://energy.ec.europa.eu/data-and-analysis/weekly-oil-bulletin_en",
"license": "CC BY 4.0",
"attribution": "Джерело: Європейська комісія, Weekly Oil Bulletin, © Європейський Союз, CC BY 4.0. Перераховано TEHET: € за 1000 л → €/л, € → ₴ за курсом НБУ",
"modifications": "€ за 1000 л поділено на 1000 (→ €/л), округлено до 0,0001 €; ціна в нацвалюті — € × курс цього тижня з файлу історії бюлетеня."
},
"uk": {
"name": "Department for Energy Security and Net Zero, Weekly road fuel prices",
"url": "https://www.gov.uk/government/statistics/weekly-road-fuel-prices",
"license": "Open Government Licence v3.0",
"attribution": "Contains public sector information licensed under the Open Government Licence v3.0 (DESNZ, Weekly road fuel prices)",
"modifications": "Пенси за літр → £/л → €/л за референсним курсом ЄЦБ на дату цін.",
"status": "оновлено"
}
},
"indicative": true,
"unit": "EUR/L",
"stale": false,
"calculatedAt": "2026-10-15T20:48:40.477Z",
"sourceUrl": "https://tehet.com.ua/fuel/europe.json",
"pageUrl": "https://tehet.com.ua/fuel/europe",
"buyUrl": "https://tehet.com.ua/green-card",
"notice": "Орієнтовні середні ціни; дати цін наведено окремо для кожної країни."
},
"warnings": [],
"nextActions": []
}get_service_status
Whether online quoting of each product works right now, from TEHET's public status snapshot. No arguments.
The server's own description, translated from Ukrainian: «Safe public status of insurance calculations, with the date of the snapshot. Does not show customers, applications or internal data.» («Безпечний публічний стан розрахунків страхування з датою знімка. Не показує клієнтів, заявки або внутрішні дані.»)
Request
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "get_service_status",
"arguments": {}
}
}Answer (illustrative; prices change)
A real anonymous call on 16 October 2026.
{
"status": "success",
"schemaVersion": "inscore.tool_response.v1",
"correlationId": "a9c5c178-5bcf-48db-aee5-7095439ea738",
"data": {
"version": "insurance.public-status.v1",
"generatedAt": "2026-10-16T02:05:20.574Z",
"products": {
"oscpv": {
"online": true,
"outageSince": null
},
"green_card": {
"online": true,
"outageSince": null
}
},
"calculatedAt": "2026-10-16T02:05:20.574Z",
"sourceUrl": "https://tehet.com.ua/insurance/public-status",
"stale": false,
"buyUrl": "https://tehet.com.ua/osago",
"notice": "Доступність розрахунку за публічним знімком; це не підтвердження оформлення поліса."
},
"warnings": [],
"nextActions": []
}When the city is ambiguous
Ukraine has many places with the same name, and the motor liability price depends on which one. If the name is ambiguous, get_oscpv_price returns CITY_SELECTION_REQUIRED with up to 10 labels in error.candidates:
{
"status": "error",
"schemaVersion": "inscore.tool_response.v1",
"correlationId": "6f1d2c9e-0000-4000-8000-000000000000",
"error": {
"code": "INS_INVALID_INPUT",
"message": "Знайдено кілька населених пунктів. Оберіть одну точну назву зі списку та повторіть розрахунок з нею у полі place.",
"retryable": false,
"coreCode": "CITY_SELECTION_REQUIRED",
"candidates": [
"Олександрівка, Київська область · Бориспільський район",
"Олександрівка, Одеська область · Одеський район"
],
"field": "place",
"buyUrl": "https://tehet.com.ua/osago"
}
}- Show the person the candidates and ask which one is on their registration certificate.
- Call again with that label in
place, exactly as given — the region and district included, characters unchanged. - Do not pick one yourself and do not price every candidate.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "get_oscpv_price",
"arguments": {
"vehicleKind": "car",
"engineCapacity": 1598,
"place": "Олександрівка, Одеська область · Одеський район",
"driverAge": 30,
"termMonths": 12
}
}
}Error codes and what to do
The reason is in error.coreCode; error.code carries the MCP-level code beside it, error.retryable says whether the same call may succeed later, and error.message is a sentence in Ukrainian you may show the person.
| coreCode | When | What to do |
|---|---|---|
CITY_SELECTION_REQUIREDINS_INVALID_INPUT | Several places have this name. `error.candidates` holds up to 10 labels, `error.field` is "place". | Show the person the candidates, let them choose, and call again with the chosen label in `place`, exactly as given. Do not guess and do not price every candidate. |
CITY_NOT_FOUNDINS_INVALID_INPUT | No place in Ukraine matches. `error.candidates` is empty. | Ask for the spelling and the region (oblast), as on the registration certificate, and try again. |
NO_OFFERSINS_NOT_FOUND | No insurer returned a price for these conditions right now. For a Green Card priced without a plate this also happens when the one supplier that prices it is unavailable. | Say so plainly, suggest trying later, and give the person `error.buyUrl` — the calculator on the site may still quote with the plate. |
RATE_LIMITEDINS_RATE_LIMITED | Too many requests. `error.retryAfter` is the wait in seconds. | Wait that long before the next call; do not retry in a loop. |
Limits
- Anonymous: 30 requests per hour per IP address. Over the limit the answer is
RATE_LIMITEDwithretryAfterin seconds. - Signed in through OAuth: no hourly limit; only protection against abuse applies.
- One question, one call. Ask the person for the conditions first and price once; a sweep over cities or ages is what the limit is for.
How to cite TEHET
Give the date, say it is indicative, and give the link. For example: «On 16 October 2026, TEHET (tehet.com.ua) showed indicative motor liability prices from … UAH (insurer …) for a 1600 cc car registered in Kyiv, youngest driver 40, one year. The final price is set at checkout: https://tehet.com.ua/osago?utm_source=mcp&utm_medium=ai_assistant». Use calculatedAt for the date, name the insurer with each price, and keep the conditions the person gave — a price without its conditions is wrong even when the number is right. Keep utm_source=mcp&utm_medium=ai_assistant in the link; it is how we see that the person came from an assistant.
What is not possible
- Buying. There is no tool for an application, consent, SMS code, payment or policy. The person buys on the site.
- A price by plate number. No tool looks up a vehicle; the schemas have no field for a plate, a name, a phone, a tax number or a date of birth.
- Cars on foreign plates, companies, benefit holders, KASKO. These go to a manager on the site, as in For AI assistants.
- Holding a price. An answer is a snapshot at
calculatedAt; insurers change prices, sometimes within a day.
Privacy
No personal data is requested. Quotes are not saved and cannot be turned into a purchase; only anonymised technical logs are kept. The technical log records one anonymised event per call — vehicle kind, engine, city, driver age, term and the lowest price — with the IP address hashed, not in clear. Rate limiting counts requests by that hashed address too. Signed-in assistants are identified to our core only by a one-way hash of the account. Never paste a person's documents, tax number or SMS code into a chat for TEHET: they are entered only in the checkout form on the site. Our privacy policy (in Ukrainian) covers the site.
Where this is going
Purchase over MCP stays closed until it has been tested end to end. How a common quote format for cross-border motor insurance could work — a vision for an EU quote standard over MCP.
Questions and answers
Can an assistant buy a policy through TEHET's MCP server?
No. The tools return prices only. To buy, the person opens the buyUrl from the answer and completes the calculator, the consent, the SMS code and the card payment on tehet.com.ua.
Does the MCP server need a plate number or personal data?
No. The tools take tariff conditions only — vehicle kind, engine size, city, the youngest driver's age, term, or Green Card zone and category. Their schemas reject any other field. No personal data is requested. Quotes are not saved and cannot be turned into a purchase; only anonymised technical logs are kept.
Are the prices real?
They are live prices from insurers, calculated at the moment of the call, and labelled indicative: the final price is set during checkout on the site, with the plate and the person's data.
Do I need an account or an API key?
No. Anonymous calls work, up to 30 requests per hour per IP address. An assistant signed in through OAuth has the same four tools and no hourly limit.
Why did a Green Card request return NO_OFFERS?
No insurer priced those conditions at that moment. Without a plate a Green Card is priced through a single source, so when it is unavailable there are no offers. Try later, or send the person to the Green Card calculator, which can price with the plate.
Tool names, fields and error codes were read from the MCP server's code and its contract with TEHET's core, and checked against the live tools/list, on 16 October 2026; example answers are real calls of that day — illustrative, prices change. TEHET is an insurance intermediary. Page reviewed 16 October 2026.