Skip to main content
Glama

1C Testpilot

MCP-сервер для работы AI-агентов с интерфейсом 1С:Предприятия. Позволяет агенту открывать формы, читать и изменять данные, работать с таблицами, записывать и воспроизводить сценарии действий.

Сервер подключается напрямую к локальному или удалённому клиенту тестирования 1С по его сетевому протоколу.

Возможности

  • Подключение к локальному или удалённому тест-клиенту по адресу и порту; порядок подключения определяется автоматически.

  • Запуск/останов тест-клиента 1С на компьютере MCP-сервера (файловая или серверная база, логин/пароль) с ожиданием готовности и авто-подключением — tc_session(action="launch_client"/"stop_client").

  • Навигация по дереву UI: активное окно → форма → элементы (по иерархическим ключам).

  • Командный интерфейс — get_command_interface: текущее дерево или обзор всех разделов с поиском и постраничной выдачей команд. Полный обход переключает разделы; поиск по собранному меню не обращается к 1С.

  • Чтение: значения полей, вид/класс/заголовки элементов, таблицы, области табличного документа.

  • Действия: ввод текста/HTML, клики, флажки, выбор из списков/меню, работа с таблицами и деревом, календарь, гиперссылки, навигация по строкам и окнам.

  • click при включённом READBACK возвращает активное окно. diagnostics=True дополнительно читает текущие сообщения окна; они могут относиться к предыдущим действиям.

  • Обзор формы — get_context: первое чтение возвращает описание, следующие — изменения; result_mode="full" возвращает всё заново. save_as_snapshot=True отдельно сохраняет фиксированный снимок для сравнения. Сохранение состояния не требует повторного чтения.

  • Сравнение состояния формы: create_snapshot сохраняет снимок, compare_snapshot показывает изменения относительно текущего состояния. include_tables=True при создании снимка или обзоре формы добавляет сравнение строк по порядку, без раскрытия дерева. Строки остаются выделенными; на 8.3 подготовка может вызвать обработчики активации строки. Список и удаление — list_snapshots и delete_snapshot. Снимки хранятся в памяти до удаления, вытеснения или остановки сервера.

  • Чтение нескольких полей — read_fields; заполнение полей формы — set_fields, ячеек текущей строки таблицы — set_row_values; добавление заполненных строк — add_rows. При заполнении text задаёт текст поля, checked — нужное состояние флажка. В set_fields параметр select выбирает значение через список или форму выбора. Заполнение проверяет принятые значения и останавливается при проблеме, сохраняя результат выполненных шагов.

  • read_document читает табличный документ целиком или прямоугольную область; find_text ищет текст и возвращает адреса подходящих ячеек.

  • Поиск строк таблицы: find_rows отбирает прочитанные строки по тексту колонок с учётом текущих отборов и свёрнутых узлов. Это не поиск по всей базе.

  • Поиск в списке средствами 1С — search: вводит текст в строку поиска и возвращает строки после проверки стабильности результата; пустой текст очищает поиск.

  • Выбор значения поля — select_value: по точному тексту из выпадающего списка или по значениям колонок формы выбора, с проверкой результата.

  • Настройки списка: get_list_settings читает отборы и сортировку, get_list_settings_fields — доступные поля, set_list_settings изменяет настройки.

  • Запись и воспроизведение сценариев (uilog): агент выполняет шаги → получает XML-сценарий → воспроизводит его. Два режима записи (см. переменные окружения).

  • 10 инструментов по типам объектов клиента тестирования; конкретная операция выбирается параметром action (до 161 действий). Версионный гейтинг по целевой версии платформы.

  • Совместимые сценарии Тестера: запуск поддерживаемого BSL из файлов через MCP и Python API, с параметрами и вложенными сценариями.

Related MCP server: 1C MCP Toolkit

Требования

  • Windows, Linux или macOS для MCP-сервера. Платформа 1С (напр. 8.3.27 или 8.5.1) нужна на компьютере тест-клиента.

  • Python 3.10+.

  • Тест-клиент 1С — либо поднимается действием tc_session(action="launch_client"), либо запускается заранее: 1cv8.exe ENTERPRISE /F"<база>" /TESTCLIENT -TPort <порт>

Установка

Для сценариев на Python доступен Python API с интеграцией pytest. Тесты используют те же операции с 1С напрямую, без запуска MCP-сервера.

Установка из репозитория GitHub. Нужны Git и pipx.

pipx install git+https://github.com/ROCTUP/1c-testpilot.git
pipx ensurepath

После установки перезапустите терминал и MCP-клиент, чтобы они увидели команду 1c-testpilot. Зависимости устанавливаются автоматически в отдельное окружение.

Если репозиторий уже скачан, установите проект из его корневой папки:

pipx install .

Подключение к MCP-клиенту

Выберите способ подключения: stdio — MCP-клиент сам запускает 1C Testpilot; Streamable HTTP — вы запускаете сервер отдельно, а MCP-клиент подключается по URL.

Через stdio

Команда 1c-testpilot должна быть доступна в PATH MCP-клиента. Если клиент её не находит, укажите в command полный путь к исполняемому файлу.

Claude Desktop (документация). Откройте Settings → Developer → Edit Config и добавьте сервер в mcpServers:

  • Windows: %APPDATA%\Claude\claude_desktop_config.json.

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json.

{
  "mcpServers": {
    "1c-testpilot": {
      "command": "1c-testpilot",
      "env": { "TC1C_TRANSPORT": "stdio" }
    }
  }
}

После изменения файла полностью перезапустите Claude Desktop.

Claude Code (документация):

claude mcp add --env TC1C_TRANSPORT=stdio --transport stdio --scope user 1c-testpilot -- 1c-testpilot

--scope user делает сервер доступным во всех проектах. Состояние подключения можно посмотреть командой /mcp внутри Claude Code.

Codex (документация). Добавьте в ~/.codex/config.toml:

[mcp_servers.1c-testpilot]
command = "1c-testpilot"
env = { TC1C_TRANSPORT = "stdio" }

Или добавьте сервер через CLI:

codex mcp add 1c-testpilot --env TC1C_TRANSPORT=stdio -- 1c-testpilot

Состояние подключения — /mcp в Codex. Для длительных операций, например запуска 1С, можно добавить tool_timeout_sec = 120 в секцию сервера; стандартный таймаут Codex — 60 секунд.

Без установки пакета можно указать напрямую: "command": "python", "args": ["<путь>/app/server.py"].

Через Streamable HTTP

Запустите 1C Testpilot в отдельном терминале.

Windows, PowerShell:

$env:TC1C_TRANSPORT = "streamable-http"
$env:TC1C_HTTP_HOST = "127.0.0.1"
$env:TC1C_HTTP_PORT = "6004"
$env:TC1C_HTTP_PATH = "/mcp"
1c-testpilot

Linux, Bash:

TC1C_TRANSPORT=streamable-http TC1C_HTTP_HOST=127.0.0.1 TC1C_HTTP_PORT=6004 TC1C_HTTP_PATH=/mcp 1c-testpilot

Пока сервер работает, он принимает MCP-подключения по адресу http://127.0.0.1:6004/mcp. Настройки TC1C_* задаются в окружении этого процесса сервера.

Claude Code:

claude mcp add --transport http --scope user 1c-testpilot http://127.0.0.1:6004/mcp

Эта настройка работает и в локальных сессиях вкладки Code приложения Claude Desktop: они используют MCP-конфигурацию Claude Code. Подключение к HTTP-серверу выполняется напрямую. Документация Claude Code Desktop.

Если сервер с таким именем уже добавлен через stdio, сначала удалите прежнюю запись командой claude mcp remove --scope user 1c-testpilot.

Codex — используйте URL в секции сервера в ~/.codex/config.toml:

[mcp_servers.1c-testpilot]
url = "http://127.0.0.1:6004/mcp"

При переходе со stdio замените прежние command, args и env на url. Для новой записи можно использовать CLI:

codex mcp add 1c-testpilot --url http://127.0.0.1:6004/mcp

Для подключения с другого компьютера задайте TC1C_HTTP_HOST равным сетевому IP компьютера с 1C Testpilot и укажите этот IP в URL клиента. Порт 6004 должен быть доступен из сети клиента. Встроенной HTTP-аутентификации в 1C Testpilot нет; доступ к серверу ограничивается вашей сетью или внешним прокси с аутентификацией и HTTPS.

Также поддерживается прежний транспорт SSE: TC1C_TRANSPORT=sse, адрес подключения http://127.0.0.1:6004/sse. У него стандартные пути /sse и /messages/; TC1C_HTTP_PATH применяется только к Streamable HTTP.

Подключение к клиенту тестирования 1С

Адрес, порт и версия платформы 1С передаются инструменту tc_session при выполнении действия connect. Эти параметры относятся к клиенту тестирования 1С и не задаются в конфигурации подключения MCP. Запуск клиента выполняется действием launch_client.

  • При локальном подключении host можно опустить: по умолчанию 127.0.0.1.

  • Удалённый клиент запустите с /TESTCLIENT -TPort <порт>; его порт должен быть доступен с компьютера MCP-сервера.

  • launch_client и stop_client работают на компьютере MCP-сервера. На Linux для обычного запуска клиента нужен графический сеанс; для подключения к уже запущенному — не нужен.

  • На macOS обычный запуск не требует DISPLAY; поиск платформы учитывает путь /opt/1cv8/<версия>/. desktop="isolated" и get_screenshot на macOS не поддерживаются.

  • На Windows 10+ и Linux параметр desktop="isolated" в launch_client запускает 1С на отдельном рабочем столе, не мешая пользователю. По умолчанию — desktop="default", обычный запуск. Изолированные клиенты поддерживают скриншоты и завершаются вместе с MCP-сервером. На Linux требуется Xvfb (sudo apt install xvfb в Ubuntu/Debian); графический сеанс не нужен.

  • Можно работать с несколькими базами или одной базой под разными пользователями. Подключение выбирается через connection_id, список — tc_session(action="list_connections").

При автоматическом выборе исполняемого файла используется самая новая подходящая установка. Учитываются также установки только тонкого клиента. Например, version="8.3.27" выбирает самую новую сборку этой ветки. Для определённой сборки укажите полную версию или путь exe.

Именованные профили

Настройки запуска и подключения можно сохранить в YAML-файле (примеры всех допустимых параметров), указав его путь в TC1C_PROFILES_FILE. tc_session(action="list_profiles") показывает доступные профили; launch_client(profile="ut_admin") запускает клиент, connect(profile="remote_demo") подключается к работающему. Оба действия относятся к tc_session. Явно переданные параметры переопределяют профиль. Имя использованного профиля видно в list_connections.

Для запуска профиль содержит base и параметры launch_client, для подключения — port и необязательные host, version. Для серверной базы укажите server: true и base: 'server1c\Trade'. description задаёт описание. Пароль — строка в password или значение переменной окружения с именем из password_env; одновременно их задавать нельзя. Пароли в YAML заключайте в кавычки. Значения паролей не выводятся в списке профилей и журнале; при запуске 1С пароль передаётся в командной строке процесса. Файл перечитывается при обращении. Относительные пути base, exe и code_epf в профиле считаются от его папки. wait задаёт общий срок запуска и готовности подключения в секундах: по умолчанию 120. Для долгой загрузки базы его можно увеличить, например wait: 180. Ожидание заканчивается сразу после подключения; само открытие порта ещё не означает готовность клиента.

Переменные окружения

Задаются в окружении процесса сервера или в файле по образцу .env.example:

1c-testpilot --env-file "D:/Testpilot/.env"

При запуске из MCP-клиента добавьте аргументы к команде:

{
  "mcpServers": {
    "1c-testpilot": {
      "command": "1c-testpilot",
      "args": ["--env-file", "D:/Testpilot/.env"]
    }
  }
}

Путь к файлу — абсолютный или относительно рабочего каталога сервера. Переменные окружения имеют приоритет над значениями файла. Без --env-file файл .env не загружается; если указанный файл недоступен, сервер сообщает об ошибке и не запускается.

  • TC1C_PROFILES_FILE — путь к YAML-файлу профилей, абсолютный или от рабочего каталога сервера. По умолчанию не задан.

  • TC1C_CONNECTION_LIMIT — максимум зарегистрированных подключений, по умолчанию 16. Отключённый клиент, запущенный сервером, учитывается до stop_client. Лимит ссылок TC1C_REF_LIMIT применяется отдельно к каждому подключению.

  • TC1C_QUEUE_TIMEOUT — максимальное ожидание очереди к занятому соединению, по умолчанию 60 секунд; положительное число. По истечении сервер возвращает connection_busy с текущим действием и длительностью его выполнения. Таймаут самого выполняющегося действия задаётся отдельно. list_connections показывает busy, active_action, active_seconds; после обнаруженного обрыва сокета — connected=false. tc_session(action="disconnect", force=true) прерывает сетевое ожидание без очереди. В Python API — client.disconnect(force=True). Приложение 1С продолжает работать; результат прерванного действия может быть неизвестен (outcome_unknown). cleanup_pending=true означает, что обработчик ещё освобождает состояние соединения; дождитесь busy=false либо удаления подключения из списка перед повторным подключением.

  • TC1C_RECORD_MODE — режим записи сценариев: synth (по умолчанию — сервер собирает сценарий из вызовов инструментов, покрывая все действия агента) или native (журнал тест-клиента; составное чтение таблицы сервер дополняет командами снятия выделения).

  • TC_PLATFORM_VERSION — целевая версия платформы (напр. 8.3.24.1548): действия, чей метод в этой версии отсутствует, не публикуются; версия используется в рукопожатии.

  • TC1C_RESPONSE_FORMAT — формат ответов: toon (по умолчанию) или json (режим совместимости).

  • TC1C_RESPONSE_DETAIL — compact (по умолчанию) сокращает служебные поля успешных MCP-ответов; full сохраняет их полностью. Журнал и ответы Python API не сокращаются.

  • TC1C_COMPACT_REFS — адресация элементов: id (по умолчанию), prefix или off. id работает с TOON и JSON; prefix сокращает адреса только в TOON. Прежние true и false принимаются как синонимы prefix и off.

  • TC1C_REF_LIMIT — максимум элементов в реестре одного подключения, по умолчанию 100000; положительное целое число. Ограничение действует во всех режимах адресации.

  • TC1C_VERIFY_TARGET — проверка существования объекта перед действием, true (по умолчанию) или false.

  • TC1C_READBACK — чтение состояния до и после действия, true (по умолчанию) или false.

  • TC1C_SNAPSHOT_LIMIT — максимум сохранённых состояний форм на сервере, по умолчанию 100.

  • TC1C_SNAPSHOT_MEMORY_MB — лимит хранилища состояний в МиБ, по умолчанию 128. Лимиты общие для явных снимков и автоматических состояний get_context (одно на форму). При переполнении вытесняются давно не использовавшиеся снимки.

  • TC1C_SCREENSHOTS — снимки окна 1С, true (по умолчанию) или false. При false действие get_screenshot и его параметры не публикуются.

  • TC1C_LOGGING — журнал MCP-вызовов, по умолчанию true; при false действия управления журналом скрыты.

  • TC1C_LOG_AUTO_START — начинать журнал автоматически, по умолчанию false.

  • TC1C_LOG_DIR — каталог журналов на сервере, по умолчанию logs.

  • TC1C_LOG_REPORTS — отчёты: html (по умолчанию), allure, html,allure или none. JSONL-журнал сохраняется при любом выборе; скриншоты настраиваются отдельно.

  • TC1C_LOG_SCREENSHOTS — разрешить снимки в журнале, по умолчанию true; независимо от TC1C_SCREENSHOTS.

  • TC1C_LOG_MAX_MB — общий лимит журналов в МиБ, по умолчанию 1024. Старые завершённые журналы удаляются; если места недостаточно, запись приостанавливается.

Формат ответов

Формат ответов — TOON (компактный, по умолчанию) или JSON. Выбор: TC1C_RESPONSE_FORMAT.

По умолчанию успешные MCP-ответы сокращены (TC1C_RESPONSE_DETAIL=compact): в простых действиях не повторяются переданный target и успешная проверка его наличия; connection_id опускается при единственном подключении. У окна после нажатия или перехода остаются адрес, название и возможная диагностика. Если описание окна не изменилось, вместо блока window возвращается window_changed: false; первое или изменившееся описание приходит с window_changed: true. Сравнение отдельно для каждого подключения; переподключение сбрасывает запомненное описание. Ответы подключения сохраняют connection_id. Ошибки и признаки неполных результатов не сокращаются. full возвращает полные служебные поля; журнал и Python API всегда их сохраняют.

Режим адресации элементов задаётся через TC1C_COMPACT_REFS:

  • id — короткие ссылки ref, передаваемые в действия без изменений; по умолчанию.

  • prefix — сокращённые адреса со словарями в ответе TOON; в JSON адреса полные.

  • off — полные адреса key и handle.

