{
    "mcp": {
        "version": "2024-11-05",
        "server": {
            "name": "RAWMID WEB MCP",
            "version": "1.5.0"
        },
        "endpoints": {
            "jsonrpc": "https://madeindream.com/index.php?route=webmcp/webmcp"
        },
        "capabilities": {
            "tools": {
                "listChanged": false
            }
        },
        "tools": [
            {
                "name": "rawmid_search",
                "description": "Универсальный поиск по сайту RAWMID: товары, рецепты и статьи. Для товаров — фильтры страницы каталога: category_id (или query), цена price_min/price_max, in_stock, on_sale, manufacturer_id, характеристики attributes (по названию или attribute_id: точное значение, список значений или диапазон min/max — «Количество лотков» ≥ 10, «Мощность пиковая (Вт)» ≥ 1000), сортировка sort и страницы page/limit. include_filters: true возвращает допустимые фильтры для найденного (filters: категории с количеством, диапазон цен, бренды, характеристики со значениями) — вызывайте так первым, чтобы узнать имена характеристик и category_id. Цены числом в currency; в results — in_stock, availability, rating, has_variants (варианты исполнения — product_get). Доступен всем посетителям сайта.",
                "inputSchema": {
                    "type": "object",
                    "properties": {
                        "query": {
                            "type": "string",
                            "description": "Что ищем (например «дегидратор»). Для товаров можно опустить, если задан category_id"
                        },
                        "type": {
                            "type": "string",
                            "enum": [
                                "product",
                                "recipe",
                                "article"
                            ],
                            "description": "Type of search: product, recipe, or article"
                        },
                        "category_id": {
                            "type": "integer",
                            "description": "Только товары: категория (с подкатегориями) — id из filters.categories или page_context"
                        },
                        "price_min": {
                            "type": "number",
                            "description": "Только товары: цена от (в валюте витрины, с учётом акции)"
                        },
                        "price_max": {
                            "type": "number",
                            "description": "Только товары: цена до"
                        },
                        "in_stock": {
                            "type": "boolean",
                            "description": "Только товары: только в наличии"
                        },
                        "on_sale": {
                            "type": "boolean",
                            "description": "Только товары: только по акции"
                        },
                        "manufacturer_id": {
                            "type": "integer",
                            "description": "Только товары: бренд — id из filters.manufacturers"
                        },
                        "attributes": {
                            "type": "array",
                            "description": "Только товары: условия по характеристикам, все должны выполняться. Элемент: {name или attribute_id} и value | values (любое из) | min/max (числовой диапазон)",
                            "items": {
                                "type": "object",
                                "properties": {
                                    "attribute_id": {
                                        "type": "integer",
                                        "description": "id характеристики из filters.attributes"
                                    },
                                    "name": {
                                        "type": "string",
                                        "description": "Название характеристики, как в filters.attributes (можно начало названия)"
                                    },
                                    "value": {
                                        "type": "string",
                                        "description": "Точное значение (например «Белый»)"
                                    },
                                    "values": {
                                        "type": "array",
                                        "items": {
                                            "type": "string"
                                        },
                                        "description": "Подходит любое из значений"
                                    },
                                    "min": {
                                        "type": "number",
                                        "description": "Числовое значение не меньше"
                                    },
                                    "max": {
                                        "type": "number",
                                        "description": "Числовое значение не больше"
                                    }
                                },
                                "additionalProperties": false
                            }
                        },
                        "sort": {
                            "type": "string",
                            "enum": [
                                "relevance",
                                "price_asc",
                                "price_desc",
                                "rating",
                                "newest",
                                "name"
                            ],
                            "description": "Только товары: порядок выдачи, по умолчанию relevance",
                            "default": "relevance"
                        },
                        "include_filters": {
                            "type": "boolean",
                            "description": "Только товары: вернуть допустимые фильтры для найденного (filters)",
                            "default": false
                        },
                        "page": {
                            "type": "integer",
                            "description": "Номер страницы, с 1",
                            "default": 1
                        },
                        "limit": {
                            "type": "integer",
                            "description": "Результатов на странице (1-50)",
                            "default": 10
                        }
                    },
                    "required": [
                        "type"
                    ],
                    "additionalProperties": false
                }
            },
            {
                "name": "product_stock",
                "description": "Наличие товара на этой витрине — только «есть/нет»: in_stock и availability («Есть в наличии» или статус вроде «Ожидаем поставку»), как видит покупатель на карточке; точные остатки по складам не раскрываются. Можно искать по product_id, артикулу (model) или названию товара.",
                "inputSchema": {
                    "type": "object",
                    "properties": {
                        "product_id": {
                            "type": "integer",
                            "description": "ID товара (если известен)"
                        },
                        "model": {
                            "type": "string",
                            "description": "Артикул товара (model)"
                        },
                        "name": {
                            "type": "string",
                            "description": "Название товара (частичное совпадение)"
                        }
                    },
                    "required": [],
                    "additionalProperties": false
                }
            },
            {
                "name": "reward_balance",
                "description": "Получение остатка бонусных баллов в личном кабинете. Требует авторизации покупателя на сайте.",
                "inputSchema": {
                    "type": "object",
                    "properties": {},
                    "required": [],
                    "additionalProperties": false
                }
            },
            {
                "name": "cart_get",
                "description": "Состав корзины текущего покупателя: товары, количество, цены, сумма и ссылка на корзину. Работает и для гостя (корзина в сессии браузера).",
                "inputSchema": {
                    "type": "object",
                    "properties": {},
                    "required": [],
                    "additionalProperties": false
                }
            },
            {
                "name": "order_list",
                "description": "Последние заказы авторизованного покупателя: номер, дата, статус, сумма, ссылка на заказ в личном кабинете. Требует авторизации на сайте.",
                "inputSchema": {
                    "type": "object",
                    "properties": {
                        "limit": {
                            "type": "integer",
                            "description": "Сколько последних заказов вернуть (1-20)",
                            "default": 5
                        }
                    },
                    "required": [],
                    "additionalProperties": false
                }
            },
            {
                "name": "checkout_get",
                "description": "Состояние оформления заказа в текущей сессии: товары и итоги, данные покупателя и адрес (заполненные или подставленные по региону), доступные способы доставки с ценой и сроком (code для checkout_set_shipping), способы оплаты (code для checkout_set_payment), выбранные способы, готовность к оформлению (ready) и список того, чего не хватает (missing, с именем тула, который это заполняет). Каждый вызов пересчитывает доставку и итоги заново — вызывать перед checkout_submit, чтобы подтвердить сумму. Работает и для гостя.",
                "inputSchema": {
                    "type": "object",
                    "properties": {},
                    "required": [],
                    "additionalProperties": false
                }
            },
            {
                "name": "order_get",
                "description": "Заказ покупателя: статус, состав, итоги, способы доставки и оплаты, адрес, можно ли отменить (can_cancel). Без order_id — заказ, только что оформленный в этой сессии (в том числе гостем). С order_id — только свой заказ авторизованного покупателя; чужой номер отвечает «не найден».",
                "inputSchema": {
                    "type": "object",
                    "properties": {
                        "order_id": {
                            "type": "integer",
                            "description": "Номер заказа; без него — последний заказ этой сессии"
                        }
                    },
                    "required": [],
                    "additionalProperties": false
                }
            },
            {
                "name": "order_cancel",
                "description": "Отменить свой заказ. Меняет статус заказа на «Отменён» и уведомляет покупателя — как кнопка «Отменить» в личном кабинете. Только для авторизованного покупателя и только пока заказ не взят в работу (can_cancel в order_get); иначе вернёт ошибку с причиной. Действие необратимо: без confirm: true ничего не меняет, а возвращает confirmation_required с суммой (amount_text) и статусом заказа — покажите их покупателю и после согласия повторите с confirm: true. В ответе before/after (статус до и после), warnings, side_effects. Повторный вызов для уже отменённого заказа безопасен.",
                "inputSchema": {
                    "type": "object",
                    "properties": {
                        "order_id": {
                            "type": "integer",
                            "description": "Номер заказа из order_list или order_get"
                        },
                        "confirm": {
                            "type": "boolean",
                            "description": "true — покупатель подтвердил отмену (сумму и номер заказа ему показали); без него — только предпросмотр",
                            "default": false
                        }
                    },
                    "required": [
                        "order_id"
                    ],
                    "additionalProperties": false
                },
                "annotations": {
                    "readOnlyHint": false,
                    "destructiveHint": true,
                    "idempotentHint": true
                }
            },
            {
                "name": "pvz_list",
                "description": "Пункты выдачи и постаматы СДЭК для города из адреса оформления (checkout_get.address.city) — тот же список, что в виджете на странице. Возвращает code, адрес, режим работы, телефон; code передаётся в checkout_set_pvz. По умолчанию первые 20 — уточняйте query (улица, район, метро) или type; total — сколько подошло под фильтр, total_all — всего в городе. Пункт выдачи применится только к тарифу «до пункта выдачи»: shipping.need_pvz и shipping.pvz_tariffs показывают, подходит ли выбранная доставка, иначе сначала checkout_set_shipping (hint подскажет). Нужны товары в корзине и город, куда СДЭК доставляет.",
                "inputSchema": {
                    "type": "object",
                    "properties": {
                        "query": {
                            "type": "string",
                            "description": "Подстрока адреса или названия пункта (например «Ленина» или «Ашан»)"
                        },
                        "type": {
                            "type": "string",
                            "enum": [
                                "PVZ",
                                "POSTAMAT"
                            ],
                            "description": "Только пункты выдачи (PVZ) или только постаматы (POSTAMAT)"
                        },
                        "code": {
                            "type": "string",
                            "description": "Код конкретного пункта — проверить, что он есть в этом городе"
                        },
                        "limit": {
                            "type": "integer",
                            "description": "Сколько вернуть (1-100)",
                            "default": 20
                        }
                    },
                    "required": [],
                    "additionalProperties": false
                }
            },
            {
                "name": "product_get",
                "description": "Карточка товара по product_id (из rawmid_search или page_context). По умолчанию короткая: цена числом (price, old_price при акции, currency), наличие (in_stock, availability — только «есть/нет»), рейтинг, краткое описание (summary), варианты исполнения (variants — дочерние товары с своим product_id, ценой и наличием; variant_required: true — в корзину идёт product_id варианта, а не этот), опции (options — серийный номер запчасти, доп. гарантия, подарок; product_option_id и значения для cart_add.options), применение и ограничения техники (usage: suitability — для чего подходит, limits — время непрерывной работы, загрузка, шум, температура, мощность), сервис (service: гарантийный срок и ссылки на условия гарантии, расширенной гарантии, сервисные центры, регистрацию). Подробности — include: description (разделы, комплектация, текст до 2500 символов), attributes (все характеристики по группам), images, accessories (совместимые аксессуары и запчасти), related, reviews (сводка и последние 5), questions (вопросы-ответы, последние 5), manuals (инструкции PDF), articles (статьи и инструкции о товаре) или all.",
                "inputSchema": {
                    "type": "object",
                    "properties": {
                        "product_id": {
                            "type": "integer",
                            "description": "ID товара"
                        },
                        "include": {
                            "type": "array",
                            "items": {
                                "type": "string",
                                "enum": [
                                    "description",
                                    "attributes",
                                    "images",
                                    "accessories",
                                    "related",
                                    "reviews",
                                    "questions",
                                    "manuals",
                                    "articles",
                                    "all"
                                ]
                            },
                            "description": "Какие подробные разделы добавить к короткой карточке"
                        }
                    },
                    "required": [
                        "product_id"
                    ],
                    "additionalProperties": false
                }
            },
            {
                "name": "product_reviews",
                "description": "Отзывы покупателей (type: review) или вопросы и ответы (type: question) по товару — опубликованные записи с вкладок карточки, с ответами магазина. query ищет по тексту («шум», «посудомойка», «орехов»), rating — только отзывы с такой оценкой, page/limit — страницы. summary: средняя оценка, количество и распределение по звёздам (у вопросов — сколько всего и с ответом). Для «что пишут о …» и «можно ли …» используйте query, а не читайте всё подряд.",
                "inputSchema": {
                    "type": "object",
                    "properties": {
                        "product_id": {
                            "type": "integer",
                            "description": "ID товара"
                        },
                        "type": {
                            "type": "string",
                            "enum": [
                                "review",
                                "question"
                            ],
                            "description": "review — отзывы, question — вопросы и ответы",
                            "default": "review"
                        },
                        "query": {
                            "type": "string",
                            "description": "Подстрока для поиска в тексте (и в ответах)"
                        },
                        "rating": {
                            "type": "integer",
                            "minimum": 1,
                            "maximum": 5,
                            "description": "Только отзывы с этой оценкой (1–5)"
                        },
                        "page": {
                            "type": "integer",
                            "description": "Номер страницы, с 1",
                            "default": 1
                        },
                        "limit": {
                            "type": "integer",
                            "description": "Записей на странице (1-30)",
                            "default": 10
                        }
                    },
                    "required": [
                        "product_id"
                    ],
                    "additionalProperties": false
                }
            },
            {
                "name": "shipping_estimate",
                "description": "Предварительный расчёт доставки в город до оформления заказа: «сколько стоит и когда приедет этот блендер в Казань». Принимает город (city — «Казань», при неоднозначности «Дзержинск, Нижегородская» или zone_id из candidates), товар (product_id; для товара с вариантами — product_id варианта) и количество; без product_id считает текущую корзину. Возвращает доступные способы (methods: code, перевозчик, cost числом, cost_text, days — ориентировочный срок в днях, need_pvz — до пункта выдачи), cheapest, ошибки перевозчиков и распознанный город (city, candidates). Ничего не меняет: корзина и адрес оформления остаются прежними; точную стоимость по адресу даст checkout_get.",
                "inputSchema": {
                    "type": "object",
                    "properties": {
                        "city": {
                            "type": "string",
                            "minLength": 2,
                            "maxLength": 80,
                            "description": "Название города буквами, при необходимости с регионом через запятую"
                        },
                        "product_id": {
                            "type": "integer",
                            "description": "ID товара (варианта); без него — текущая корзина"
                        },
                        "quantity": {
                            "type": "integer",
                            "minimum": 1,
                            "description": "Количество товара, по умолчанию 1",
                            "default": 1
                        },
                        "zone_id": {
                            "type": "integer",
                            "description": "Регион из candidates предыдущего ответа — если городов с таким названием несколько"
                        }
                    },
                    "required": [
                        "city"
                    ],
                    "additionalProperties": false
                }
            }
        ]
    }
}
