Files
kompas3d-mcp/plugin/commands/doctor.md
T
mikhail 37dc0fed36
ci / build (push) Successful in 34s
Диагностика отсутствующего интеропа и документация к его поиску
Продолжение 4d4e114 (сборки КОМПАС убраны из поставки).

- kompas_status проверяет интероп до обращения к сессии и отдаёт причину текстом:
  иначе MCP SDK показывает агенту только «An error occurred invoking …»
- провайдер сносит негодный остаток кеша перед Move: повтор после оборванной
  распаковки падал IOException вместо внятного сообщения
- README/plugin/README/doctor/CLAUDE.md: требование компонента SDK,
  KOMPAS_INTEROP_DIR, кеш в %LOCALAPPDATA%, счётчики тестов 381 (250 unit)
2026-07-31 09:29:01 +03:00

8.2 KiB
Raw Blame History


description: Диагностика установки плагина КОМПАС-3D: версия сервера, кеш, соединение с КОМПАС

Проверь установку плагина kompas по шагам и дай отчёт на русском. На каждый неуспешный пункт назови конкретное действие, которое пользователь может сделать сам (без доступа к исходникам проекта). Не переходи к следующему пункту, если текущий выявил фатальную проблему — сразу переходи к отчёту с найденной причиной.

  1. Ожидаемая версия. Прочитай ${CLAUDE_PLUGIN_ROOT}/server.lock.json — поле version. Если version равна 0.0.0, релиз сервера ещё не публиковался: единственный рабочий вариант — собрать сервер локально (dotnet build -c Release в проекте kompas3d-mcp) и указать путь к kompas-mcp.exe в переменной окружения KOMPAS_MCP_EXE. Дальше по этому пункту нечего проверять — переходи к пункту 2.

  2. Локальная сборка вместо релиза. Проверь переменную окружения KOMPAS_MCP_EXE (в PowerShell: $env:KOMPAS_MCP_EXE). Если она задана — это режим разработки: используется указанный в ней бинарь, а не установка из server.lock.json. Проверь, что файл по этому пути существует. Не существует — попроси пользователя пересобрать проект или поправить переменную. Если KOMPAS_MCP_EXE задана и файл на месте, пункты 3–4 (кеш релиза) пропусти — они к этому режиму не относятся, сразу переходи к пункту 5.

  3. Кеш установленного сервера. Если KOMPAS_MCP_EXE не задана, сервер разворачивается в %LOCALAPPDATA%\kompas-mcp\<version> (<version> — значение из server.lock.json). Проверь там файл install.json и сверь его поля version/sha256 со значениями version/sha256 из server.lock.json.

    • Файла install.json нет или его не удаётся прочитать — установка ещё не выполнялась или повреждена: следующий запуск сервера (например, через любой инструмент kompas_*) должен скачать и распаковать её заново. Если и это не помогает — удали каталог %LOCALAPPDATA%\kompas-mcp\<version> целиком и повтори запуск.
    • Поля не совпадают с локом — установка устарела или повреждена: удали каталог %LOCALAPPDATA%\kompas-mcp\<version> и дай серверу переустановиться при следующем запуске.
  4. Бинарь на месте и версия совпадает. Проверь, что kompas-mcp.exe лежит рядом с install.json в том же каталоге, и что его версия совпадает с версией из server.lock.json: & "$env:LOCALAPPDATA\kompas-mcp\<version>\kompas-mcp.exe" --version — команда печатает версию и сразу выходит, КОМПАС при этом не запускается. Расхождение или ошибка запуска — тот же диагноз, что и в пункте 3: удали каталог версии и дай серверу переустановиться.

  5. КОМПАС-3D установлен и, возможно, уже запущен. Сервер подключается к КОМПАС лениво — не при старте MCP-сервера, а при первом вызове инструмента. Проверь двумя командами: Get-Process KOMPAS* -ErrorAction SilentlyContinue (запущен ли сейчас) и Get-ChildItem 'HKLM:\SOFTWARE\Classes\KOMPAS.Application.5' -ErrorAction SilentlyContinue (зарегистрирован ли COM-класс, то есть установлен ли КОМПАС вообще). Запущен — сервер присоединится к нему; не запущен, но зарегистрирован — попробует запустить новый экземпляр сам; не зарегистрирован — это и есть причина сбоя: попроси пользователя установить КОМПАС-3D.

  6. Interop-сборки КОМПАС. Сервер их не поставляет (они принадлежат АСКОН) и берёт из установки КОМПАС: <каталог установки>\SDK\Samples\CSharp.zip, каталог Common внутри архива, распаковка — в %LOCALAPPDATA%\kompas-mcp\interop\<ключ>. Проверь наличие архива: Test-Path ((Get-ItemProperty "HKLM:\SOFTWARE\Classes\CLSID\$((Get-ItemProperty 'HKLM:\SOFTWARE\Classes\KOMPAS.Application.5\CLSID').'(default)')\LocalServer32").'(default)'.Trim('"') | Split-Path | Split-Path | Join-Path -ChildPath 'SDK\Samples\CSharp.zip'). Архива нет — КОМПАС установлен без компонента SDK: попроси пользователя доустановить SDK либо задать переменную окружения KOMPAS_INTEROP_DIR с каталогом, где лежат KompasAPI7.dll, Kompas6API5.dll, Kompas6Constants.dll, Kompas6Constants3D.dll. Если переменная KOMPAS_INTEROP_DIR уже задана — проверь, что эти четыре файла в указанном каталоге есть.

  7. Проверка соединения инструментами MCP. Вызови инструмент kompas_connect — он либо присоединится к уже запущенному КОМПАС, либо запустит новый и покажет окно, и вернёт версию и редакцию. Если вызов упал с ошибкой — приложи её текст к отчёту дословно (обычно это означает, что КОМПАС не установлен, лицензия не активирована, или предыдущий процесс КОМПАС завис — попроси пользователя проверить лицензию и вручную закрыть зависшие процессы КОМПАС через Диспетчер задач). Затем вызови kompas_status, чтобы явно зафиксировать итоговое состояние подключения в отчёте — учти, что сам по себе kompas_status не пытается подключиться, а только читает текущее состояние сессии, поэтому он осмыслен только после kompas_connect. Отдельный случай: если kompas_status вернул сообщение про interop-сборки — это диагноз пункта 6, а не проблема соединения.

  8. Итог. Собери отчёт: ожидаемая версия сервера, источник бинаря (релизный кеш или KOMPAS_MCP_EXE), путь до него, результат kompas_connect/kompas_status, и — если что-то не сошлось — какое из действий выше нужно предпринять пользователю.