Инструменты

find_objects по умолчанию возвращает все совпадения. Для больших результатов доступны limit и продолжение через cursor, без повторного поиска. Примеры — в справочнике.

Сервер публикует 10 инструментов — по типам объектов клиента тестирования; операция выбирается параметром action, до 161 действий. Список действий с методами 1С, применимыми типами и параметрами вынесен в отдельный документ: docs/TOOLS.md.

Дополнительно доступны инструменты без параметра action:

  • tc_execute_code — выполнение BSL-кода в клиентском или серверном контексте;

  • tc_execute_query — запрос с параметрами, до 500 строк результата (по умолчанию 100);

  • tc_get_metadata — структура конфигурации: объекты, реквизиты, типы, табличные части и перечисления;

  • tc_list_custom_bsl_functions и tc_execute_custom_bsl_function — описание и вызов пользовательских BSL-функций, зарегистрированных в обработке.

Они работают через внешнюю обработку Testpilot, которую сервер автоматически открывает при запуске клиента. Произвольный код, запросы и пользовательские функции включаются независимо; по умолчанию выключены. TC1C_METADATA=auto включает метаданные вместе с кодом или запросами; true включает их отдельно, false скрывает. При TC1C_FUNCTIONS=true инструменты функций появляются, когда подключена обработка с непустым реестром. В Python API те же методы вызываются без префикса tc_ и работают при запуске клиента с обработкой через code_epf, независимо от настроек публикации MCP.

Действие get_screenshot в tc_app возвращает изображение окна 1С со всплывающими списками, не переключая фокус. MCP-сервер и клиент должны работать на одном компьютере: Windows или Linux с X11/XWayland. На Linux нужен доступ к сеансу клиента через DISPLAY и XAUTHORITY; захват приложений, работающих напрямую через Wayland, не поддерживается. Свёрнутое окно нужно открыть. При изолированном запуске через Linux-обёртку она должна передавать клиенту DISPLAY и XAUTHORITY и ждать его завершения. Процесс 1С и его TCP-соединение должны быть видны из окружения MCP-сервера. В контейнере также нужны доступ к X11-сокету и запись Xauthority для его имени хоста. scale задаёт масштаб 25–100%, grid включает координатную сетку, region=[x,y,width,height] ограничивает область в пикселях исходного снимка. Неполный снимок сопровождается предупреждением. В сценарий снимки не записываются.

Журнал работы агента

В tc_session: start_logging начинает запись, get_logging_status показывает состояние, stop_logging завершает её и возвращает пути к JSONL-журналу и выбранным отчётам. Параметр reports в start_logging переопределяет TC1C_LOG_REPORTS для новой сессии: ["html"], ["allure"], ["html", "allure"] или ["none"] для одного JSONL-журнала. Параметр screenshot_mode: off — без снимков, actions — после изменений и при ошибках, all — после каждого вызова. По умолчанию actions, либо off, если снимки журнала запрещены. PNG сохраняются рядом с отчётом и не добавляются в ответы агенту. Для снимков нужен локальный клиент. Журнал каждого подключения независим; отключение клиента завершает запись. Повторный start_logging сохраняет текущий журнал и выбранные настройки. Вызов run_scenario содержит отдельные шаги с их результатами и скриншотами; одинаковый снимок используется во всех выбранных отчётах.

HTML доступен во время записи. При выборе Allure после завершения сессии в allure-results появляются результаты и вложения для сборки отчёта Allure. Поле allure_results содержит путь к ним, report_errors — ошибки формирования отчёта, если они возникли. Для просмотра установите Allure Report и выполните:

allure generate "logs/session-…/allure-results" -o allure-report
allure open allure-report

В Allure сессия MCP отображается в группе Testpilot sessions. Её статус описывает ошибки вызовов и полноту записи; выполнение пользовательской задачи оценивается отдельно. Для Python-тестов используется интеграция с allure-pytest: шаги относятся к тестам, а результат определяет pytest. Подробнее — отчёты pytest.

Запись и воспроизведение сценариев

tc_scenario(action="record_start") → выполнить действия → tc_scenario(action="record_finish") возвращает XML-сценарий (uilog) и lost_actions (действия, не попавшие в сценарий; при непустом списке сценарий неполный). Воспроизведение — tc_scenario(action="run_scenario", uilog=...). Ответ по умолчанию краткий: итог, счётчики и последний шаг с ошибкой. Для списка всех шагов передайте result_mode="full". При включённом логировании журнал сохраняет подробности в обоих режимах. Это поведение действует также в Python API. Режим записи — TC1C_RECORD_MODE.

Ограничения

  • Протокол закрытый и может отличаться между версиями платформы. Локальное подключение проверено на Windows с 8.3.27 и 8.5.1; удалённое — к Windows с 8.3.27 и к Ubuntu с 8.3.27. Способ подключения выбирается автоматически по ответу тест-клиента.

Available Tools

10 tools
tc_appA

Application-level state: active window, child objects, errors, dialogs, limits. Also available: tc_field(action="is_visible"), tc_field(action="is_enabled"), tc_field(action="get_context_menu").

  • marks a required action parameter; the group schema treats action parameters as optional. Pass action="name" and only that action's parameters. Actions:

  • clear_file_dialog_result() Clear a previously set file-dialog result. (1C 8.3.25+)

  • get_active_window() Read the active window: ref/class/title/platform_version, optional form_name/url/home_page/is_main. title is the form caption (null: no form or unreadable); url is empty without a link. form_name is a metadata name, not the form's GUID name; it is only attempted when the window supplies no caption and may remain absent; absence says nothing about the form. Read it explicitly with tc_app(action="get_child_objects") on the window ref. platform_version identifies this connection; unsupported actions report available_since. addressable=false means no element address, not a window type. native=true with recovery=close_window indicates a local preview to close before addressing form elements. active_window_unavailable gives recovery guidance; no_active_work_window requires opening a form with tc_window(action="execute_command"). (1C 8.3.3+)

  • get_child_objects(ref=null, scope='window') Read one level: parent and children: [...], with class/title and optional name/type/form_name. type is the platform element kind (null if unknown); ManagedForm.form_name is its metadata name. Omitted parent uses the last observed active window, querying it if none was observed. scope=application without a parent lists application windows. Windows/command buttons may include url; windows may include home_page/is_main. Address the parent with ref; children contain ref values. For a whole subtree, pass root_ref to tc_find(action="find_objects"). (1C 8.3.3+)

  • get_current_error() Get info about the session's last CLIENT error (none → null). error is the main description; details preserves additional text, including nested causes, module locations and stacks. Application messages (e.g. unfilled fields or posting refusal) are read with tc_window(action="get_user_message_texts"); they may include earlier actions. (1C 8.3.3+)

  • get_max_action_time() Get the max action-execution time in seconds (set via tc_app(action="set_max_action_time"); None if unset).

  • get_parent(ref*) Get an element's parent in parent: [...]. The server resolves the parent's own address and returns it with the available object metadata. Address the element with ref; objects in parent contain their own ref values. (1C 8.3.24+)

  • get_performance(clear=False) Get accumulated session performance counters (calls, duration, sent, received). Set clear to also reset them, so the next read measures only what happened after this call. (1C 8.3.6+)

  • get_screenshot(scale=100, grid=False, region=null) Capture the connected 1C window with popups as an image, without changing focus. Requires a local client on Windows or Linux with X11/XWayland and desktop access. scale: 25..100 percent. Optional region=[x,y,width,height] uses original screenshot pixels; grid labels those coordinates. capture_complete=false means some popups are missing. Screenshots are not recorded in scenarios.

  • set_file_dialog_result(result=True, filename=null, filter_index=0) Predefine the NEXT file dialog: result=true with filename (or a list for multiple files) selects; false cancels. filter_index is 0-based. Call BEFORE opening; cannot answer an open dialog. Each answer is consumed once. On 8.3.25+, replaces pending answers; clear_file_dialog_result clears unused ones. Older platforms cannot clear them: prepare only the next dialog. (1C 8.3.8+)

  • set_max_action_time(seconds*) Set the max action-execution time in seconds: how long a result-returning action may take before the call gives up (0 = wait indefinitely). Stored on the client (no network call) and applied to every subsequent command. ref selects the client; otherwise set connection_id when several clients are connected. Use tc_session(action="list_connections"). Success may omit target/connection echoes and shorten window details. Use returned references unchanged in ref; re-find expired elements.

ParametersJSON Schema
NameRequiredDescriptionDefault
refNo
gridNo
clearNo
scaleNo
scopeNo
actionYes
regionNo
resultNo
secondsNo
filenameNo
filter_indexNo
connection_idNo

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does so across many non-obvious behaviors: platform-version gating (1C 8.3.3+, 8.3.8+, 8.3.24+, 8.3.25+), unsupported actions reporting available_since, the meaning of addressable=false and native=true/recovery=close_window, recovery hints for active_window_unavailable and no_active_work_window, the local-client/X11 requirement for screenshots, capture_complete=false on missing popups, and the one-shot consumption semantics of file-dialog answers that can be replaced/cleared only on 8.3.25+. These are exactly the traits an agent could not obtain from the schema or any annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Structure is strong: a one-line purpose, an alternative-tools pointer, a note on the required-action convention, then a clean per-action list with version tags, followed by ref/connection_id guidance. It is appropriately front-loaded. It loses a point because several action entries carry dense, run-on sentences (get_active_window in particular) that could be trimmed without losing meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 12-parameter, 10-action dispatcher with no annotations and no output schema, the description supplies everything needed to invoke it correctly: per-action parameters, platform-version gates, recovery guidance for failure states, environment requirements, and the ref-addressability model. An agent could call any of the ten actions without further lookup.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate, and it largely does: it specifies scale as 25..100 percent, region as [x,y,width,height] in original screenshot pixels with grid labeling those coordinates, filter_index as 0-based, filename accepting a string or list for multiple files, seconds=0 meaning wait indefinitely, and which action each parameter belongs to. It stops short of 5 because a few parameters (connection_id, ref semantics beyond "address the parent/element with ref") are only lightly treated, and the required-action convention is explained in prose rather than exhaustively per action.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The tool is a multi-action dispatcher and the description enumerates all ten actions with a short gloss for each, making the resource (application-level state) and the individual verbs clear. It fails to reach a 5 because the group-level purpose sentence ("active window, child objects, errors, dialogs, limits") is a loose list rather than a precise statement of what tc_app does as a whole, and sibling differentiation is only partial (it cross-references tc_field/tc_window/tc_find but doesn't say why an agent should prefer tc_app's get_current_error over other diagnostics).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Per-action guidance is unusually strong: get_current_error points to tc_window(action="get_user_message_texts") for application messages, get_child_objects routes whole-subtree reads to tc_find(action="find_objects"), and set_file_dialog_result explicitly warns to call BEFORE opening a dialog and that it cannot answer an already-open one. The main gap is that there is no top-level when-to-use-this-tool-vs-siblings framing (e.g. when to reach for tc_app vs tc_window), so an agent must infer the boundary from action glosses.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tc_calendarA

Actions on type="CalendarField" only. For a regular date input field, use tc_field(action="input_text"). Also available: tc_field(action="is_visible"), tc_field(action="is_enabled"), tc_field(action="get_context_menu"), tc_app(action="get_parent").

  • marks a required action parameter; the group schema treats action parameters as optional. Pass action="name" and only that action's parameters. ok=true means accepted; verify effects by reading state. target_check: present, unknown (uncheckable), off (disabled); present does not prove an effect. target_hidden=true means the target exists but is invisible; it describes the element, not its ancestors. Its absence says nothing; hidden targets may still act (e.g. activate). Invalid addresses are rejected only where the address can be checked; an unverified empty read may mean a missing target. failure_context describes state/editor/choices; its complete=false means incomplete diagnostics. Actions:

  • calendar_next_month(ref*) Move a calendar field to the next month. The command is accepted, but nothing readable about the field changes, so this cannot be verified. To move the date use tc_calendar(action="goto_date").

  • calendar_next_year(ref*) Move a calendar field to the next year. The command is accepted, but nothing readable about the field changes, so this cannot be verified. To move the date use tc_calendar(action="goto_date").

  • calendar_previous_month(ref*) Move a calendar field to the previous month. The command is accepted, but nothing readable about the field changes, so this cannot be verified. To move the date use tc_calendar(action="goto_date").

  • calendar_previous_year(ref*) Move a calendar field to the previous year. The command is accepted, but nothing readable about the field changes, so this cannot be verified. To move the date use tc_calendar(action="goto_date").

  • goto_date(ref*, year*, month*, day*) Go to a date (year, month, day) in a calendar field. Returns changed/value_before/value_after. ref selects the client; otherwise set connection_id when several clients are connected. Use tc_session(action="list_connections"). Success may omit target/connection echoes and shorten window details. Use returned references unchanged in ref; re-find expired elements.

ParametersJSON Schema
NameRequiredDescriptionDefault
dayNo
refNo
yearNo
monthNo
actionYes
connection_idNo

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and discloses a lot: ok=true means 'accepted, not verified', the target_check states (present/unknown/off), target_hidden semantics, invalid-address rejection limits, failure_context.complete, and the fact that the four month/year actions are unverifiable. Some of that preamble reads as generic framework boilerplate rather than calendar-specific, which slightly dilutes the added value, but the per-action disclosures (goto_date returns changed/value_before/value_after) are genuinely useful.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with scope and sibling routing, then a clean action list. The caveat paragraph is dense but relevant, though the identical 'accepted, but nothing readable changes, so this cannot be verified' sentence is repeated verbatim for four actions and the general preamble is long, costing some efficiency.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No annotations and no output schema, with six parameters at 0% schema coverage, so the description is the only source of truth — and it covers action inventory, ref/connection resolution, verification caveats, and return-field names. It omits details such as whether goto_date requires an open calendar popup or the indexing/ranges for month and day, which keeps it just short of fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It explains that ref selects the client, that connection_id is the alternative when multiple clients are connected, that '*' marks the action's required params, and it ties year/month/day to goto_date. It stops short of giving formats or valid ranges for year/month/day, so it is strong but not complete.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening line states a precise verb+resource+scope: 'Actions on type="CalendarField" only', and immediately separates this tool from the sibling that handles ordinary date inputs (tc_field(action="input_text")). Each action is enumerated with a one-line behavioral description, so an agent knows exactly which actions exist without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Routing is explicit: use tc_field(action="input_text") for regular date fields, and use tc_calendar(action="goto_date") rather than the month/year navigation actions when the goal is actually to set a date. It also names the discovery path (tc_session(action="list_connections"), tc_app(action="get_parent")) for related needs, leaving little to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tc_docA

