AgentStack
Browse Sign in
Browse Why AgentStack Sell Docs
Sign in
MCP verified MIT Self-run

RevitMCPServer

mcp-kenlp-revitmcpserver · by KenLP

A custom Model Context Protocol server that lets Claude (or any MCP client) drive Revit 2025- 2027 — read the model, query, create & edit elements, and run multi-step operations as a single undoable Transaction.

— No reviews yet
0 installs
12 views
0.0% view→install

Install

$ agentstack add mcp-kenlp-revitmcpserver

✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.

Security review

✓ Passed

No issues found. Passed automated security review. · v0.1.0 How review works →

  • ✓ Prompt-injection patterns
  • ✓ Secret / credential exfiltration
  • ✓ Dangerous shell & filesystem operations
  • ✓ Untrusted network calls
  • ✓ Known-malicious package signatures

What it can access

  • ● Network access Used
  • ● Filesystem access Used
  • ✓ Shell / process execution No
  • ✓ Environment & secrets No
  • ✓ Dynamic code execution No

From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.

View the full security report →

Verified badge

Passed review? Show it. Paste this badge into your README, it links to the public security report.

AgentStack Verified badge Links to your public security report.
[![AgentStack Verified](https://agentstack.voostack.com/badges/verified.svg)](https://agentstack.voostack.com/security/report/mcp-kenlp-revitmcpserver)

Reliability & compatibility

✓ Security review passed
0 installs to date
— no reviews yet
● 11d ago

Declared compatibility

Claude CodeClaude DesktopCursorWindsurf

Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.

Preview Execution monitoring

We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.

How agent discovery & health will work →
Are you the author of RevitMCPServer? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

Revit MCP Server

> A custom Model Context Protocol server that lets Claude (Desktop, Code, > or any MCP client) drive Autodesk Revit 2025, 2026 & 2027 — read the model, > create & edit elements, and run multi-step operations as a single undoable > Transaction.

> Author: KenLP

Claude Desktop / Claude Code  ──stdio──▶  revit-mcp-server (Node)  ──HTTP──▶  RevitMCPAddin  ──ExternalEvent + Transaction──▶  Revit 2025/2026/2027
  • C# addin (.NET 8 for R2026, .NET 10 for R2027) runs inside Revit,

owns transactions, marshals work onto the main UI thread via IExternalEventHandler. Auto-assigns a unique port per Revit version so multiple versions can run side-by-side.

  • TypeScript MCP server is a thin stdio bridge: every tool just forwards

to a small HTTP API on the addin.

  • Curated, schema-validated tool surface — no eval-style escape hatch,

every write is a named Transaction you can review and undo.

  • Batch transaction pattern — fold N steps into one atomic Revit undo

entry; rollback on first failure.

For the design rationale and the answer to "why not just wrap every Revit API?", read [docs/API_COVERAGE.md](docs/API_COVERAGE.md).

Status

v0.8.35 — 101 C# commands (91 exposed as MCP tools + 10 hidden) + 1 batch tool + 2 workflow recipes = 94 MCP tools. Hidden = create_spot_elevation + the 9-command spatial_* HTTP pack, registered for HTTP /mcp use but off the MCP tool surface. Supports Revit 2025 (.NET 8), Revit 2026 (.NET 8) and Revit 2027 (.NET 10) with auto-port assignment for side-by-side use. Features: dry-run mode, structured diffs, auth token, per-tool risk levels, Family & FamilySymbol rename, linked-file element reading, clash/clearance detection (host + linked-file raycast, multi-point centreline sampling), view image export, view manipulation (duplicate, section-box, isolate), MEP Space listing, element type swapping, view template application, parameter copy across elements, schedule filters/sort/CSV export, level elevation editing, PDF export, room containment (phase-aware FromRoom/ToRoom/Room batch lookup for doors, furniture, fixtures), annotation tagging (tag single element, tag-all-not-tagged by category, list tags in view), model health report (one-shot scorecard: warnings + warning/element ratio, file size, imported/linked CAD, PDF/raster, RVT links, point clouds, in-place families, groups, unused views, purgeable elements), workset audit (per-workset element counts, empty-workset detection). See [docs/ROADMAP.md](docs/ROADMAP.md).

| Layer | Build target | Status | | ------------ | ------------------------- | ------ | | Revit addin | Revit 2025 / .NET 8 | ✅ CI-tested | | Revit addin | Revit 2026 / .NET 8 | ✅ | | Revit addin | Revit 2027 / .NET 10 | ✅ | | MCP server | Node 22 / TypeScript 5 | ✅ |

Tool surface (91 commands + 1 batch + 2 recipes = 94 MCP tools)

Diagnostics (3)

revit_ping | revit_get_version | revit_get_document_info

Inspection / Introspection (31 read-only)

revit_list_elements | revit_get_element_info | revit_find_element_by_unique_id | revit_query_where | revit_find_elements | revit_get_parameter | revit_list_levels | revit_list_wall_types | revit_list_floor_types | revit_list_categories | revit_list_families | revit_list_family_types | revit_list_sheets | revit_list_rooms | revit_list_spaces | revit_list_materials | revit_list_phases | revit_list_view_templates | revit_get_views | revit_get_active_view | revit_get_selected_elements | revit_get_linked_files | revit_get_element_geometry | revit_get_linked_elements | revit_get_view_image | revit_get_element_rooms | revit_export_view_pdf | revit_get_model_health | revit_get_worksets | revit_get_schedule_data | revit_get_doors

Coordination / Clash (1 read-only)

revit_check_clearance

Creation: Architecture (10 write)

revit_create_wall | revit_create_floor | revit_create_level | revit_create_grid | revit_create_room | revit_create_column | revit_create_beam | revit_create_ceiling | revit_create_opening_in_wall | revit_place_family_instance

Creation: Documentation (9 write)

revit_create_sheet | revit_place_view_on_sheet | revit_create_floor_plan_view | revit_create_section_view | revit_create_3d_view | revit_create_perspective_view | revit_create_schedule | revit_tag_element | revit_create_text_note

Annotation & Detailing (5 read/write)

revit_tag_all_in_view | revit_get_tags_in_view | revit_create_aligned_dimension | revit_create_detail_line | revit_create_filled_region

Edit: Parameters, Types & Naming (9 write)

revit_set_parameter | revit_set_parameter_batch | revit_update_where | revit_import_parameters | revit_rename_element | revit_change_element_type | revit_apply_view_template | revit_copy_parameters | revit_configure_schedule

Edit: Levels & Export (1 write)

revit_set_level_elevation

Edit: Transform (5 write)

revit_move_element | revit_rotate_element | revit_copy_element | revit_mirror_element | revit_array_linear

Edit: Delete & Group (3 write)

revit_delete_elements | revit_group_elements | revit_ungroup_elements

Family (2 write)

revit_load_family | revit_duplicate_family_type

View Manipulation (12 write / UI)

revit_open_view | revit_set_view_detail_level | revit_hide_elements_in_view | revit_unhide_elements_in_view | revit_select_elements | revit_zoom_to_elements | revit_apply_view_filter | revit_color_override_by_param | revit_override_element_graphics | revit_duplicate_view | revit_set_section_box | revit_isolate_elements_in_view

Batch (1)

revit_batch — run multiple commands inside ONE Revit Transaction (single undo entry).

Workflow recipes (2)

revit_recipe_model_health_triage — read-only: health scan → prioritized, actionable triage list. revit_recipe_clash_review — read-only: coordination clash sweep across many element-set pairs (host vs host or host vs linked RVT) → consolidated, prioritized clash report. Recipes orchestrate verified kernel commands in the Node layer; they are the P4 workflow surface.

Full schemas and examples: [docs/COMMANDS.md](docs/COMMANDS.md).

Ribbon panel (optional, and inert on its own)

Installing the add-in also adds one ribbon tab, AutoAudit, with a dockable panel. It is not a feature of this add-in by itself: the panel is a WebView2 browser pointed at a local service, so with nothing listening on the port it shows a connection error. That is the service being absent, not the add-in being broken.

| Ribbon tab | Loads by default | Service | Config file (per Revit version) | | ---------- | ---------------- | ------- | ------------------------------- | | AutoAudit | http://127.0.0.1:8601/ui/ | KenLP/autoaudit-bim | revit-mcp-panel.json |

Override the URL by dropping the config file into %APPDATA%\Autodesk\Revit\Addins\\:

{ "url": "http://127.0.0.1:9000/ui/" }

The installer never writes or deletes these files, so a URL you set survives every upgrade. A missing or malformed file falls back to the default above.

A blank panel or a connection error almost always means the service is not running, or its web UI was never built — check the service's own README for the build step before filing anything here.

A second panel of your own (opt-in)

The add-in can host one more dockable panel for any local web UI you run, but only if you ask for it: nothing appears unless revit-mcp-extra-panel.json exists in the same folder and names a URL.

{
  "url":   "http://127.0.0.1:9000/ui/",   // required — http(s) only
  "label": "My Tool",                     // pane + button name (default "Extra Panel")
  "tab":   "My Tool",                     // ribbon tab (default = label; "AutoAudit" shares that tab)
  "enabled": true                         // set false to hide it without deleting the file
}

No file, no url, or "enabled": false → no tab, no pane, nothing registered. The add-in ships nothing for this panel to show; it is only a browser onto the URL you give it.

Ignore the tab entirely if you only want the MCP tool surface. Panels are additive: nothing in the tool surface depends on them, and a panel that fails to load cannot take the MCP server down with it.

Tool profiles (token efficiency)

Exposing all 94 tools to every conversation costs tokens and degrades tool-selection accuracy. Set the REVIT_MCP_PROFILE env var to a comma-separated list to expose only the groups you need; core (ping, doc/element info, find, batch) is always included. Unset = all tools (default, backward compatible).

| Profile | Tools | For | | ------- | ----- | --- | | core | 8 (always on) | ping, document/element info, find, batch | | inspection | 23 | list_* / get_* read-only queries (incl. schedule data, door swing) | | model-health | 2 | get_model_health, get_worksets | | recipes | 2 | workflow recipes (model-health triage, clash review) | | coordination | 1 | check_clearance | | architecture | 10 | wall/floor/level/grid/room/column/beam/ceiling/opening/family | | documentation | 16 | sheets, views, schedules, tags, text, PDF, dimensions, detail lines, filled regions | | editing | 17 | parameters, type swap, transform, delete, group, family load/duplicate | | view | 11 | open/hide/isolate/filter/override/section-box |

// e.g. a documentation + view client (a subset instead of all 93):
{ "mcpServers": { "revit": {
  "command": "node", "args": ["dist/index.js"],
  "env": { "REVIT_MCP_VERSION": "2027", "REVIT_MCP_PROFILE": "documentation,view" }
}}}

Repo layout

RevitMCPServer/
├── README.md                       ← you are here
├── LICENSE                         ← MIT
├── CHANGELOG.md
├── docs/
│   ├── ARCHITECTURE.md             ← three-layer design, threading, observability
│   ├── COMMANDS.md                 ← every command's schema + envelope
│   ├── API_COVERAGE.md             ← what we wrap, what we don't, why
│   ├── COMPATIBILITY.md            ← Revit/.NET/Node support + port matrix
│   ├── SMOKE_TESTING.md            ← live-Revit smoke suite + golden fixtures
│   ├── TROUBLESHOOTING.md          ← common failures and fixes
│   └── ROADMAP.md                  ← phase tracker
├── scripts/
│   ├── check-version.mjs           ← CI gate: version + tool-count consistency
│   └── smoke-test.ps1              ← live-Revit smoke test
└── src/
    ├── RevitMCP.Core/              ← portable kernel: dispatcher + 101 commands
    │   ├── RevitMCPExternalEventHandler.cs
    │   └── Commands/               ← one IRevitCommand per tool
    ├── RevitAddin/                 ← C# addin host (in-Revit, .NET 8/10)
    │   ├── App.cs
    │   ├── Server/McpHttpServer.cs ← /mcp, /mcp/batch, /commands, /health, /stats
    │   ├── Server/RequestLog.cs    ← structured request log
    │   ├── Server/ServerMetrics.cs ← counters behind /stats
    │   ├── RevitMCPAddin.csproj
    │   └── RevitMCPAddin.addin
    └── McpServer/                  ← TypeScript MCP stdio server
        ├── src/index.ts            ← tool declarations + profiles
        ├── src/revitClient.ts
        ├── package.json
        └── tsconfig.json

Install (recommended) — one-step installer

Everything is in a single download; no cloning or compiling.

  1. Download RevitMCPServer-v.zip from the

latest release (the combined bundle — not the -R2025/-R2026/-R2027 per-version zips).

  1. Close Revit (the installer replaces the add-in DLL).
  2. Extract the zip, then right-click install.ps1 → Run with PowerShell

(or, in a PowerShell window: .\install.ps1).

  1. Restart Revit, then restart Claude Desktop.

install.ps1 with no arguments auto-detects which Revit versions (2025 / 2026 / 2027) you have installed, deploys the matching add-in to each, installs the MCP server to %LOCALAPPDATA%\RevitMCPServer, and merges a revit- entry into your Claude Desktop config — backing it up first and leaving every other MCP server untouched.

Only prerequisite: Node.js 18+ on your PATH, for the Claude bridge. (The add-in itself works over its local HTTP API without Node — Node is only needed for Claude Desktop/Code to talk to it, and a missing Node is a warning, not a failure.)

Other MCP clients (Codex, Gemini, Cursor)

By default the installer configures Claude Desktop. Point it at a different client with -Client (one or more of claude, gemini, cursor, codex):

.\install.ps1 -Client codex                     # OpenAI Codex CLI
.\install.ps1 -Client claude,gemini,cursor,codex # all of them

Each client's config is merged in place (backed up first), leaving its other servers untouched:

| Client | Config file | Format | | ------ | ----------- | ------ | | claude | %APPDATA%\Claude\claude_desktop_config.json | JSON mcpServers | | gemini | %USERPROFILE%\.gemini\settings.json | JSON mcpServers | | cursor | %USERPROFILE%\.cursor\mcp.json | JSON mcpServers | | codex | %USERPROFILE%\.codex\config.toml | TOML [mcp_servers.*] |

The server is the same stdio program for every client — only where each keeps its config differs. Cloud-only clients that can't launch a local process (e.g. web ChatGPT) can't reach the loopback add-in; use a local client (Codex CLI, Claude, Cursor, Gemini CLI) on the same machine as Revit.

Options:

.\install.ps1 -RevitVersions 2027   # only one version
.\install.ps1 -NoClientConfig       # don't touch any client config, just print the snippet
.\uninstall.ps1                     # remove add-in, server, and the revit- config entries

Verify: open Revit, then run the health check (7890 = R2025, 7891 = R2026, 7892 = R2027):

Invoke-RestMethod http://127.0.0.1:7891/health
# → ok=True, service=revit-mcp-addin, version=0.8.35, authEnabled=True

Then restart Claude Desktop. The server shows up under Connectors (the + menu → Connectors) as revit-2026 / revit-2027, toggled on — open Tool access there to see the 89 revit_* tools per version. (Older Claude builds showed these under a 🔨 tools icon instead.)


Build from source — advanced

Most users should use the one-step installer above. Build from source only to run an unreleased commit or to hack on the code. Every step is copy-paste into PowerShell on Windows.

Step 0 — What you'll install

| Tool | Why | Download | | --------------------- | ------------------------------------------ | -------------------------------------------------------------- | | Autodesk Revit 2025, 2026 or 2027 | The app the addin plugs into | Autodesk account (you already have this) | | .NET 8 SDK (R2025/R2026) or .NET 10 SDK (R2027) | Compiles the C# addin | (or /10.0) | | Node.js 22 (LTS) | Runs the MCP bridge | | | Git | Downloads this repo | | | Claude Desktop (or Claude Code) | Your MCP client | |

Install each of the above with the default options. Reboot is not required, but open a fresh PowerShell window after installing them so the PATH picks up dotnet, node, and git.

Sanity check — paste this in PowerShell:

dotnet --version   # should pri

…

## Source & license

This open-source MCP server is cataloged on AgentStack and links to its original source — we do not rehost the code.

- **Author:** [KenLP](https://github.com/KenLP)
- **Source:** [KenLP/RevitMCPServer](https://github.com/KenLP/RevitMCPServer)
- **License:** MIT

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet, be the first.

Versions

  • v0.1.0 Imported from the upstream source.