Nadveo — book air-conditioning service
Find air-conditioning service companies and book a visit: prices, free times, error-code hints.
Should I use this
Quality & Safety
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"service-booking": {
"url": "https://nadveo.com/mcp"
}
}
}Remote endpoints
https://nadveo.com/mcpstreamable-httpWhat it can do
Tool inventory
Tools (9)
🟢company_info(company, lang)
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.
Input Schema
{
"type": "object",
"properties": {
"company": {
"type": "string",
"description": "The company: the `company` of a find_companies result."
},
"lang": {
"type": "string",
"description": "Language for names and labels: ru, es, en, ar, pt, fr, de, it, tr, id, vi, th. Default en."
}
},
"required": [
"company"
]
}🟢list_services(company, lang)
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.
Input Schema
{
"type": "object",
"properties": {
"company": {
"type": "string",
"description": "The company: the `company` of a find_companies result."
},
"lang": {
"type": "string",
"description": "Language for names and labels: ru, es, en, ar, pt, fr, de, it, tr, id, vi, th. Default en."
}
},
"required": [
"company"
]
}🟢get_quote(company, service, units, answers, lang)
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.
Input Schema
{
"type": "object",
"properties": {
"company": {
"type": "string",
"description": "The company: the `company` of a find_companies result."
},
"service": {
"type": "string",
"description": "The service key from list_services."
},
"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
},
"lang": {
"type": "string",
"description": "Language for names and labels: ru, es, en, ar, pt, fr, de, it, tr, id, vi, th. Default en."
}
},
"required": [
"company",
"service"
]
}🟢check_availability(company, service, units, answers, days)
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.
Input Schema
{
"type": "object",
"properties": {
"company": {
"type": "string",
"description": "The company: the `company` of a find_companies result."
},
"service": {
"type": "string",
"description": "The service key from list_services."
},
"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
},
"days": {
"type": "integer",
"minimum": 1,
"maximum": 30,
"description": "How many days ahead to look. Default 7."
}
},
"required": [
"company",
"service"
]
}🟢diagnose(company, brand, code, client_accepted_disclaimer, lang)
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.
Input Schema
{
"type": "object",
"properties": {
"company": {
"type": "string",
"description": "The company: the `company` of a find_companies result."
},
"brand": {
"type": "string",
"description": "Brand key (see the description), or \"other\"."
},
"code": {
"type": "string",
"description": "The code on the display, e.g. U4, E1, CH05."
},
"client_accepted_disclaimer": {
"type": "boolean",
"description": "The client agreed that this is an automatic hint, not a diagnosis."
},
"lang": {
"type": "string",
"description": "Language for names and labels: ru, es, en, ar, pt, fr, de, it, tr, id, vi, th. Default en."
}
},
"required": [
"company",
"brand",
"code",
"client_accepted_disclaimer"
]
}🔴book_appointment(company, service, units, answers, slot_id, ...)
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.
Input Schema
{
"type": "object",
"properties": {
"company": {
"type": "string",
"description": "The company: the `company` of a find_companies result."
},
"service": {
"type": "string",
"description": "The service key from list_services."
},
"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
},
"slot_id": {
"type": "integer",
"description": "A slot_id from check_availability."
},
"client_name": {
"type": "string"
},
"client_phone": {
"type": "string",
"description": "With the country code, e.g. +971 50 123 4567."
},
"address": {
"type": "string",
"description": "Where the work is done: street, building, apartment, city."
},
"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."
},
"client_email": {
"type": "string",
"description": "Optional: messages go to this e-mail instead of WhatsApp."
},
"lang": {
"type": "string",
"description": "Language for names and labels: ru, es, en, ar, pt, fr, de, it, tr, id, vi, th. Default en."
},
"idempotency_key": {
"type": "string",
"description": "Optional, 8–100 of A-Z a-z 0-9 _ -: the same key never books twice."
},
"diagnosis": {
"type": "object",
"description": "Optional: { brand, code } from diagnose — the technician sees it.",
"properties": {
"brand": {
"type": "string"
},
"code": {
"type": "string"
}
}
},
"client_accepted_disclaimer": {
"type": "boolean",
"description": "Needed with diagnosis: the client agreed it is a hint, not a diagnosis."
}
},
"required": [
"company",
"service",
"slot_id",
"client_name",
"client_phone",
"address"
]
}🟢get_request_status(company, token)
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.
Input Schema
{
"type": "object",
"properties": {
"company": {
"type": "string",
"description": "The company: the `company` of a find_companies result."
},
"token": {
"type": "string"
}
},
"required": [
"company",
"token"
]
}🔴cancel_request(company, token)
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.
Input Schema
{
"type": "object",
"properties": {
"company": {
"type": "string",
"description": "The company: the `company` of a find_companies result."
},
"token": {
"type": "string"
}
},
"required": [
"company",
"token"
]
}🟢find_companies(country, city, district, service, trade, ...)
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.
Input Schema
{
"type": "object",
"properties": {
"country": {
"type": "string",
"description": "ISO 3166 code, e.g. AE, MX, ID, TH, VN."
},
"city": {
"type": "string",
"description": "The city, e.g. Dubai, Abu Dhabi, Sharjah (part of the name is enough)."
},
"district": {
"type": "string",
"description": "The client's district in that city, e.g. \"JLT\", \"Dubai Marina\", \"Al Nahda\" (part of the name is enough)."
},
"service": {
"type": "string",
"enum": [
"maintenance",
"repair",
"installation"
],
"description": "maintenance = cleaning and service; repair = repairs and gas recharge; installation."
},
"trade": {
"type": "string",
"enum": [
"hvac",
"repair",
"rental"
],
"description": "hvac = air conditioning and heating."
},
"query": {
"type": "string",
"description": "Part of the company name."
}
}
}Community
Evidence