Actions on document fields and spreadsheet areas. Choose action. Also available: tc_field(action="is_visible"), tc_field(action="is_enabled"), tc_field(action="get_context_menu"), tc_app(action="get_parent").

  • marks a required action parameter; the group schema treats action parameters as optional. Pass action="name" and only that action's parameters. ok=true means accepted; verify effects by reading state. target_check: present, unknown (uncheckable), off (disabled); present does not prove an effect. target_hidden=true means the target exists but is invisible; it describes the element, not its ancestors. Its absence says nothing; hidden targets may still act (e.g. activate). Invalid addresses are rejected only where the address can be checked; an unverified empty read may mean a missing target. failure_context describes state/editor/choices; its complete=false means incomplete diagnostics. Actions:

  • begin_edit_current_area(ref*) Start editing the current spreadsheet area; follow with input_text and end_edit_current_area. In view mode this can instead open a drill-down menu, object or field chooser. A menu may leave the active window unchanged; use execute_choice_from_menu to continue.

  • click_formatted_doc_hyperlink(ref*, index*) Click a hyperlink in a formatted-document field by 0-based index (or by its text). On a document without links the platform answers the same and puts up its own error window, and tc_doc(action="get_formatted_string_hyperlinks") cannot be used to check first: for a formatted DOCUMENT it answers with an empty list even when the document does have a link (it lists links only for a formatted-string label). Judge by what the click was supposed to do. (1C 8.3.25+)

  • click_formatted_string_hyperlink(ref*, index*) Click a hyperlink in a formatted string by 0-based index (or by its text). ref may be a label field or a form decoration bearing the formatted string. (1C 8.3.13+)

  • click_html_hyperlink(ref*, index*) Click an HTML link. The platform may open the FIRST link regardless of an in-range index; out-of-range indexes fail. text has no effect. Verify the resulting navigation. (1C 8.3.25+)

  • end_edit_current_area(ref*, cancel=False) Finish editing the current spreadsheet-document area. Set cancel to discard the edit instead of committing it. Returns the cell address and its text before/after finishing; changed compares those values, including when an edit is cancelled.

  • find_text(ref*, text*, match='contains', case_sensitive=False, area=null, start_address=null, max_cells=1000) Find literal spreadsheet text (match=contains/exact, case-insensitive by default); return cell addresses/text without moving the current area. area restricts a cell/rectangle (8.3.25+). max_cells=1..10000 limits scanned positions, not matches. If complete=false, resume with start_address=next_address and unchanged text/match/case_sensitive/area. Empty matches proves absence only in the successfully scanned part. (1C 8.3.13+)

  • get_area_text(ref*, area=null) Get the text of ONE spreadsheet-document area; omit area to read the current one. tc_doc(action="get_current_area_text") is the older form of this same call and answers identically; prefer this one. (1C 8.3.6+)

  • get_current_area_address(ref*) Get the address of the current spreadsheet-document area.

  • get_current_area_field(ref*) Get the field of the current spreadsheet-document area. (1C 8.3.2+)

  • get_current_area_text(ref*, area=null) Get the text of ONE spreadsheet-document area; omit area to read the current one. This is the older form of tc_doc(action="get_area_text"), which the platform deprecated in 8.3.6 in favour of that one; prefer get_area_text.

  • get_doc_area_horizontal_size(ref*) Get the horizontal size (max column number holding data) of a spreadsheet-document. (1C 8.3.13+)

  • get_doc_area_vertical_size(ref*) Get the vertical size (max row number holding data) of a spreadsheet-document. (1C 8.3.13+)

  • get_formatted_string_hyperlinks(ref*) Get a formatted string's hyperlink presentations. (1C 8.3.25+)

  • get_html(ref*) Read the HTML of a formatted/HTML-document field. After the form has put up a menu or a modal choice list, the platform stops returning this field's content until it is written again — an empty answer right after such a window does not mean the field is empty. (1C 8.3.8+)

  • included_in_merged_area(ref*, address*) Return the address of the merged area containing the cell (e.g. 'R1C1'), or None if the cell is not part of a merged area. A null answer is ambiguous in one more way: it also comes back when the document has no such cell or no area by that name — the platform does not distinguish the two, and neither can this action. Only the FORM of the address is checked here (cell, range, area name, intersection); whether it exists is up to the document. (1C 8.3.25+)

  • input_html(ref*, html*, attachments=null) Set HTML/text into a formatted-document field. attachments maps an image name used in the HTML (e.g. -> "p1") to that image as a base64 string; src must exactly match the attachment name. Names must be identifiers (no dots). (1C 8.3.8+)

  • read_document(ref*, start_address=null, max_cells=1000, area=null) Read nonempty spreadsheet cells as rows with cell addresses and merged-cell spans. Optional area is a rectangle such as R2C3:R8C5 (platform 8.3.25+), clipped to the document's data bounds. Intersecting merged cells retain their full address/span, even if they start outside area. If complete=false, pass next_address as start_address with the same area to continue. max_cells limits positions scanned per call (1–10000). Does not move the current area.

  • set_area_text(ref*, address*, text*) Set a spreadsheet cell's text by address, e.g. R2C1. Selects the cell, starts and finishes editing, then reads the result. Empty text clears it. Returns verified, changed and value_before/value_after. Numeric formatting can return verified=null with verification=numeric_equivalent. Rounded output returns value_verification_inconclusive: editing finished, but the exact value is not verified. Requires an editable document.

  • set_current_area(ref*, address*) Set the current area of a spreadsheet-document field (e.g. 'R1C1').

  • text_within_area_bounds(ref*, area=null) Whether the text in a spreadsheet-document area fits within its bounds (True) or is clipped to '#####' (False). Pass area (e.g. 'R1C1'); omit to check the current cell. (1C 8.3.25+)

  • write_content_to_file(ref*, filename=null, file_format=null, filter_index=null, save_as=null) Save HTML/formatted/spreadsheet/text fields (not PDF fields). filename forces Save As, replacing and finally clearing pending dialog answers on 8.3.25+; older versions cannot clear unused answers, so prepare only the next dialog. Spreadsheet file_format: mxl/html/pdf/xls/xlsx/ods/docx; extension alone does not select it. Alternatively use 0-based filter_index; mutually exclusive with file_format, omitted: first type. Without filename, use current name unless save_as=true; predefine possible dialogs before EACH call with tc_app(action="set_file_dialog_result"). ok confirms accepted requests, not completed disk writing. Final cleanup failure separately returns cleanup_error and dialog_answer_cleared=false; the next filename call retries cleanup before saving. (1C 8.3.8+) ref selects the client; otherwise set connection_id when several clients are connected. Use tc_session(action="list_connections"). Success may omit target/connection echoes and shorten window details. Use returned references unchanged in ref; re-find expired elements.

ParametersJSON Schema
NameRequiredDescriptionDefault
refNo
areaNo
htmlNo
textNo
indexNo
matchNo
actionYes
cancelNo
addressNo
save_asNo
filenameNo
max_cellsNo
attachmentsNo
file_formatNo
filter_indexNo
connection_idNo
start_addressNo
case_sensitiveNo

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden and does so extensively. It discloses verification semantics for ok=true, target_check states, target_hidden behavior, incomplete failure_context, invalid-address checking limits, and action-specific caveats for hyperlink clicks, edits, document reads, and file saving.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long and dense, but the tool supports 21 actions with many platform-specific caveats, so much of the length is earned. Structure is front-loaded with purpose and global rules before the action list, though some verbosity could be trimmed without losing essential information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no annotations, no output schema, 18 parameters, and 21 actions, the description is remarkably complete. It documents mutation behavior, return values for several actions, continuation semantics, deprecation alternatives, and error/verification caveats that an agent would otherwise have to guess.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate for 18 parameters. It explains each parameter in context: ref, area, html, text, index, match, action, cancel, address, save_as, filename, max_cells, attachments, file_format, filter_index, connection_id, start_address, and case_sensitive all receive concrete meaning, examples, or constraints.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence states a specific verb+resource domain: actions on document fields and spreadsheet areas, with a dispatcher action parameter. It lists all supported actions, so the agent knows exactly what the tool can do, though it does not sharply distinguish the umbrella boundary from siblings such as tc_field and tc_table.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives per-action guidance such as following begin_edit_current_area with input_text and end_edit_current_area, preferring get_area_text over the deprecated get_current_area_text, and using tc_session to list connections. It also notes sibling alternatives like tc_field and tc_app actions. However, there is no explicit general rule for when to choose tc_doc over siblings such as tc_field or tc_table, so usage guidance remains implied rather than decisive.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tc_fieldA

Actions on a form field, button, group or element addition. Choose action. Also available: tc_app(action="get_parent").

  • marks a required action parameter; the group schema treats action parameters as optional. Pass action="name" and only that action's parameters. ok=true means accepted; verify effects by reading state. target_check: present, unknown (uncheckable), off (disabled); present does not prove an effect. target_hidden=true means the target exists but is invisible; it describes the element, not its ancestors. Its absence says nothing; hidden targets may still act (e.g. activate). Invalid addresses are rejected only where the address can be checked; an unverified empty read may mean a missing target. failure_context describes state/editor/choices; its complete=false means incomplete diagnostics. Actions:

  • activate(ref*) Focus an element, switch a page or make a table column current; click does not do this. Commits pending input_text only by focusing a DIFFERENT focusable element; tc_form(action="goto_next_element") lets the form choose. Reports page visibility; still hidden returns target_hidden. No changed flag: verify via get_text/get_current_page, tc_form(action="get_current_element") or tc_table(action="get_current_item").

  • cancel_edit(ref*) Cancel pending input, like Esc. Does not undo values accepted by input_text(finish=true) or other actions that finish editing. (1C 8.3.6+)

  • choose_from_drop_list(ref*, value*) Pick a value from a field's open drop-down list by its display text (e.g. a colour name) or by its 0-based index in the list. The value is written at once — no focus change is needed. changed may come back null here even when the value did change: with the list open the value cannot be read. A changed window is returned when readback is enabled; inspect it before continuing. window_changed=false reuses the previous window description. Read the field with tc_field(action="get_text") to confirm. (1C 8.3.6+)

  • clear(ref*) Clear an input field's value.

  • click(ref*, diagnostics=False, diagnostics_wait=2.0) Click a button, field, group, decoration or command-interface button. For submenus, find descendant Buttons and click them directly, even through nested menus; opening the menus first is unnecessary. Use activate to focus inputs/cells/pages. window, when present, is the active window afterwards. window_changed=false means the previous window description still applies. diagnostics=true also reads messages, possibly from earlier actions. diagnostics_wait=0..60 seconds polls while messages are unavailable/empty; 0 reads once. Individual requests use set_max_action_time. diagnostics.status is read/unavailable/failed; null messages are not an empty list. ok or absent messages do not prove business success.

  • click_view_status_item(ref*, index*) Click a view-status item by 0-based index (or by its text). Nothing here proves the item was there: the platform answers the same when the form has no view-status line at all, and reading the texts first does not settle it either — that read comes back empty even while a search or filter is active. Judge by the list itself: read the rows before and after. (1C 8.3.16+)

  • close_drop_list(ref*) Close a field's drop-down list. Verify with tc_field(action="drop_list_is_open"). (1C 8.3.6+)

  • create(ref*) Create a new object from a reference field: opens the new object's form, as the field's '+' does. The field must have the FOCUS first — call tc_field(action="activate") on it, otherwise the command is accepted and nothing opens. Verify by reading the active window. (1C 8.3.6+)

  • current_check(ref*) Whether a form BUTTON is pressed, or shows a check mark next to it. Only buttons answer meaningfully: anything else — a checkbox field, a page, a table — always reports false, which means 'not applicable', not 'switched off'. Read a checkbox with tc_field(action="get_text") ('Да'/'Нет') and the active page with tc_field(action="get_current_page"). (1C 8.3.16+)

  • current_mode_is_edit(ref*) Whether a table row or spreadsheet-document field is currently in edit mode. (1C 8.3.3+)

  • current_opened(ref*) Whether a form group is currently open. (1C 8.3.16+)

  • decrease_value(ref*) Decrement a numeric (spinner) field. A track bar does NOT take this — move it with tc_field(action="goto_value") in percent. When the value does not move, applicable: false in the answer means the method does not fit this kind of field.

  • delete_view_status_item(ref*, index*) Delete a view-status item by 0-based index (or by its text) — this is how a filter or a search chip is dropped. Nothing here proves the item was there: the platform answers the same when the form has no view-status line, and reading the texts first does not settle it either. Judge by the list itself: read the rows before and after. (1C 8.3.16+)

  • drop_list_is_open(ref*) Whether a field's drop-down list is open. (1C 8.3.6+)

  • execute_choice_from_choice_list(ref*, value*) Pick from a field's choice list by its display text or by its 0-based index. Reports changed/value_before/value_after — the field's value read before and after, same as tc_field(action="choose_from_drop_list"). A changed window is returned with readback enabled. window_changed=false reuses the previous window description.

  • get_choice_list(ref*) Read radio-button options, an input's open drop-down list or a form's open choice list. For an input, open its list immediately before reading: the answer describes whichever drop-down is currently open. items contains {presentation, text}; presentations contains the displayed texts to select. A closed input list may return items=[] with status=unknown. (1C 8.3.12+)

  • get_command_bar(ref*) Get an element's own command panel object, if it has one. This is NOT the list of buttons: the panel is a container, and its buttons are read with a separate tc_app(action="get_child_objects") on the returned ref. An empty result means the element has no command panel of its own — a list table is the usual case, its buttons live in a form group next to it. (1C 8.3.3+)

  • get_context_menu(ref*) Get an element's context menu. The platform returns the menu as a form GROUP, not as a list of commands: 'menu' holds that group, and its items are read with a separate tc_app(action="get_child_objects") on the group's ref. (1C 8.3.3+)

  • get_current_page(ref*) Get the current page of a page group. To switch pages use tc_field(action="activate"): a click on a page does not switch to it. tc_field(action="current_check") is useless here — pages always report checked=false. (1C 8.3.6+)

  • get_data_presentation(ref*) Get an element's data presentation. Form fields only — not form decorations, and on a table the answer is always null. An empty input or label field returns "". presentation is null when no value was available; that is not proof that the field has no presentation.

  • get_edit_text(ref*) Read an input field's edit buffer — what is being typed, which is not necessarily what the form holds. get_data_presentation reads the accepted value; get_text reads displayed text. An empty input buffer returns ""; null means unavailable. (1C 8.3.3+)

  • get_linked_window(ref*) Get the linked window of a command-interface button. An empty answer means the button has no linked window — but only when target_check says the button itself is there; a wrong ref answers empty too, and the check is what tells the two apart. (1C 8.3.6+)

  • get_state_presentation(ref*) Read a form field's state presentation. An unavailable value is explained in the answer; null does not confirm that the field has no state presentation. (1C 8.3.16+)

  • get_text(ref*) Read displayed text (checkbox text follows the client language). An empty input or label field returns "". For an edit buffer use get_edit_text. If text is unavailable, the answer explains the limitation and suggests another reading action where applicable. null does not confirm an empty field. (1C 8.3.12+)

  • get_tooltip(ref*) Read an element's tooltip text (empty → None). (1C 8.3.3+)

  • get_view_status_item_texts(ref*) Get the view-status item texts of a form-element addition → list of strings. Do not use it to tell whether a filter or search is active: with a list narrowed down to one row by search the platform still answers with an empty collection. Check the effect by reading the rows. (1C 8.3.16+)

  • goto_value(ref*, percent*) Move a TRACK BAR to a value in PERCENT (0..100). This is a track bar method: on any other kind of field the command is accepted and nothing moves, and the answer then carries applicable: false. A spinner is stepped with increase_value/decrease_value instead. Returns changed/value_before/value_after. (1C 8.3.6+)

  • increase_value(ref*) Increment a numeric (spinner) field. A track bar does NOT take this — move it with tc_field(action="goto_value") in percent. When the value does not move, applicable: false in the answer means the method does not fit this kind of field.

  • input_text(ref*, text*, finish=True) Enter text; text="" clears. finish=true moves the owning form's focus once and verifies ordinary input; false keeps the edit buffer (e.g. for reference choice/cancel). Reference input may still require selection. Changed pending text causes pending_input_changed: re-enter or cancel. committed=true/false/null means accepted/pending/unverified; edit_finished means focus left; changed compares displayed text. Numeric formatting may yield verification=numeric_equivalent and committed=null. These flags do not confirm saving. For table cells use tc_table(action="set_cell_text"); finish text documents with activate on another element, spreadsheet cells with tc_doc end_edit_current_area.

  • is_enabled(ref*) Read the element's availability. A command can still refuse execution in the current form state. (1C 8.3.3+)

  • is_readonly(ref*) Whether an element is currently read-only — that is the element's own read-only property. Two other things look the same and are NOT this: an element switched off entirely (read that with tc_field(action="is_enabled")), and a spreadsheet-document field shown in view mode, which neither read reflects — there, tc_doc(action="begin_edit_current_area") runs the cell's details instead of editing. (1C 8.3.3+)

  • is_visible(ref*) Whether an element is currently visible. Returns an error instead of visible=false when there is no object at ref: for this read the protocol does report a missing target, so a mistyped address cannot pass for a hidden element. On the pages of a page group this does NOT tell you which page is on screen — several pages report visible=true at once; use tc_field(action="get_current_page") for that. (1C 8.3.3+)

  • open_drop_list(ref*) Open the drop-down list of a reference/enum field (call before choose_from_drop_list). (1C 8.3.6+)

  • open_field(ref*) Open a reference field's value (F4 / follow the link).

  • read_fields(targets*, properties=null) Read 1–100 fields of the active form without moving focus. properties defaults to ['text']; presentation reads data, edit_text reads the editing buffer. visible/enabled/readonly are optional. Table-column text reads the current row. Results follow input order (index is 0-based); unavailable properties remain null with a reason. Reads are sequential, not an atomic snapshot. targets is an array of {ref} objects returned by discovery. (1C 8.3.12+)

  • select_option(ref*, value*) Pick a radio-button option by its display text or by its 0-based index.

  • select_value(ref*, value=null, match=null, choice_table=null, choice_column=null, data_type=null, expected=null, max_rows=500, timeout=180) Select exact value text (drop-down first) or match={column title: exact text} in a choice form. Ambiguous/incomplete searches refuse selection. choice_table is an exact table name; choice_column limits value to a column title; data_type chooses a displayed type in the standard type dialog. expected checks accepted field text. Returns accepted value and verification. max_rows=1..10000; timeout is in seconds, 0<timeout<=3600, and covers the action. Failure leaves the UI and does not undo sent choices. Table cells use the current row and leave row editing open. (1C 8.3.12+)

  • set_check(ref*) Toggle a checkbox field. Inside a table this acts on the column that is the CURRENT cell, so make the target column current first — tc_field(action="activate") on the column element does that; a click on the cell does not.

  • set_fields(entries*) Fill 1..100 input fields or checkboxes in one active form, in order. Each entry has exactly one of text, checked (boolean), or select={value: exact text} / select={match: {column title: exact text}}; select accepts tc_field(action="select_value") options. Empty text clears; matching checkboxes are not toggled, unknown states stop (Russian/English Yes/No supported). Stops on refusal, pending choice, window change or unconfirmed value; earlier changes remain. Rechecks all values at the end; final_verified=null may mean equivalent numeric formatting. Results use 0-based input indexes. Does not save the document. entries contains {ref, text}, {ref, checked}, or {ref, select} objects; use discovered references unchanged. (1C 8.3.12+)

  • start_choosing(ref*) Open a reference field's choice form. Handles focus and table-cell editing. For CalendarField, selects the current date like a double-click; use goto_date first. Returns opened and the active window. A calendar selection need not open another window.

  • start_choosing_from_choice_list(ref*) Start choosing from a field's choice list.

  • title_is_shown(ref*) Whether an element's title is shown. (1C 8.3.25+)

  • wait_for_drop_list_generation(ref*, timeout=60) Wait timeout seconds (integer 0..65535) for a generated drop-down; returns generated. The result is not tied to ref and may be true before this field's list opens. Open this field's list first, then read it immediately. (1C 8.3.4+) ref selects the client; otherwise set connection_id when several clients are connected. targets/entries references also select it; all must belong to one connection. Use tc_session(action="list_connections"). Success may omit target/connection echoes and shorten window details. Use returned references unchanged in ref; re-find expired elements.

