MCP QA — тестирование 1С
MCP QA позволяет ИИ управлять тестовой базой через логическую модель форм 1С: читать окна и поля, находить элементы, вводить значения, нажимать кнопки и команды, проверять результат.
С версии 0.6.0 контейнер сам работает менеджером тестирования: он подключается к уже запущенному тест-клиенту 1С и говорит с ним по протоколу тестирования напрямую. Отдельный процесс 1С с /TestManager и база-менеджер не нужны, платформы 1С в образе нет.
Поставка и требования
Образ:
comol/qa_mcp:latest— версия 0.7.16; других тегов на Docker Hub нет, только Linux/amd64, вариантовlightиarm64нет.Ключ в
config.env:LICENSE_KEY_QA; внутри сервера:LICENSE_KEYили путь к файлу ключа вLICENSE_KEY_FILE.Порт: 8020; MCP:
http://127.0.0.1:8020/mcp; liveness:/healthz.Имя MCP-подключения:
1c-qa; транспорт Streamable HTTP с состоянием сеанса.Режим контейнера — нативный:
MCP_QA_EXECUTOR=native, в командной строке--backend native. Он включён в образе по умолчанию.Тест-клиент запускает человек на своей Windows-машине: тонкий клиент с
/TestClient -TPort1538или веб-клиент с?TestClient. Контейнер подключается к адресу изMCP_QA_TESTCLIENT, по умолчаниюhost.docker.internal:1538. Платформа 1С, её лицензия и база в поставку не входят.Учётная запись Windows не нужна. Канал тестирования проходит проверку подлинности Windows (NTLM, библиотека
pyspnegoв образе), но тест-клиент 8.3.27 принимает её от любой учётной записи; вход в базу 1С выполняет сам тест-клиент при запуске. ПеременныеMCP_QA_TESTCLIENT_USER,MCP_QA_TESTCLIENT_PASSWORD,MCP_QA_TESTCLIENT_DOMAINнеобязательны.Embeddings, LLM API и выгрузка метаданных не нужны.
Глобальные IMAGE_VARIANT/IMAGE_TAG к QA не применяются: образ задаёт отдельное значение QA_IMAGE.
Ограничения версии 0.7.16
Операции. Нативно выполняются все операции инструментов
qa_*/ui_*: окна, формы и их элементы, таблицы и списки (поиск, состояние просмотра, стандартная настройка списка), поля всех видов, выпадающие списки и списки выбора, выбор ссылки, календарь, табличный документ, HTML и форматированный документ, диалоги и стартовые окна, проверки, журнал действий пользователя, показатели производительности, результат диалога выбора файла.ui_evalиqa_run_scriptисполняют встроенный язык в процессе менеджера, которого в контейнере нет, и отвечаютexecutor_capability.Снимок экрана и скрытый рабочий стол в нативном режиме невозможны:
ui_screenshotиqa_start(hidden_desktop=True)отвечают ошибкойexecutor_capability. Контейнер не видит экран Windows. Визуальную проверку в отчёте отмечайте как невыполненную.Платформа 8.5. Проверено 01.10.2026 на тонком клиенте 8.5.1.1522: 0.7.9 подключается без
platform_version, работают окна, вопросы, сообщения и ошибки, поля, таблицы и деревья, поиск и отбор в списке, документ с табличной частью, запись элемента. Тест-клиент 8.5 открывает базу 8.3.27 и не конвертирует её.qa_statusпоказываетcompatibility: unverified: записей обмена для 8.5 в корпусе нет. Методы, появившиеся в 8.5.1 (ТестируемаяГруппаФормы.Нажать,ВыделитьСтроку,СнятьВыделениеСтроки,СнятьВыделениеВсехСтрок,ПолучитьТекущуюСтрокутаблицы формы), инструментами пока не вызываются.Снимок развёрнутого окна 8.5. Если развёрнутое окно тест-клиента 8.5 снять через
PrintWindow, клиент начинает занимать ядро процессора, а канал тестирования перестаёт отвечать:qa_startждёт 120 с, затем отвечает «already connected to another manager». Помогает только завершение процесса тест-клиента.qa-testclient.ps1 captureиз правил на 8.5 на время снимка восстанавливает развёрнутое окно и затем снова разворачивает его (полеmaximized_restored_for_captureв ответе). На 8.3.27 такого нет.Выгрузка табличного документа (
ui_spreadsheet(action="write")) пишет файл на машине тест-клиента по пути в её синтаксисе. Контейнер этот файл не читает:file_validationотвечаетnot_verifiable_client_side, файл проверяется там, где он записан.Обрыв связи во время действия. Если связь с тест-клиентом оборвалась, исход действия неизвестен: сервер закрывает соединение и не принимает новых команд, пока
qa_command_statusне подтвердит это. Затемqa_reconnect(force=True)и прочитайте окно (ui_window_tree); действие вслепую не повторяйте. Для канала расширения —qa_command_status(channel="client"). С 0.7.16 сервер при обрыве проверяет порт тест-клиента. Если порт не отвечает, процесс клиента, скорее всего, завершился (например, после ошибки сеанса). Тогда ответ прямо предлагает перезапустить клиент и вызватьqa_start:qa_reconnectздесь не поможет. В ответе и вqa_command_statusесть причина обрыва (cause) и результат проверки (test_client.listening). Текст ошибки, которую 1С показала перед завершением, после выхода процесса не прочитать — он есть в журнале регистрации или в технологическом журнале клиента; пока клиент жив, окно ошибки читаетui_errors.«Already connected to another manager» без второго менеджера. Так клиент отвечает, пока не отпустил прежнюю, уже оборванную связь: он завис на модальном окне, выполняет долгий серверный вызов или завершается. Закройте диалог в клиенте или подождите; если не помогает — перезапустите клиент.
Простой. Тест-клиент 8.3.27 разрывает соединение с менеджером, который молчит 200 с. С версии 0.7.3 сервер, как и менеджер 1С, шлёт сигнал простоя раз в 5 с, и связь переживает паузы; потерянную связь
qa_statusпоказывает полемlink. На 0.7.2 после паузы дольше трёх минут вызовитеqa_reconnect(force=True)и прочитайте окно, прежде чем продолжать.Запуск 1С, установка расширения
MCPQAClientи сборка баз выполняются не сервером, а на машине с платформой — вручную или сторонними инструментами.qa_setupиqa_install_clientотвечаютexecutor_capability.Диагностика в нативном режиме (0.7.5).
qa_doctorпроверяет не платформу и базу-менеджер, а адрес тест-клиента изMCP_QA_TESTCLIENT: слушает ли порт, адрес канала расширения, состояние сеанса; подсказка называет команду запуска тест-клиента, а неqa_setup.qa_startвозвращаетignored_arguments, если переданыuser,passwordилиclient_kind: вход в базу и вид клиента задаёт тот, кто запустил тест-клиент.qa_run_scriptиui_screenshotотвечаютexecutor_capabilityсразу, без обращения к тест-клиенту.Таймауты (0.7.5). Таймаут инструмента (
timeout,timeout_seconds; без негоMCP_QA_COMMAND_TIMEOUT, 120 с) действует как срок ожидания каждого ответа тест-клиента в этой операции, не более часа;ui_waitпринимаетtimeoutдо 900 с. Ошибка в аргументе (например, число вне диапазона протокола) больше не закрывает соединение как потерянное, а ожидание формы или диалога прекращается сразу, как только связь потеряна, вместо опроса до конца таймаута. Послеqa_stopбарьер «исход неизвестен» снимается.Занятый сервер (0.7.6). Все инструменты выполняются по очереди под одной блокировкой сеанса.
qa_statusне встаёт в очередь: если другой инструмент работает дольше 5 с, он отвечаетbusy: trueи называет операцию (running).qa_stopв нативном режиме в той же ситуации сначала закрывает связь с тест-клиентом (зависшее ожидание завершается с неизвестным исходом, полеaborted), затем останавливает сеанс. Объём одного обхода ограничен:max_nodes≤ 5000,max_depth≤ 20,max_rows/max_table_rows≤ 1000,max_columns≤ 200,max_rows × max_columns≤ 20000, переход к номеру строки ≤ 10000; большее значение отклоняется до обращения к тест-клиенту.Отказ разбора (0.7.6). Если тест-клиент отвечает исключением RPC («Ошибка формата потока»), сервер закрывает связь. Отказ относится к одному запросу: предыдущие действия составной операции могли выполниться, поэтому её исход остаётся неизвестным. Далее
qa_command_status,qa_reconnect(force=True)и проверка формы перед решением о повторе.Канал расширения (0.7.6). Ответ принимается только на выданную по
pollи ещё не отвеченную команду; статус JSON длиннее 65 536 символов отбрасывается, строки журнала обрезаются до 2000 символов, тело — до 4 МБ. Потерянный ответ:qa_command_status(channel="client", wait_seconds=0)только сообщает состояние; вызов сwait_seconds> 0 ждёт исходный ответ, сохраняя барьер (can_continue: false), если ответ не пришёл. Новая команда не отправляется, исходная не повторяется. Барьер снимается после получения её ответа.Открытие и закрытие форм (0.7.7).
ui_close_form(on_prompt=…)больше не принимает за вопрос о сохранении любое активное окно: вопросом считается окно, которого не было до закрытия, пока форма ещё открыта. Форма, закрывшаяся без вопроса, не даёт ошибку «кнопка не нажата»; нажатая кнопка возвращается вprompt_answered, аclosedпоказывает, закрылась ли форма на самом деле (falseпослеcancelи когда вопрос остался без ответа — тогда заголовок окна вblocked_by).ui_openоткрывает основную форму списка (kind+metadata_nameбезuuidиform_name) сразу навигационной ссылкой, не обращаясь к расширению MCPQAClient; отказОткрытьФорму, после которого форма открыта по ссылке, не показывается вclient_hook_log_tail. Если элемент найден не в активном окне (поиск идёт по всему приложению), ответ инструмента содержитfound_inс заголовком и формой этого окна и заголовком активного окна.Сборка тест-клиента (0.7.9). Версию платформы тест-клиента указывать не нужно. Тест-клиент принимает менеджер только своей сборки: сервер представляется 8.3.27.2130, а клиент другой сборки (8.3.25, 8.3.27.2214, 8.5 и т. д.) в отказе называет свою, и сервер подключается ещё раз уже с ней.
qa_start(platform_version=…)задаёт только первую попытку; фактическая сборка —platform_versionвqa_status. В 0.7.7 и раньше на клиенте не 8.3.27.2130qa_startбезplatform_versionотвечал «expected a text message»; обход —platform_version=<сборка клиента>(полеversionв ответеqa-testclient.ps1 start).Тест-клиент на другой машине и Docker Engine на Linux (0.7.10). Если тест-клиент считает менеджер нелокальным (Docker Engine на Linux, WSL2 без Docker Desktop, QA на другом хосте), он отвечает на вступление пустым сообщением. С 0.7.10 сервер в этом случае подключается ещё раз с обменом ключом, как штатный менеджер 1С для другой машины. Настраивать ничего не нужно, подключение дольше примерно на секунду. Проверено с клиентом 8.3.27.2130 из WSL Ubuntu (NAT). Контейнер Docker Desktop клиент видит локальным, для него ничего не меняется.
Старые версии платформы (0.7.10). Методы, которых нет в сборке тест-клиента, сервер не вызывает. Например, на 8.3.13 это доступность и «только просмотр» формы (с 8.3.25) и
ТекущееОткрытагруппы (с 8.3.16). В подробном дереве (ui_inspect) этих полей нет, прямой вызов отвечает «Метод объекта не обнаружен…». Раньше такой вызов мог аварийно завершить тест-клиент 8.3.13. Если клиент не применяет фильтр поиска и возвращает прямых потомков, сервер ищет сам, обходя дерево (ui_find,ui_selectпо имени и типу). На 8.3.13 проверено только имитацией на 8.3.27: платформы 8.3.13 у нас нет.Адрес тест-клиента на сеанс (0.7.13).
qa_start(testclient="хост:порт")подключает этот сеанс к указанному тест-клиенту вместоMCP_QA_TESTCLIENT(формат тот же, IPv6 в скобках;portпо-прежнему заменяет порт). Без параметра всё как раньше. Адрес остаётся за сеансом,qa_reconnectподключается к нему же; ключtestclientможно записать и в профиль (qa_profiles). Только для режимаnative.«Отсутствует подходящий клиент тестирования» (0.7.14). Это ответ самой платформы на команду подключения: тест-клиент принял соединение, но сеанса для менеджера у него нет. Причин две. Первая — клиент ещё не вошёл в базу: открыто окно входа, лицензии или другой стартовый диалог (заголовок окна пустой, главного окна 1С нет; при запуске через планировщик задач диалог может открыться там, где его не видно). Проверьте, что окно 1С открылось и вход выполнен; передавайте
/Nи/P(пустой пароль —/P ""), добавьте/DisableStartupDialogs. Вторая — не совпал идентификатор клиента (MCP_QA_TESTCLIENT_IDиTestClientIDвеб-клиента). С 0.7.14 сервер называет обе причины в тексте ошибкиqa_start, сохраняя текст платформы.Тест-клиент под Linux (0.7.12). По сообщению пользователя, тест-клиент 8.3.27 под Linux отвечает на билет вступления самим билетом. До 0.7.12 подключение обрывалось ошибкой «the test client rejected the intro: V8IntroTicketReq …». С 0.7.12 сервер в этом случае продолжает проверку подлинности, а клиента, который принял соединение сразу, берёт без неё. Если подключиться не удалось, ошибка содержит ответ клиента целиком — пришлите её в поддержку. Тест-клиент под Linux мы сами не проверяли.
Таблицы и виды метаданных (0.7.9).
ui_table:select,edit,delete,copyпри заданномrowсначала переходят к строке и завершаются ошибкой, если её нет;editотвечает реальнымediting, аselectиeditв списке называют открывшуюся форму вwindow_after; чтение строк (content,ui_list) возвращает курсор на исходную строку (или на первую) и отдаётcurrent_row.ui_open:kindпринимает русские имена видов (Справочник,Документы, …),metadata_name— полное имя (Справочник.Организации) безkind. Описанияqa_start,qa_stopиqa_statusописывают контейнер: сервер 1С не запускает, только подключается; полеdesktopиз статуса убрано.По прогонам агентов на ЗУП (0.7.9).
Дерево формы.
ui_window_treeпо умолчаниюdetail="lite". Вliteтолько видимые элементы: скрытые пропускаются вместе с вложенными (их число —hidden_skipped), контекстные меню не раскрываются. Форма документа ЗУП вliteзанимала 65–100 тысяч символов, больше предела ответа клиента, и агенты вводили значения в скрытые поля.ui_window_changesбезdetailиobserveсравнивают так же, как снят последний снимок.observeпри смене формы возвращает окно иtree_omitted, а не всё дерево.ui_inspectстроится поlite.Открытие форм. Окно ошибки вместо цели (неверное имя метаданных, исключение в модуле формы) завершает
ui_openсразу и с текстом ошибки; раньше вызов ждал 30 с и отвечал «Новые формы: нет». Сразу сообщается и заголовок, не совпавший сtarget_title, когда открылась форма с целевым именем. Подменённая форма (список сотрудников ЗУП) принимается примерно через 3 с вместо 30.Ошибки.
ui_errorsчитает текст открытогоErrorWindow, если платформа описания ошибки не хранит (исключение при открытии формы).Диалоги.
ui_dialog(action="click")требуетtitleилиnameкнопки: без них нажималась первая кнопка открытой формы документа.Таблицы.
selectиselect_rowперед выбором делают текущей колонкуcolumnили первую колонкуrow: выбор на колонке индикатора в списке сотрудников ЗУП открывал отчёт вместо карточки. Колонками считаются и поля внутри групп колонок. Таблица и элемент безscopeищутся сначала в активном окне.Поля и отчёты.
ui_setпроверяет, что список выбора закрылся, и сообщаетdropdown_open, если ничего не выбрано.ui_get_textпри неудаче возвращает ошибку с причиной вместо{}. Пустой табличный документ вui_spreadsheet(size,text) отдаётstate— надпись «Отчет формируется...» или «Изменились настройки…».ui_form(command_bar)читает группуФормаКоманднаяПанель, если платформа панель не отдаёт, и не перечисляет скрытые кнопки.ui_select(auto)не открывает форму выбора безchoice_table/choice_row.ui_close_form, если форма не закрылась без вопроса, отдаётcurrent_control.
Флажки, строки, меню и снимок на 8.5 (0.7.10).
ui_assert(kind="element", checked=…)проверяет и поле-флажок (по «Да» / «Нет»), раньше только кнопку с пометкой.ui_table(action="end_edit"), когда строка уже не редактируется (её завершилиinput_cellилиui_select), отвечаетended: falseбез ошибки.ui_form(action="menu_choice")без открытого меню подсказываетui_field(action="dropdown_select")для списка выбора поля.ui_screenshotисполнителяplatformна время снимка восстанавливает развёрнутое окно клиента 8.5 и новее (maximized_restored_for_capture): снимок развёрнутого окна 8.5.1.1522 вешал клиент.Большие формы и командные панели (0.7.11). В
liteтаблица даётcolumns— имена видимых колонок — вместо узлов колонок, командной панели и меню таблицы: форма начисления зарплаты ЗУП с восемью таблицами уменьшилась с 62 до 22 тысяч символов.ui_form(action="command_bar")находит панели и внутри обычных групп формы и возвращает остальные вmore_groups.ui_clickпо заголовку нажимает кнопку, если заголовок совпал и с подменю («Заполнить»).ui_dialog(optional=True)без нужной кнопки отвечаетclicked: false, а не ошибкой.Настройки подключения (0.7.6).
MCP_QA_COMMAND_TIMEOUTучитывается также в native-режиме.qa_reconnectсохраняет явно заданную версию платформы. НекорректныйMCP_QA_TESTCLIENTотклоняется до запуска сервера или остановки текущего сеанса; IPv6 задаётся как[::1]:1538.Строки длиннее 65 535 символов тест-клиент 8.3.27 принимает от менеджера (проверено до миллиона символов); ограничения нет.
Образ (0.7.6) без
pillow,psutil, исходников 1С и PowerShell-скриптов: они нужны только Windows-исполнителю.HEALTHCHECKберёт порт изMCP_QA_HTTP_PORT.
Установка (PowerShell)
Из корня распакованного MCP_Distr. Сначала проверьте, свободен ли порт 8020. При существующем QA используйте его либо отдельные порт, имя контейнера и том. Работающий сервер нельзя пересоздавать в ходе тестирования.
Дождитесь healthy, затем проверьте полноценный MCP-сеанс:
Ожидаются "backend": "native", "version": "0.7.16", tool_count: 62 и ответ qa_status с "executor": "native". /healthz проверяет только HTTP, не доступность 1С. Ключ не записывается в mcp.json:
Если задан QA_HTTP_TOKEN, добавьте клиенту Authorization: Bearer <ваш токен>. Этот HTTP-токен отличается от лицензии. При изменении QA_HTTP_PORT поправьте URL. Неверный/пустой ключ завершает сервер с Invalid LICENSE_KEY и кодом 1. Можно вместо переменной передать LICENSE_KEY_FILE: смонтируйте файл только для чтения и задайте путь внутри контейнера. Ошибка чтения файла блокирует запуск.
Первый сеанс
На тестовой Windows-машине запустите тест-клиент, например:
Затем в одном MCP-сеансе:
В нативном режиме qa_start не запускает 1С, а подключается к тест-клиенту: адрес берётся из параметра testclient или, без него, из MCP_QA_TESTCLIENT, параметр port заменяет порт, connection — только имя сеанса. qa_stop отключается от клиента и не закрывает его. Для веб-клиента с TestClientID=<ид> задайте тот же идентификатор в MCP_QA_TESTCLIENT_ID. Порт тестирования веб-клиента открывает не браузер, а процесс веб-сервера с публикацией базы, по умолчанию 1538: MCP_QA_TESTCLIENT=<хост веб-сервера>:1538 (проверено на IIS, Apache на Linux не проверялся). UI-действия изменяют данные — используйте тестовую базу или копию.
Один удалённый MCP QA — несколько компьютеров с тест-клиентами (0.7.13). Если контейнер работает на отдельном хосте (например, 10.10.0.239:8020), а тест-клиенты — на рабочих ПК разработчиков, каждый агент передаёт адрес своего ПК: qa_start(connection="ut", testclient="10.10.0.124:1538") или профиль с ключом testclient. MCP_QA_TESTCLIENT остаётся адресом по умолчанию. Порт тест-клиента на ПК должен быть открыт для хоста MCP (правило брандмауэра Windows для 1cv8c или порта). Контейнер держит один сеанс: новый qa_start сбрасывает предыдущий, поэтому для одновременной работы нескольких разработчиков нужен свой контейнер на каждого (свой порт MCP). Адрес вызывающего компьютера сервер сам не подставляет: за NAT Docker Desktop или прокси он видит адрес шлюза, а не ПК.
ui_open(kind=..., metadata_name=...) без form_name открывает и распознаёт основную форму объекта, в том числе заданную в конфигурации (Обработка.Имя.Форма.Форма). Если конфигурация открывает вместо неё свою форму (ЗУП открывает список сотрудников формой обработки), принимается единственная новая форма, в ответе — substituted_for; при неудаче ошибка перечисляет открывшиеся формы. При открытии через расширение подменённую форму распознаёт MCPQAClient 0.6.1: оно сообщает имя формы, которую фактически открыл ОткрытьФорму. Если расширение не знает вычисленного имени формы («Неизвестное имя формы»: конфигурация подменяет форму в ОбработкаПолученияФормы), с 0.7.4 форма открывается навигационной ссылкой, а текст отказа — в hook_refused. Основная форма списка с 0.7.7 открывается навигационной ссылкой всегда, без обращения к расширению. ui_close_form закрывает указанную форму или активное окно, но не главное: при активном главном окне и при ненайденной форме ничего не закрывается.
С 0.7.16 ui_input, ui_set и ui_table(action="input_cell") не очищают поле перед вводом: введённый текст заменяет прежний, а clear=True с пустым текстом очищает поле. Поле, которое не принимает ввод текста (например, стандартный период в таблице настроек отчёта), отвечает ошибкой и сохраняет значение. В ответе описан ввод через форму выбора: ui_field(action="choose"), затем в окне выбора периода DateBegin, DateEnd и Select. Действие над скрытой таблицей (например, при свёрнутой панели настроек) отвечает «Таблица … сейчас скрыта», а content возвращает hidden: true.
С 0.7.3 действия, меняющие значение (ui_input, ui_set, ui_select, ui_field со значением, ui_table(action="input_cell")), возвращают value_before / value_after и verified: поле показывает заданное значение, числа сравниваются как числа (100 = 100,00). applied: false значит, что текст ещё в редакторе поля: платформа применит его и выполнит ПриИзменении, когда фокус уйдёт с поля. messages — сообщения формы, появившиеся за время действия; window_after — окно, ставшее активным (kind: question для вопроса, error для окна ошибки, иначе form). Отказ, при котором форма выдала сообщения, заканчивается текстом Form messages: … — обычно там причина отказа. ui_messages отвечает panel_shown: false, если у окна нет панели сообщений.
Расширение MCPQAClient по сети
Для обычного тестирования расширение не нужно: окна, формы, поиск, нажатия, ввод, таблицы, диалоги и ожидания сервер выполняет сам по протоколу тестирования, а формы и списки открывает навигационными ссылками e1cib/…. Расширение MCPQAClient в тестовой базе нужно для того, чего в протоколе нет: ui_form_schema (реквизиты формы с типами), qa_data_candidates (значения из базы для подстановки) и ui_open через ОткрытьФорму, в том числе неосновной формы по имени (form_name): навигационная ссылка открывает только основную форму. Без расширения qa_status показывает client_hook.available: false, остальные инструменты работают.
Файл расширения — servers/MCPQAClient.cfe в архиве дистрибутива MCP_Distr.zip; режим совместимости расширения 8.3.14. Устанавливайте его только в тестовую базу или её копию, на машине с платформой:
Для серверной базы вместо /F укажите /S"<сервер>\<база>", при пользователях в базе — /N и /P. То же можно сделать в конфигураторе: «Конфигурация» → «Расширения конфигурации» → «Добавить», затем загрузить конфигурацию расширения из файла и обновить конфигурацию базы данных.
Контейнер не делит с тест-клиентом файлы, поэтому расширение опрашивает сервер по HTTP:
Установите расширение в тестовую базу и снимите у него «Безопасный режим»: расширению нужны файл указателя и HTTP-соединение с сервером.
qa_startвозвращает вclient_hook.pointerадрес канала с токеном сеанса видаhttp://127.0.0.1:8020/client-bus/v1?token=….Запишите этот текст в файл
%TEMP%\mcp_qa_client_spool.txtна машине тест-клиента. Расширение проверяет файл раз в 5 секунд и после новогоqa_startподхватывает новый токен без перезапуска клиента.qa_statusпоказываетclient_hook.available: true, когда канал работает.
Адрес канала — это адрес сервера, каким его видит машина тест-клиента. По умолчанию http://127.0.0.1:<MCP_QA_HTTP_PORT>; при другом опубликованном порте задайте MCP_QA_CLIENT_BUS_URL, например http://127.0.0.1:8030. Канал защищён токеном сеанса, а не токеном MCP_QA_HTTP_TOKEN; расширению передаются только операции ping, open_form, form_schema, data_candidates.
Состав образа
Прикладные модули, включая реализацию протокола тестирования, скомпилированы Cython. Точки входа, регистрация инструментов и ASGI-интерфейс остаются в Python для совместимости интроспекции.
Last updated