Find air-conditioning service companies and book a visit: prices, free times, error-code hints.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
At the company chosen from find_companies (pass its `company`). Books the visit at a free time from check_availability. Only after the client confirmed the service, the time, the address and the price. The company messages the client (WhatsApp, or e-mail when given). Returns the request number and a token for get_request_status / cancel_request. Repeating the same call (same idempotency_key or the same data) returns the same booking — its token again only with the same idempotency_key, so send one to be able to retry.
Where the work is done: street, building, apartment, city.
The company: the `company` of a find_companies result.
The service key from list_services.
A slot_id from check_availability.
With the country code, e.g. +971 50 123 4567.
Language for names and labels: ru, es, en, ar, pt, fr, de, it, tr, id, vi, th. Default en.
How many units (air conditioners…) — only for services that count units. Default 1.
Answers to the service's questions: { question_id: option_id | [option_ids] | number | text }. Use the ids from list_services.
When company_info lists service_zones: the client's district as its zone id (e.g. "dubai:jlt"), or "other" when it is not in the list.
Optional: { brand, code } from diagnose — the technician sees it.
Optional: messages go to this e-mail instead of WhatsApp.
Optional, 8–100 of A-Z a-z 0-9 _ -: the same key never books twice.
Needed with diagnosis: the client agreed it is a hint, not a diagnosis.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
At the company chosen from find_companies (pass its `company`). Books the visit at a free time from check_availability. Only after the client confirmed the service, the time, the address and the price. The company messages the client (WhatsApp, or e-mail when given). Returns the request number and a token for get_request_status / cancel_request. Repeating the same call (same idempotency_key or the same data) returns the same booking — its token again only with the same idempotency_key, so send one to be able to retry.
| Argument | Type | Description |
|---|---|---|
| lang | string | Language for names and labels: ru, es, en, ar, pt, fr, de, it, tr, id, vi, th. Default en. |
| units | integer | How many units (air conditioners…) — only for services that count units. Default 1. |
| address* | string | Where the work is done: street, building, apartment, city. |
| answers | object | Answers to the service's questions: { question_id: option_id | [option_ids] | number | text }. Use the ids from list_services. |
| company* | string | The company: the `company` of a find_companies result. |
| service* | string | The service key from list_services. |
| slot_id* | integer | A slot_id from check_availability. |
| district | string | When company_info lists service_zones: the client's district as its zone id (e.g. "dubai:jlt"), or "other" when it is not in the list. |
| diagnosis | object | Optional: { brand, code } from diagnose — the technician sees it. |
| client_name* | string | |
| client_email | string | Optional: messages go to this e-mail instead of WhatsApp. |
| client_phone* | string | With the country code, e.g. +971 50 123 4567. |
| idempotency_key | string | Optional, 8–100 of A-Z a-z 0-9 _ -: the same key never books twice. |
| client_accepted_disclaimer | boolean | Needed with diagnosis: the client agreed it is a hint, not a diagnosis. |
{
"type": "object",
"required": [
"company",
"service",
"slot_id",
"client_name",
"client_phone",
"address"
],
"properties": {
"lang": {
"type": "string",
"description": "Language for names and labels: ru, es, en, ar, pt, fr, de, it, tr, id, vi, th. Default en."
},
"units": {
"type": "integer",
"minimum": 1,
"description": "How many units (air conditioners…) — only for services that count units. Default 1."
},
"address": {
"type": "string",
"description": "Where the work is done: street, building, apartment, city."
},
"answers": {
"type": "object",
"description": "Answers to the service's questions: { question_id: option_id | [option_ids] | number | text }. Use the ids from list_services.",
"additionalProperties": true
},
"company": {
"type": "string",
"description": "The company: the `company` of a find_companies result."
},
"service": {
"type": "string",
"description": "The service key from list_services."
},
"slot_id": {
"type": "integer",
"description": "A slot_id from check_availability."
},
"district": {
"type": "string",
"description": "When company_info lists service_zones: the client's district as its zone id (e.g. \"dubai:jlt\"), or \"other\" when it is not in the list."
},
"diagnosis": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"brand": {
"type": "string"
}
},
"description": "Optional: { brand, code } from diagnose — the technician sees it."
},
"client_name": {
"type": "string"
},
"client_email": {
"type": "string",
"description": "Optional: messages go to this e-mail instead of WhatsApp."
},
"client_phone": {
"type": "string",
"description": "With the country code, e.g. +971 50 123 4567."
},
"idempotency_key": {
"type": "string",
"description": "Optional, 8–100 of A-Z a-z 0-9 _ -: the same key never books twice."
},
"client_accepted_disclaimer": {
"type": "boolean",
"description": "Needed with diagnosis: the client agreed it is a hint, not a diagnosis."
}
}
}At the company chosen from find_companies (pass its `company`). Cancels the booking (only when the client asked to). Needs the token from book_appointment.
| Argument | Type | Description |
|---|---|---|
| token* | string | |
| company* | string | The company: the `company` of a find_companies result. |
{
"type": "object",
"required": [
"company",
"token"
],
"properties": {
"token": {
"type": "string"
},
"company": {
"type": "string",
"description": "The company: the `company` of a find_companies result."
}
}
}At the company chosen from find_companies (pass its `company`). Free start times for the service (with these answers and units — they set how long the work takes) over the next days, from tomorrow. Each time has a slot_id for book_appointment. Times are the company's local time.
| Argument | Type | Description |
|---|---|---|
| days | integer | How many days ahead to look. Default 7. |
| units | integer | How many units (air conditioners…) — only for services that count units. Default 1. |
| answers | object | Answers to the service's questions: { question_id: option_id | [option_ids] | number | text }. Use the ids from list_services. |
| company* | string | The company: the `company` of a find_companies result. |
| service* | string | The service key from list_services. |
{
"type": "object",
"required": [
"company",
"service"
],
"properties": {
"days": {
"type": "integer",
"maximum": 30,
"minimum": 1,
"description": "How many days ahead to look. Default 7."
},
"units": {
"type": "integer",
"minimum": 1,
"description": "How many units (air conditioners…) — only for services that count units. Default 1."
},
"answers": {
"type": "object",
"description": "Answers to the service's questions: { question_id: option_id | [option_ids] | number | text }. Use the ids from list_services.",
"additionalProperties": true
},
"company": {
"type": "string",
"description": "The company: the `company` of a find_companies result."
},
"service": {
"type": "string",
"description": "The service key from list_services."
}
}
}At the company chosen from find_companies (pass its `company`). The company: name, country and city, currency, languages, contacts, clients' rating, the districts it serves (main: fast arrival; secondary: next day or a call-out fee), today's date in its time zone and its booking page.
| Argument | Type | Description |
|---|---|---|
| lang | string | Language for names and labels: ru, es, en, ar, pt, fr, de, it, tr, id, vi, th. Default en. |
| company* | string | The company: the `company` of a find_companies result. |
{
"type": "object",
"required": [
"company"
],
"properties": {
"lang": {
"type": "string",
"description": "Language for names and labels: ru, es, en, ar, pt, fr, de, it, tr, id, vi, th. Default en."
},
"company": {
"type": "string",
"description": "The company: the `company` of a find_companies result."
}
}
}At the company chosen from find_companies (pass its `company`). A preliminary hint by the air conditioner's brand and the error code on its display: the probable cause (a breakdown type) and the company's starting price for it. It is not a diagnosis. Before giving it, tell the client it is an automatic hint, that the technician confirms the cause and the final price on site, and get their agreement — then pass client_accepted_disclaimer: true (also to book_appointment with the diagnosis). Brands: daikin, mitsubishi_electric, lg, samsung, gree, midea, panasonic, carrier, haier, tcl, other.
| Argument | Type | Description |
|---|---|---|
| code* | string | The code on the display, e.g. U4, E1, CH05. |
| lang | string | Language for names and labels: ru, es, en, ar, pt, fr, de, it, tr, id, vi, th. Default en. |
| brand* | string | Brand key (see the description), or "other". |
| company* | string | The company: the `company` of a find_companies result. |
| client_accepted_disclaimer* | boolean | The client agreed that this is an automatic hint, not a diagnosis. |
{
"type": "object",
"required": [
"company",
"brand",
"code",
"client_accepted_disclaimer"
],
"properties": {
"code": {
"type": "string",
"description": "The code on the display, e.g. U4, E1, CH05."
},
"lang": {
"type": "string",
"description": "Language for names and labels: ru, es, en, ar, pt, fr, de, it, tr, id, vi, th. Default en."
},
"brand": {
"type": "string",
"description": "Brand key (see the description), or \"other\"."
},
"company": {
"type": "string",
"description": "The company: the `company` of a find_companies result."
},
"client_accepted_disclaimer": {
"type": "boolean",
"description": "The client agreed that this is an automatic hint, not a diagnosis."
}
}
}Service companies in the Nadveo catalog, filtered by country (ISO code, e.g. AE), city, district, service and name, best first. Each has its districts (main: fast arrival; secondary: next day or a call-out fee), "from" prices, the next free day and clients' rating.
| Argument | Type | Description |
|---|---|---|
| city | string | The city, e.g. Dubai, Abu Dhabi, Sharjah (part of the name is enough). |
| query | string | Part of the company name. |
| trade | string | hvac = air conditioning and heating. |
| country | string | ISO 3166 code, e.g. AE, MX, ID, TH, VN. |
| service | string | maintenance = cleaning and service; repair = repairs and gas recharge; installation. |
| district | string | The client's district in that city, e.g. "JLT", "Dubai Marina", "Al Nahda" (part of the name is enough). |
{
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "The city, e.g. Dubai, Abu Dhabi, Sharjah (part of the name is enough)."
},
"query": {
"type": "string",
"description": "Part of the company name."
},
"trade": {
"enum": [
"hvac",
"repair",
"rental"
],
"type": "string",
"description": "hvac = air conditioning and heating."
},
"country": {
"type": "string",
"description": "ISO 3166 code, e.g. AE, MX, ID, TH, VN."
},
"service": {
"enum": [
"maintenance",
"repair",
"installation"
],
"type": "string",
"description": "maintenance = cleaning and service; repair = repairs and gas recharge; installation."
},
"district": {
"type": "string",
"description": "The client's district in that city, e.g. \"JLT\", \"Dubai Marina\", \"Al Nahda\" (part of the name is enough)."
}
}
}At the company chosen from find_companies (pass its `company`). Checks the client's answers and gives the price and the duration. If an answer is missing or wrong, "problem" says which question.
| Argument | Type | Description |
|---|---|---|
| lang | string | Language for names and labels: ru, es, en, ar, pt, fr, de, it, tr, id, vi, th. Default en. |
| units | integer | How many units (air conditioners…) — only for services that count units. Default 1. |
| answers | object | Answers to the service's questions: { question_id: option_id | [option_ids] | number | text }. Use the ids from list_services. |
| company* | string | The company: the `company` of a find_companies result. |
| service* | string | The service key from list_services. |
{
"type": "object",
"required": [
"company",
"service"
],
"properties": {
"lang": {
"type": "string",
"description": "Language for names and labels: ru, es, en, ar, pt, fr, de, it, tr, id, vi, th. Default en."
},
"units": {
"type": "integer",
"minimum": 1,
"description": "How many units (air conditioners…) — only for services that count units. Default 1."
},
"answers": {
"type": "object",
"description": "Answers to the service's questions: { question_id: option_id | [option_ids] | number | text }. Use the ids from list_services.",
"additionalProperties": true
},
"company": {
"type": "string",
"description": "The company: the `company` of a find_companies result."
},
"service": {
"type": "string",
"description": "The service key from list_services."
}
}
}At the company chosen from find_companies (pass its `company`). Where a booking stands: status, time, technician (once assigned), price. Needs the token from book_appointment.
| Argument | Type | Description |
|---|---|---|
| token* | string | |
| company* | string | The company: the `company` of a find_companies result. |
{
"type": "object",
"required": [
"company",
"token"
],
"properties": {
"token": {
"type": "string"
},
"company": {
"type": "string",
"description": "The company: the `company` of a find_companies result."
}
}
}At the company chosen from find_companies (pass its `company`). Every service with its starting price, how long it takes, whether it can be booked, and the questions the client answers (they set the price and the time). Questions may depend on an earlier answer (shown_if). "unknown_allowed" means "?" is a valid answer.
| Argument | Type | Description |
|---|---|---|
| lang | string | Language for names and labels: ru, es, en, ar, pt, fr, de, it, tr, id, vi, th. Default en. |
| company* | string | The company: the `company` of a find_companies result. |
{
"type": "object",
"required": [
"company"
],
"properties": {
"lang": {
"type": "string",
"description": "Language for names and labels: ru, es, en, ar, pt, fr, de, it, tr, id, vi, th. Default en."
},
"company": {
"type": "string",
"description": "The company: the `company` of a find_companies result."
}
}
}