ParametersJSON Schema
NameRequiredDescriptionDefault
refNo
textNo
indexNo
matchNo
valueNo
actionYes
finishNo
entriesNo
percentNo
targetsNo
timeoutNo
expectedNo
max_rowsNo
data_typeNo
propertiesNo
diagnosticsNo
choice_tableNo
choice_columnNo
connection_idNo
diagnostics_waitNo

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does so richly: it explains target_check/target_hidden semantics, that ok=true is not proof of effect, null/empty read caveats, window_changed reuse, diagnostics status values, connection selection, ref expiry, and per-action version gates (1C 8.3.x+). This is well beyond what basic schema/annotations would convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Given 43 actions, the length is proportionate and front-loaded with global mechanics (dispatcher, target_check, connection rules) before the action list. It is dense and contains some near-duplicated caution text (e.g. the view-status 'judge by the list itself' passage appears twice), which keeps it from a perfect score.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 20-parameter, 43-action tool with no output schema and no annotations, the description covers return fields (changed, target_check, target_hidden, failure_context, window_changed, committed, verification), connection/ref lifetime rules, and cross-tool routing. An agent has what it needs to select an action and interpret its result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate, and it largely does: properties defaults and allowed values, targets/entries shapes, max_rows and timeout ranges, diagnostics_wait polling behavior, finish semantics, percent for track bars, and select_value's match/choice_table/choice_column/data_type/expected are all clarified. A few generic params (index, value, text) are only explained indirectly through their action bullets, leaving minor gaps.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the resource (form field, button, group, element addition) and explicitly states the dispatcher pattern ('Choose action'), then enumerates all 43 actions with a concrete verb and target each. It distinguishes itself from siblings by repeatedly routing table work to tc_table, form-level work to tc_form, and spreadsheet cells to tc_doc.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Nearly every action carries explicit when/when-not guidance and names alternatives, e.g. 'Use activate to focus inputs/cells/pages' vs click, 'For table cells use tc_table(action="set_cell_text")', and 'A track bar does NOT take this — move it with goto_value'. Conditions that select a sibling or a different action are spelled out rather than left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tc_findA

Search the UI tree for objects.

  • marks a required action parameter; the group schema treats action parameters as optional. Pass action="name" and only that action's parameters. Actions:

  • find_object(name=null, cls=null, type=null, root_ref=null, title=null, timeout=0, scope='window') Find the first object matching the criteria (parameters as in tc_find(action="find_objects")). When nothing matched, the answer carries the same filter diagnostics as tc_find(action="find_objects"). (1C 8.3.3+)

  • find_objects(name=null, cls=null, type=null, root_ref=null, title=null, timeout=0, scope='window', limit=null, cursor=null) Search UI objects: name/title support * ?; cls/type use discovered class/platform kind (tc_app(action="get_child_objects")). root_ref defaults to active window; scope=application requires omitting it. timeout retries while no matches (0: once). Empty results are ok; cls/type diagnostics identify unknown filters and list observed kinds. Windows/command buttons include url when available. No limit returns all; limit=1..1000 pages with total/has_more/next_cursor. Continue with cursor alone (plus connection_id if needed), no filters. Pages retain the original result for 5 minutes; elements may become stale. (1C 8.3.3+)

  • wait_for_object_displayed(name=null, cls=null, type=null, title=null, timeout=60) Poll the UI tree until an object matching the criteria appears, up to timeout seconds. Returns the object, or ok=False on timeout. Criteria as in tc_find(action="find_objects"). On timeout the answer says whether a cls was seen at all and lists the classes that were actually present, so a misspelled class name is distinguishable from an object that never appeared. (1C 8.3.3+) root_ref selects the client; otherwise set connection_id when several clients are connected. Use tc_session(action="list_connections"). Success may omit target/connection echoes and shorten window details. Use returned references unchanged in root_ref; re-find expired elements.

ParametersJSON Schema
NameRequiredDescriptionDefault
clsNo
nameNo
typeNo
limitNo
scopeNo
titleNo
actionYes
cursorNo
timeoutNo
root_refNo
connection_idNo

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does so well: timeout retry semantics (0: once), empty-result behavior, pagination retention window (pages kept 5 minutes, elements may go stale), and that success may omit target/connection echoes. It also explains the diagnostic payload on cls/type misses and on wait timeouts.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded one-line summary followed by clean per-action bullets, so structure is strong. It is somewhat long and repetitive (the "(1C 8.3.3+)" markers and repeated "Criteria as in tc_find(action='find_objects')" add bulk without information).

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex 3-action, 11-parameter tool with no annotations and no output schema, the description covers filters, paging, staleness, and key return fields (total/has_more/next_cursor, ok=False). A few return details (full object payload shape) remain implicit, but the essentials for correct invocation are present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate, and it effectively documents all 11 parameters: wildcard support on name/title, cls/type as discovered kinds, root_ref default to active window and reuse-unchanged guidance, scope enum behavior, limit paging range 1..1000, cursor continuation, connection_id disambiguation, and timeout retry semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ("Search the UI tree for objects") and then enumerates the three distinct actions with their individual semantics. The sibling tools (tc_table, tc_session, tc_app, etc.) are unrelated domains, so no sibling overlap ambiguity remains; an agent can tell exactly what this tool searches.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes between actions: find_object returns the first match, find_objects pages results, wait_for_object_displayed polls. It also states the required-action convention ("Pass action=name and only that action's parameters"), cursor continuation rules, and that scope=application requires omitting root_ref.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tc_formA

Actions on the managed form itself, including navigation between form elements and reading the focused element. Choose action. Also available: tc_field(action="is_visible"), tc_field(action="is_enabled"), tc_field(action="get_context_menu"), tc_app(action="get_parent").

  • marks a required action parameter; the group schema treats action parameters as optional. Pass action="name" and only that action's parameters. ok=true means accepted; verify effects by reading state. target_check: present, unknown (uncheckable), off (disabled); present does not prove an effect. target_hidden=true means the target exists but is invisible; it describes the element, not its ancestors. Its absence says nothing; hidden targets may still act (e.g. activate). Invalid addresses are rejected only where the address can be checked; an unverified empty read may mean a missing target. failure_context describes state/editor/choices; its complete=false means incomplete diagnostics. Actions:

  • compare_snapshot(snapshot_id*, ref=null) Compare the original form instance with its baseline; optional ref must identify the same instance. Returns changes/added/removed; observed means previously unread properties, not changes. complete/baseline_complete/errors mark read gaps. Uses baseline table settings; table_changes matches 1-based row positions and column titles, *_present distinguishes missing/empty cells. Tables are prepared before reading and stay selected; truncated tables are not compared. Added flags: '-' unread, 'unknown' failed. Stores no new snapshot; closed/reconnected forms need a new baseline. (1C 8.3.3+)

  • create_snapshot(ref=null, include_tables=False, max_rows=500) Save ManagedForm state (default active) for later compare_snapshot; returns snapshot_id/summary. Reads visibility/availability/read-only and ordinary values; hidden branches skip further reads, disabled elements skip read-only. include_tables adds display-ordered rows up to max_rows each without expanding trees; requires active form/finished input (8.3.6+). Tables requiring sequential navigation report table_requires_sequential_read and complete=false; use read_rows separately. Rows stay selected; 8.3 may activate/establish current rows. Preparation precedes final reading. Excludes document contents; sequential, not atomic; may take seconds. (1C 8.3.3+)

  • current_modified(ref*) Whether a form has been modified. (1C 8.3.3+)

  • delete_snapshot(snapshot_id*) Delete a saved snapshot belonging to this connection.

  • execute_choice_from_list(ref*, index*) Pick an item from a modal choice list by 0-based index or display text. Not a field's drop-down (use tc_field(action="choose_from_drop_list")). ref: the form (ManagedForm), not a field. (1C 8.3.8+)

  • execute_choice_from_menu(ref*, index*) Choose an item from an open menu by 0-based index or display text. For a submenu, call again to choose its item. Address the form or the spreadsheet field that opened the menu. A spreadsheet field requires platform 8.3.25 or newer. (1C 8.3.8+)

  • find_default_button(ref*) Find the form's default button. ref is the form's ref. (1C 8.3.3+)

  • get_context(ref=null, save_as_snapshot=False, include_tables=False, max_rows=500, root_ref=null, visible_only=False, include_commands=True, result_mode='changes') Inspect ManagedForm elements (including hidden), state, values and input context; includes discovery, so no separate search is needed. Use tc_find(action="find_objects") alone for element lookup. May take seconds. result_mode=changes returns a full first read, then only new/changed elements and removed objects since the previous complete read of this form; changed=false means no changes. Other interaction fields describe the current state. full returns everything. result_mode and full_reason identify the actual response; context_id/compared_to identify automatic baselines. Filter changes or lost baselines return full. Incomplete reads return full and keep the prior baseline. save_as_snapshot creates a separate fixed snapshot for compare_snapshot without another read. include_tables adds up to max_rows per table without expanding trees; rows stay selected, 8.3 may activate rows. Excludes document contents. Flags: '-' unread, 'unknown' failed, null unavailable (not empty). form_details reports optional hints/type restrictions/choices availability. root_ref limits output to a subtree; include_commands=false omits buttons/command groups; visible_only excludes known hidden/inactive pages, retains unknown visibility. Output filters do not narrow reading or fixed snapshot scope. complete/errors mark read gaps; snapshot_error marks failed saving. Sequential reads. (1C 8.3.3+)

  • get_current_element(ref*) Get the managed form's focused element as item: [{ref}]. ref: the form (ManagedForm). The platform can return no current element after navigating out of its fields.

  • goto_next_element(ref*) Move focus to the next element in the managed form's tab order. ref: the form (ManagedForm). This can finish the current field's pending input; read the field's data presentation to verify acceptance. Reference fields may still require choosing a value.

  • goto_previous_element(ref*) Move focus to the previous element in the managed form's tab order. ref: the form (ManagedForm). This can finish the current field's pending input; read the field's data presentation to verify acceptance.

  • list_snapshots(ref=null) List saved snapshots for this connection, optionally restricted to one ManagedForm ref. Returns IDs, form titles, timestamps, element counts, sizes and global storage limits. Listing does not refresh last_used_at or verify forms are still open; a supplied ref is validated.

  • wait_for_closing(window_title=null, timeout=60) Wait until a window closes, up to timeout seconds. Without window_title, watch the window active AT THE MOMENT OF THE CALL. After a close, pass window_title to check the closed window. Switching windows or opening a preview does not count as closing. If the target cannot be identified or its absence confirmed, return ok=False. (1C 8.3.3+) ref/root_ref selects the client; otherwise set connection_id when several clients are connected. Use tc_session(action="list_connections"). Success may omit target/connection echoes and shorten window details. Use returned references unchanged in ref/root_ref; re-find expired elements.

ParametersJSON Schema
NameRequiredDescriptionDefault
refNo
indexNo
actionYes
timeoutNo
max_rowsNo
root_refNo
result_modeNo
snapshot_idNo
visible_onlyNo
window_titleNo
connection_idNo
include_tablesNo
include_commandsNo
save_as_snapshotNo

TDQS

A4.2/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does so extensively: it explains ok=true semantics and the need to verify effects, target_check states (present/unknown/off), target_hidden meaning, failure_context and complete=false diagnostics, incomplete-read fallback to full with retained baselines, sequential/non-atomic snapshots that 'may take seconds', version gating (1C 8.3.3+/8.3.6+/8.3.25), and that snapshots store no new data on compare. This is unusually thorough disclosure of edge cases and side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but front-loads the purpose and organizes per-action detail into scannable bullets, with a shared caveat block before the action list. Some table-reading and snapshot caveats are restated across actions, and the density is high, so it is efficient but not maximally tight.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema and no annotations, so the description must cover inputs and returns, and it describes return shapes for most actions (changes/added/removed, snapshot_id/summary, item:[{ref}], ID/title/timestamp listings). Given 14 parameters and 13 actions it is close to complete, with only a few actions (delete_snapshot, current_modified) lightly specified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate, and it largely does: it defines ref/root_ref ('ref: the form (ManagedForm), not a field'), result_mode=changes vs full and the meaning of changed=false, include_tables/max_rows row semantics, save_as_snapshot, visible_only, include_commands, index (0-based), window_title, timeout, and connection_id. Only minor gaps remain (e.g., default resolution for ref when null).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening line states a clear verb+resource ('Actions on the managed form itself, including navigation... and reading the focused element') and the per-action bullets make each sub-operation unambiguous. It also names siblings it is not (tc_field for drop-downs, tc_find for element lookup), aiding discrimination. It stops short of a 5 only because the top-level scope is a broad action bundle rather than a single crisp purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Routing guidance is present and specific in several places: 'Not a field's drop-down (use tc_field(action="choose_from_drop_list"))', 'Use tc_find(action="find_objects") alone for element lookup', and the 'Also available' list. However there is no overall statement of when tc_form is the right entry point versus the other sibling families, so it falls short of explicit when/when-not coverage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tc_scenarioA

Record and replay UI scenarios.

  • marks a required action parameter; the group schema treats action parameters as optional. Pass action="name" and only that action's parameters. Actions:

  • record_cancel() Cancel user-actions recording (discard the scenario). (1C 8.3.2+)

  • record_finish(path=null) Stop recording; return XML in uilog or save path (relative to SERVER working directory; returns absolute). Write failure returns ok=false/error/path AND uilog; recording already stopped, so retry cannot recover it. Synth completion failure returns finish_not_confirmed with preserved XML. lost_actions means incomplete replay. no_effect lists unchanged readbacks by CALL index, not XML step; not proof of no effect. observed/not_observed count successful/unavailable readbacks; readback/scope describe coverage. Empty no_effect with observed=0 means nothing checked. (1C 8.3.2+)

  • record_pause() Pause user-actions recording: actions performed until tc_scenario(action="record_resume") stay out of the scenario. (1C 8.3.2+)

  • record_resume() Resume user-actions recording. (1C 8.3.2+)

  • record_start() Start recording a scenario (uilog) that tc_scenario(action="run_scenario") can replay later. Perform the real, effect-producing actions between start and tc_scenario(action="record_finish"), then read the scenario from finish. (1C 8.3.2+)

  • run_scenario(uilog=null, path=null, result_mode='summary') Replay uilog XML or path on the current form. Unsupported steps are skipped/listed; first failure stops at 0-based stopped_at. total counts reported steps, played counts attempted steps including failures. ok means all attempted commands accepted, not all effects verified; full steps[].changed follows each action's contract. Default summary; result_mode=full adds steps. Logs retain full details in both modes. Set connection_id when several clients are connected. Use tc_session(action="list_connections"). Success may omit target/connection echoes and shorten window details.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNo
