Руководство Melbis Shop: оглавление
На каждый вызов инструмента приходит один ответ из одного или
нескольких блоков и признак ошибки (isError в протоколе
MCP). Приложение-агент передаёт блоки модели, а признак говорит ей,
выполнен вызов или нет.
Успех — до трёх блоков, по порядку:
Пустой блок не отправляется. Объёмное — страницы, картинки, большие
выборки — сервер кладёт файлом в mcp\melbis\ папки магазина
и называет путь.
Если при подключении приложение договорилось о версии протокола
2025-06-18 или новее, данные приходят ещё и полем
structuredContent результата — тем же объектом JSON, но как
данные, а не текст. Текстовый блок с данными при этом остаётся: так
стандарт MCP советует ради приложений, которые читают только
текст.
Отказ — всегда один текстовый блок с признаком ошибки. Обычно он начинается с кода заглавными буквами и двоеточия, дальше объяснение: что не так и кто это исправляет.
Тексты ответов — на английском: их читает модель. Пути прав и названия из магазина приходят на языке магазина.
Ниже — отказы, общие для всех инструментов. Отказы, которые бывают только у одного инструмента, описаны вместе с ним.
Эти ответы сервер даёт сам, не обращаясь к магазину.
| Ответ | Когда | Что делать |
|---|---|---|
Not connected. Call "session_connect" first. |
сессия не открыта: её ещё не было, вход не удался или приложение-агент перезапустило сервер | войти заново |
STORE_SWITCHED: и оба магазина |
сервер не закреплён за магазином, и в программе открыт не тот магазин, в котором открыта сессия | спросить пользователя: session_connect входит в магазин
программы, а возврат программы на прежний магазин продолжает сессию |
ACCESS_DENIED: this user may not run AGENT_… и путь в
дереве прав |
логину не выдано право на этот инструмент | владелец выдаёт право по названному пути, агент открывает сессию заново |
RULES_REQUIRED: и текст правил |
правила инструмента не приняты в этой сессии | прочитать правила, вызвать session_rules_accept с кодом
из отказа, повторить вызов |
The store asks you to read its kCritical notes… |
не прочитаны критические заметки памяти; до этого работают только
memory_list и memory_load |
прочитать заметки |
LICENCE_NONE: |
у лицензионного магазина нет файла лицензии на сегодня; текст называет папку, где сервер искал | открыть магазин в программе: открытая сессия заработает сама, как
только файл появится, а на входе — повторить session_init и
session_connect |
Unknown tool: |
инструмента с таким именем нет | — |
ERROR: |
внутренняя ошибка сервера | сообщить разработчику текст ответа |
Эти ответы приходят от движка: запрос дошёл до магазина, и тот его не принял. Подписи на оригинальном языке могут отличаться.
| Ответ | Когда | Что делать |
|---|---|---|
WRONG_PASSWORD |
пара логин-пароль не подошла | войти в программу заново, чтобы она передала верную пару, или пересохранить пароль |
ACCESS_DENIED без пути |
пользователь заблокирован, или право сняли посреди сессии | открыть сессию заново: если право снято, отказ придёт уже с путём |
IP_BLOCKED |
адрес компьютера не входит в список «Доступ с IP» | «Инсталляция», раздел «Безопасность» |
SHOP_IS_LOCK |
магазин закрыт на время работ: в корне сайта лежит
shop.lock |
дождаться конца работ |
BACKUP_TIME: <начало> - <конец> |
идёт ежедневное окно резервного копирования, пользователей в магазин не пускают | дождаться конца окна |
BACKUP_SOON: <начало> - <конец> |
до окна копирования меньше получаса; примерно каждый десятый запрос получает этот отказ вместо ответа | повторить запрос и закончить работу до начала окна |
LICENCE_ERROR |
токен не подходит логину и дню | открыть магазин в программе, чтобы она получила лицензию |
LICENCE_DOMAIN |
адрес запроса не совпадает с доменом, на который выдана лицензия | проверить адрес магазина в настройках подключения |
LICENCE_DATE |
часы компьютера расходятся со временем по Гринвичу больше чем на 10 минут | выставить часы |
VERSION_SERVER: |
программе нужен более новый движок | обновить сервер на месте: окно «Сервер», закладка «Обслуживание», «Обновить сервер». Не «Установка» — она ставит сервер с нуля и стирает магазин |
VERSION_CLIENT: |
движку нужна более новая программа | обновить программу |
VERSION_FAIL: |
версии программы и движка не совпадают точно; текст называет обе | привести версии к одной |
COMMAND_TIMEOUT: <начало> - <конец> |
владелец разрешил эту команду только в эти часы | дождаться разрешённого времени или попросить владельца изменить часы в правах пользователя |
COMMAND_LOAD_MAX: <1> <5> <15> |
нагрузка сервера выше предела, заданного владельцем для этой команды; три числа — средняя нагрузка за 1, 5 и 15 минут | повторить позже |
причина без кода: Unit not found: <имя>,
Module not found! […],
PHP Runtime Exception… |
движок не смог выполнить команду: нет файла, нет модуля, ошибка в модуле | действовать по тексту |
Часть ответов движка сервер не пересказывает кодом, а сразу объясняет.
| Ответ | Когда |
|---|---|
The table … is in work right now, and nothing was written… |
таблицу держит другой сотрудник или открытое окно программы; запись
не сделана. Кто держит — engine_db_locks |
File not found: … Check the path against engine_map_tree. |
загрузка файла, которого нет: путь сверяют по
engine_map_tree |
This store has no endpoint for the agent: core/mcp.php is missing… |
вместо ответа движка пришла веб-страница. Обычно это значит, что на
сервере нет core/mcp.php и ответила витрина; файл
появляется с обновлением движка. Такую же страницу может отдать и защита
от ботов перед сайтом |
The server of the store refused the request as too large (HTTP 413)… |
запрос больше, чем принимает сервер магазина: список файлов разбивают на несколько вызовов, а ради одного большого файла владелец поднимает лимит сервера |
Unexpected answer: |
пришло что-то, что не похоже ни на ответ движка, ни на веб-страницу; текст показывает начало |
The store answered with something that is not json… |
движок ответил, но внутри не json |