Repository navigation
Releases: bimwright/nwd-mcp
Releases · bimwright/nwd-mcp
Release list
v1.0.0
Claude Desktop extension: nwd-mcp-desktop-1.0.0.mcpb (install it in Claude Desktop > Settings > Extensions). It launches the server installed by the setup ZIP, so install the ZIP first.
Client setup ZIP: NwdMcp.Setup-v1.0.0-win-x64.zip (self-contained nwd-mcp.exe). Plugin year in this ZIP: Navisworks Manage 2025. Source still supports 2022–2027. NuGet Bimwright.Nwd.Server 1.0.0 is server-only (no plug-in).
Changed
- Destructive tools now say what they change and how to undo it:
nwd_open_file(discarding unsaved changes cannot be undone),nwd_hide_items,nwd_unhide_all,nwd_run_baked_tool,nwd_dismiss_bake_suggestion. - The server instructions end with a Safety & permissions paragraph: confirm exact files or items before discarding or changing user files, and do not retry a denied call through a baked tool or
nwd_send_code. - The server installs at the fixed path
%LOCALAPPDATA%\Bimwright\nwd-mcp\server\current\nwd-mcp.exeinstead of a versioned folder, matching the other bimwright gateways. Reinstalls swap the wholecurrentfolder so no stale files remain; earlierserver\<version>copies are kept and reported — repoint MCP client entries to the new path.
Added
- Response-size policy on every tool result (rvt-mcp parity, enforced server-side). Over 64 KiB adds a
_response_warningfield to the result JSON (stronger above 256 KiB); past the 1 MiB budget a read tool is rejected withRESPONSE_TOO_LARGE, while a completed write returns a compacted success (ok,response_compacted,mutation_applied) instead of a false failure.nwd_send_codeandnwd_run_baked_toolreportmutation_applied: nullwhen the outcome is indeterminate. output=fileonnwd_get_model_tree(JSON),nwd_batch_get_properties(SQLite),nwd_find_items_by_name(NDJSON) andnwd_run_baked_tool(auto-detected format) writes the full result to%LOCALAPPDATA%\Bimwright\nwd-mcp\spilland returns its path, schema and a preview.nwd_send_codeoutput above 1 MiB auto-spills the same way; there is nooutputparameter on it. Spill files are kept 24 hours, capped at 50, and removed on uninstall. A spill that cannot be written reportsSPILL_FAILEDwithoperation_completedrather than pretending the call failed.- MCP tool annotations on every tool except
nwd_send_code(readOnlyHint,destructiveHint,idempotentHint,openWorldHint=false) for Claude Code's permission auto mode, and Claude Desktop: the 23 read tools can be allowed once, whilenwd_open_file,nwd_hide_items,nwd_unhide_all,nwd_run_baked_tool, andnwd_dismiss_bake_suggestionalways ask. README Permissions & auto mode has thepermissions.allowlist of the read-only tools and a warning againstmcp__nwd-mcp__*. Migration: no parameters or defaults changed. - Record switch for every tool call, off by default. The ribbon, Status window,
recordCallsinnwdmcp.config.json, andBIMWRIGHT_NWD_RECORD_CALLSshare it. While on, calls append to%LOCALAPPDATA%\Bimwright\nwd-mcp\mcp-calls.jsonl.send_codestores length and SHA-256 instead of the script. nwd_list_recent_files,nwd_open_file, andnwd_import_model. A default launch registers every toolset (33 tools). Open refuses unsaved changes unlessdiscard_changesis true. Importappendadds a model;mergecombines it. Open and import wait up to 5 minutes.- Live benchmark of all 33 tools on Navisworks Manage 2025 (duration, result size, estimated tokens, size policy, spill-to-file):
docs/benchmarks/2026-09-30-navisworks-manage-2025.md.
Fixed
- Item ids below a model root were empty, so
nwd_get_model_tree,nwd_find_items,nwd_find_items_by_name, andnwd_get_current_selectionreturned no usable ids andnwd_hide_items/nwd_get_item_propertiescould not target them. Ids now look like0:0:6:3, and each parent's children are numbered once per call: on a 10,717-item model,nwd_get_model_treedepth 6 / 5,000 nodes takes ~0.1 s andnwd_find_items_by_name500 hits ~0.3 s. nwd_get_model_statisticsreturnsitem_count, as its description says.nwd_send_codefailed on Navisworks 2025 withTypeInitializationException(PerTypeValues1): Navisworks has no binding redirects for the Roslyn dependencies we ship. The plug-in now resolves those assemblies from its own folder. Scripts also ran on a worker thread, where the Navisworks API is not valid; they now compile off the UI thread and run on it, return the last expression asresult`, and report the full exception chain.- A command that waited in the UI queue past the caller's timeout still ran, and long walks kept Navisworks busy after the caller gave up. Stale commands are now skipped with
TIMEOUT, andget_model_tree,find_items,find_items_by_name,batch_get_properties, andget_model_statisticsstop at the deadline and mark the result (truncated: "deadline",item_count_complete: false). - The target descriptor always reported no document: the heartbeat read the document off the UI thread. The title and path are now read on the UI thread after each command and on idle.
- When the 10 MB plug-in wire cap rejects a write command's reply, the error now says the command already ran and not to blindly retry it; the generic narrowing hint no longer names specific parameters.
- Failed tool calls (
{"ok":false,...}) now also set the MCPisErrorflag. - The server enforces
maxResponseByteson plug-in replies, and tool results are compact JSON (about half the size of the previous indented output). contains,startsWith, andendsWithfilters innwd_find_itemsandnwd_select_items_by_searchmatched nothing. They now match, case-insensitive.- A command that reached the plug-in before a UI
SynchronizationContextwas captured ran on a worker thread and could crash Navisworks (0x80131509). It now falls back to the UIDispatcher(PR #1 by @huangting2015).
v0.1.2
First GitHub Release. Self-contained nwd-mcp.exe plus the Navisworks Manage 2025 plugin (the year available on the pack machine). Other years: build from source against that Manage SDK.
See CHANGELOG.md. Expand NwdMcp.Setup-v0.1.2-win-x64.zip and run install.ps1.