uilogNo
actionYes
result_modeNo
connection_idNo

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden and delivers: error semantics (ok=false/error/path), unrecoverable write failure after recording already stopped, finish_not_confirmed XML preservation, lost_actions meaning, no_effect scope caveats, observed/not_observed counting, and that ok means commands accepted rather than effects verified. This is unusually rich disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded purpose followed by a scannable per-action bullet list; nearly every sentence conveys constraints or semantics. It is long, but the density is justified by six actions with distinct contracts, with only minor repetition between the header note and the bullet bodies.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a six-action mutation/replay tool with no annotations and no output schema, the description supplies action contracts, error and partial-failure behavior, result_mode semantics, and a cross-client connection note. Nothing essential to correct invocation appears missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate, and it largely does: path is relative to the SERVER working directory and returned absolute, uilog carries XML or a path for run_scenario, result_mode summary vs full is explained, and connection_id is tied to multi-client sessions. Only path/uilog format syntax is left thin.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Record and replay UI scenarios') and then enumerates six sub-actions, each with its own specific purpose. An agent can distinguish record_* from run_scenario and from sibling tools like tc_form/tc_window without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit sequencing (perform real actions between record_start and record_finish, then read from finish; replay via run_scenario) and cross-references tc_session for connection_id. It does not state any when-not-to-use condition, but usage context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tc_sessionA

Connect to, launch or stop the 1C test client.

  • marks a required action parameter; the group schema treats action parameters as optional. Pass action="name" and only that action's parameters. Actions:

  • connect(port=null, host='127.0.0.1', version=null, profile=null) Connect to a running /TESTCLIENT -TPort client using port or a list_profiles profile; explicit parameters override the profile. version must match the full running version (omitted: built-in default). Connect before UI actions. A new host/port creates a connection; the same host/port reconnects that client: connection_id is retained, but find elements again.

  • disconnect(force=False) Close the connection to the test client. force=true interrupts a pending network call; its result may be unknown. The 1C application remains running.

  • get_logging_status() Return call logging status, paths, call count, disk usage and any reason recording stopped.

  • launch_client(base=null, port=null, server=False, user=null, password=null, version=null, exe=null, extra_args=null, wait=120, connect=True, desktop='default', profile=null) Launch and optionally connect. base is a file infobase path, or 'server\infobase' with server=true; alternatively use a list_profiles profile. Explicit parameters override the profile. user/password are infobase credentials; the password is visible in the process command line. exe is the full path to 1cv8/1cv8c (with .exe on Windows); omitted: configured or auto-detected installation. A version prefix selects the latest matching build; use a full version or exe for an exact build. Omitted port allocates a free local port; each launch creates a connection_id. wait covers total startup including readiness; increase for slow bases. Linux default needs DISPLAY/XAUTHORITY; isolated needs Xvfb. isolated uses a separate desktop (Windows 10+/Linux) and stops with the server. connect=false confirms only an answering port, not a usable client.

  • list_connections() List registered clients with connection_id, profile, host, port, base, user and recording status. busy, active_action and active_seconds describe the running call. connected reports an open connection, not client responsiveness. base/user are known for clients launched here.

  • list_profiles() List named launch/connect profiles and their descriptions and settings, without passwords. Pass the name as profile to the listed action. Does not connect to or launch a client.

  • start_logging(screenshot_mode=null, reports=null) Start a call journal. Repeated start keeps the current journal. screenshot_mode: off, actions (changes and errors), or all calls; default follows server settings. reports: ["html"], ["allure"], ["html", "allure"], or ["none"] for JSONL only. Omit reports to use the server's configured formats; the response lists the selected reports. Saves files on the server. Allure results are finalized when logging stops.

  • stop_client(graceful_timeout=15) Stop the test client started by launch_client in this connection, and disconnect from it. Tries normal exit for graceful_timeout seconds (0..120, default 15), confirming known exit questions, then forces termination if needed. 0 forces termination immediately. Unsaved changes may be lost. Returns shutdown: graceful, forced, or already_exited; forced includes shutdown_reason. A failed stop retains process ownership for retry.

  • stop_logging() Stop call logging, finalize selected reports and return their paths. Does not stop the client. Set connection_id when several clients are connected. Use tc_session(action="list_connections"). Success may omit target/connection echoes and shorten window details.

ParametersJSON Schema
NameRequiredDescriptionDefault
exeNo
baseNo
hostNo
portNo
userNo
waitNo
forceNo
actionYes
serverNo
connectNo
desktopNo
profileNo
reportsNo
versionNo
passwordNo
extra_argsNo
connection_idNo
screenshot_modeNo
graceful_timeoutNo

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral load and does so richly: password visible in the process command line, wait covers total startup including readiness, force=true may leave an unknown result, unsaved changes may be lost on stop, failed stop retains process ownership for retry, repeated start_logging keeps the current journal, and Allure results finalize only on stop.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Length is justified by nine sub-actions. The dispatch grammar ('required action parameter... pass action="name" and only that action's parameters') is front-loaded, then each action is a compact bullet with only its own parameters and gotchas. No filler sentences.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 19-parameter, action-dispatched tool with no annotations and no output schema, the description is complete: it covers connection semantics, credentials, launch/version selection, logging modes and report formats, shutdown result values (graceful/forced/already_exited), and even notes that success responses may omit echoes.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate, and it largely does — port, host, version (full version vs prefix), profile override behavior, base ('server\infobase' with server=true), user/password, exe path rules, wait, desktop (isolated needs Xvfb), screenshot_mode, reports, graceful_timeout, and connection_id are all explained. Only extra_args is left undefined, a minor gap against 19 parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states exactly what the tool is (a connection/launch/stop controller for the 1C test client) and enumerates all nine actions with their concrete purposes. Each action is a specific verb+resource (connect, disconnect, launch_client, start_logging...), and the sibling UI tools (tc_table, tc_app, etc.) are implicitly differentiated as post-connection actions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit routing is given: 'Pass action="name" and only that action's parameters', 'Connect before UI actions', and 'Set connection_id when several clients are connected'. Action-level guidance includes when to use launch_client vs connect, and connect=false semantics vs. a real connection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tc_tableA

Read and edit table or tree rows, manage selection and expand or collapse nodes. Choose action. Also available: tc_field(action="is_visible"), tc_field(action="is_enabled"), tc_field(action="get_context_menu"), tc_app(action="get_parent").

  • marks a required action parameter; the group schema treats action parameters as optional. Pass action="name" and only that action's parameters. ok=true means accepted; verify effects by reading state. target_check: present, unknown (uncheckable), off (disabled); present does not prove an effect. target_hidden=true means the target exists but is invisible; it describes the element, not its ancestors. Its absence says nothing; hidden targets may still act (e.g. activate). Invalid addresses are rejected only where the address can be checked; an unverified empty read may mean a missing target. failure_context describes state/editor/choices; its complete=false means incomplete diagnostics. Actions:

  • add_rows(ref*, rows*) Add and fill 1–100 rows: rows=[{cells:[{column: element name, text: ...}]}], at most 1000 cells. Each cell uses text for an input column or checked=true/false for a checkbox column, never both. Requires finished row editing. Stops at the first refusal; earlier edits remain. results use 0-based input indexes; added=null means creation could not be confirmed. Each completed row is checked when filled, not after later rows. Does not save the document. (1C 8.3.12+)

  • can_be_expanded(ref*, row_column=null, row_value=null) Whether a table row/group can be expanded. Pass row_column+row_value to target a specific row by a column name or title; omit them to use the current row. can_expand=true does not promise that tc_table(action="expand") will work: rows reporting true have been observed to stay collapsed. The reliable evidence is tc_table(action="expand")'s own value_before/value_after pair.

  • change_row(ref*) Start editing the current table row/column. Activate the intended column first. Needs an existing row not already in edit mode. edit_mode confirms whether editing started; null means it could not be checked. For text input use set_cell_text for automatic preparation.

  • choose_row(ref*) Choose/double-click the current row: selects and closes a choice form, opens an item's card in a list (a folder's own card, not its contents). changed tracks ACTIVE WINDOW change only. If false, read the destination field: selection may have succeeded without closing a window.

  • collapse(ref*, row_column=null, row_value=null) Collapse a form group or table node. For tables, row_column+row_value targets a row by column name/title; omitted: current row. No collapsible node is not an error. changed=false only for equal successfully read value_before/value_after; null for form groups, read failures or readback=off. can_be_expanded applies only to table rows and does not guarantee an effect; verify before/after.

  • copy_row(ref*, confirm=null) Copy the current table row. On catalog/document lists a confirmation dialog may appear — set confirm=True/False to auto-answer it (default None: no dialog handling). (1C 8.3.25+)

  • delete_row(ref*, confirm=null) Deprecated alias for delete_rows(scope="current"). Use delete_rows for new calls. (1C 8.3.3+)

  • delete_rows(ref*, confirm=null, scope='current', unmark=False) Delete current or selected rows (selected: 8.3.6+, standard context-menu Delete/Mark, preserving selection). confirm=true/false answers; null leaves confirmation open. Lists may mark instead of remove. deleted=null means unverified. unmark=true removes marks (8.3.6+), only in lists with a standard marking command, not ordinary tables. (1C 8.3.3+)

  • deselect_all_rows(ref*) Clear the table's row selection. Needs platform 8.5.1 or newer — on every earlier one the platform has no such method. Plain row navigation drops the selection down to the current row, which is the only way to undo a multi-row selection there. (1C 8.5.1+)

  • deselect_row(ref*) Remove the current table row from the selection. Needs platform 8.5.1 or newer — on every earlier one the platform has no such method. The closest thing there is to pass over the row with toggle_selection set: that toggles it, so a selected row becomes unselected. (1C 8.5.1+)

  • end_edit_row(ref*, cancel=False) Finish editing the current table row. Set cancel to discard the edits instead of committing them.

  • expand(ref*, row_column=null, row_value=null, subordinates=False) Expand a form group or table node; subordinates also expands child rows. For tables, row_column+row_value targets a row by column name/title; omitted: current row. No expandable node is not an error. changed=false only for equal successfully read value_before/value_after; null for form groups, read failures or readback=off. can_be_expanded applies only to table rows and does not guarantee an effect; verify before/after.

  • find_rows(ref*, conditions*, columns=null, case_sensitive=False, max_rows=500, max_matches=50, text_format='plain') Search selectable rows of the CURRENT table, respecting filters/collapsed groups; never a database-wide search. conditions is an AND-list of {column: displayed TITLE, text, match: exact/contains/starts_with/ends_with}; literal, case-insensitive by default. Ignore search highlighting for comparison; plain removes it in results, raw retains it. Empty text matches displayed emptiness. columns selects returned titles. max_rows bounds checked rows, not client response; max_matches bounds matches. complete covers this table; matches_truncated marks omitted matches. No stable order/row IDs. Uses read_rows: clears selection, may reposition an unavailable cursor on older platforms; refuses unfinished row edits. (1C 8.3.6+)

  • get_cell_text(ref*, column*) Read the current row's displayed cell (may contain search markup). column is an element NAME or 0-based index; digit strings are indexes. Unknown/ambiguous names refuse; a matching title suggests the name. null does not prove emptiness. A COLUMN GROUP displayed as one column may return neighbouring/group text indistinguishable from the intended value; other-kind members may return null. A nonexistent table can also return text=null.

  • get_current_item(ref*) Get the current item of a table → {ref}. ref: the table.

  • get_current_row(ref*) Get the current table row as [{column: value}]. Returns [] if there is no current row or its values could not be read. Needs platform 8.5.1 or newer — on every earlier one, use get_selected_rows after moving to the desired row, or get_cell_text to read one column. (1C 8.5.1+)

  • get_list_settings(ref*, max_rows=500, timeout=180) Read filters and sorting through the list's standard settings form. Closes settings opened by this call. filters contains expanded tree rows, including the root and groups; orders follows sort priority. Values are displayed text. max_rows limits each settings table (1–10000). timeout bounds the operation in seconds (greater than 0, at most 3600). (1C 8.3.12+)

  • get_list_settings_fields(ref*, section='filters', max_rows=500, timeout=180) List available field captions for filters or orders through the standard list settings. Returns visible fields; collapsed branches are not traversed. Closes settings opened by this call. timeout limits the operation in seconds (0 < timeout <= 3600). (1C 8.3.12+)

  • get_selected_rows(ref*) Read selected rows as {column title: displayed value} maps. Row order is not guaranteed. The platform chooses the columns. Missing columns are unread, not empty; empty text can also represent an omitted value. Values may contain search highlighting. Use read_rows to read all selectable rows of the current table. (1C 8.3.6+)

  • go_one_level_down(ref*, row_column=null, row_value=null, column=null) Go one level down in a table tree. Pass row_column+row_value to target a specific row by a column value; row_column accepts a column name or title. Omit both to use the current row. Optional column names a column to read before and after the move; changed compares its cell text.

  • go_one_level_up(ref*, row_column=null, row_value=null, column=null) Go one level up in a table tree. Pass row_column+row_value to target a specific row by a column value; row_column accepts a column name or title. Omit both to use the current row. Optional column names a column to read before and after the move; changed compares its cell text.

  • goto_first_row(ref*, toggle_selection=False, column=null) Move to the first row of a table. Set toggle_selection to also toggle that row's selection. Pass column (the column element NAME) to have that cell read before and after the move: it comes back as value_before/value_after with changed=true when they differ. changed=false only means the two texts are the same — different rows can share a value; without column nothing is read and changed is null.

  • goto_last_row(ref*, toggle_selection=False, column=null) Move to the last row of a table. Set toggle_selection to also toggle that row's selection. Pass column (the column element NAME) to have that cell read before and after the move: it comes back as value_before/value_after with changed=true when they differ. changed=false only means the two texts are the same — different rows can share a value; without column nothing is read and changed is null.

  • goto_next_item(ref*) Move to the next item within a table. ref: the table.

  • goto_next_row(ref*, toggle_selection=False, column=null) Move to the next row of a table. Set toggle_selection to also toggle that row's selection. Pass column (the column element NAME) to have that cell read before and after the move: it comes back as value_before/value_after with changed=true when they differ. changed=false only means the two texts are the same — different rows can share a value; without column nothing is read and changed is null.

  • goto_previous_item(ref*) Move to the previous item within a table. ref: the table.

  • goto_previous_row(ref*, toggle_selection=False, column=null) Move to the previous row of a table. Set toggle_selection to also toggle that row's selection. Pass column (the column element NAME) to have that cell read before and after the move: it comes back as value_before/value_after with changed=true when they differ. changed=false only means the two texts are the same — different rows can share a value; without column nothing is read and changed is null.

  • goto_row(ref*, column=null, value=null, direction='down', toggle_selection=False, fields=null) Seek by column (displayed TITLE, not index) and value, or fields={title:value} for multiple columns; do not combine them. Values accept int/string and * ? wildcards; matching is case-sensitive displayed text. Searches FROM AND INCLUDING current row towards down/up, without wrapping. Step away first for the next match. A miss moves to the last row going down, or the first going up. toggle_selection toggles the destination; without criteria, the current row. found=null means no criteria or undetermined, never not-found. criteria uses titles; observed.column uses the element name. Refuses inactive containing pages. (1C 8.3.2+)

  • is_expanded(ref*, row_column=null, row_value=null) Whether a table row is expanded. Without row_column this reads the CURRENT row. Pass row_column (column name or title) and row_value to read another row without moving the cursor.

  • read_rows(ref*, max_rows=500, columns=null, text_format='plain') Read selectable rows within current filters/collapsed groups: row_count and at most max_rows (0: count only), unordered. columns selects returned titles; plain strips known search highlighting, raw retains it. Temporarily selects rows, then clears ALL previous selection. Keeps a usable current row; older platforms may move an unavailable cursor to first (cursor_repositioned=true). Single-selection tables are read sequentially (10000-row, 180-second scan limits), restoring the current row. Refuses unfinished row edits and inactive containing pages. (1C 8.3.6+)

  • search(ref*, text*, max_rows=500, timeout=180, settle_time=2, columns=null, text_format='plain') Set the list's standard search string (empty clears), preserving filters. Returns rows after input readback and two equal row reads settle_time seconds apart; stability is not a platform completion signal. max_rows=1..10000; truncated means more rows. 0<settle_time<timeout<=3600; timeout covers the action. columns selects titles; raw retains search highlighting. Reading clears selection; unfinished edits refuse. (1C 8.3.12+)

  • select_all_rows(ref*) Select all rows of a table. (1C 8.3.6+)

  • select_row(ref*) Add the current table row to the selection. Needs platform 8.5.1 or newer — on every earlier one the platform has no such method. Build a selection there by moving through rows with toggle_selection set — each row the cursor passes is toggled. (1C 8.5.1+)

  • set_cell_text(ref*, column*, text*) Set current-row column by element NAME; manages focus, continues existing row edits, finishes without discarding other cells, then reads back. Empty text clears. Returns verified/changed and displayed value_before/value_after; empty_value confirms emptiness despite formatting; numeric_equivalent may give verified=null. row_edit_pending means validation/reference choice kept editing: continue at the returned editor or end_edit_row(cancel=true). value_verification_inconclusive means editing finished but rounded output prevents exact verification.

  • set_list_settings(ref*, filters=null, orders=null, replace=False, max_rows=500, timeout=180) Apply standard list filters/sorting; field is an exact available caption, value is displayed text. filters/orders follow their schemas. Adds by default; replace=true replaces only supplied sections ([] clears one). Success applies and closes settings; failure leaves them open and earlier edits may remain. 0<timeout<=3600 seconds covers the operation. (1C 8.3.12+)

  • set_order(ref*, column*) Sort a table by a column, addressed by its TITLE. There is no direction parameter and no way to read the current direction: calling it again on the same column reverses the order. To learn which way it went, go to the first row and read a cell. (1C 8.3.6+)

  • set_row_values(ref*, cells*) Fill 1..100 cells of the current row: {column: element NAME, text} or {column, checked}. Matching checkboxes are not toggled. Continues editing, finishes once after all entries, then reads back. Refusal/unexpected editor stops with earlier edits preserved for completion/cancel. completed counts entries; edit_finished confirms row completion; final_verified=null may mean numeric equivalence. Results use 0-based input order. Does not add rows, alter selection or save. (1C 8.3.12+)

  • switch_row_delete_mark(ref*, confirm=True) Toggle the current row's deletion mark; confirm=true answers Yes, false No, null leaves the question open. dialog_answered proves only a response; changed is always null (no readable mark flag). To verify, invoke the mark command again and read its question: mark means currently unmarked, remove mark means marked. (1C 8.3.6+)

  • table_add_row(ref*) Add a row to a form table. Fill its cells with set_cell_text using column element names. ref selects the client; otherwise set connection_id when several clients are connected. Use tc_session(action="list_connections"). Success may omit target/connection echoes and shorten window details. Use returned references unchanged in ref; re-find expired elements.

