MCP server for Navisworks integration, providing tools for model navigation, clash detection, selection management, viewpoint control, and document lifecycle operations
NavisHelper MCP Server demonstrates solid tool design with comprehensive parameter schemas and detailed descriptions. All 9 tools have explicit input schemas with typed parameters and descriptions. Tool names follow verb_noun convention (clash_isolate_result, capture_current_view, etc.). Descriptions average ~180 chars, within the 10-1024 baseline. However, output schemas are not documented, LLMs cannot predict response structure for downstream chaining. Error handling guidance is minimal; tools lack recovery hints. No tool annotations (readOnlyHint/destructiveHint) despite clear risk classifications. Parameter descriptions are thorough but some lack constraint details (e.g., screenshotProfile enum values not listed in descriptions, only in schema).
Requests cooperative cancellation of an asynchronous clash run. It bypasses host_busy. A currently executing native Navisworks test finishes first; no later test is started.
Captures the current Navisworks view exactly as displayed. Use after clash_isolate_result or after manually choosing any camera angle. Defaults to dry-run.
Previews and optionally isolates one existing Clash Detective result by resultHandle. Can highlight A/B, clip around the clash point or item bounds, hide everything except the pair, choose a preset or custom camera, and optionally capture a screenshot. Defaults to dry-run.
Restores the viewpoint, section box, appearance overrides, and temporary visibility changed by clash_isolate_result in the active document. Defaults to dry-run.
Builds a paged {(rootA, rootB): clashCount} coordination matrix from existing Clash Detective results. Root identity comes directly from each ModelItem.Model, so it does not depend on tree depth or parsing .rvm names from owner paths.
Output schemas not documented. LLMs cannot predict response structure for clash_root_matrix, clash_tests_from_sets, clash_run_batch, clash_run_status, or cancel_clash_run. This breaks tool chaining, agents cannot extract operationId or matrix data for downstream calls.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite explicit risk classifications. clash_isolate_result and capture_current_view are marked WRITE; clash_tests_from_sets and clash_run_batch are WRITE. Annotations help LLMs reason about safety and retry logic.
Error handling lacks recovery guidance. No tool description explains what to do if a clash result is not found, if a test creation fails, or if a run times out. Descriptions state WHAT the tool does but not WHEN it fails or HOW to recover.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 57 | 2025-06-18+ | v2 |
Starts an asynchronous Clash Detective run and returns immediately with operationId. Runs one Navisworks test per UI callback, pauses after batchSize, and keeps clash_run_status/cancel_clash_run available even while a test is calculating. Dry-run by default.
Continues a paused asynchronous clash run for the next batch.
Returns progress and per-test outcomes for an asynchronous clash run. Read-only and bypasses host_busy.
Creates one Clash Detective test per Selection Set/Search Set or model-root pair. Set sides use native live Navisworks SelectionSource bindings, so dynamic Search Sets are re-evaluated. Dry-run by default. Inline references accept document-local itemId, exact full path, unique name, rootName, or sourceFile. planPath also accepts navishelper.clash-test-transfer v1; there itemId is diagnostic-only and exact full set path is the portable identity.
Enum values not listed in parameter descriptions. screenshotProfile accepts 'compact, fullhd, large, or source' but only in schema; description omits the enum. cameraMode accepts 'current, iso, iso_opposite, top, front, back, left, right, or custom' but description does not list them. LLMs may hallucinate invalid values.
Dry-run pattern not consistently documented. clash_isolate_result, capture_current_view, clash_tests_from_sets, and clash_run_batch all default apply=false, but descriptions vary in clarity. Some say 'Defaults to dry-run'; others say 'False previews...'. Standardize language so LLMs reliably understand the safety model.