MCP-сервер для работы с XML точек обзора Navisworks (nw-exchange): merge, перенос, синхронизация списков, аудит.
Server has 15 tools with explicit registration and descriptions in Russian. All tools have input schemas with parameter types and descriptions. However, critical gaps limit production readiness: (1) descriptions are domain-specific and lengthy (200-400 chars), optimized for Russian-speaking Navisworks users rather than LLM clarity; (2) no output schemas documented, LLMs cannot predict return structure; (3) no error handling guidance, tools fail silently or return generic dicts; (4) parameter descriptions lack constraints (enums, ranges, formats); (5) no tool annotations (readOnlyHint, destructiveHint) despite clear risk levels; (6) composition issues, tools like sync_lists and add_to_master combine multiple concerns (import + move + rename); (7) no pagination or result limits despite tools operating on potentially large XML trees. Naming is verb-first and clear (list_, get_, sort_, dedupe_, etc.), which is a strength. Schemas are present but minimal, most parameters are untyped strings or arrays without validation rules.
Добавить точки из src в мастер по дефолтным правилам (рекомендуемый сценарий). - dated_copy=True: создаёт копию 'Общие точки {today}.xml' и правит её, мастер не трогает. - folder_prefix: целевая папка по префиксу имени (по умолчанию 'ЛКП (' — нерешённые). - конфликты имён: молча пропускаются и попадают в отчёт skipped_existing. today — дата DD-MM-YYYY (передаёт клиент; нельзя зашивать в сервер). master — путь к мастеру; если не задан, берётся из env.
Массово добавить префикс и/или суффикс к именам точек. Мастер не нужен. folder — ограничить одной папкой (иначе весь файл). names — ограничить списком имён. Затронутые папки пересортировываются, (N) пересчитывается. Нужно задать prefix и/или suffix.
Аудит файла: папки со счётчиками, дубли GUID, конфликты имя/папка, всего view.
Удалить дубли точек обзора в файле (оставляя первый). Мастер не нужен. by="name" — дубли по имени в пределах одной папки; by="guid" — дубли по GUID глобально по всему файлу. Возвращает список удалённых; счётчики (N) пересчитываются. backup — сделать xml.bak.
Сохранить дерево точек в файл для просмотра без Navisworks; вернуть путь к файлу. fmt='html' — сворачиваемые узлы (<details>) + кнопки «развернуть/свернуть всё»; fmt='text' или 'md' — текстовое дерево с отступами. include_views — показывать точки. out=None — стабильный перезаписываемый файл во временной папке (<temp>/<имя>.tree.<ext>). Счётчики у папок: [прямые/в поддереве]. Открой возвращённый путь в браузере.
No output schemas documented. LLMs cannot predict return structure (dict keys, types, nested fields). Tools return bare dicts from core.py with no schema annotation.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Tools marked with Risk levels (READ_ONLY, WRITE, DESTRUCTIVE) in comments, but not exposed to MCP protocol. LLMs cannot distinguish safe reads from destructive writes.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 54 | 2026-07-28+ | v2 |
Показать текущую настройку путей (env, разрешённый мастер и каталог выгрузок).
Список папок (viewfolder) в файле: путь, число прямых view и view в поддереве. xml — путь к любому .xml точек обзора. Если не задан, берётся мастер из env (NAVISWORKS_MASTER / ROOT+FILENAME) — как удобный дефолт, не требование.
Прямые <view> (имя, guid) в указанной папке. folder — путь папки под <viewpoints>, например 'ЛКП (33)' или 'A/B' (пусто = корень). xml — путь к файлу; если не задан, берётся мастер из env.
Добавить все <view> из выгрузки src в папку folder файла base. Конфликт имени в целевой папке = ошибка (используйте add_to_master для «пропускать молча»). new_guids — выдать новые GUID переносимым точкам (по умолчанию да). backup — сделать base.bak перед записью.
Перенести <view> по точным именам между папками одного файла. from_folder / to_folder — пути папок под <viewpoints> (через '/'). names — список точных имён точек. dry_run — только показать, что было бы перенесено.
Сверка «числовых» имён точек: есть в выгрузках, но нет в мастере (и наоборот). root — каталог выгрузок (по умолчанию из env), master — мастер (по умолчанию из env).
Переименовать папку (viewfolder) в файле; счётчик (N) пересчитывается автоматически. folder — путь к существующей папке ('ЛКП (2)' или 'A/B'). new_name — новое имя (можно без '(N)' — суффикс добавится сам).
Отсортировать точки обзора в файле и пересчитать счётчики (N) у папок. Базовый ad-hoc сценарий: «открой файл, отсортируй точки» — мастер не нужен. folder — путь папки под <viewpoints>; если не задан, сортируются ВСЕ папки (и плоские view в корне). Сортировка по ведущему числу имени, затем по суффиксу (1552, 1552.1, 1552_2); нечисловые имена — по алфавиту в конце. backup — сделать xml.bak перед записью.
Вытащить точки по именам в новый файл (отдельная выгрузка nw-exchange). names — список точных имён. folder — искать только в этой папке; иначе по всему файлу. out — путь нового файла. move=False — копировать (исходник не трогать); move=True — также удалить из исходника (с backup и пересчётом (N)).
Синхронизировать два списка ID (решённые/открытые) с каталогом выгрузок. Импортирует недостающие имена и переносит точки в мастере между ЛКП-Решено и ЛКП. open_only — работать только со списком open_ids (папка ЛКП), ЛКП-Решено не трогать. Перед записью делает .bak мастера. ЛКП-ВН.ОСН не трогается.
Parameter descriptions lack constraints. 'by' in dedupe_viewpoints says 'name or guid' but no enum. 'fmt' in export_tree says 'html, text, or md' but no enum. LLMs may hallucinate invalid values.
No error handling guidance. Tools return generic dicts or raise exceptions with no recovery hints. LLMs cannot self-correct on invalid input or retryable failures.
Composition: sync_lists and add_to_master combine multiple concerns (import + move + rename + backup). Should split into atomic tools (import_views, move_views_between_folders, create_backup) so agents compose as needed.