ParametersJSON Schema
NameRequiredDescriptionDefault
refNo
rowsNo
textNo
cellsNo
scopeNo
valueNo
actionYes
cancelNo
columnNo
fieldsNo
ordersNo
unmarkNo
columnsNo
confirmNo
filtersNo
replaceNo
sectionNo
timeoutNo
max_rowsNo
directionNo
row_valueNo
conditionsNo
row_columnNo
max_matchesNo
settle_timeNo
text_formatNo
subordinatesNo
connection_idNo
case_sensitiveNo
toggle_selectionNo

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does so: it explains ok=true semantics, target_check/target_hidden interpretation, failure_context.complete, changed/value_before/value_after readback semantics, and per-action caveats (can_be_expanded not guaranteeing expand, deleted=null meaning unverified, confirmation dialogs). It also discloses destructive side effects such as read_rows/find_rows clearing selection.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is front-loaded with purpose and global semantics before the action list, which helps navigation. However it is very dense and repetitive: the goto_first/last/next/previous_row blocks repeat the same paragraph verbatim four times, and the target_check/target_hidden preamble is lengthy boilerplate that a 39-action dispatch tool inherits wholesale.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 39-action, 30-parameter tool with no output schema and no annotations, the description supplies the return-field semantics, verification guidance, version gates (1C 8.3.x/8.5.1+) and connection/ref handling needed to call it correctly. Nothing an agent needs to invoke the right action is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate, and it largely does: rows/cells shapes, conditions match modes, columns, max_rows vs max_matches, text_format plain/raw, settle_time/timeout bounds, confirm, scope, unmark, replace, section and toggle_selection are all explained in context. A few parameters (e.g. direction, fields) are only lightly characterized, and meaning is scattered across action blocks rather than consolidated.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence states a specific verb and resource ('Read and edit table or tree rows, manage selection and expand or collapse nodes') and the action enum enumerates every operation. It also routes agents to sibling tools (tc_field, tc_app) for related needs, so it is distinguishable from siblings without opening their schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Per-action guidance explicitly says when to use one action over another: delete_row is flagged as a deprecated alias for delete_rows(scope='current'); get_selected_rows points to read_rows for reading all rows; deselect_row/select_row/select_all_rows explain the fallback for pre-8.5.1 platforms. It also names prerequisites (finished row edits, active pages) and cross-tool alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tc_windowA

Actions on the client application window. Also available: tc_field(action="is_visible"), tc_field(action="is_enabled"), tc_field(action="get_context_menu"), tc_app(action="get_parent").

  • marks a required action parameter; the group schema treats action parameters as optional. Pass action="name" and only that action's parameters. Actions:

  • activate_window() Activate the current active window. (1C 8.3.3+)

  • answer_dialog(confirm=True, timeout=5) Wait up to timeout seconds and answer a modal question: confirm=true presses Button0, false Button1. Never presses Button2; inspect the question/window for other choices. Returns answered='Да'/'Нет' and question; both null means no dialog, question alone null means unreadable text. (1C 8.3.3+)

  • choose_user_message(text*, ref=null) Click the first user message matching text in the addressed window (active if omitted); * and ? are wildcards. Use get_user_message_texts to read the available messages first. (1C 8.3.3+)

  • close_user_messages_panel(ref=null) Close the addressed window's user-messages panel (active if omitted). This hides the panel; previous messages can reappear when it is reopened. It does not clear message history. (1C 8.3.6+)

  • close_window(ref=null) Close the window at ref, or the active window if omitted. Returns closed only after verifying that the window disappeared. If it remains open, returns window_not_closed and target; inspect the form or answer its dialog before retrying. Also closes an active local print preview when ref is omitted. (1C 8.3.3+)

  • execute_command(command*) Open a navigation link, e.g. 'e1cib/list/Справочник.Контрагенты', 'e1cib/app/Обработка.Имя' or a URL returned by the command interface. For a button name or title, find it and use click. Returns the resulting window; window_changed=false reuses the previous window description. An opened error window is a failure. (1C 8.3.3+)

  • get_command_interface(ref=null, all_sections=False, section=null, search=null, limit=50, offset=0, refresh=False, timeout=120) Read the current command tree of ref (default: main application window), without clicking. all_sections=true scans all sections-panel buttons and returns command counts; it changes menus, then attempts to restore them. Stops if a section changes application windows; check complete/restored. With all_sections=true, section (returned identifier or exact title) or search (path substring) returns cached commands, paged by limit=1..200 and offset; continue with next_offset. Commands contain title, path and url: pass url to execute_command. refresh=true repeats the scan; catalogues are kept until disconnect (up to 20 windows). timeout limits a scan in seconds (0 < timeout <= 3600). (1C 8.3.3+)

  • get_user_message_texts(ref=null, open_if_closed=True) Read messages from ref (active window if omitted). A closed panel is temporarily opened with Ctrl+Shift+Z and closed again; this requires local desktop access and the addressed window to be active (foreground on a shared desktop). Remote clients require an open panel. open_if_closed=false reads without opening; a closed panel returns user_messages_unavailable. Messages can belong to earlier actions or appear late; closing the panel does not erase them. A restore failure returns the messages with ok=false and panel_restored=false. (1C 8.3.3+)

  • goto_next_window(ref=null) Go to the next open window from the addressed main window (active if omitted). The client returns an error if navigation is unavailable. (1C 8.3.6+)

  • goto_previous_window(ref=null) Go to the previous open window from the addressed main window (active if omitted). The client returns an error if navigation is unavailable. (1C 8.3.6+)

  • goto_start_page(ref=null) Go to the start page from the addressed main window (active if omitted). The client returns an error if navigation is unavailable. (1C 8.3.6+)

  • open_user_messages_panel(ref=null) Open ref's user-message panel (active window if omitted); an open panel is left open. Uses Ctrl+Shift+Z: requires a local client and the addressed window active, foreground on a shared desktop. Remote/inaccessible clients return a refusal. Returns opened and panel_open. (1C 8.3.6+) ref selects the client; otherwise set connection_id when several clients are connected. Use tc_session(action="list_connections"). Success may omit target/connection echoes and shorten window details. Use returned references unchanged in ref; re-find expired elements.

