@rui.branco/revit-mcp 1.0.1 → 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/PRIVACY.md CHANGED
@@ -2,8 +2,7 @@
2
2
 
3
3
  **Effective date:** 21 September 2026
4
4
  **Applies to:** the `revit-mcp` MCP server and its bundled Revit bridge add-in
5
- (the "Software"), distributed as the npm package `@rui.branco/revit-mcp` and as
6
- the Claude Desktop extension `revit-mcp.mcpb`.
5
+ (the "Software"), distributed as the npm package `@rui.branco/revit-mcp` and the `revit` plugin.
7
6
 
8
7
  ## Summary
9
8
 
package/README.md CHANGED
@@ -18,32 +18,56 @@ Claude Code route uses `npx`, so it wants Node 18+.
18
18
 
19
19
  ### 1. Register the server
20
20
 
21
- #### Claude Desktop extension
21
+ Same plugin either way. Type both lines into the chat box, one after the other.
22
22
 
23
- Claude Desktop installs this as a **Desktop Extension**, Anthropic's packaged
24
- format for MCP servers. No JSON, no terminal.
23
+ **Claude Desktop** in any chat:
25
24
 
26
- 1. **[⬇ Download `revit-mcp.mcpb`](https://github.com/rui-branco/revit-mcp/releases/latest/download/revit-mcp.mcpb)**
27
- 2. Open Claude Desktop → **Settings → Extensions**
28
- 3. **Drag `revit-mcp.mcpb` onto the window** (or use **Advanced settings →
29
- Install extension…** and pick the file)
30
- 4. Press **Install**
25
+ ```
26
+ /plugin marketplace add rui-branco/revit-mcp
27
+ /plugin install revit@revit-tools
28
+ ```
29
+
30
+ **Claude Code** — in the CLI:
31
+
32
+ ```
33
+ /plugin marketplace add rui-branco/revit-mcp
34
+ /plugin install revit@revit-tools
35
+ ```
36
+
37
+ <details>
38
+ <summary>Or from your terminal, without opening Claude Code</summary>
31
39
 
32
- The extension carries the server, its dependencies and the Revit add-in, and
33
- runs on Claude Desktop's built-in Node runtime — **neither Node.js nor npm has
34
- to be installed**. Bridge URL and request timeout appear under **Settings →
35
- Extensions → Revit**.
40
+ ```bash
41
+ claude plugin marketplace add rui-branco/revit-mcp
42
+ claude plugin install revit@revit-tools
43
+ ```
44
+
45
+ </details>
36
46
 
37
- > Double-clicking the file works only where Claude Desktop has registered the
38
- > `.mcpb` file type. Many installs have not, so prefer the drag-and-drop or
39
- > **Install extension…** route above.
47
+ That is the whole step. The plugin updates itself from this repo, so there is
48
+ nothing to re-download when a new version ships; `/plugin update` pulls it
49
+ early if you do not want to wait.
40
50
 
41
51
  <details>
42
- <summary>Or configure it by hand</summary>
52
+ <summary><b>Other ways to install</b></summary>
53
+
54
+ These exist for completeness. The plugin above is the supported path, and the
55
+ only one that updates on its own.
56
+
57
+ **Claude Code, without the plugin**
58
+
59
+ ```bash
60
+ claude mcp add revit --scope user -- npx -y @rui.branco/revit-mcp
61
+ ```
62
+
63
+ `--scope user` enables it in every project; `--scope project` writes it to the
64
+ repo's `.mcp.json` instead, to share with a team.
43
65
 
44
- Open **Settings Developer → Edit Config** (that is
45
- `%APPDATA%\Claude\claude_desktop_config.json`) and add the `revit` entry,
46
- keeping any servers already there:
66
+ **Claude Desktop, by hand**
67
+
68
+ **Settings Developer Edit Config** opens
69
+ `%APPDATA%\Claude\claude_desktop_config.json`. Add the `revit` entry, keeping
70
+ any servers already there:
47
71
 
48
72
  ```json
49
73
  {
@@ -56,31 +80,16 @@ keeping any servers already there:
56
80
  }
57
81
  ```
58
82
 
59
- Then **quit Claude Desktop from the system tray** — closing the window is not
60
- enough — and reopen it.
61
-
62
- If the server shows as failed, Claude Desktop could not find `npx` on its
63
- `PATH`. Use absolute paths instead (`where.exe npx.cmd` prints yours), or point
64
- `command` at your `node.exe` with `args` of
65
- `["C:\\path\\to\\revit-mcp\\index.js"]`.
66
-
67
- </details>
68
-
69
- #### Claude Code — one command
70
-
71
- ```bash
72
- claude mcp add revit --scope user -- npx -y @rui.branco/revit-mcp
73
- ```
74
-
75
- `--scope user` enables it in every project; `--scope project` writes it to the
76
- repo's `.mcp.json` instead, to share with a team. Check it with `claude mcp list`.
83
+ Then quit Claude Desktop from the system tray — closing the window is not
84
+ enough — and reopen it. If the server shows as failed, Claude Desktop could not
85
+ find `npx` on its `PATH`: use an absolute path (`where.exe npx.cmd` prints
86
+ yours).
77
87
 
78
- <details>
79
- <summary><b>Other MCP clients</b></summary>
88
+ **Any other MCP client**
80
89
 
81
- Any stdio MCP client works. Use `npx -y @rui.branco/revit-mcp` as the
82
- server command; it takes no arguments and needs no environment beyond the
83
- optional [configuration](#configuration).
90
+ Run `npx -y @rui.branco/revit-mcp` as the server command. It takes no
91
+ arguments and needs no environment beyond the optional
92
+ [configuration](#configuration).
84
93
 
85
94
  </details>
86
95
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rui.branco/revit-mcp",
3
- "version": "1.0.1",
3
+ "version": "1.0.3",
4
4
  "description": "MCP server for Autodesk Revit: read and edit the open model from an MCP client, via a bundled C# bridge add-in that runs inside Revit",
5
5
  "keywords": [
6
6
  "revit",
@@ -32,7 +32,6 @@
32
32
  "revit-bridge/dist/",
33
33
  "README.md",
34
34
  "LICENSE",
35
- "manifest.json",
36
35
  "PRIVACY.md"
37
36
  ],
38
37
  "engines": {
@@ -44,8 +43,7 @@
44
43
  "scripts": {
45
44
  "test": "node --test tests/*.test.js",
46
45
  "build:bridge": "node scripts/build-bridge.mjs",
47
- "prepublishOnly": "npm run build:bridge && npm test",
48
- "pack:desktop": "npm run build:bridge && npx -y @anthropic-ai/mcpb@2.1.2 pack . revit-mcp.mcpb"
46
+ "prepublishOnly": "npm run build:bridge && npm test"
49
47
  },
50
48
  "dependencies": {
51
49
  "@modelcontextprotocol/sdk": "^1.0.0"
package/manifest.json DELETED
@@ -1,419 +0,0 @@
1
- {
2
- "manifest_version": "0.2",
3
- "name": "revit-mcp",
4
- "display_name": "Revit",
5
- "version": "1.0.0",
6
- "description": "Query and edit the Autodesk Revit model open on your desktop.",
7
- "long_description": "Connects Claude to the Revit model currently open on this Windows machine through a bundled C# bridge add-in. Query levels and elements, read and write parameters, model geometry, and produce a full drawing set: sheets, views, schedules and PDF exports. Requires Autodesk Revit 2025, 2026 or 2027, and a one-time bridge install run from inside Claude.",
8
- "author": {
9
- "name": "rui-branco",
10
- "url": "https://github.com/rui-branco"
11
- },
12
- "homepage": "https://github.com/rui-branco/revit-mcp",
13
- "documentation": "https://github.com/rui-branco/revit-mcp#readme",
14
- "support": "https://github.com/rui-branco/revit-mcp/issues",
15
- "license": "MIT",
16
- "keywords": [
17
- "revit",
18
- "autodesk",
19
- "bim",
20
- "architecture",
21
- "cad"
22
- ],
23
- "server": {
24
- "type": "node",
25
- "entry_point": "index.js",
26
- "mcp_config": {
27
- "command": "node",
28
- "args": [
29
- "${__dirname}/index.js"
30
- ],
31
- "env": {
32
- "REVIT_MCP_URL": "${user_config.bridge_url}",
33
- "REVIT_MCP_TIMEOUT": "${user_config.timeout_ms}"
34
- }
35
- }
36
- },
37
- "user_config": {
38
- "bridge_url": {
39
- "type": "string",
40
- "title": "Bridge URL",
41
- "description": "Where the Revit bridge add-in listens. Change only for a second Revit instance.",
42
- "default": "http://localhost:48884/revit-mcp",
43
- "required": false
44
- },
45
- "timeout_ms": {
46
- "type": "string",
47
- "title": "Request timeout (ms)",
48
- "description": "How long to wait for Revit to answer a single request.",
49
- "default": "30000",
50
- "required": false
51
- }
52
- },
53
- "tools": [
54
- {
55
- "name": "revit_add_text_notes",
56
- "description": "Add text notes to a view — the annotation on a detail, a plan or a section."
57
- },
58
- {
59
- "name": "revit_apply_view_template",
60
- "description": "Put one view template onto many views in a single undo step."
61
- },
62
- {
63
- "name": "revit_assign_material",
64
- "description": "Put an existing material on elements that already exist."
65
- },
66
- {
67
- "name": "revit_capture_view_template",
68
- "description": "Turn a view that is already drawn the way you want into a reusable view template, and state which parameters it controls."
69
- },
70
- {
71
- "name": "revit_close_project",
72
- "description": "Close the active document."
73
- },
74
- {
75
- "name": "revit_configure_schedule",
76
- "description": "Reshape how an EXISTING schedule presents the rows it already has: grouping, totals, column headings and widths."
77
- },
78
- {
79
- "name": "revit_create_3d_view",
80
- "description": "Create a 3D view — an isometric by default, or a perspective camera with perspective: true."
81
- },
82
- {
83
- "name": "revit_create_directshape",
84
- "description": "Create elements from raw geometry, with no family involved."
85
- },
86
- {
87
- "name": "revit_create_drafting_view",
88
- "description": "Create a drafting view: a sheet of linework and notes that is not a view of the model at all."
89
- },
90
- {
91
- "name": "revit_create_floor",
92
- "description": "Create a floor from a closed boundary: paving, a pool deck, a terrace, or an actual building floor."
93
- },
94
- {
95
- "name": "revit_create_floor_type",
96
- "description": "Create a floor type carrying a material and a thickness, by duplicating an existing type and giving it a single structural layer."
97
- },
98
- {
99
- "name": "revit_create_legend",
100
- "description": "Create a legend view by duplicating one the document already has — the only way the Revit API can make a legend."
101
- },
102
- {
103
- "name": "revit_create_levels",
104
- "description": "Create levels in the active document."
105
- },
106
- {
107
- "name": "revit_create_material",
108
- "description": "Create a material with a colour, so the model stops rendering in Revit's default grey."
109
- },
110
- {
111
- "name": "revit_create_pipes",
112
- "description": "Model pipe runs — irrigation, drainage — as geometry, with no MEP family involved."
113
- },
114
- {
115
- "name": "revit_create_plan_view",
116
- "description": "Create a plan view on a level — a floor plan unless 'view_family_type' names another one."
117
- },
118
- {
119
- "name": "revit_create_project_parameter",
120
- "description": "Create a project parameter and bind it to one or more categories — the way to add a field Revit does not have, such as a Phase on sheets tha"
121
- },
122
- {
123
- "name": "revit_create_schedule",
124
- "description": "Create a schedule for a category, with the named fields added in order."
125
- },
126
- {
127
- "name": "revit_create_section_view",
128
- "description": "Create a section view."
129
- },
130
- {
131
- "name": "revit_create_sheets",
132
- "description": "Create sheets in the active document."
133
- },
134
- {
135
- "name": "revit_create_toposolid",
136
- "description": "Create the site surface from a cloud of survey points."
137
- },
138
- {
139
- "name": "revit_create_wall_type",
140
- "description": "Create a wall type carrying a material and a thickness, by duplicating an existing type and giving it a single structural layer."
141
- },
142
- {
143
- "name": "revit_create_walls",
144
- "description": "Create walls on a level from 2D curves."
145
- },
146
- {
147
- "name": "revit_delete_elements",
148
- "description": "Delete elements by id."
149
- },
150
- {
151
- "name": "revit_diagnostics",
152
- "description": "Read what the bridge suppressed: the Revit dialogs it answered automatically and the transaction warnings it resolved, oldest first, plus wh"
153
- },
154
- {
155
- "name": "revit_draw_detail_lines",
156
- "description": "Draw detail lines in a drafting view or a plan — the linework of a construction detail."
157
- },
158
- {
159
- "name": "revit_duplicate_view",
160
- "description": "Duplicate a view."
161
- },
162
- {
163
- "name": "revit_edit_titleblock_family",
164
- "description": "Edit the INSIDE of a title block family and load it back into this same project: remove the stock logo and the literal consultant placeholde"
165
- },
166
- {
167
- "name": "revit_excavate_toposolid",
168
- "description": "Cut a toposolid with the elements that should be sunk into it — a pool, a basement, a sunken path — using Revit's native Toposolid.ExcavateB"
169
- },
170
- {
171
- "name": "revit_export_pdf",
172
- "description": "Export named views and sheets to PDF through Revit's own PDF exporter — vectors, on white paper, at the sheet's real size."
173
- },
174
- {
175
- "name": "revit_export_view_image",
176
- "description": "Export a view to a raster image on disk — the only way anything outside Revit gets to see what the model looks like."
177
- },
178
- {
179
- "name": "revit_flatten_toposolid",
180
- "description": "Flatten a region of the site surface to one elevation, so paving can sit on graded terrain instead of fighting it — this is the fix for Revi"
181
- },
182
- {
183
- "name": "revit_get_browser_organization",
184
- "description": "Inspect how the Project Browser currently groups the Sheets section, and find out honestly what can be done about it."
185
- },
186
- {
187
- "name": "revit_get_elements",
188
- "description": "Read specific elements by id."
189
- },
190
- {
191
- "name": "revit_get_material_appearance",
192
- "description": "Read the appearance asset behind a material — the rendered look, as opposed to the shading colour revit_create_material sets."
193
- },
194
- {
195
- "name": "revit_get_selection",
196
- "description": "Read what the user currently has selected in the Revit UI."
197
- },
198
- {
199
- "name": "revit_get_sheet_layout",
200
- "description": "Measure where everything on a sheet actually is, in feet on the PAPER."
201
- },
202
- {
203
- "name": "revit_get_view_crop",
204
- "description": "Read the crop of one view or a batch of them: whether it is on, whether the rectangle is drawn, and where it actually is."
205
- },
206
- {
207
- "name": "revit_get_view_graphics",
208
- "description": "Read what a view is actually drawn with: display style, detail level, the view template that may be overriding both, the shadow and sunlight"
209
- },
210
- {
211
- "name": "revit_get_view_graphics_command_status",
212
- "description": "What became of the last cast-shadows command revit_set_view_graphics posted: when it was posted, whether Revit has been idle since (which is"
213
- },
214
- {
215
- "name": "revit_get_warnings",
216
- "description": "Read the warnings the model is carrying right now — Revit's own Review Warnings list."
217
- },
218
- {
219
- "name": "revit_hide_elements_in_view",
220
- "description": "Hide elements in ONE view, permanently — the 'Hide in View > Elements' override Revit stores on that view."
221
- },
222
- {
223
- "name": "revit_hide_view_categories",
224
- "description": "Turn whole categories off in one view."
225
- },
226
- {
227
- "name": "revit_inspect_elements",
228
- "description": "Measure elements: everything revit_get_elements leaves out."
229
- },
230
- {
231
- "name": "revit_inspect_titleblock_family",
232
- "description": "Read what is INSIDE a title block family: the only way to find out why a sheet prints a vendor logo, a literal consultant placeholder or a l"
233
- },
234
- {
235
- "name": "revit_install_bridge",
236
- "description": "Install the Revit MCP bridge add-in: copies the add-in that ships with this package into Revit's Addins folder."
237
- },
238
- {
239
- "name": "revit_list_categories",
240
- "description": "List the categories present in the active document with an element count each."
241
- },
242
- {
243
- "name": "revit_list_family_symbols",
244
- "description": "List the family types loaded in the document: id, family name, type name and category."
245
- },
246
- {
247
- "name": "revit_list_legends",
248
- "description": "List the legend views in the document: id, name and scale."
249
- },
250
- {
251
- "name": "revit_list_levels",
252
- "description": "List the levels in the active document: id, name and elevation (Revit internal units, decimal feet)."
253
- },
254
- {
255
- "name": "revit_list_materials",
256
- "description": "List the materials in the document: id, name, colour as {r, g, b}, and the id of its appearance asset when it has one."
257
- },
258
- {
259
- "name": "revit_list_sheet_collections",
260
- "description": "List the sheet collections in the active document — the collapsible groups Revit draws under Sheets in the Project Browser — with each colle"
261
- },
262
- {
263
- "name": "revit_list_sheets",
264
- "description": "List the sheets in the active document: id, sheet number and name, ordered by sheet number."
265
- },
266
- {
267
- "name": "revit_list_titleblocks",
268
- "description": "List the title block family types loaded in the active document: id, family name and type name."
269
- },
270
- {
271
- "name": "revit_list_view_templates",
272
- "description": "List the view templates in the model: id, name, view type, and the parameters each template CONTROLS with their labels."
273
- },
274
- {
275
- "name": "revit_list_views",
276
- "description": "List the non-template views in the document: id, name, view type, and whether each is already placed on a sheet."
277
- },
278
- {
279
- "name": "revit_load_families",
280
- "description": "Load .rfa family files into the project — real trees, benches, bollards, light fittings, doors and windows instead of DirectShape primitives"
281
- },
282
- {
283
- "name": "revit_move_elements",
284
- "description": "Move elements by a vector in feet — lift furniture out of a slab, shift a tree off a path — without rebuilding them."
285
- },
286
- {
287
- "name": "revit_new_project",
288
- "description": "Create a new Revit project from a template and open it, without using the Revit UI."
289
- },
290
- {
291
- "name": "revit_open_project",
292
- "description": "Open an existing .rvt file and make it the active document, without using the Revit UI."
293
- },
294
- {
295
- "name": "revit_override_view_categories",
296
- "description": "Override the graphics of whole categories in ONE view — the other half of the Visibility/Graphics dialog, and what stops a drawing set readi"
297
- },
298
- {
299
- "name": "revit_place_families",
300
- "description": "Place one family instance per point — trees, shrubs, light fittings, furniture."
301
- },
302
- {
303
- "name": "revit_place_openings",
304
- "description": "Place doors and windows IN walls — the tool for family instances that have to cut their host, which is why it is not revit_place_families wi"
305
- },
306
- {
307
- "name": "revit_place_planting",
308
- "description": "Plant trees: one element in the Planting category per point, each a trunk cylinder with a crown sphere sitting on top of it."
309
- },
310
- {
311
- "name": "revit_place_sprinklers",
312
- "description": "Place sprinkler heads: one small element per point, a cylinder standing proud of the ground."
313
- },
314
- {
315
- "name": "revit_place_views_on_sheets",
316
- "description": "Put views on sheets."
317
- },
318
- {
319
- "name": "revit_query_elements",
320
- "description": "Find elements by category and/or level and/or type name."
321
- },
322
- {
323
- "name": "revit_read_schedule",
324
- "description": "Read the text of a schedule, cell by cell."
325
- },
326
- {
327
- "name": "revit_reload_bridge",
328
- "description": "Reload the bridge's endpoint logic from disk without restarting Revit, after rebuilding the add-in."
329
- },
330
- {
331
- "name": "revit_save",
332
- "description": "Save the active document in place."
333
- },
334
- {
335
- "name": "revit_save_as",
336
- "description": "Save the active document to a new path and carry on working in it."
337
- },
338
- {
339
- "name": "revit_scale_perspective_crop",
340
- "description": "Make ONE perspective 3D view bigger or smaller on its sheet, proportions locked."
341
- },
342
- {
343
- "name": "revit_set_auto_dismiss",
344
- "description": "Turn automatic dialog dismissal on or off, and optionally empty the diagnostics buffer."
345
- },
346
- {
347
- "name": "revit_set_material_appearance",
348
- "description": "Edit the appearance asset behind a material by naming the properties to write."
349
- },
350
- {
351
- "name": "revit_set_material_texture",
352
- "description": "Put a real texture bitmap on an existing material, which is the difference between a surface that is green and one that looks like grass."
353
- },
354
- {
355
- "name": "revit_set_parameters",
356
- "description": "Set one parameter to the same value on one or more elements."
357
- },
358
- {
359
- "name": "revit_set_schedule_position",
360
- "description": "Move ONE schedule on its sheet."
361
- },
362
- {
363
- "name": "revit_set_sheet_collections",
364
- "description": "Put sheets into native sheet collections, so the Project Browser shows them as collapsible groups."
365
- },
366
- {
367
- "name": "revit_set_sheet_parameters",
368
- "description": "Write a parameter value per sheet — a different value on each, which is what stamping a phase or a discipline across a set of sheets is."
369
- },
370
- {
371
- "name": "revit_set_view_background",
372
- "description": "Put a sky behind a 3D view."
373
- },
374
- {
375
- "name": "revit_set_view_crop",
376
- "description": "Crop one view or a batch of them to a region of the MODEL, in feet."
377
- },
378
- {
379
- "name": "revit_set_view_graphics",
380
- "description": "Set a view's graphics, including cast shadows — the one thing revit_set_view_style cannot do."
381
- },
382
- {
383
- "name": "revit_set_view_scale",
384
- "description": "Set the view scale on one view or a batch of them."
385
- },
386
- {
387
- "name": "revit_set_view_style",
388
- "description": "Set how a view is drawn, which is most of what decides whether an exported image reads as a model or as a diagram."
389
- },
390
- {
391
- "name": "revit_set_view_sun",
392
- "description": "Move the sun for a view, which is most of what decides whether a shaded export reads as architecture: it sets the direction every face is li"
393
- },
394
- {
395
- "name": "revit_set_viewport_position",
396
- "description": "Move one viewport on its sheet."
397
- },
398
- {
399
- "name": "revit_status",
400
- "description": "Check whether Revit is reachable: version, active document name/path, and whether the model is workshared."
401
- },
402
- {
403
- "name": "revit_uninstall_bridge",
404
- "description": "Remove the Revit MCP bridge add-in: deletes the .addin manifest and the install folder for every Revit version that has it."
405
- }
406
- ],
407
- "compatibility": {
408
- "claude_desktop": ">=0.10.0",
409
- "platforms": [
410
- "win32"
411
- ],
412
- "runtimes": {
413
- "node": ">=18.0.0"
414
- }
415
- },
416
- "privacy_policies": [
417
- "https://github.com/rui-branco/revit-mcp/blob/main/PRIVACY.md"
418
- ]
419
- }