Repository navigation
v1.2.0 - Controlled issues, verified targets and bounded diagnostics
v1.2.0
This release adds controlled failure review in History → Issues, verified write targets/documents, bounded diagnostics and periodic spill cleanup, with export, tagging, room, schedule and compatibility fixes.
- Issue decision reasons are optional. Empty input records
No reason provided; a localized faded hint explains the field without becoming saved input. Model-review and acceptance requirements remain in force. - Update Setup and MCPB together from this release. Close Revit and gateway clients before updating, then restart clients to refresh the catalog. Do not uninstall or purge user data first.
- Existing v1.0/v1.1 settings, personal tools and databases are preserved. Oversized legacy diagnostics are compacted with bounded retries; spill cleanup runs on gateway startup and every five minutes.
- Lazy mode and issue #16 phase B are excluded; the existing #16 A/A2 work remains included.
Complete v1.2.0 changes
Fixed
- History → Issues decisions accept an optional reason, recording
No reason providedwhen it is blank. The reason field has a localized placeholder; model-review and acceptance requirements are unchanged. - gbXML export on Revit 2026/2027 uses the required transaction and rolls it back after export, preserving the model; Revit-reported export failure is returned explicitly.
- DGN export accepts an optional absolute
seedFilepath and reports failure when Revit rejects export or no new/updated DGN files are detected. - View-template deletion retains the template name before deletion, avoiding an error while building the successful deletion response.
- Empty-tag cleanup finds tags owned by the requested view, including hidden/cropped tags, and retains their IDs safely in deletion results.
- Base-point updates report actual coordinates and per-field application results. Partially applied requests return failure while preserving committed effects and readback in operation status.
- Automatic room creation calculates topology inside a transaction, rolls back previews, and reads reported area/location after commit.
- Send-code on Revit Home works after explicit process selection when no document is active; execution-time checks still reject an unconfirmed or changed document.
- Operation receipts remain incomplete while execution is unfinished and report active-document changes separately from model mutations, including status and delayed summaries.
- Shared-parameter
string/textdefinitions use Revit's native Text spec; binding listings resolve shared GUIDs and parameter-element identities correctly. Tagging returns the final tag-head position after applying the requested tag type. - First writes and target verification against an older add-in report
PAIRING_REQUIREDbefore asking for document confirmation. Both pairing directions explain matching Setup versions and the required Revit/client restart; no mutation is sent. An open-model verification problem remains separate from a version mismatch. - Legacy diagnostic cleanup retries transient lock/I/O failures up to three times in the background, without repeating completed items. Bounded summaries report pending, skipped or exhausted work; oversized legacy logs retain a 64 KiB tail.
- Rejected tool calls retain complete, bounded key-only argument diagnostics in the journal, including send-code rejections and long key lists. Valid send-code calls continue to store only the code hash and length.
- Category tagging uses the native room-tag API for Rooms and skips existing room tags. A fully failed tagging call reports failure; dry runs report zero created tags and a separate proposed count. Schedule-field update inputs include JSON examples.
- Operation status retains bounded user-handled dialog reports from the sending gateway session even when the operation also has a durable ledger record.
- Failure receipts identify the model of captured incidents and the target of
open_modelinstead of the previously active model, including a native pre-open guard refusal before the target document exists. Manual warnings aggregate by definition code, retain warnings after duplicate runs, and report bounded scan/omission details with accurate occurrence counts. - Room tags use the native room-tag API; unsuccessful tagging reports individual errors instead of an empty success.
tag_all_roomsskips rooms already tagged in the current view. Room openings use the room's phase, and sheet schedule counts exclude title-block revision schedules. - Schedule Level/reference filters resolve names and element IDs. Sort directions accept
ascending,orderandsortOrderconsistently and reject conflicts. Phase-aware schedule creation uses the active view phase or an explicitphase; see schedule inputs. - Schedule data returns rendered text with parallel
rowKindsmetadata for header, blank, text and data rows.create_viewaccepts the documented lowercasefloorplanand3dvalues. - An add-in that requires document confirmation now answers a gateway that predates it with
PAIRING_REQUIREDand asks for a server update, instead ofDOCUMENT_UNCONFIRMED, which pointed to arevit_switch_targetverification that gateway cannot complete. Gateways senddocument_protocolwith each request. send_codegroup rollback removes reverted transactions from the observed commits when Revit's transaction names can be matched, avoiding a falsecommittedresult for that case. An assimilated inner group whose names cannot be matched remains a limitation: the final receipt can still reportpartial,mutationApplied: trueand incomplete observation, blocking further writes even when the model is unchanged.- A failed target switch restores the binding captured under the connection lock, preserving a concurrent successful switch instead of rolling back to an earlier snapshot.
Changed
- Spill retention runs on gateway startup in the background and every five minutes while the gateway is running, even when no new spill is produced. Cleanup keeps the configured age limit, refuses linked paths, and retries later after transient maintenance failures.
- Read-only registration follows tool annotations without session-navigation exceptions:
revit_switch_targetremains non-read-only and is omitted/blocked under--read-only. Select--target pid:<n>at startup and restart the gateway to change the read-only binding. - Tool descriptions and instructions. Core tool descriptions are shorter while retaining pre-call safety guidance. The send-code description includes both supported C# entry forms, available imports and operation-status guidance. Full-mode instructions no longer require loading the change prompt before every model change; the prompt remains available.
- Tool arguments are checked before a tool runs. A call missing a required parameter now returns
INVALID_ARGUMENTinstead of the SDK's genericAn error occurred invoking '<tool>'., and the tool does not run. The error names the missing parameters, the keys received and the expected parameters, withdid_you_meanfor near-misses such asElevationorelement_id. Keys that are not parameters of the tool are no longer dropped silently: the call still runs, and the result lists them under the new_ignored_argumentsfield. A rejected call is journaled with key names only, never values. A value that cannot be converted (for example"elevation": "abc") still returns the generic SDK error, with the cause in the server's stderr. - Verified write targets and documents. Model writes require an explicitly selected target and confirmed active document.
revit_switch_target(verify=true)confirms the document; a changed document requires verification again. - Bounded diagnostics and transport lifecycle. Diagnostic logs use bounded background writes, rotation and repeat summaries; legacy logs are compacted. TCP/named-pipe Stop/Start, authentication, pending responses and idle connection cleanup no longer leave the previous listener or connection active.
- MCP startup preference and coexistence. Manual On/Off persists across Revit sessions. Detection of another third-party MCP add-in suppresses automatic startup, and manual enable shows a localized warning. The recognized Autodesk MCP registration is exempt from that detection.
- Warnings during MCP edits now default to rollback. The shared helper and native failure event capture the reason before changing failure state. A matching decision or model-specific rule saved in Revit's Issues UI is required to accept supported warnings; Error, Corruption and incomplete capture are not accepted by warning rules. Batch policy stops override
continueOnError=true. Calls with earlier committed transactions can report partial or unknown outcomes instead of promising whole-call rollback. - Unresolved model issues block further MCP writes. Local failure records and model gates are independent of call logs and change-history recording, and saved-model state is retained across reconnects/restarts. Rules start empty and are not automatically inherited by copied/Save As models. Storage failures retain uncertainty and do not claim a durable record when none could be written.
- History window layout. Activity and Issues use side-by-side list and detail panels with eased scrolling (about three rows per wheel notch). Issues lists the newest incidents first (up to 500, with a status note when older ones are left out) and shows each warning as a card with its own copy button; the record facts, decision and rules sit beside the list.
- Connection checks use
revit_health. Server instructions now name a user's connection check, not only session start, as the moment to select a target and callrevit_health. - Pending execution is separate from caller timeout. Matching gateway/add-in capability negotiation is required before non-read dispatch. Native dialogs remain with the user unless an exact supported dialog rule applies; busy-host responses direct the agent to local queries. Do not retry unchanged after timeout, pending, interrupted or unknown outcomes. Dirty-document close remains manual when the native event cannot distinguish saving from discarding.
Added
-
Prompt request diagnostics. Bounded diagnostics record each
prompts/getrequest's prompt name, UTC time and session, including failed lookups, without recording prompt argument text. -
revit_healthprovides offline-by-default startup diagnostics with loaded gateway/add-in identities, semantic-version and revision alignment, optional bounded stable-release checks, and state-gated update guidance. It replies from the authenticated listener while Revit is modal; document fields are explicitly dated UI snapshots. The MCP handshake retains the build revision and the health catalog entry carries runtime metadata for client-side reconnect verification. -
History → Issues for reviewing local incidents, Rework, Abandon, constrained Accept once, model rules/revocation and supported one-use native-operation grants. Decisions are recorded in Revit with an optional reason; no MCP approval or rule-mutation tool is exposed. Closing an issue never automatically retries, saves, discards or undoes earlier commits.
-
revit_get_failure_recordsandrevit_get_operation_statusinmeta: bounded read-only local queries that work while Revit is modal and with send-code/history disabled. They use issued identifiers, preserve missing/incomplete evidence, and do not create a missing ledger. Development source counts:--toolsets all237, adaptive bake 240, and bare defaults 50. -
Structured
_failureand_operationreceipts, with incident/operation IDs, actual outcome, persistence, model gate and observation coverage. Arbitrary code and custom preprocessors retain explicit coverage limits. See controlled failures for the behavior change, UI workflow and API limitations. -
Revit dialog information for the agent. While an MCP call waits on a Revit dialog, the pending receipt carries
_operation.dialog(code, kind, live text, title and buttons), and calls refused withREVIT_BUSYcarry_operation.blockedBy. Final receipts say whether a rule, the user or both (mixed) closed each dialog,revit_get_operation_statuskeeps the command's bounded result, and the next response carries a finished pending operation once as_previousOperation. Dialogs and failures the user handles outside MCP are unchanged in Revit and reported once to the next MCP call on that model as_userDialogs; they create no incident or gate.revit_open_modeladdsupgraded_from. -
Waiting for an operation.
revit_get_operation_statustakeswaitSeconds(0–90): it waits on the server, without holding Revit, until an unfinished operation finishes, and otherwise returns withstillWaiting. A read that returned a pending receipt now has a status from the gateway session, since reads have no ledger record. A call that times out without a reported dialog returnsREVIT_OPERATION_TIMED_OUTinstead ofREVIT_OPERATION_REQUIRES_USER;REVIT_REQUEST_NOT_STARTEDsays Revit was busy and nothing ran. Tools that send their own call to Revit (history tools, bake acceptance, target switch) pass on its_userDialogs._previousOperationreaches the next structured response of any tool, including tools that do not call Revit. -
revit_lookup_messageinmeta: explains a dialog code or failure GUID from the catalogue of the bound Revit year without dispatching Revit, so it works while a dialog is open. The add-in builds the catalogue at run time from the Revit installed on the machine and caches it under%LOCALAPPDATA%\Bimwright\rvt-mcp\catalog\; no Autodesk text is packaged.
Validation and remaining coverage
Source and package checks apply to the exact commit listed below. Earlier native results retain their original build identities; the validation record distinguishes current regressions from retained host evidence.
- The optional-reason change has 70 distinct latest-PASS affected regression cases and five separate offscreen WPF assertions; the earlier corrections retain their separately scoped 277 latest-PASS cases. These counts are not an all-tools native acceptance claim.
- Released v1.2.0 installed host/client acceptance remains pending, including Revit 2023/2025/2026 native checks, NuGet global-tool installation/runtime, Claude Desktop Always allow persistence/reconnect, Toast/History, modal/mismatched health and actual-client catalog refresh.
- Native Save As/Closing, delayed reminders, provider/storage fault recovery, remaining acceptance clauses, live per-tool/weak-model benchmarks and every-tool success coverage remain unverified. Descriptor sizes are narrower measurements.
- Issue #21 remains OPEN awaiting reporter feedback. Input-diagnostic improvements are included, but this release does not claim that the reported issue is fixed.
Downloads and upgrade
Use RvtMcp.Setup-v1.2.0-win-x64.zip for the gateway and Revit add-ins. Claude Desktop extension users also install rvt-mcp-desktop-1.2.0.mcpb; the MCPB is unsigned and requires the exact matching Setup executable. The .nupkg is server-only and does not install the Revit add-in. See the installation and upgrade guide.
Each of the three GitHub packages has its own .sha256 sidecar. RvtMcp.Server 1.2.0 is published on NuGet.org and listed in the MCP Registry. NuGet repository signing can change the package archive bytes; its downloaded payload matches the release package when the repository signature is excluded.
Distribution status — 2026-10-19
| Channel/check | Status |
|---|---|
| GitHub Release | PUBLISHED / VERIFIED: six package/checksum assets; source and tag remain bd484626de59e0c68807a9280ab0c803e5827e45 |
| NuGet.org | PUBLISHED / PAYLOAD VERIFIED: RvtMcp.Server 1.2.0 is public; global-tool installation/runtime remains NOT_RUN |
| MCP Registry | PUBLISHED / VERIFIED: exact-version and latest responses show active/latest 1.2.0, RvtMcp.Server 1.2.0 and stdio |
| MCP Registry search | PENDING: search requests timed out; exact-version/latest publication checks passed separately |
This distribution follow-up updates links and status only. The pending native/client, benchmark and issue #21 checks above retain their original scope. Release artifacts, tag, build identity and their existing CI evidence are unchanged.
Build and package verification
Source: bd48462. Server/plugin build identity: 1.2.0+bd484626de59e0c68807a9280ab0c803e5827e45.
CI: 12/12 jobs, xUnit 2,361/2,361 PASS. Setup and NuGet are the exact CI artifacts; MCPB pins the Setup executable hash. Fresh full-mode (237 tools) and read-only (98 tools) catalogs passed schema/launcher checks. Six SDK plugin builds do not establish native acceptance on every Revit year.
| Package | SHA-256 |
|---|---|
| RvtMcp.Setup-v1.2.0-win-x64.zip | d2af1248092a235bcc6e71e5b0f8f8fb4ceb44278c315f7bd674c4a842d95820 |
| rvt-mcp-desktop-1.2.0.mcpb | 3c466a50323d6d09404ead9abf1b0f95dfb6e09c881f9b72eb268e31699072cf |
| RvtMcp.Server.1.2.0.nupkg | 70f1efbdf98061eaabb798de99a7893e9c7f1192a0fe3980b7a0ab0c452e347e |