3. Описание MCP-сервера › 3.1 Начало › Вход, права, лицензия

Как MCP-сервер попадает в магазин, что агенту в нём разрешено и чем подписан каждый запрос. Сами инструменты входа описаны на своих страницах: session_init, session_connect, session_rules_accept.

Вход

Магазин. Сессия открывается в магазине, который последним открыт в программе. Пока в программе открыт другой магазин, инструменты сессии отказывают с STORE_SWITCHED. Сервер можно закрепить за одним магазином: в конфигурации приложения-агента его запускают с --store <папка магазина>. Тогда он входит только в этот магазин, что бы ни было открыто в программе, а закрепление за папкой, которой нет в списке магазинов программы, сессию не открывает вовсе.

Логин и пароль. Если программа запущена на этом магазине, пару отдаёт она — это человек, который сейчас сидит за программой. Если нет — логин берётся из Shop.ini в папке магазина, а пароль из реестра Windows, где программа хранит его зашифрованным при включённой галочке «хранить пароли». Третьего пути нет: пароль через переписку не передаётся и агенту не виден.

Под кем работает агент. Отдельного пользователя для ИИ в магазине нет: агент работает под логином человека и его правами. Всё, что агент делает, магазин подписывает именем этого человека: автор задачи, автор версии файла, владелец заметки, тот, кто держит таблицу.

Права

За каждым MCP-инструментом стоит команда движка — AGENT_ и имя инструмента заглавными буквами: engine_php_saveAGENT_ENGINE_PHP_SAVE. Команды выдаются правами ветки «AI-помощник» в правах пользователя. Подписи на оригинальном языке могут отличаться.

Ветка Право Ключ права Инструменты
Память Получить перечень AGENT_MEMORY_LIST memory_list
Загрузить AGENT_MEMORY_LOAD memory_load
Сохранить AGENT_MEMORY_SAVE memory_save
Удалить AGENT_MEMORY_REMOVE memory_remove
Инструменты Получить список AGENT_TOOL_LIST tool_list
Выполнить AGENT_TOOL_RUN tool_run
Прямой доступ → Файлы магазина Загрузить AGENT_ENGINE_FILES_LOAD engine_files_load
Добавить AGENT_ENGINE_FILES_ADD engine_files_add
Удалить AGENT_ENGINE_FILES_REMOVE engine_files_remove
Прямой доступ → База данных Получить структуру данных AGENT_ENGINE_DB_TABLES engine_db_tables
Чтение данных AGENT_ENGINE_DB_SELECT engine_db_select
Изменение данных AGENT_ENGINE_DB_EXECUTE engine_db_execute
Получить список блокировок AGENT_ENGINE_DB_LOCKS engine_db_locks
Снять блокировку таблиц AGENT_ENGINE_DB_UNLOCKS engine_db_unlocks
Прямой доступ → Разработка Чтение данных AGENT_ENGINE_DEV_READ engine_map_tree, engine_map_units, engine_search, engine_history_list, engine_history_content, engine_php_load, engine_html_load, engine_static_load, engine_image_load, engine_whole_load
Изменение данных AGENT_ENGINE_DEV_WRITE все add, save, rename и remove модулей, шаблонов, статики, картинок и их папок, а также групп шаблонов
Получить конфигурацию AGENT_ENGINE_DEV_CONFIG engine_dev_config
Выполнить очистку кэша AGENT_ENGINE_DEV_CACHE_CLEAR engine_dev_cache_clear
Экспорт AI-инструменты AGENT_TOOL_EXPORT tool_export
Магазин AGENT_SHOP_DOWNLOAD shop_download

Без прав работают session_init, session_connect, session_rules_accept, shop_page и shop_run. Одно исключение внутри них: shop_page с debug=true читает код отладчика из конфигурации и поэтому требует права «Получить конфигурацию».

Работу с файлами проекта ветка «Разработка» делит только на чтение и изменение, и это не упрощение: логин, которому можно сохранить модуль, уже может сделать с магазином всё, что умеет сам магазин. Поэтому «Изменение данных» включает «Чтение данных»: сохранение начинается с загрузки файла.

Права принадлежат человеку. Агент входит под логином пользователя, поэтому с одним сотрудником он умеет больше, чем с другим, в одном и том же магазине.

Когда проверяются. Список прав приходит при входе, и на вызов невыданного инструмента сервер отказывает сам, не обращаясь к магазину, — и называет недостающее право путём в дереве прав:

ACCESS_DENIED: this user may not run AGENT_ENGINE_PHP_SAVE.
The owner grants it in the program, to the user you signed in as
- in the user rights, <путь на языке магазина>.
The session has to be opened again afterwards.

После выдачи права сессию открывают заново: список посреди работы не меняется. Если право сняли посреди сессии, вызов проходит сервер и отказывает уже магазин — голым ACCESS_DENIED, без пути. Это значит, что права логина изменились; после переподключения отказ придёт с путём.

Лицензия

Каждый запрос подписан суточным токеном. Токены получает программа, пока работает, и кладёт их в папку магазина, в tokens\<логин>-<дата>.lic. MCP-сервер их только читает и сам лицензию не запрашивает.

Лицензия выдаётся на пару «домен + логин», поэтому токен у сотрудника и его агента общий: отдельной лицензии для ИИ не бывает.

Нет файла на сегодня — на лицензионном магазине сессия не откроется: session_connect отвечает LICENCE_NONE и называет папку, где искал. Лечится это одним способом: открыть магазин в программе, затем session_init и session_connect заново. Движок отказывает токену своими кодами — LICENCE_ERROR, LICENCE_DOMAIN, LICENCE_DATE (см. «Ответы и отказы»). Токен сервер ищет заново при каждом запросе, поэтому смена суток посреди сессии её не закрывает: пока программа не записала файл на новый день, каждая команда получает отказ LICENCE_NONE, а потом снова работает.

Демо-режим

Пока в корне магазина лежит admin.here, движок не проверяет ни лицензию, ни логин с паролем, и любой вошедший становится администратором. Сервер распознаёт это сам, и ответ session_connect требует от агента первым делом предупредить пользователя. Как выйти из демо-режима — «Инсталляция».