Спасибо!

Мы очень рады, что Вам нравится данный проект и вы проголосовали за его развитие.

Работа над задачами по проекту отнимает у его разработчика самое ценное — время, так что небольшая компенсация в виде материальной поддержки поднимет интерес к разработке и позволит сделать больше задач для общей пользы :)

OK

Модуль MCP XiaoZhi AI

Владелец задачи: golnet, Moscow - Russia
Текущий статус: Поддержка
Страница дополнения

Модуль MCP XiaoZhi - это интеллектуальный интерфейс управления устройствами, обеспечивающий голосовое управление и автоматизацию домашних систем с помощью китайской колонки или приложении на Android. Модуль позволяет управлять различными типами устройств (свет, розетки, термостаты, ворота, шторы и др.) с помощью голосовых команд на русском языке. Поддерживает интеграцию с MajorDoMo, предоставляет функции распознавания речи, синтеза речи (TTS), управления устройствами по алиасам, комнатам и типам. Обеспечивает удобное управление умным домом с помощью голосовых команд вида "включи свет в гостиной", "покажи температуру в бане", "открой ворота".

19.10.2026

Версия 2.01.28: сообщения колонке отдаются с указанием колонки-источника

(golnet)

Версия 2.01.28: сообщения колонке отдаются с указанием колонки-источника

  • mcp_speaker_queue.SOURCE_ID: колонка, с которой передали команду; в ответе инструмента колонка получает директиву произнести текст и назвать комнату-источник.

  • Новый инструмент speaker_messages: переданные колонке сообщения по фразе «есть сообщения» (с источником), пустая очередь — «новых сообщений нет».

  • Инструкции сервера (initialize): при активации колонки — скрытый вызов where_am_i с device_id; сообщения произносятся после ответа пользователю.

  • device_id добавлен в схему и описания всех инструментов: одну сессию обслуживают все колонки XiaoZhi.

  • Уборка журнала очереди: раз в час удаляются доставленные старше суток.

  • Версия модуля и LIB_REVISION — 2.01.28.
    https://github.com/golnet1/majordomo-mcp/commit/02...
Обсуждение (0) (0)

19.10.2026

Справка: убрана техническая информация

(golnet)

Справка: убрана техническая информация

Удалены пункты про логи (строка старта моста с версией и датами файлов, диагностика выбора датчика). Убраны внутренние пути (lib/requirements.txt, python3/pip3, lib/.venv, .venv/bin), название таблицы devices и служебное значении типа button. Блок «Сервис» описан как запуск/остановка/перезапуск модуля.
https://github.com/golnet1/majordomo-mcp/commit/6f...

Обсуждение (0) (0)

19.10.2026

Версия 2.01.27

(golnet)

Версия 2.01.27

Поднята версия модуля и ревизия Python-кода перед работой над автоперезапуском моста.
https://github.com/golnet1/majordomo-mcp/commit/4a...

Обсуждение (0) (0)

19.10.2026

Диагностика: дублируем версию модуля в /tmp/mcp_xiaozhi_startup.log

(golnet)

Диагностика: дублируем версию модуля в /tmp/mcp_xiaozhi_startup.log

Чтобы по логу точно увидеть версию модуля при старте моста — дополнительно пишем её в отдельный файл.
https://github.com/golnet1/majordomo-mcp/commit/05...

Обсуждение (0) (0)

18.10.2026

