@rui.branco/revit-mcp 1.0.2 → 1.0.4
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 +1 -2
- package/README.md +41 -21
- package/index.js +6 -0
- package/lib/auto-install.js +83 -0
- package/package.json +2 -4
- package/revit-bridge/dist/RevitMcpBridge.Handlers.dll +0 -0
- package/revit-bridge/dist/RevitMcpBridge.dll +0 -0
- package/manifest.json +0 -419
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
|
|
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
|
@@ -3,28 +3,47 @@
|
|
|
3
3
|
[](https://www.autodesk.com/products/revit/overview)
|
|
4
4
|
[](#installation)
|
|
5
5
|
[](https://nodejs.org)
|
|
6
|
-
[](#development)
|
|
7
7
|
[](LICENSE)
|
|
8
8
|
|
|
9
9
|
**Drive Autodesk Revit from Claude.** Query the model open on your desktop, edit
|
|
10
10
|
it, and produce a full drawing set in plain language — levels and elements,
|
|
11
11
|
sheets and schedules, views and PDF exports.
|
|
12
12
|
|
|
13
|
-
**Windows · Revit 2025, 2026 or 2027
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
**Windows · Revit 2025, 2026 or 2027 · Node.js 18+.** The Revit add-in ships
|
|
14
|
+
precompiled and installs itself on first run — nothing to build, no .NET SDK,
|
|
15
|
+
and nothing to copy by hand.
|
|
16
16
|
|
|
17
17
|
## Installation
|
|
18
18
|
|
|
19
19
|
### 1. Register the server
|
|
20
20
|
|
|
21
|
-
|
|
21
|
+
Same plugin either way. Type both lines into the chat box, one after the other.
|
|
22
|
+
|
|
23
|
+
**Claude Desktop** — in any chat:
|
|
22
24
|
|
|
23
25
|
```
|
|
24
26
|
/plugin marketplace add rui-branco/revit-mcp
|
|
25
27
|
/plugin install revit@revit-tools
|
|
26
28
|
```
|
|
27
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>
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
claude plugin marketplace add rui-branco/revit-mcp
|
|
42
|
+
claude plugin install revit@revit-tools
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
</details>
|
|
46
|
+
|
|
28
47
|
That is the whole step. The plugin updates itself from this repo, so there is
|
|
29
48
|
nothing to re-download when a new version ships; `/plugin update` pulls it
|
|
30
49
|
early if you do not want to wait.
|
|
@@ -44,16 +63,6 @@ claude mcp add revit --scope user -- npx -y @rui.branco/revit-mcp
|
|
|
44
63
|
`--scope user` enables it in every project; `--scope project` writes it to the
|
|
45
64
|
repo's `.mcp.json` instead, to share with a team.
|
|
46
65
|
|
|
47
|
-
**Claude Desktop, as a Desktop Extension (.mcpb)**
|
|
48
|
-
|
|
49
|
-
[Download `revit-mcp.mcpb`](https://github.com/rui-branco/revit-mcp/releases/latest/download/revit-mcp.mcpb),
|
|
50
|
-
then **Settings → Extensions → Advanced settings → Install extension…** and
|
|
51
|
-
pick the file. It bundles the server, its dependencies and the Revit add-in,
|
|
52
|
-
and runs on Claude Desktop's built-in Node runtime, so neither Node.js nor npm
|
|
53
|
-
is needed. **A sideloaded extension never auto-updates** — every new version
|
|
54
|
-
means downloading and installing the file again, which is why the plugin is
|
|
55
|
-
preferred.
|
|
56
|
-
|
|
57
66
|
**Claude Desktop, by hand**
|
|
58
67
|
|
|
59
68
|
**Settings → Developer → Edit Config** opens
|
|
@@ -84,12 +93,22 @@ arguments and needs no environment beyond the optional
|
|
|
84
93
|
|
|
85
94
|
</details>
|
|
86
95
|
|
|
87
|
-
### 2. Install the Revit add-in
|
|
96
|
+
### 2. Install the Revit add-in — automatic
|
|
97
|
+
|
|
98
|
+
Nothing to do. The server installs the add-in itself the first time it starts:
|
|
99
|
+
it looks for `RevitMcpBridge.addin` in
|
|
100
|
+
`%APPDATA%\Autodesk\Revit\Addins\<version>\` and, when no Revit has it, copies
|
|
101
|
+
the bundled add-in and its manifest into place for every Revit it finds. That
|
|
102
|
+
runs in the background on Windows, so it never delays or breaks the server, and
|
|
103
|
+
once the add-in is there it does nothing at all.
|
|
104
|
+
|
|
105
|
+
**If it is turned off or fails**, ask Claude to **install the Revit bridge**.
|
|
106
|
+
That runs `revit_install_bridge` — the same installer, on demand. Revit need not
|
|
107
|
+
be running, and re-running is safe. Auto-install is off whenever
|
|
108
|
+
`REVIT_MCP_NO_AUTO_INSTALL` is set; see [Configuration](#configuration).
|
|
88
109
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
`%APPDATA%\Autodesk\Revit\Addins\<version>\` for every Revit it finds. Revit
|
|
92
|
-
need not be running, and re-running is safe.
|
|
110
|
+
Either way the add-in is only on disk at this point. Revit does not load it
|
|
111
|
+
until it restarts, which is step 3.
|
|
93
112
|
|
|
94
113
|
### 3. Restart Revit and approve the add-in
|
|
95
114
|
|
|
@@ -399,6 +418,7 @@ Two habits worth keeping:
|
|
|
399
418
|
| `REVIT_MCP_URL` | `http://localhost:48884/revit-mcp` | Bridge base URL. Change it for a second Revit instance. |
|
|
400
419
|
| `REVIT_MCP_TIMEOUT` | `30000` | Per-request timeout, in milliseconds. |
|
|
401
420
|
| `REVIT_MCP_BRIDGE_TIMEOUT_MS` | `30000` | Read by the add-in: how long a request waits for Revit's main thread. Clamped to 1–600 s. |
|
|
421
|
+
| `REVIT_MCP_NO_AUTO_INSTALL` | unset | Set it to `1` to stop the server installing the add-in on startup. `revit_install_bridge` still installs it on demand. Either way, Revit must be restarted before it loads. |
|
|
402
422
|
|
|
403
423
|
## Unattended operation
|
|
404
424
|
|
|
@@ -475,7 +495,7 @@ npm install
|
|
|
475
495
|
npm test
|
|
476
496
|
```
|
|
477
497
|
|
|
478
|
-
`npm test` is `node --test` over `tests/` —
|
|
498
|
+
`npm test` is `node --test` over `tests/` — 521 tests. It touches no Revit and
|
|
479
499
|
opens no socket: the HTTP layer is stubbed and the tools are exercised through a
|
|
480
500
|
real MCP client over an in-memory transport.
|
|
481
501
|
|
package/index.js
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
4
4
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
5
5
|
import { pathToFileURL } from "url";
|
|
6
|
+
import { autoInstallBridge } from "./lib/auto-install.js";
|
|
6
7
|
import { createBridge } from "./lib/bridge.js";
|
|
7
8
|
import { registerReadTools } from "./lib/tools/read.js";
|
|
8
9
|
import { registerWriteTools } from "./lib/tools/write.js";
|
|
@@ -111,6 +112,11 @@ async function main() {
|
|
|
111
112
|
const transport = new StdioServerTransport();
|
|
112
113
|
await server.connect(transport);
|
|
113
114
|
|
|
115
|
+
// Never awaited: the transport is already up, and a slow or failing install
|
|
116
|
+
// must not delay the handshake or stop the server from serving tool calls.
|
|
117
|
+
// It is startup only, so it stays out of createRevitServer().
|
|
118
|
+
autoInstallBridge();
|
|
119
|
+
|
|
114
120
|
process.stderr.write("Revit MCP server running on stdio\n");
|
|
115
121
|
}
|
|
116
122
|
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
// Installing the bridge add-in without being asked.
|
|
2
|
+
//
|
|
3
|
+
// The add-in already ships inside this package, so a new user should not have
|
|
4
|
+
// to ask for it to be copied into place: on startup, when no Revit has the
|
|
5
|
+
// manifest, we run the very installer revit_install_bridge runs.
|
|
6
|
+
//
|
|
7
|
+
// Two rules shape everything here. Nothing is awaited and every failure is
|
|
8
|
+
// swallowed — the MCP handshake must never wait on this, and a machine with no
|
|
9
|
+
// Revit on it is not an error. And stdout belongs to the JSON-RPC channel, so
|
|
10
|
+
// every byte written from here goes to stderr instead.
|
|
11
|
+
|
|
12
|
+
import fs from "fs";
|
|
13
|
+
import path from "path";
|
|
14
|
+
import { runInstaller } from "./tools/install.js";
|
|
15
|
+
|
|
16
|
+
// Set it to anything to never auto-install; revit_install_bridge still works.
|
|
17
|
+
export const OPT_OUT_ENV = "REVIT_MCP_NO_AUTO_INSTALL";
|
|
18
|
+
|
|
19
|
+
// Where install.ps1 puts the manifest, and what it calls it. Revit 2024 and
|
|
20
|
+
// earlier load add-ins on .NET Framework 4.8 and the installer refuses them, so
|
|
21
|
+
// a manifest under one of those years is not this add-in installed.
|
|
22
|
+
const MANIFEST_FILE = "RevitMcpBridge.addin";
|
|
23
|
+
const MINIMUM_REVIT_YEAR = 2025;
|
|
24
|
+
|
|
25
|
+
export function isInstalled({ env = process.env, fsImpl = fs } = {}) {
|
|
26
|
+
if (!env.APPDATA) return false;
|
|
27
|
+
|
|
28
|
+
const root = path.join(env.APPDATA, "Autodesk", "Revit", "Addins");
|
|
29
|
+
let years;
|
|
30
|
+
|
|
31
|
+
try {
|
|
32
|
+
years = fsImpl.readdirSync(root);
|
|
33
|
+
} catch {
|
|
34
|
+
// No add-ins folder at all, so nothing is installed.
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
return years.some(
|
|
39
|
+
(year) =>
|
|
40
|
+
/^\d{4}$/.test(year) &&
|
|
41
|
+
Number(year) >= MINIMUM_REVIT_YEAR &&
|
|
42
|
+
fsImpl.existsSync(path.join(root, year, MANIFEST_FILE)),
|
|
43
|
+
);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
async function install(options, write) {
|
|
47
|
+
try {
|
|
48
|
+
const result = await runInstaller({}, options);
|
|
49
|
+
|
|
50
|
+
if (result.ok) {
|
|
51
|
+
write(
|
|
52
|
+
"revit-mcp: installed the Revit bridge add-in. RESTART REVIT to load it — Revit only scans the Addins folder at startup.\n",
|
|
53
|
+
);
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
write(
|
|
58
|
+
`revit-mcp: could not install the Revit bridge add-in automatically. ${result.explanation || result.message} Run revit_install_bridge to see the full result, or set ${OPT_OUT_ENV}=1 to stop trying.\n`,
|
|
59
|
+
);
|
|
60
|
+
} catch (error) {
|
|
61
|
+
write(
|
|
62
|
+
`revit-mcp: could not install the Revit bridge add-in automatically: ${error.message} Set ${OPT_OUT_ENV}=1 to stop trying.\n`,
|
|
63
|
+
);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
// Returns as soon as it has decided what to do. The install itself is
|
|
68
|
+
// deliberately left running: its promise is never handed back, so no caller can
|
|
69
|
+
// accidentally wait on it, and nothing it does can fail the server's startup.
|
|
70
|
+
export function autoInstallBridge(options = {}) {
|
|
71
|
+
const {
|
|
72
|
+
env = process.env,
|
|
73
|
+
platform = process.platform,
|
|
74
|
+
write = (line) => process.stderr.write(line),
|
|
75
|
+
} = options;
|
|
76
|
+
|
|
77
|
+
if (platform !== "win32") return "not-windows";
|
|
78
|
+
if (env[OPT_OUT_ENV]) return "opted-out";
|
|
79
|
+
if (isInstalled(options)) return "already-installed";
|
|
80
|
+
|
|
81
|
+
install(options, write);
|
|
82
|
+
return "started";
|
|
83
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rui.branco/revit-mcp",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.4",
|
|
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"
|
|
Binary file
|
|
Binary file
|
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.2",
|
|
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
|
-
}
|