ParametersJSON Schema
NameRequiredDescriptionDefault
refNo
textNo
limitNo
actionYes
offsetNo
searchNo
commandNo
confirmNo
refreshNo
sectionNo
timeoutNo
all_sectionsNo
connection_idNo
open_if_closedNo

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does so: it discloses side effects ('all_sections=true ... changes menus, then attempts to restore them'), failure semantics ('window_not_closed', 'user_messages_unavailable', 'ok=false and panel_restored=false', 'refusal' for remote clients), non-obvious behavior ('Never presses Button2', 'previous messages can reappear when it is reopened. It does not clear message history'), and a cache lifecycle ('catalogues are kept until disconnect (up to 20 windows)'). Reference expiry and echo-shortening behavior are also covered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with an invocation preamble ('Actions ... Pass action="name" and only that action's parameters') before the per-action list, and each action entry is one tight block with its version tag. It is long, but the length is proportionate to 12 actions; the repeated '(1C 8.3.x+)' tags and duplicated ref/connection guidance are the only low-yield repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema and no annotations, yet every action documents its return shape (answered/question, closed/window_not_closed+target, opened/panel_open, window_changed, next_offset, complete/restored) plus caveats about missing target/connection echoes in success responses. For a 12-action, 14-parameter dispatcher this is as complete as an agent needs to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and there are 14 parameters, so the description must compensate; it largely succeeds, documenting ref/connection_id selection, text wildcards, confirm's Button0/Button1 mapping, timeout semantics and bounds (0 < timeout <= 3600), limit/offset paging with next_offset, refresh, section/search, command URL format, and open_if_closed. Gaps remain for the shared limit/offset defaults and the anyOf number/integer typing of timeout, which are only partially constrained in prose.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The umbrella statement names the resource (client application window) and each of the 12 actions is given a concrete verb+object with its own return contract (close_window, execute_command, get_command_interface, etc.). It also routes the agent away from near-miss siblings by naming tc_field(action="is_visible"|"is_enabled"|"get_context_menu") and tc_app(action="get_parent") as alternatives, so overlap with adjacent tools is resolved inside the description.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Includes explicit routing ('For a button name or title, find it and use click', 'Use get_user_message_texts to read the available messages first'), prerequisites (local client with the addressed window active/foreground for Ctrl+Shift+Z operations; remote clients need an open panel), and the multi-client rule ('ref selects the client; otherwise set connection_id ... Use tc_session(action="list_connections")'). The invocation contract for a grouped schema is also stated ('Pass action="name" and only that action's parameters').

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 1 tool updatev1.9.0
    • Changedtc_window10 fields changed
      • changedInput schema / properties / action / enum
        Previous value: -[
        -  "activate_window",
        -  "answer_dialog",
        -  "choose_user_message",
        -  "close_user_messages_panel",
        -  "close_window",
        -  "execute_command",
        -  "get_command_interface",
        -  "get_user_message_texts",
        -  "goto_next_window",
        -  "goto_previous_window",
        -  "goto_start_page"
        -]New value: +[
        +  "activate_window",
        +  "answer_dialog",
        +  "choose_user_message",
        +  "close_user_messages_panel",
        +  "close_window",
        +  "execute_command",
        +  "get_command_interface",
        +  "get_user_message_texts",
        +  "goto_next_window",
        +  "goto_previous_window",
        +  "goto_start_page",
        +  "open_user_messages_panel"
        +]
      • addedInput schema / properties / all_sections
        Added value: +{
        +  "default": null,
        +  "title": "All Sections",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / limit
        Added value: +{
        +  "default": null,
        +  "title": "Limit",
        +  "type": "integer"
        +}
      • addedInput schema / properties / offset
        Added value: +{
        +  "default": null,
        +  "title": "Offset",
        +  "type": "integer"
        +}
      • addedInput schema / properties / open_if_closed
        Added value: +{
        +  "default": null,
        +  "title": "Open If Closed",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / refresh
        Added value: +{
        +  "default": null,
        +  "title": "Refresh",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / search
        Added value: +{
        +  "default": null,
        +  "title": "Search",
        +  "type": "string"
        +}
      • addedInput schema / properties / section
        Added value: +{
        +  "default": null,
        +  "title": "Section",
        +  "type": "string"
        +}
      • addedInput schema / properties / timeout / anyOf
        Added value: +[
        +  {
        +    "type": "integer"
        +  },
        +  {
        +    "type": "number"
        +  }
        +]
      • removedInput schema / properties / timeout / type
        Removed value: -"integer"
  2. 1 tool updatev1.8.1
    • Changedtc_app1 field changed
      • changedInput schema / properties / seconds / type
        Previous value: -"integer"New value: +"number"
  3. 5 tool updatesv1.8.0
    • Changedtc_field12 fields changed
      • addedInput schema / $defs / RefSelectEntry
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "ref": {
        +      "title": "Ref",
        +      "type": "string"
        +    },
        +    "select": {
        +      "$ref": "#/$defs/Selection"
        +    }
        +  },
        +  "required": [
        +    "ref",
        +    "select"
        +  ],
        +  "title": "RefSelectEntry",
        +  "type": "object"
        +}
      • addedInput schema / $defs / Selection
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "choice_column": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null,
        +      "title": "Choice Column"
        +    },
        +    "choice_table": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null,
        +      "title": "Choice Table"
        +    },
        +    "data_type": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null,
        +      "title": "Data Type"
        +    },
        +    "expected": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null,
        +      "title": "Expected"
        +    },
        +    "match": {
        +      "anyOf": [
        +        {
        +          "additionalProperties": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null,
        +      "title": "Match"
        +    },
        +    "max_rows": {
        +      "default": 500,
        +      "title": "Max Rows",
        +      "type": "integer"
        +    },
        +    "timeout": {
        +      "anyOf": [
        +        {
        +          "type": "integer"
        +        },
        +        {
        +          "type": "number"
        +        }
        +      ],
        +      "default": 180,
        +      "title": "Timeout"
        +    },
        +    "value": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null,
        +      "title": "Value"
        +    }
        +  },
        +  "title": "Selection",
        +  "type": "object"
        +}
      • changedInput schema / properties / action / enum
        Previous value: -[
        -  "activate",
        -  "cancel_edit",
        -  "choose_from_drop_list",
        -  "clear",
        -  "click",
        -  "click_view_status_item",
        -  "close_drop_list",
        -  "create",
        -  "current_check",
        -  "current_mode_is_edit",
        -  "current_opened",
        -  "decrease_value",
        -  "delete_view_status_item",
        -  "drop_list_is_open",
        -  "execute_choice_from_choice_list",
        -  "get_choice_list",
        -  "get_command_bar",
        -  "get_context_menu",
        -  "get_current_page",
        -  "get_data_presentation",
        -  "get_edit_text",
        -  "get_linked_window",
        -  "get_state_presentation",
        -  "get_text",
        -  "get_tooltip",
        -  "get_view_status_item_texts",
        -  "goto_value",
        -  "increase_value",
        -  "input_text",
        -  "is_enabled",
        -  "is_readonly",
        -  "is_visible",
        -  "open_drop_list",
        -  "open_field",
        -  "read_fields",
        -  "select_option",
        -  "set_check",
        -  "set_fields",
        -  "start_choosing",
        -  "start_choosing_from_choice_list",
        -  "title_is_shown",
        -  "wait_for_drop_list_generation"
        -]New value: +[
        +  "activate",
        +  "cancel_edit",
        +  "choose_from_drop_list",
        +  "clear",
        +  "click",
        +  "click_view_status_item",
        +  "close_drop_list",
        +  "create",
        +  "current_check",
        +  "current_mode_is_edit",
        +  "current_opened",
        +  "decrease_value",
        +  "delete_view_status_item",
        +  "drop_list_is_open",
        +  "execute_choice_from_choice_list",
        +  "get_choice_list",
        +  "get_command_bar",
        +  "get_context_menu",
        +  "get_current_page",
        +  "get_data_presentation",
        +  "get_edit_text",
        +  "get_linked_window",
        +  "get_state_presentation",
        +  "get_text",
        +  "get_tooltip",
        +  "get_view_status_item_texts",
        +  "goto_value",
        +  "increase_value",
        +  "input_text",
        +  "is_enabled",
        +  "is_readonly",
        +  "is_visible",
        +  "open_drop_list",
        +  "open_field",
        +  "read_fields",
        +  "select_option",
        +  "select_value",
        +  "set_check",
        +  "set_fields",
        +  "start_choosing",
        +  "start_choosing_from_choice_list",
        +  "title_is_shown",
        +  "wait_for_drop_list_generation"
        +]
      • addedInput schema / properties / choice_column
        Added value: +{
        +  "default": null,
        +  "title": "Choice Column",
        +  "type": "string"
        +}
      • addedInput schema / properties / choice_table
        Added value: +{
        +  "default": null,
        +  "title": "Choice Table",
        +  "type": "string"
        +}
      • addedInput schema / properties / data_type
        Added value: +{
        +  "default": null,
        +  "title": "Data Type",
        +  "type": "string"
        +}
      • changedInput schema / properties / entries / items / anyOf
        Previous value: -[
        -  {
        -    "$ref": "#/$defs/RefEntry"
        -  },
        -  {
        -    "$ref": "#/$defs/RefCheckEntry"
        -  }
        -]New value: +[
        +  {
        +    "$ref": "#/$defs/RefEntry"
        +  },
        +  {
        +    "$ref": "#/$defs/RefCheckEntry"
        +  },
        +  {
        +    "$ref": "#/$defs/RefSelectEntry"
        +  }
        +]
      • addedInput schema / properties / expected
        Added value: +{
        +  "default": null,
        +  "title": "Expected",
        +  "type": "string"
        +}
      • addedInput schema / properties / match
        Added value: +{
        +  "additionalProperties": {
        +    "type": "string"
        +  },
        +  "default": null,
        +  "maxProperties": 32,
        +  "minProperties": 1,
        +  "title": "Match",
        +  "type": "object"
        +}
      • addedInput schema / properties / max_rows
        Added value: +{
        +  "default": null,
        +  "title": "Max Rows",
        +  "type": "integer"
        +}
      • addedInput schema / properties / timeout / anyOf
        Added value: +[
        +  {
        +    "type": "integer"
        +  },
        +  {
        +    "type": "number"
        +  }
        +]
      • removedInput schema / properties / timeout / type
        Removed value: -"integer"
    • Changedtc_find2 fields changed
      • addedInput schema / properties / cursor
        Added value: +{
        +  "default": null,
        +  "title": "Cursor",
        +  "type": "string"
        +}
      • addedInput schema / properties / limit
        Added value: +{
        +  "default": null,
        +  "title": "Limit",
        +  "type": "integer"
        +}
    • Changedtc_form4 fields changed
      • addedInput schema / properties / include_commands
        Added value: +{
        +  "default": null,
        +  "title": "Include Commands",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / result_mode
        Added value: +{
        +  "default": null,
        +  "enum": [
        +    "changes",
        +    "full"
        +  ],
        +  "title": "Result Mode",
        +  "type": "string"
        +}
      • addedInput schema / properties / root_ref
        Added value: +{
        +  "default": null,
        +  "title": "Root Ref",
        +  "type": "string"
        +}
      • addedInput schema / properties / visible_only
        Added value: +{
        +  "default": null,
        +  "title": "Visible Only",
        +  "type": "boolean"
        +}
    • Changedtc_scenario1 field changed
      • addedInput schema / properties / result_mode
        Added value: +{
        +  "default": null,
        +  "enum": [
        +    "summary",
        +    "full"
        +  ],
        +  "title": "Result Mode",
        +  "type": "string"
        +}
    • Changedtc_table10 fields changed
      • addedInput schema / $defs / Filter
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "comparison": {
        +      "default": "eq",
        +      "enum": [
        +        "eq",
        +        "ne",
        +        "gt",
        +        "ge",
        +        "lt",
        +        "le",
        +        "contains",
        +        "not_contains",
        +        "filled",
        +        "not_filled"
        +      ],
        +      "title": "Comparison",
        +      "type": "string"
        +    },
        +    "enabled": {
        +      "default": true,
        +      "title": "Enabled",
        +      "type": "boolean"
        +    },
        +    "field": {
        +      "minLength": 1,
        +      "title": "Field",
        +      "type": "string"
        +    },
        +    "value": {
        +      "default": "",
        +      "title": "Value",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "field"
        +  ],
        +  "title": "Filter",
        +  "type": "object"
        +}
      • addedInput schema / $defs / Order
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "direction": {
        +      "default": "asc",
        +      "enum": [
        +        "asc",
        +        "desc"
        +      ],
        +      "title": "Direction",
        +      "type": "string"
        +    },
        +    "enabled": {
        +      "default": true,
        +      "title": "Enabled",
        +      "type": "boolean"
        +    },
        +    "field": {
        +      "minLength": 1,
        +      "title": "Field",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "field"
        +  ],
        +  "title": "Order",
        +  "type": "object"
        +}
      • changedInput schema / properties / action / enum
        Previous value: -[
        -  "add_rows",
        -  "can_be_expanded",
        -  "change_row",
        -  "choose_row",
        -  "collapse",
        -  "copy_row",
        -  "delete_row",
        -  "delete_rows",
        -  "deselect_all_rows",
        -  "deselect_row",
        -  "end_edit_row",
        -  "expand",
        -  "find_rows",
        -  "get_cell_text",
        -  "get_current_item",
        -  "get_current_row",
        -  "get_selected_rows",
        -  "go_one_level_down",
        -  "go_one_level_up",
        -  "goto_first_row",
        -  "goto_last_row",
        -  "goto_next_item",
        -  "goto_next_row",
        -  "goto_previous_item",
        -  "goto_previous_row",
        -  "goto_row",
        -  "is_expanded",
        -  "read_rows",
        -  "select_all_rows",
        -  "select_row",
        -  "set_cell_text",
        -  "set_order",
        -  "set_row_values",
        -  "switch_row_delete_mark",
        -  "table_add_row"
        -]New value: +[
        +  "add_rows",
        +  "can_be_expanded",
        +  "change_row",
        +  "choose_row",
        +  "collapse",
        +  "copy_row",
        +  "delete_row",
        +  "delete_rows",
        +  "deselect_all_rows",
        +  "deselect_row",
        +  "end_edit_row",
        +  "expand",
        +  "find_rows",
        +  "get_cell_text",
        +  "get_current_item",
        +  "get_current_row",
        +  "get_list_settings",
        +  "get_list_settings_fields",
        +  "get_selected_rows",
        +  "go_one_level_down",
        +  "go_one_level_up",
        +  "goto_first_row",
        +  "goto_last_row",
        +  "goto_next_item",
        +  "goto_next_row",
        +  "goto_previous_item",
        +  "goto_previous_row",
        +  "goto_row",
        +  "is_expanded",
        +  "read_rows",
        +  "search",
        +  "select_all_rows",
        +  "select_row",
        +  "set_cell_text",
        +  "set_list_settings",
        +  "set_order",
        +  "set_row_values",
        +  "switch_row_delete_mark",
        +  "table_add_row"
        +]
      • addedInput schema / properties / filters
        Added value: +{
        +  "default": null,
        +  "items": {
        +    "$ref": "#/$defs/Filter"
        +  },
        +  "maxItems": 100,
        +  "title": "Filters",
        +  "type": "array"
        +}
      • addedInput schema / properties / orders
        Added value: +{
        +  "default": null,
        +  "items": {
        +    "$ref": "#/$defs/Order"
        +  },
        +  "maxItems": 100,
        +  "title": "Orders",
        +  "type": "array"
        +}
      • addedInput schema / properties / replace
        Added value: +{
        +  "default": null,
        +  "title": "Replace",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / section
        Added value: +{
        +  "default": null,
        +  "enum": [
        +    "filters",
        +    "orders"
        +  ],
        +  "title": "Section",
        +  "type": "string"
        +}
      • addedInput schema / properties / settle_time
        Added value: +{
        +  "default": null,
        +  "title": "Settle Time",
        +  "type": "number"
        +}
      • addedInput schema / properties / text_format
        Added value: +{
        +  "default": null,
        +  "enum": [
        +    "plain",
        +    "raw"
        +  ],
        +  "title": "Text Format",
        +  "type": "string"
        +}
      • addedInput schema / properties / timeout
        Added value: +{
        +  "default": null,
        +  "title": "Timeout",
        +  "type": "number"
        +}
  4. 2 tool updatesv1.7.1
    • Changedtc_session3 fields changed
      • addedInput schema / properties / force
        Added value: +{
        +  "default": null,
        +  "title": "Force",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / graceful_timeout
        Added value: +{
        +  "default": null,
        +  "title": "Graceful Timeout",
        +  "type": "number"
        +}
      • addedInput schema / properties / reports
        Added value: +{
        +  "default": null,
        +  "items": {
        +    "enum": [
        +      "html",
        +      "allure",
        +      "none"
        +    ],
        +    "type": "string"
        +  },
        +  "title": "Reports",
        +  "type": "array"
        +}
    • Changedtc_window1 field changed
      • addedInput schema / properties / ref
        Added value: +{
        +  "default": null,
        +  "title": "Ref",
        +  "type": "string"
        +}
  5. 1 tool updatev1.5.1
    • Changedtc_table3 fields changed
      • changedInput schema / properties / action / enum
        Previous value: -[
        -  "add_rows",
        -  "can_be_expanded",
        -  "change_row",
        -  "choose_row",
        -  "collapse",
        -  "copy_row",
        -  "delete_row",
        -  "deselect_all_rows",
        -  "deselect_row",
        -  "end_edit_row",
        -  "expand",
        -  "find_rows",
        -  "get_cell_text",
        -  "get_current_item",
        -  "get_current_row",
        -  "get_selected_rows",
        -  "go_one_level_down",
        -  "go_one_level_up",
        -  "goto_first_row",
        -  "goto_last_row",
        -  "goto_next_item",
        -  "goto_next_row",
        -  "goto_previous_item",
        -  "goto_previous_row",
        -  "goto_row",
        -  "is_expanded",
        -  "read_rows",
        -  "select_all_rows",
        -  "select_row",
        -  "set_cell_text",
        -  "set_order",
        -  "set_row_values",
        -  "switch_row_delete_mark",
        -  "table_add_row"
        -]New value: +[
        +  "add_rows",
        +  "can_be_expanded",
        +  "change_row",
        +  "choose_row",
        +  "collapse",
        +  "copy_row",
        +  "delete_row",
        +  "delete_rows",
        +  "deselect_all_rows",
        +  "deselect_row",
        +  "end_edit_row",
        +  "expand",
        +  "find_rows",
        +  "get_cell_text",
        +  "get_current_item",
        +  "get_current_row",
        +  "get_selected_rows",
        +  "go_one_level_down",
        +  "go_one_level_up",
        +  "goto_first_row",
        +  "goto_last_row",
        +  "goto_next_item",
        +  "goto_next_row",
        +  "goto_previous_item",
        +  "goto_previous_row",
        +  "goto_row",
        +  "is_expanded",
        +  "read_rows",
        +  "select_all_rows",
        +  "select_row",
        +  "set_cell_text",
        +  "set_order",
        +  "set_row_values",
        +  "switch_row_delete_mark",
        +  "table_add_row"
        +]
      • addedInput schema / properties / scope
        Added value: +{
        +  "default": null,
        +  "enum": [
        +    "current",
        +    "selected"
        +  ],
        +  "title": "Scope",
        +  "type": "string"
        +}
      • addedInput schema / properties / unmark
        Added value: +{
        +  "default": null,
        +  "title": "Unmark",
        +  "type": "boolean"
        +}
  6. 5 tool updatesv1.5.0
    • Changedtc_app1 field changed
      • addedInput schema / properties / scope
        Added value: +{
        +  "default": null,
        +  "enum": [
        +    "window",
        +    "application"
        +  ],
        +  "title": "Scope",
        +  "type": "string"
        +}
    • Changedtc_find1 field changed
      • addedInput schema / properties / scope
        Added value: +{
        +  "default": null,
        +  "enum": [
        +    "window",
        +    "application"
        +  ],
        +  "title": "Scope",
        +  "type": "string"
        +}
    • Changedtc_session3 fields changed
      • changedInput schema / properties / action / enum
        Previous value: -[
        -  "connect",
        -  "disconnect",
        -  "launch_client",
        -  "list_connections",
        -  "stop_client"
        -]New value: +[
        +  "connect",
        +  "disconnect",
        +  "get_logging_status",
        +  "launch_client",
        +  "list_connections",
        +  "list_profiles",
        +  "start_logging",
        +  "stop_client",
        +  "stop_logging"
        +]
      • addedInput schema / properties / profile
        Added value: +{
        +  "default": null,
        +  "title": "Profile",
        +  "type": "string"
        +}
      • addedInput schema / properties / screenshot_mode
        Added value: +{
        +  "default": null,
        +  "enum": [
        +    "off",
        +    "actions",
        +    "all"
        +  ],
        +  "title": "Screenshot Mode",
        +  "type": "string"
        +}
    • Changedtc_table6 fields changed
      • addedInput schema / $defs / RowCondition
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "column": {
        +      "minLength": 1,
        +      "title": "Column",
        +      "type": "string"
        +    },
        +    "match": {
        +      "default": "exact",
        +      "enum": [
        +        "exact",
        +        "contains",
        +        "starts_with",
        +        "ends_with"
        +      ],
        +      "title": "Match",
        +      "type": "string"
        +    },
        +    "text": {
        +      "title": "Text",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "column",
        +    "text"
        +  ],
        +  "title": "RowCondition",
        +  "type": "object"
        +}
      • changedInput schema / properties / action / enum
        Previous value: -[
        -  "add_rows",
        -  "can_be_expanded",
        -  "change_row",
        -  "choose_row",
        -  "collapse",
        -  "copy_row",
        -  "delete_row",
        -  "deselect_all_rows",
        -  "deselect_row",
        -  "end_edit_row",
        -  "expand",
        -  "get_cell_text",
        -  "get_current_item",
        -  "get_current_row",
        -  "get_selected_rows",
        -  "go_one_level_down",
        -  "go_one_level_up",
        -  "goto_first_row",
        -  "goto_last_row",
        -  "goto_next_item",
        -  "goto_next_row",
        -  "goto_previous_item",
        -  "goto_previous_row",
        -  "goto_row",
        -  "is_expanded",
        -  "read_rows",
        -  "select_all_rows",
        -  "select_row",
        -  "set_cell_text",
        -  "set_order",
        -  "set_row_values",
        -  "switch_row_delete_mark",
        -  "table_add_row"
        -]New value: +[
        +  "add_rows",
        +  "can_be_expanded",
        +  "change_row",
        +  "choose_row",
        +  "collapse",
        +  "copy_row",
        +  "delete_row",
        +  "deselect_all_rows",
        +  "deselect_row",
        +  "end_edit_row",
        +  "expand",
        +  "find_rows",
        +  "get_cell_text",
        +  "get_current_item",
        +  "get_current_row",
        +  "get_selected_rows",
        +  "go_one_level_down",
        +  "go_one_level_up",
        +  "goto_first_row",
        +  "goto_last_row",
        +  "goto_next_item",
        +  "goto_next_row",
        +  "goto_previous_item",
        +  "goto_previous_row",
        +  "goto_row",
        +  "is_expanded",
        +  "read_rows",
        +  "select_all_rows",
        +  "select_row",
        +  "set_cell_text",
        +  "set_order",
        +  "set_row_values",
        +  "switch_row_delete_mark",
        +  "table_add_row"
        +]
      • addedInput schema / properties / case_sensitive
        Added value: +{
        +  "default": null,
        +  "title": "Case Sensitive",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / columns
        Added value: +{
        +  "default": null,
        +  "items": {
        +    "minLength": 1,
        +    "type": "string"
        +  },
        +  "maxItems": 100,
        +  "minItems": 1,
        +  "title": "Columns",
        +  "type": "array"
        +}
      • addedInput schema / properties / conditions
        Added value: +{
        +  "default": null,
        +  "items": {
        +    "$ref": "#/$defs/RowCondition"
        +  },
        +  "maxItems": 32,
        +  "minItems": 1,
        +  "title": "Conditions",
        +  "type": "array"
        +}
      • addedInput schema / properties / max_matches
        Added value: +{
        +  "default": null,
        +  "title": "Max Matches",
        +  "type": "integer"
        +}
    • Changedtc_window2 fields changed
      • changedInput schema / properties / action / enum
        Previous value: -[
        -  "activate_window",
        -  "answer_dialog",
        -  "close_user_messages_panel",
        -  "close_window",
        -  "execute_command",
        -  "get_command_interface",
        -  "get_user_message_texts",
        -  "goto_next_window",
        -  "goto_previous_window",
        -  "goto_start_page"
        -]New value: +[
        +  "activate_window",
        +  "answer_dialog",
        +  "choose_user_message",
        +  "close_user_messages_panel",
        +  "close_window",
        +  "execute_command",
        +  "get_command_interface",
        +  "get_user_message_texts",
        +  "goto_next_window",
        +  "goto_previous_window",
        +  "goto_start_page"
        +]
      • addedInput schema / properties / text
        Added value: +{
        +  "default": null,
        +  "title": "Text",
        +  "type": "string"
        +}
  7. 6 tool updatesv1.4.0
    • Changedtc_app4 fields changed
      • changedInput schema / properties / action / enum
        Previous value: -[
        -  "clear_file_dialog_result",
        -  "get_active_window",
        -  "get_child_objects",
        -  "get_current_error",
        -  "get_max_action_time",
        -  "get_parent",
        -  "get_performance",
        -  "set_file_dialog_result",
        -  "set_max_action_time"
        -]New value: +[
        +  "clear_file_dialog_result",
        +  "get_active_window",
        +  "get_child_objects",
        +  "get_current_error",
        +  "get_max_action_time",
        +  "get_parent",
        +  "get_performance",
        +  "get_screenshot",
        +  "set_file_dialog_result",
        +  "set_max_action_time"
        +]
      • addedInput schema / properties / grid
        Added value: +{
        +  "default": null,
        +  "title": "Grid",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / region
        Added value: +{
        +  "default": null,
        +  "items": {
        +    "type": "integer"
        +  },
        +  "title": "Region",
        +  "type": "array"
        +}
      • addedInput schema / properties / scale
        Added value: +{
        +  "default": null,
        +  "title": "Scale",
        +  "type": "integer"
        +}
    • Changedtc_doc3 fields changed
      • changedInput schema / properties / action / enum
        Previous value: -[
        -  "begin_edit_current_area",
        -  "click_formatted_doc_hyperlink",
        -  "click_formatted_string_hyperlink",
        -  "click_html_hyperlink",
        -  "end_edit_current_area",
        -  "get_area_text",
        -  "get_current_area_address",
        -  "get_current_area_field",
        -  "get_current_area_text",
        -  "get_doc_area_horizontal_size",
        -  "get_doc_area_vertical_size",
        -  "get_formatted_string_hyperlinks",
        -  "get_html",
        -  "included_in_merged_area",
        -  "input_html",
        -  "read_document",
        -  "set_area_text",
        -  "set_current_area",
        -  "text_within_area_bounds",
        -  "write_content_to_file"
        -]New value: +[
        +  "begin_edit_current_area",
        +  "click_formatted_doc_hyperlink",
        +  "click_formatted_string_hyperlink",
        +  "click_html_hyperlink",
        +  "end_edit_current_area",
        +  "find_text",
        +  "get_area_text",
        +  "get_current_area_address",
        +  "get_current_area_field",
        +  "get_current_area_text",
        +  "get_doc_area_horizontal_size",
        +  "get_doc_area_vertical_size",
        +  "get_formatted_string_hyperlinks",
        +  "get_html",
        +  "included_in_merged_area",
        +  "input_html",
        +  "read_document",
        +  "set_area_text",
        +  "set_current_area",
        +  "text_within_area_bounds",
        +  "write_content_to_file"
        +]
      • addedInput schema / properties / case_sensitive
        Added value: +{
        +  "default": null,
        +  "title": "Case Sensitive",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / match
        Added value: +{
        +  "default": null,
        +  "enum": [
        +    "contains",
        +    "exact"
        +  ],
        +  "title": "Match",
        +  "type": "string"
        +}
    • Changedtc_field7 fields changed
      • addedInput schema / $defs
        Added value: +{
        +  "RefCheckEntry": {
        +    "additionalProperties": false,
        +    "properties": {
        +      "checked": {
        +        "title": "Checked",
        +        "type": "boolean"
        +      },
        +      "ref": {
        +        "title": "Ref",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "ref",
        +      "checked"
        +    ],
        +    "title": "RefCheckEntry",
        +    "type": "object"
        +  },
        +  "RefEntry": {
        +    "additionalProperties": false,
        +    "properties": {
        +      "ref": {
        +        "title": "Ref",
        +        "type": "string"
        +      },
        +      "text": {
        +        "title": "Text",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "ref",
        +      "text"
        +    ],
        +    "title": "RefEntry",
        +    "type": "object"
        +  },
        +  "RefTarget": {
        +    "additionalProperties": false,
        +    "properties": {
        +      "ref": {
        +        "title": "Ref",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "ref"
        +    ],
        +    "title": "RefTarget",
        +    "type": "object"
        +  }
        +}
      • changedInput schema / properties / action / enum
        Previous value: -[
        -  "activate",
        -  "cancel_edit",
        -  "choose_from_drop_list",
        -  "clear",
        -  "click",
        -  "click_view_status_item",
        -  "close_drop_list",
        -  "create",
        -  "current_check",
        -  "current_mode_is_edit",
        -  "current_opened",
        -  "decrease_value",
        -  "delete_view_status_item",
        -  "drop_list_is_open",
        -  "execute_choice_from_choice_list",
        -  "get_choice_list",
        -  "get_command_bar",
        -  "get_context_menu",
        -  "get_current_page",
        -  "get_data_presentation",
        -  "get_edit_text",
        -  "get_linked_window",
        -  "get_state_presentation",
        -  "get_text",
        -  "get_tooltip",
        -  "get_view_status_item_texts",
        -  "goto_value",
        -  "increase_value",
        -  "input_text",
        -  "is_enabled",
        -  "is_readonly",
        -  "is_visible",
        -  "open_drop_list",
        -  "open_field",
        -  "select_option",
        -  "set_check",
        -  "start_choosing",
        -  "start_choosing_from_choice_list",
        -  "title_is_shown",
        -  "wait_for_drop_list_generation"
        -]New value: +[
        +  "activate",
        +  "cancel_edit",
        +  "choose_from_drop_list",
        +  "clear",
        +  "click",
        +  "click_view_status_item",
        +  "close_drop_list",
        +  "create",
        +  "current_check",
        +  "current_mode_is_edit",
        +  "current_opened",
        +  "decrease_value",
        +  "delete_view_status_item",
        +  "drop_list_is_open",
        +  "execute_choice_from_choice_list",
        +  "get_choice_list",
        +  "get_command_bar",
        +  "get_context_menu",
        +  "get_current_page",
        +  "get_data_presentation",
        +  "get_edit_text",
        +  "get_linked_window",
        +  "get_state_presentation",
        +  "get_text",
        +  "get_tooltip",
        +  "get_view_status_item_texts",
        +  "goto_value",
        +  "increase_value",
        +  "input_text",
        +  "is_enabled",
        +  "is_readonly",
        +  "is_visible",
        +  "open_drop_list",
        +  "open_field",
        +  "read_fields",
        +  "select_option",
        +  "set_check",
        +  "set_fields",
        +  "start_choosing",
        +  "start_choosing_from_choice_list",
        +  "title_is_shown",
        +  "wait_for_drop_list_generation"
        +]
      • addedInput schema / properties / diagnostics
        Added value: +{
        +  "default": null,
        +  "title": "Diagnostics",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / diagnostics_wait
        Added value: +{
        +  "default": null,
        +  "title": "Diagnostics Wait",
        +  "type": "number"
        +}
      • addedInput schema / properties / entries
        Added value: +{
        +  "default": null,
        +  "items": {
        +    "anyOf": [
        +      {
        +        "$ref": "#/$defs/RefEntry"
        +      },
        +      {
        +        "$ref": "#/$defs/RefCheckEntry"
        +      }
        +    ]
        +  },
        +  "maxItems": 100,
        +  "minItems": 1,
        +  "title": "Entries",
        +  "type": "array"
        +}
      • addedInput schema / properties / properties
        Added value: +{
        +  "default": null,
        +  "items": {
        +    "enum": [
        +      "text",
        +      "presentation",
        +      "edit_text",
        +      "visible",
        +      "enabled",
        +      "readonly"
        +    ],
        +    "type": "string"
        +  },
        +  "maxItems": 6,
        +  "minItems": 1,
        +  "title": "Properties",
        +  "type": "array"
        +}
      • addedInput schema / properties / targets
        Added value: +{
        +  "default": null,
        +  "items": {
        +    "$ref": "#/$defs/RefTarget"
        +  },
        +  "maxItems": 100,
        +  "minItems": 1,
        +  "title": "Targets",
        +  "type": "array"
        +}
    • Changedtc_form5 fields changed
      • changedInput schema / properties / action / enum
        Previous value: -[
        -  "current_modified",
        -  "execute_choice_from_list",
        -  "execute_choice_from_menu",
        -  "find_default_button",
        -  "get_current_element",
        -  "goto_next_element",
        -  "goto_previous_element",
        -  "wait_for_closing"
        -]New value: +[
        +  "compare_snapshot",
        +  "create_snapshot",
        +  "current_modified",
        +  "delete_snapshot",
        +  "execute_choice_from_list",
        +  "execute_choice_from_menu",
        +  "find_default_button",
        +  "get_context",
        +  "get_current_element",
        +  "goto_next_element",
        +  "goto_previous_element",
        +  "list_snapshots",
        +  "wait_for_closing"
        +]
      • addedInput schema / properties / include_tables
        Added value: +{
        +  "default": null,
        +  "title": "Include Tables",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / max_rows
        Added value: +{
        +  "default": null,
        +  "title": "Max Rows",
        +  "type": "integer"
        +}
      • addedInput schema / properties / save_as_snapshot
        Added value: +{
        +  "default": null,
        +  "title": "Save As Snapshot",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / snapshot_id
        Added value: +{
        +  "default": null,
        +  "title": "Snapshot Id",
        +  "type": "string"
        +}
    • Changedtc_session1 field changed
      • addedInput schema / properties / desktop
        Added value: +{
        +  "default": null,
        +  "enum": [
        +    "default",
        +    "isolated"
        +  ],
        +  "title": "Desktop",
        +  "type": "string"
        +}
    • Changedtc_table4 fields changed
      • addedInput schema / $defs
        Added value: +{
        +  "CellEntry": {
        +    "additionalProperties": false,
        +    "properties": {
        +      "column": {
        +        "title": "Column",
        +        "type": "string"
        +      },
        +      "text": {
        +        "title": "Text",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "column",
        +      "text"
        +    ],
        +    "title": "CellEntry",
        +    "type": "object"
        +  },
        +  "CheckCellEntry": {
        +    "additionalProperties": false,
        +    "properties": {
        +      "checked": {
        +        "title": "Checked",
        +        "type": "boolean"
        +      },
        +      "column": {
        +        "title": "Column",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "column",
        +      "checked"
        +    ],
        +    "title": "CheckCellEntry",
        +    "type": "object"
        +  },
        +  "RowEntry": {
        +    "additionalProperties": false,
        +    "properties": {
        +      "cells": {
        +        "items": {
        +          "anyOf": [
        +            {
        +              "$ref": "#/$defs/CellEntry"
        +            },
        +            {
        +              "$ref": "#/$defs/CheckCellEntry"
        +            }
        +          ]
        +        },
        +        "maxItems": 100,
        +        "minItems": 1,
        +        "title": "Cells",
        +        "type": "array"
        +      }
        +    },
        +    "required": [
        +      "cells"
        +    ],
        +    "title": "RowEntry",
        +    "type": "object"
        +  }
        +}
      • changedInput schema / properties / action / enum
        Previous value: -[
        -  "can_be_expanded",
        -  "change_row",
        -  "choose_row",
        -  "collapse",
        -  "copy_row",
        -  "delete_row",
        -  "deselect_all_rows",
        -  "deselect_row",
        -  "end_edit_row",
        -  "expand",
        -  "get_cell_text",
        -  "get_current_item",
        -  "get_current_row",
        -  "get_selected_rows",
        -  "go_one_level_down",
        -  "go_one_level_up",
        -  "goto_first_row",
        -  "goto_last_row",
        -  "goto_next_item",
        -  "goto_next_row",
        -  "goto_previous_item",
        -  "goto_previous_row",
        -  "goto_row",
        -  "is_expanded",
        -  "read_rows",
        -  "select_all_rows",
        -  "select_row",
        -  "set_cell_text",
        -  "set_order",
        -  "switch_row_delete_mark",
        -  "table_add_row"
        -]New value: +[
        +  "add_rows",
        +  "can_be_expanded",
        +  "change_row",
        +  "choose_row",
        +  "collapse",
        +  "copy_row",
        +  "delete_row",
        +  "deselect_all_rows",
        +  "deselect_row",
        +  "end_edit_row",
        +  "expand",
        +  "get_cell_text",
        +  "get_current_item",
        +  "get_current_row",
        +  "get_selected_rows",
        +  "go_one_level_down",
        +  "go_one_level_up",
        +  "goto_first_row",
        +  "goto_last_row",
        +  "goto_next_item",
        +  "goto_next_row",
        +  "goto_previous_item",
        +  "goto_previous_row",
        +  "goto_row",
        +  "is_expanded",
        +  "read_rows",
        +  "select_all_rows",
        +  "select_row",
        +  "set_cell_text",
        +  "set_order",
        +  "set_row_values",
        +  "switch_row_delete_mark",
        +  "table_add_row"
        +]
      • addedInput schema / properties / cells
        Added value: +{
        +  "default": null,
        +  "items": {
        +    "anyOf": [
        +      {
        +        "$ref": "#/$defs/CellEntry"
        +      },
        +      {
        +        "$ref": "#/$defs/CheckCellEntry"
        +      }
        +    ]
        +  },
        +  "maxItems": 100,
        +  "minItems": 1,
        +  "title": "Cells",
        +  "type": "array"
        +}
      • addedInput schema / properties / rows
        Added value: +{
        +  "default": null,
        +  "items": {
        +    "$ref": "#/$defs/RowEntry"
        +  },
        +  "maxItems": 100,
        +  "minItems": 1,
        +  "title": "Rows",
        +  "type": "array"
        +}
  8. 1 tool updatev1.0.2
    • Changedtc_table2 fields changed
      • changedInput schema / properties / action / enum
        Previous value: -[
        -  "can_be_expanded",
        -  "change_row",
        -  "choose_row",
        -  "collapse",
        -  "copy_row",
        -  "delete_row",
        -  "deselect_all_rows",
        -  "deselect_row",
        -  "end_edit_row",
        -  "expand",
        -  "get_cell_text",
        -  "get_current_item",
        -  "get_current_row",
        -  "get_selected_rows",
        -  "go_one_level_down",
        -  "go_one_level_up",
        -  "goto_first_row",
        -  "goto_last_row",
        -  "goto_next_item",
        -  "goto_next_row",
        -  "goto_previous_item",
        -  "goto_previous_row",
        -  "goto_row",
        -  "is_expanded",
        -  "select_all_rows",
        -  "select_row",
        -  "set_cell_text",
        -  "set_order",
        -  "switch_row_delete_mark",
        -  "table_add_row"
        -]New value: +[
        +  "can_be_expanded",
        +  "change_row",
        +  "choose_row",
        +  "collapse",
        +  "copy_row",
        +  "delete_row",
        +  "deselect_all_rows",
        +  "deselect_row",
        +  "end_edit_row",
        +  "expand",
        +  "get_cell_text",
        +  "get_current_item",
        +  "get_current_row",
        +  "get_selected_rows",
        +  "go_one_level_down",
        +  "go_one_level_up",
        +  "goto_first_row",
        +  "goto_last_row",
        +  "goto_next_item",
        +  "goto_next_row",
        +  "goto_previous_item",
        +  "goto_previous_row",
        +  "goto_row",
        +  "is_expanded",
        +  "read_rows",
        +  "select_all_rows",
        +  "select_row",
        +  "set_cell_text",
        +  "set_order",
        +  "switch_row_delete_mark",
        +  "table_add_row"
        +]
      • addedInput schema / properties / max_rows
        Added value: +{
        +  "default": null,
        +  "title": "Max Rows",
        +  "type": "integer"
        +}
  9. 10 tool updatesv1.0.0
    • First observedtc_app
    • First observedtc_calendar
    • First observedtc_doc
    • First observedtc_field
    • First observedtc_find
    • First observedtc_form
    • First observedtc_scenario
    • First observedtc_session
    • First observedtc_table
    • First observedtc_window

TDQS

A4.5/5.0

Scored across 10 tools

Disambiguation4/5

The ten tools are grouped by clear UI domains such as table, window, field, form, document, calendar, and session, so most selections are obvious. However, element discovery/reading overlaps somewhat between tc_app, tc_find, tc_form, and tc_field, requiring descriptions to cross-reference each other to steer correct usage.

Naming Consistency5/5

All top-level tools follow a consistent tc_<noun> snake_case pattern, and the nested action names are also uniformly snake_case verbs. There is no mixing of camelCase, PascalCase, or vague standalone names.

Tool Count5/5

Ten top-level tools is well within the ideal 3–15 range for a broad UI automation server, and each domain-specific group earns its place. The very large operation surface is handled through action parameters rather than by exploding the exposed tool count.

Completeness5/5

The surface covers connection/session lifecycle, window navigation, form/field/table/document/calendar interaction, UI tree search, snapshots and scenario replay, logging, screenshots, and file dialogs. No obvious lifecycle or operation gap stands out for 1C UI test automation.

Maintenance

ActivityMaintained
ResponsivenessResponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Integrates AI agents with 1C:Enterprise databases via MCP and REST API, supporting a built-in HTTP server (no Python required) or a Python proxy mode.
    286
    GPL 3.0
  • F
    license
    A
    quality
    D
    maintenance
    Enables AI agents to interact with 1С:Enterprise and BAS ERP systems through REST and HTTP services, providing tools for searching catalogs, creating documents, and querying stock balances.
    6
    -