Датчики: комната из вопроса учитывается при выборе датчика (#43)

(golnet)

Датчики: комната из вопроса учитывается при выборе датчика (#43)

Раньше get_sensor_value искал датчик только по алиасу устройства и по комнате
колонки. Если в вопросе названа комната («какая температура в спальне»), а
синонима на неё у устройства нет, то при нескольких датчиках этой величины дома
модуль отвечал «датчик не найден» — хотя датчик в этой комнате есть.

  • mcp-xiaozhi.py: в get_sensor_value комната из вопроса определяется и
    учитывается при поиске датчика (приоритет: комната из вопроса -> комната
    найденного устройства -> комната колонки);
  • mcp_class.py: find_sensor_by_kind получил параметр text — если ни одна комната
    не подошла, датчик выбирается по комнате, названной прямо в вопросе (сверка
    со комнатами кандидатов, без опоры на справочник locations); при
    неоднозначности по-прежнему не угадываем;
  • mcp.class.php: версия 2.01.23 -> 2.01.24.

Проверено на тестовом сервере: «температура в парилке», «в коридоре», «в
погрибе» определяются верно; для несуществующих комнат («спальня», «банька»)
ответ остаётся «датчик не найден».
https://github.com/golnet1/majordomo-mcp/commit/51...

Обсуждение (0) (0)

18.10.2026

Справка по колонкам, пример ID и мелкие правки (#42)

(golnet)

Справка по колонкам, пример ID и мелкие правки (#42)

  • help_ru.html: в разделе «Колонка (XiaoZhi) и комнаты» добавлен список
    «Что реализовано для колонок» — тип устройства с полями (комната, ID,
    необязательные характеристики «Включение/выключение» и «Громкость»),
    определение комнаты по ID, автополучение ID кнопкой и голосом, защита от
    повторного ID, команды другой колонке (озвучка/громкость/вкл-выкл),
    две схемы доставки (прямой канал и очередь), настройки HTTP-моста;
  • devices_edit.html, devices_add.html: пример ID в подсказке заменён
    с «828479» на «123456»;
  • mcp_class.py: пример числового ID в docstring заменён на «123456»;
  • mcp.class.php: версия 2.01.22 → 2.01.23.
    https://github.com/golnet1/majordomo-mcp/commit/1f...
Обсуждение (0) (0)

18.10.2026

Улучшен поиск алиасов сенсоров (нормализация, по токенам)

(golnet)

Улучшен поиск алиасов сенсоров (нормализация, по токенам)
https://github.com/golnet1/majordomo-mcp/commit/f8...

Обсуждение (0) (0)

18.10.2026

Справка: уточнён текст про колонку и комнаты

(golnet)

Справка: уточнён текст про колонку и комнаты
https://github.com/golnet1/majordomo-mcp/commit/18...

Обсуждение (0) (0)

18.10.2026

Справка: отдельный раздел «Колонка (XiaoZhi) и комнаты», без упоминан…

(golnet)

Справка: отдельный раздел «Колонка (XiaoZhi) и комнаты», без упоминания {{device_id}} (#38)
https://github.com/golnet1/majordomo-mcp/commit/c4...

Обсуждение (0) (0)

18.10.2026

Колонка: поле ID устройства вместо MAC и определение колонки голосом …

(golnet)

Колонка: поле ID устройства вместо MAC и определение колонки голосом (#36)

  • поле MAC переименовано в «ID устройства»: видно только у типа «Колонка (XiaoZhi)» (в add/edit), для остальных типов значение сбрасывается при сохранении; в списках подпись ID
  • резолвер комнаты работает с числовым ID устройства XiaoZhi (точное совпадение; для чисто цифрового ID поиск по вхождению отключён, чтобы короткий ID не совпал с чужим MAC)
  • кнопка «Определить колонку» рядом с полем: есть только пока поле пустое; по нажатию — режим ожидания до 10 сек, голосовая фраза «Определи колонку»/«Определи ID» вызывает инструмент identify_speaker, который записывает ID прямо в поле ID устройства (в форме добавления — создаёт устройство и открывает его карточку)
  • состояние ожидания/результата хранится в таблице mcp_detect (создаётся сама); новые ajax-операции startDetectSpeaker/getIdentifiedSpeaker/checkSpeakerId
  • если ID уже вписан у другой колонки — сообщение «Колонка уже определена в комнате …», поле не заполняется; то же при ручном вводе
  • справка (help_ru, README) обновлена под ID устройства; версия 2.01.19
    https://github.com/golnet1/majordomo-mcp/commit/18...
Обсуждение (0) (0)

18.10.2026

Колонка: инструмент where_am_i и устойчивое определение комнаты по MA…

(golnet)

Колонка: инструмент where_am_i и устойчивое определение комнаты по MAC (#35)

  • добавлен MCP-инструмент where_am_i (room по device_id колонки), чтобы колонка могла ответить, в какой комнате она находится;

  • resolve_room_by_device_id: после точного совпадения MAC ищет по вхождению — прошивка колонки может присылать device_id с добавками;

  • VERSION 2.01.18.
    https://github.com/golnet1/majordomo-mcp/commit/d1...
Обсуждение (0) (0)

17.10.2026

chore(mcp): версия 2.01.14 в окне «О модуле» (#31)

(golnet)

chore(mcp): версия 2.01.14 в окне «О модуле» (#31)

VERSION 2.01.13 -> 2.01.14 (дата без изменений).
https://github.com/golnet1/majordomo-mcp/commit/23...

Обсуждение (0) (0)

16.10.2026

fix(mcp): комната колонки определяется по MAC даже без управляющих tr…

(golnet)

fix(mcp): комната колонки определяется по MAC даже без управляющих trait'ов (#26)

У устройства типа «Колонка (XiaoZhi)» (audio.speaker) нет управляющих
trait'ов — linked_object/linked_property пустые. Из-за этого
load_devices_from_db() отбрасывал колонку из списка устройств, и
resolve_room_by_device_id() не мог найти её MAC. В результате команды с
колонки выполнялись без знания комнаты, а ассистент каждый раз уточнял
комнату, хотя MAC и Местоположение у колонки заданы.

Что сделано:

  • в load_devices_from_db() строится индекс MAC -> комната по ВСЕМ строкам
    (до проверки trait'ов), поэтому колонки в него попадают;
  • resolve_room_by_device_id() берёт комнату из этого индекса;
  • в set_request_context() добавлен INFO-лог «Колонка device_id=... → комната: ...»
    для диагностики;
  • в справке уточнено, что у колонки должны быть заполнены MAC и Местоположение;
  • VERSION модуля 2.01.08 → 2.01.09.

Проверено на сервере: resolve_room_by_device_id('10:b4:1d:c7:18:60') →
'Комната отдыха'.
https://github.com/golnet1/majordomo-mcp/commit/37...

Обсуждение (0) (0)

16.10.2026

fix(mcp): блок «Сервис» — собственная разметка MCP, всё в одну строку…

(golnet)

fix(mcp): блок «Сервис» — собственная разметка MCP, всё в одну строку (#25)

Блок статуса службы больше не отдаётся модулем xray
([#module name="xray" action="service" cycle="mcp"#]). Разметка и JS перенесены
в templates/mcp/action_admin.html и работают как обычный код модуля MCP.

Причина: на узкой ширине колонки col-md-* из xray «складывались» в столбик,
из-за чего блок «Сервис» переносился. Теперь:

  • flex-wrap:nowrap и white-space:nowrap — всегда одна строка;
  • статус col-md-5 с overflow:hidden, кнопки col-md-4 (по запросу);
  • убран лишний мусор из xray (select2, css, пустые строки).

Статус/restart/stop по-прежнему берутся с ajax-эндпоинта xray
(глобалы cycle_mcpRun / cycle_mcpControl) — поведение не изменилось.
https://github.com/golnet1/majordomo-mcp/commit/ce...

Обсуждение (0) (0)

16.10.2026

fix(mcp): движок таблиц сцен/планировщика выбирается по факту (устран…

(golnet)

fix(mcp): движок таблиц сцен/планировщика выбирается по факту (устранена ошибка 1286) (#24)

DDL таблиц mcp_scenes и mcp_schedule жёстко задавал ENGINE=InnoDB, из-за
чего на СУБД с отключённым InnoDB (SHOW ENGINES -> Support=NO, движок по
умолчанию MyISAM) создание таблиц падало с ошибкой
"1286: Unknown storage engine 'InnoDB'".

Теперь движок выбирается по доступности: при поддержке InnoDB используется
InnoDB, иначе движок не указывается и сервер берёт свой по умолчанию.
utf8mb4 сохраняется в обоих случаях.

  • mcp.class.php: метод tableEngineSuffix(), применён в ensureScenesTable()
    и ensureScheduleTable(); VERSION 2.01.07 -> 2.01.08.
  • lib/mcp_class.py: функция table_engine_suffix(), применена в
    ensure_scenes_table(), load_scenes_from_db(), ensure_schedule_table().

Co-authored-by: Малов Олег Владимирович <oleg@GOLNET.RU>
https://github.com/golnet1/majordomo-mcp/commit/b2...

Обсуждение (0) (0)

16.10.2026

docs(mcp): обновлена помощь, синхронизация, поле МАК (#23)

(golnet)

docs(mcp): обновлена помощь, синхронизация, поле МАК (#23)

Co-authored-by: Малов Олег Владимирович <oleg@GOLNET.RU>
https://github.com/golnet1/majordomo-mcp/commit/a3...

Обсуждение (0) (0)

16.10.2026

feat(mcp): опция «Реверс» вместо «Разделение кнопки» (инверсия Вкл/Вы…

(golnet)

feat(mcp): опция «Реверс» вместо «Разделение кнопки» (инверсия Вкл/Выкл и Открыть/Закрыть)
https://github.com/golnet1/majordomo-mcp/commit/66...

Обсуждение (0) (0)

16.10.2026

feat(mcp): синхронизация устройств из MajorDoMo (#20)

(golnet)

feat(mcp): синхронизация устройств из MajorDoMo (#20)

  • feat(mcp): синхронизация устройств из MajorDoMo с типами и умениями

Кнопка «Синхронизировать» импортирует все устройства из штатной таблицы devices: тип и умения выводятся из devices.TYPE (relay/dimmer/rgb/sensor_*/motion/openable/thermostat/vacuum), свойство подбирается по фактически существующим свойствам объекта. Существующие устройства по LINKED_OBJECT не дублируются. Кнопки (button) пропускаются. Сборка CONFIG вынесена в общий метод buildDeviceConfig.

  • fix(mcp): не добавлять ALT_TITLES как псевдоним устройства

Co-authored-by: Малов Олег Владимирович <oleg@GOLNET.RU>
https://github.com/golnet1/majordomo-mcp/commit/de...

Обсуждение (0) (0)

16.10.2026

fix(mcp): propertySetHandle не падает на несуществующих колонках (#19)

(golnet)

fix(mcp): propertySetHandle не падает на несуществующих колонках (#19)

В mcp_devices нет колонок LINKED_OBJECT/LINKED_PROPERTY — связка
«устройство → метрика» хранится в TRAITS (JSON). Прежний запрос к этим
колонкам падал с «Unknown column», а ядро MajorDoMo
(lib/mysql.class.php::Error) на любую такую ошибку удаляет
cms/modules_installed/control_modules.installed. Из-за этого на следующем
запросе заново устанавливались ВСЕ модули (перезапуск сервисов, пересборка
venv) — веб-интерфейс подвисал на минуты. Теперь сверяемся с TRAITS.
https://github.com/golnet1/majordomo-mcp/commit/e5...

Обсуждение (0) (0)

16.10.2026

docs(mcp): устройства ищутся по псевдониму (синониму), а не по назван…

(golnet)

docs(mcp): устройства ищутся по псевдониму (синониму), а не по названию (#17)

Уточнены формулировки в докстрингах инструментов и в справке:
резолвер устройств и сцен строит индекс только из поля «Синонимы»
(load_aliases_from_db), поле «Название» в голосовом поиске не участвует.
https://github.com/golnet1/majordomo-mcp/commit/05...

Обсуждение (0) (0)

16.10.2026

feat(mcp): тип «Колонка (XiaoZhi)», привязка к комнате по MAC и перед…

(golnet)

feat(mcp): тип «Колонка (XiaoZhi)», привязка к комнате по MAC и передача фразы на колонку (#15)

  • Новый тип audio.speaker «Колонка (XiaoZhi)»: умения on/volume/pause/mute,
    иконка audio.speaker.svg. media_device сужен до медиа-подмножества (без
    датчиков/цвета), other остаётся универсальным (все метрики).
  • Поле «MAC-адрес» у устройства: колонка mcp_devices.MAC с само-восстановлением
    схемы (ensureDevicesSchema, без переустановки таблицы); формы add/edit и
    вывод MAC в списке устройств.
  • Привязка команды к комнате по MAC колонки: normalize_mac,
    resolve_room_by_device_id, set_request_context и resolve_devices(default_room).
    Инструменты управления/статусов принимают системный параметр device_id (MAC).
    Явно названная в запросе комната важнее комнаты колонки; без MAC — прежнее
    поведение (уточнение комнаты).
  • Новый инструмент say_to_speaker(message, room, device) — «передай на колонку
    в кухне: обед готов». say_via_tts переписан через find_speaker_in_room/
    say_on_spec; TTS-ответ уходит в комнату колонки-источника.
  • Слово-тип «колонк» → audio.speaker (было media_device.receiver).
  • Документация: help_ru.html и README.md.
    https://github.com/golnet1/majordomo-mcp/commit/c8...
Обсуждение (0) (0)

15.10.2026

fix(ui): «Синонимы (через <,> или <;>)» в формах устройства (#14)

(golnet)

fix(ui): «Синонимы (через <,> или <;>)» в формах устройства (#14)

В формах «Добавить устройство» и «Редактировать устройство» подпись поля
строилась из макроса ядра <#LANG_ALT_TITLES#>, который выводит
«Синонимы (через запятую)» и не упоминает точку с запятой. Заменено на явный
текст, который честно указывает оба разделителя псевдонимов — запятую и точку
с запятой (резолвер разбирает поле ALIACE по [,;]).

Файлы:

  • templates/mcp/devices_edit.html
  • templates/mcp/devices_add.html

Co-authored-by: Малов Олег Владимирович <oleg@GOLNET.RU>
https://github.com/golnet1/majordomo-mcp/commit/6e...

Обсуждение (0) (0)

15.10.2026

fix(mcp): псевдоним важнее типа, честная яркость, оформление кнопки P…

(golnet)

fix(mcp): псевдоним важнее типа, честная яркость, оформление кнопки Python, справка (#13)

Голосовое управление:

  • резолвер: явное совпадение по имени/псевдониму важнее эвристически
    определённого типа. «включи над окном» больше не уходит в not_found
    (слово «окно» ошибочно давало тип openable) и не подменяется посторонним
    устройством (например, шторами).
  • control_device: если устройство не поддерживает яркость, оно включается на
    полную мощность, а ответ содержит success=true, brightness=null и понятное
    поле note вместо технического токена brightness_unsupported. Ассистент
    больше не переспрашивает «включить?» в режиме «Включить на 100%».

Настройки:

  • кнопка «Исправить версию Python и зависимости» и баннер результата оформлены
    в сетку настроек (form-group / control-label / col-lg-8).
  • служебная информация показывает человекочитаемые значения (Представление,
    Отладка DebMes, ping, Яркость без диммера) вместо сырых кодов.

Справка:

  • справка переписана и дополнена разделами: Настройки модуля, Устройства и
    комнаты, Голосовое управление, Сцены, Планировщик, Окружение Python,
    Диагностика.

Co-authored-by: Малов Олег Владимирович <oleg@GOLNET.RU>
https://github.com/golnet1/majordomo-mcp/commit/6f...

Обсуждение (0) (0)

15.10.2026

feat(settings): кнопка автоисправления версии Python и зависимостей (…

(golnet)

feat(settings): кнопка автоисправления версии Python и зависимостей (#11)

В общих настройках включён чекбокс «Проверка версии Python и зависимостей» —
теперь, когда проверка нашла несоответствия (нет venv/python/pip, версия
Python ниже 3.10, отсутствуют или устарели пакеты из requirements.txt), под
формой настроек появляется кнопка «Исправить версию Python и зависимости».

Что делает fixPythonEnvironment():

  • подбирает в системе интерпретатор не ниже 3.10 (наибольший доступный);
  • виртуальное окружение пересоздаётся, только если оно отсутствует, битое
    или работает на старом Python: новое создаётся во временной папке, старое
    удаляется лишь после успешного создания, затем переименование;
  • зависимости ставятся через «python -m pip install -r requirements.txt»:
    после переименования окружения в скриптах bin/pip3 остаётся старый путь
    в shebang и они перестают запускаться — «python -m pip» от этого не страдает;
  • после успеха поднимается cycle_mcpExit и останавливается мост, чтобы
    cycle_mcp подхватил новое окружение.

Безопасность:

  • removeVenvDirectory удаляет только пути с базовым именем .venv/.venv_new;
  • старое окружение не трогается, пока новое не создано;
  • результат выводится по шагам (✓/✗), кнопка показывается только при проблемах;
  • set_time_limit(0) + ignore_user_abort, т.к. установка может занять минуту.

Проверка: песочничный тест извлекает эти методы из mcp.class.php и гоняет их
на временных venv реального сервера — 13/13 (интерпретатор, страховка удаления,
битое окружение -> пересоздание, установка и импорт зависимостей, повторный
запуск без пересоздания). php -l чисто.

Co-authored-by: Малов Олег Владимирович <oleg@GOLNET.RU>
https://github.com/golnet1/majordomo-mcp/commit/f8...

Обсуждение (0) (0)

15.10.2026

fix(mcp): белый экран при добавлении задания + порядок кнопок (#8)

(golnet)

fix(mcp): белый экран при добавлении задания + порядок кнопок (#8)

1) schedule_edit.html: сравнения в шаблоне записаны как [#if X=1#] без кавычек,
парсер MajorDoMo превращал это в присваивание (=1) -> fatal error -> белый экран
при добавлении/редактировании задания. Исправлено на [#if X="1"#] (как в ядре).

2) action_admin.html: кнопка "Сцены" теперь идёт перед кнопкой "Планировщик".

Co-authored-by: Малов Олег Владимирович <oleg@GOLNET.RU>
https://github.com/golnet1/majordomo-mcp/commit/76...

Обсуждение (0) (0)

15.10.2026

Голосовое управление: резолвер, комнаты/типы/масштаб, яркость, сцены …

(golnet)

Голосовое управление: резолвер, комнаты/типы/масштаб, яркость, сцены (#4)

  • Единый резолвер устройств: комната + тип + масштаб («весь» / «везде»), индекс
    устройств, словарь типовых слов («свет» -> light) со словоформами.
  • TITLE больше не участвует в распознавании (удалён и фолбэк «объект = название»);
    ALIACE делится по «,» и «;», с trim/дедупликацией/нижним регистром.
  • Инструменты control_device / get_device_status / list_devices принимают
    room / device_type / scope и возвращают структурированные уточнения
    (needs_room / needs_device / not_found) со списком вариантов.
  • Яркость для диммируемых ламп: «включи свет на 30%» (трейт brightness); поведение
    для не-диммируемых задаётся в настройках (BRIGHTNESS_NO_DIMMER: error | on).
  • Сцены/группы: таблица mcp_scenes (создаётся лениво), страницы в админке
    (список/добавить/редактировать/удалить), инструменты list_scenes / run_scene.
  • Исправлены два скрытых бага: device_search.inc.php ($res[0]['ID'] без проверки)
    и smart_add.inc.php (file_get_contents без таймаута).

Co-authored-by: Малов Олег Владимирович <oleg@GOLNET.RU>
https://github.com/golnet1/majordomo-mcp/commit/e7...

Обсуждение (0) (0)

15.10.2026

Fix MCP bridge: self-heal mcp_config.json, log stderr on Windows, saf…

(golnet)

Fix MCP bridge: self-heal mcp_config.json, log stderr on Windows, safe fallback (#3)

  • mcp.class.php: ensureMcpConfig() creates/repairs lib/mcp_config.json before starting the bridge (module installed before that logic => mcp_pipe.py died with 'No enabled mcpServers found in config' and the LLM answered 'tools unavailable'); install() now uses the same single point.
  • mcp.class.php: on Windows redirect mcp_pipe stdout/stderr to %TEMP%\mcppipe{out,err}.log (previously output was discarded, so crash reasons were invisible); DebMes on failed start.
  • mcp_pipe.py: explicit log when mcp_config.json is missing, and fallback to built-in mcp-xiaozhi.py instead of crashing.

Co-authored-by: Малов Олег Владимирович <oleg@GOLNET.RU>
https://github.com/golnet1/majordomo-mcp/commit/0e...

Обсуждение (0) (0)

15.10.2026

Fix device resolution: type matching, preferred categories, alias fal…

(golnet)

Fix device resolution: type matching, preferred categories, alias fallback (#2)

  • device_type_matches(): учитывает префикс devices.types. и семейства типов
    (light==devices.types.light, thermostat~thermostat.ac, media_device~media_device.tv)
  • find_device_by_category_and_type(): preferred_categories сравнивались со
    словарём config вместо строк — не работало никогда; теперь по category/type
  • термостаты с типом thermostat.ac больше не теряются
  • set_device_parameter искал несуществующий тип devices.types.device
  • resolve_alias_key(): мягкий фолбэк после обрезки окончаний (улиц->улица, бан->баня)
  • load_aliases_from_db(): кэш на 5 сек + исправлен параметризованный SQL (был литерал {type})
  • первый пустой trait больше не перебивает корректные следующие
  • normalize_query(): вопросительные слова + словоформы температур/градусов
  • control_thermostat: пропуск range-проверки при отсутствии capability (был TypeError)
  • control_openable: остановка без трейта pause теперь возвращает ошибку, а не ложно-успех
  • available-списки во всех инструментах используют общий матчер типов
  • TTS ищет медиаустройство/колонку, а не первое попавшееся устройство
  • версия 1.8

Co-authored-by: Малов Олег Владимирович <oleg@GOLNET.RU>
https://github.com/golnet1/majordomo-mcp/commit/ed...

Обсуждение (0) (0)

15.10.2026

Консолидация модуля mcp + завершение поддержки Windows (#1)

(golnet)

Консолидация модуля mcp + завершение поддержки Windows (#1)

  • Sync module with local working branch

  • mcp.class.php: refactor mcp_pipe process management into class helpers
    (getMcpPipeWorkingDir/startMcpPipeProcess/stopMcpPipeProcess/
    ensureSingleMcpPipeProcess/terminateProcess), process marker 'mcp_pipe.py',
    initial cross-platform (Windows) support: isWindowsPlatform/getVenvBinary/
    getSystemPythonCommand, install/uninstall and process handling branches
  • python.php: Windows-aware venv checks and pip invocation
  • device_edit.inc.php: sanitize id, correct trait diffing by type, isset fixes
  • lib/mcp_class.py: robust config.php discovery (MAJORDOMO_CONFIG + Windows
    path), support both TRAITS dict/list formats, required_type as list
  • lib/mcp_pipe.py: drop dotenv, accept configured server name or script path
  • scripts/cycle_mcp.php: use module helpers instead of inline pgrep/kill
  • lib/smoke_check.py: add MajorDoMo API smoke-check utility

  • Harden process handling and finish Windows support

Windows:

  • replace deprecated/removed wmic discovery with PowerShell Get-CimInstance
    (fallback to wmic kept); filter by process name python* so the query
    process itself is not matched
  • start mcp_pipe.py via PowerShell Start-Process (Hidden) with MCP_ENDPOINT
    passed as data via -EncodedCommand (UTF-16LE base64), and verify the
    process actually started instead of returning true unconditionally
  • quote the python path when checking 'python --version'
  • silence PowerShell progress stream

Linux (port of production fixes):

  • detect target process strictly: in_array(mcp_pipe.py, argv) and argv[0]
    looks like python; exclude bash/ssh wrappers in addition to pgrep/sh -c
  • cycle_mcp.php: wait for MySQL availability on start (max_connections),
    add cross-platform single-instance PID lock

  • chore: bump version to 1.7, document Windows support, add .gitignore
    https://github.com/golnet1/majordomo-mcp/commit/ef...
Обсуждение (0) (0)

 
(0)
 
Подписаться на обновления (0)
 

Идеи по развитию

Вы можете помочь в развитии проекта, сообщив об ошибках, поделившись своими идеями или проголосовав за уже добавленные. В случае добавления ошибок, обязательно указывайте детали окружения (ОС, версия ПО и т.п.), сообщения об ошибках без деталей будут игнорироваться.

Другие задачи пользователя

Дополнение OpenCode
Дополнение DashBoard Pro
Дополнение Piper TTS
Дополнение PHP Manager
Дополнение Котел Stout Plus