Reported issues for revit-model-mcp
Pod holds 13 of 13 GitHub reports that passed its relevance review. This can include external user reports, maintainer-confirmed bugs, and concrete feature gaps. Treat them as evidence to inspect, not a count of distinct defects.
Back to revit-model-mcp.
Most discussed
HTTP host: graceful shutdown, stored-response budget and request read deadline
Context
The HTTP host in the add-in (docs/transport.md, "HTTP configuration") has known robustness gaps. #64 moves HTTP jobs onto the shared job queue (POST /jobs enqueues, GET /jobs/{id}, POST /jobs/{id}/cancel), so this work should start from main after #64 is merged.
- Listener tasks are detached and the cancellation source is not disposed, so shutdown can race in-flight handlers.
- Completed responses expire by time only; there is no byte or count budget, so a chatty client…
Read the thread · 2026-09-14 · open · 2 comments
Live validation of reads and actions on Revit 2022–2025 and 2027
Context
docs/validation.md shows live reads and actions validated only on Revit 2026.4. Revit 2022–2025 and 2027 have build evidence only: the add-in compiles against each API, but nobody has opened a model and called the tools there. Users on those years cannot tell whether "supported" means "tested".
Proposal
Run the existing live checklist on each remaining year and record the result in the validation table.
For one year:
- Install the release MSI for that year, open Autodesk's…
Read the thread · 2026-09-14 · open · 2 comments
HTTP transport listener does not bind on 53110 in Revit despite httpEnabled
Context
Live test on Revit 2026.4 (Windows), Revit Model MCP 0.5.0 add-in installed. The add-in loads and works over the file channel (a ping job returns {"command":"ping","success":true,"data":"pong"}), and the instance heartbeat updates. But the HTTP transport listener never binds.
Observed
%LOCALAPPDATA%\RevitModelMcp\settings.json:{"httpEnabled":true,"httpBind":"127.0.0.1","httpPort":53110,...}Get-NetTCPConnection -LocalPort 53110 -State Listenreturns 0…
Read the thread · 2026-09-14 · closed · 1 comment
Design: unattended execution policy for actions
Context
Actions are gated by REVIT_MCP_ALLOW_WRITE=1 and the workstation allow-write file, and every mutating action supports dry_run and returns verification. What does not exist yet is a policy for unattended use: once both gates are on, any prompt can mutate the model without a per-action confirmation.
Discussion needed
Before implementation, agree on the model. Options on the table:
- Confirmation tokens. A mutating call without a token returns a preview plus a…
Read the thread · 2026-09-14 · open · 1 comment
MultiUser MSI grants HTTP URL ACL only to the installing user's SID
Severity: P1 (installer — HTTP unusable for other users of a per-machine install)
The MultiUser (per-machine) MSI grants the HTTP prefix listen right only to the installing user's [UserSID].
Repro: an admin installs the per-machine package; a different user launches Revit — the add-in is installed but its HttpListener.Start() does not get the required URL ACL, so HTTP transport is unavailable for that user.
Code: build/install/Installer.cs:31, :73.
Fix direction:…
Read the thread · 2026-09-16 · open · 0 comments
PowerShell discovery output not forced to UTF-8; non-ASCII model names corrupted
Severity: P1 (encoding — discovery fails for non-ASCII model names)
JSON discovery is emitted via Windows PowerShell without forcing UTF-8 output, but Python decodes stdout as UTF-8 (errors replaced) unconditionally.
Impact: on Windows with a non-UTF-8 console code page, Cyrillic (and other non-ASCII) documentTitle/documentPath are corrupted, so discovery filtering by the original model name stops matching. The base64 protection used for normal responses does not cover this path.…
Read the thread · 2026-09-16 · open · 0 comments
Query parameter filters on output-field names throw KeyNotFoundException
Severity: P1 (crash — valid input throws)
Parameter names that collide with result output fields are removed from the resolver, then indexed unconditionally in the dictionary, raising KeyNotFoundException instead of filtering.
Repro: parameterFilters=[{"parameter":"Level","operator":"exists"}], or any filter on Name — passes the parser but throws instead of filtering.
Code: src/RevitModelMcp.Addin/Capture/QueryParameterResolver.cs:30,…
Read the thread · 2026-09-16 · open · 0 comments
Cleanup failure overwrites an already-received (committed) action result
Severity: P1 (data safety — lost action result / possible double-apply)
A cleanup error (e.g. SSH drop while deleting temp files) overwrites an already-received successful response, including a committed action's result.
Repro: a move/place-family commits successfully, then the SSH connection breaks during temp-file cleanup. The client receives only the cleanup error, loses the post-commit verification and success info, and a retry may apply the action again.
Code:…
Read the thread · 2026-09-16 · open · 0 comments
Most recent
view-elements/list-views intermediate responses still accepted as terminal after #45
Severity: P1 (correctness — regression window after #45)
#45 fixed the "accepted and running" placeholder for most reads, but view-elements and list-views intermediate responses are still treated as terminal on the Local/SSH path.
Polling can land on Processing is waiting… or Processed N…: the call returns under-read data and deletes the response file while the add-in is still working; when elapsedMs=0 a spurious error is possible.
Code:…
Read the thread · 2026-09-16 · open · 0 comments
Write actions execute against the active document, not the addressed one
Severity: P0 (data safety — wrong-document mutation)
A queued write action records the target PID but not the target document, and the executor operates on the current ActiveUIDocument at the time the ExternalEvent fires — not the document the action was addressed to.
Repro (single Revit, no multi-instance needed):
- Open models A and B in one Revit.
- With A active, submit a write action (e.g.
move/delete) addressed at A, referencing anElementIdthat also exists…
Read the thread · 2026-09-16 · closed · 0 comments
Multi-instance on one machine: fixed HTTP port 53110 + shared file channel collide
Summary
When two or more Revit instances on the same Windows user each load the add-in, they collide on shared, machine-wide resources. This is not destructive to Revit or the model, but it breaks the MCP channel for all-but-one instance and — with actions enabled — creates a wrong-instance targeting risk.
Observed in the wild: a second Revit started while the first held the HTTP port; the second instance's verify failed. (The reported 503 is most likely **http.sys returning 503 for…
Read the thread · 2026-09-16 · closed · 0 comments
Report skipped fields from every best-effort reader
Context
revit_model_health reports skipped and revit_links_status reports per-link error, but other best-effort readers still swallow parameter and geometry failures silently. A response can look complete while a category was skipped.
Proposal
Every reader returns the same diagnostic shape: skipped: [{ "what": "...", "reason": "..." }] at the top level of the result, and logs the cause at debug level. Empty skipped means the read was complete.
Acceptance criteria
- All…
Read the thread · 2026-09-14 · open · 0 comments
revit_set_parameter: explicit parameter ids and no implicit type fallback
Context
revit_set_parameter resolves parameters by name. Revit allows several parameters with the same name on one element (instance and type, shared and built-in), and the current implementation picks one and falls back on type coercion implicitly. A user cannot tell which parameter was written.
Proposal
- Accept an optional
parameterId(BuiltInParameter name, shared GUID or ElementId) alongsidename. - When
nameis ambiguous, refuse with a list of candidates (id, storage…
Read the thread · 2026-09-14 · open · 0 comments
The remaining reports are on the project's issue tracker.