aec-model-bridge
Health Pass
- License — License: GPL-3.0
- Description — Repository has a description
- Active repo — Last push 0 days ago
- Community trust — 68 GitHub stars
Code Pass
- Code scan — Scanned 12 files during light audit, no dangerous patterns found
Permissions Pass
- Permissions — No dangerous permissions requested
No AI report is available for this listing yet.
Open-source Revit MCP server: let Claude and other AI assistants read and edit BIM models, with human approval on every change.
AEC Model Bridge: Revit MCP server
An open-source Revit MCP server and AI assistant for Revit. It lets Claude, Codex and other Model Context Protocol clients read and edit BIM models, with you approving every change.
Install | Connect a client | Tools | Documentation | Latest release
AEC Model Bridge is a Python MCP server plus a native Revit add-in. An AI
assistant such as Claude or Codex connects to the server, and the server runs
BIM automation tasks in the Revit model you have open. The same server also
reads IFC files, and it has providers for Rhino and Grasshopper, Speckle and
Navisworks.
It does not edit your model on its own. Any tool that changes the model goes
through a plan that you review and approve first. See
How approval works.
What can the AI do in Revit?
The server exposes more than 200 tools across all providers. The full list is
in the tool reference. In Revit, the tools cover:
- Reading the model: list elements, categories, levels, views, sheets and
families. Read element and type parameters, geometry, worksets, links,
phases and warnings. - Editing parameters: set one value, set values in batches, or set values
for every element matching a filter. Create shared and project parameters. - Creating elements: walls, floors, roofs, levels, grids, columns, beams,
doors, windows, rooms, family instances, and some MEP elements such as ducts,
pipes and conduit. - Documentation: create views and sections, apply view templates, create
and renumber sheets, place viewports, tag elements, add text notes and
dimensions, and build schedules. - Exports: IFC, DWG, images and Navisworks.
- Checks and reports: model snapshots and change diffs, a QA/QC checker,
and report generation.
For anything the tool catalog does not cover, invoke_method, reflect_get
and reflect_set work with public Revit API members, and execute_python
runs IronPython inside Revit. These advanced tools have the same permissions as
the Revit process. Use them only with MCP clients and prompts you trust.
How it works
The MCP client talks to one Python hub. The hub sends each call to the
provider that owns the tool. Providers for desktop apps talk to a small add-in
inside that app over localhost.
---
config:
look: neo
theme: base
themeVariables:
primaryColor: "#334155"
primaryTextColor: "#FFFFFF"
primaryBorderColor: "#1E293B"
secondaryColor: "#334155"
tertiaryColor: "#334155"
lineColor: "#6E7781"
textColor: "#6E7781"
titleColor: "#6E7781"
nodeTextColor: "#FFFFFF"
clusterBkg: "rgba(110,119,129,0.10)"
clusterBorder: "#6E7781"
edgeLabelBackground: "#334155"
actorBkg: "#334155"
actorTextColor: "#FFFFFF"
actorBorder: "#1E293B"
actorLineColor: "#6E7781"
signalColor: "#6E7781"
signalTextColor: "#6E7781"
labelBoxBkgColor: "#334155"
labelBoxBorderColor: "#6E7781"
labelTextColor: "#FFFFFF"
loopTextColor: "#6E7781"
sequenceNumberColor: "#FFFFFF"
noteBkgColor: "#F59E0B"
noteTextColor: "#1F1300"
noteBorderColor: "#92400E"
transitionColor: "#6E7781"
transitionLabelColor: "#FFFFFF"
stateLabelColor: "#FFFFFF"
stateBkg: "#334155"
labelBackgroundColor: "#334155"
compositeBackground: "#334155"
specialStateColor: "#6E7781"
---
flowchart LR
subgraph clients["AI clients"]
client(["MCP client<br/>Claude, Codex, VS Code"])
end
subgraph hubzone["Python hub"]
hub["MCP hub<br/>routes every tool call"]
revitP["Revit provider"]
rhinoP["Rhino provider"]
navP["Navisworks provider"]
ifcP["IFC provider"]
speckleP["Speckle provider"]
end
subgraph apps["Desktop apps, add-ins on localhost"]
revitA["Revit add-in"]
rhinoA["Rhino add-in"]
navA["Navisworks<br/>add-in<br/>in progress"]
end
ifcLib[("IFC files<br/>read with IfcOpenShell")]
cloud(["Speckle server"])
client -->|"sends tool calls"| hub
hub -->|"routes Revit tools"| revitP
hub -->|"routes Rhino tools"| rhinoP
hub -.->|"routes Navisworks tools"| navP
hub -->|"routes IFC tools"| ifcP
hub -->|"routes Speckle tools"| speckleP
revitP -->|"HTTP"| revitA
rhinoP -->|"HTTP"| rhinoA
navP -.->|"local bridge"| navA
ifcP -->|"parses"| ifcLib
speckleP -->|"syncs"| cloud
classDef live fill:#0F766E,stroke:#0B4F4A,stroke-width:1.5px,color:#FFFFFF
classDef wip fill:#F59E0B,stroke:#92400E,stroke-width:1.5px,stroke-dasharray:4 3,color:#1F1300
classDef data fill:#4F46E5,stroke:#3730A3,stroke-width:1.5px,color:#FFFFFF
class hub,revitP,rhinoP,ifcP,speckleP,revitA,rhinoA live
class navP,navA wip
class ifcLib,cloud data
Teal boxes work today. The amber dashed boxes are in progress. Indigo
shapes are data and external services.
How approval works
The hub stops any tool call that changes the model unless it carries an
approved plan. The default mode is required. The AI proposes a plan, you
review it in the Revit side panel, and the add-in runs it on Revit's main
thread in a named transaction.
---
config:
look: neo
theme: base
themeVariables:
primaryColor: "#334155"
primaryTextColor: "#FFFFFF"
primaryBorderColor: "#1E293B"
secondaryColor: "#334155"
tertiaryColor: "#334155"
lineColor: "#6E7781"
textColor: "#6E7781"
titleColor: "#6E7781"
nodeTextColor: "#FFFFFF"
clusterBkg: "rgba(110,119,129,0.10)"
clusterBorder: "#6E7781"
edgeLabelBackground: "#334155"
actorBkg: "#334155"
actorTextColor: "#FFFFFF"
actorBorder: "#1E293B"
actorLineColor: "#6E7781"
signalColor: "#6E7781"
signalTextColor: "#6E7781"
labelBoxBkgColor: "#334155"
labelBoxBorderColor: "#6E7781"
labelTextColor: "#FFFFFF"
loopTextColor: "#6E7781"
sequenceNumberColor: "#FFFFFF"
noteBkgColor: "#F59E0B"
noteTextColor: "#1F1300"
noteBorderColor: "#92400E"
transitionColor: "#6E7781"
transitionLabelColor: "#FFFFFF"
stateLabelColor: "#FFFFFF"
stateBkg: "#334155"
labelBackgroundColor: "#334155"
compositeBackground: "#334155"
specialStateColor: "#6E7781"
---
sequenceDiagram
autonumber
participant You
participant AI as AI assistant
participant Hub as MCP hub + ApprovalGate
participant Panel as Side panel (WebView2)
participant Addin as Revit add-in
participant Model as Revit model
AI->>Hub: plan_actions (proposed changes)
Hub->>Panel: show the pending plan
Panel->>You: review the plan
alt You approve
You->>Panel: Approve
Panel->>Hub: approved
AI->>Hub: execute_plan
Hub->>Addin: forward the commands
Addin->>Model: run in one named transaction
Model-->>Addin: done
Addin-->>AI: result (rollback_plan can reverse it)
else You reject, or never approve
You->>Panel: Reject
Panel->>Hub: rejected
AI->>Hub: execute_plan
Hub--xAI: blocked, the model is untouched
end
If a plan is approved and later turns out wrong, rollback_plan reverses it.
Rollback uses Revit Undo in the same session or inverse parameter values.
Operations that cannot be reversed, such as file output, ask for a second
confirmation. The lifecycle is in
ADR 0008.
For unattended pipelines you can set MCP_REVIT_APPROVAL_MODE=auto. That turns
the human check off, so use it only in a controlled environment.
Supported Revit versions
| Revit version | Add-in target | Build tools |
|---|---|---|
| 2024 | .NET Framework 4.8 | .NET 8 SDK and .NET Framework 4.8 developer pack |
| 2025 | .NET 8 for Windows | .NET 8 SDK |
| 2026 | .NET 8 for Windows | .NET 8 SDK |
| 2027 | .NET 10 for Windows | .NET 10 SDK |
You also need Windows 10 or 11, Python 3.11 or later, and a licensed Revit
installation for the version you use. Mock mode runs the server without Revit,
which is useful for development and tests.
Other integrations
| Integration | Status |
|---|---|
| Revit | Available. Native C# add-in. |
| IFC (IfcOpenShell) | Available. Reads IFC files without Revit running. |
| Rhino and Grasshopper | Available. Connects to the Rhino add-in on localhost:3004. |
| Speckle | Available. Needs a Speckle client ID in your environment. |
| Navisworks Manage | In progress. The provider and its tools are registered. The Navisworks add-in is not finished. |
| Power BI | In progress. The provider and tool exist but are not registered in the hub. |
| Excel, Parquet and DuckDB | Planned. |
Install the Revit add-in
You install two parts: the Python MCP server and the Revit add-in. Live Revit
automation needs both.
1. Install the MCP server
git clone https://github.com/Sam-AEC/aec-model-bridge.git
cd aec-model-bridge
py -m venv .venv
.\.venv\Scripts\Activate.ps1
python -m pip install -e packages/mcp-server-revit
2. Install the Revit add-in
Set the version to match your Revit installation. If Windows blocks the
downloaded scripts, right-click each .ps1 file, open Properties, and select
Unblock before running them.
$RevitVersion = Read-Host "Revit year (2024, 2025, 2026, or 2027)"
.\scripts\package.ps1 -RevitVersion $RevitVersion
.\scripts\install.ps1 -RevitVersion $RevitVersion
The installer places version-specific binaries in:
C:\ProgramData\AECModelBridge\bin\<year>
The add-in manifest is installed per user in:
%APPDATA%\Autodesk\Revit\Addins\<year>
Use -AllUsers with install.ps1 to install the manifest underC:\ProgramData\Autodesk\Revit\Addins\<year> instead.
To prepare binaries for every supported version in one pass:
.\scripts\package.ps1 -RevitVersion All
Prebuilt packages are attached to GitHub releases when available. The source
installation above works for all supported Revit versions. For a double-click
Windows installer, scripts/build-installer.ps1 builds one with Inno Setup.
The full guide, with troubleshooting, is in docs/install.md.
Connect Claude Desktop to Revit
Add the server to your MCP client configuration. For Claude Desktop, that is
the mcpServers section of claude_desktop_config.json. Codex, Cursor, VS
Code and other MCP clients use the same command, args and env values in
their own config format.
Use the Python executable from your virtual environment, and choose a workspace
folder the server may access:
{
"mcpServers": {
"aec-model-bridge": {
"command": "C:\\path\\to\\aec-model-bridge\\.venv\\Scripts\\python.exe",
"args": ["-m", "revit_mcp_server.mcp_server"],
"env": {
"MCP_REVIT_MODE": "bridge",
"MCP_REVIT_WORKSPACE_DIR": "C:\\RevitProjects",
"MCP_REVIT_ALLOWED_DIRECTORIES": "C:\\RevitProjects"
}
},
"aec-model-bridge-revit-2026": {
"command": "C:\\path\\to\\aec-model-bridge\\.venv\\Scripts\\python.exe",
"args": ["-m", "revit_mcp_server.mcp_server"],
"env": {
"MCP_REVIT_MODE": "bridge",
"MCP_REVIT_HOST_VERSION": "2026",
"MCP_REVIT_WORKSPACE_DIR": "C:\\RevitProjects",
"MCP_REVIT_ALLOWED_DIRECTORIES": "C:\\RevitProjects"
}
}
}
}
Leave out MCP_REVIT_HOST_VERSION to target the newest open Revit instance.
Set it to a year such as 2024 or 2026 to lock a client entry to that Revit
version. MCP_REVIT_BRIDGE_URL overrides the endpoint for advanced setups.
VS Code users can start from .vscode/mcp.json. Hermes
Desktop users can start from Hermes.json after replacing the
placeholder Python path. Clients that support MCP Bundles can install the.mcpb file from the
latest release.
The Revit add-in is still required, because the server talks to the running
desktop application.
Check the connection
Restart Revit after installing the add-in, open a model, and run:
$registry = Get-ChildItem "$env:LOCALAPPDATA\AECModelBridge\registry\revit-*.json" | Select-Object -First 1
$switch = Get-Content $registry.FullName -Raw | ConvertFrom-Json
Invoke-RestMethod "$($switch.endpoint)/health"
The response should report healthy and the running Revit version. In Revit,
look for the AEC Bridge ribbon tab. Its Workflows panel has Open Panel,
Health Check, Pending Actions and Reports. Its Tools panel has Config, Help
and About.
Security
- The Revit bridge listens on localhost only.
- The server reads and writes only inside the folders in
MCP_REVIT_ALLOWED_DIRECTORIES. - Mutating tools need an approved plan unless you turn approval off.
- Tool calls are written to an audit log, and secrets are redacted.
Details are in docs/security.md. To report a
vulnerability, follow SECURITY.md.
FAQ
What is an MCP server for Revit?
The Model Context Protocol (MCP) is an open standard that lets AI assistants
call tools in other software. An MCP server for Revit publishes Revit
operations as tools. The assistant picks the tools, and the add-in runs them
inside Revit.
Which AI assistants work with it?
Any MCP client that can start a local stdio server. We document Claude
Desktop, VS Code with GitHub Copilot, and clients that read a standardmcpServers configuration. The panel chat can also use an Anthropic API key
or the claude or codex command-line tools if they are installed. See
ADR 0012.
Can the AI change my model without asking?
Not in the default mode. Tools that change the model are blocked until a plan
is approved in the Revit panel. Read-only tools run without approval. If you
set MCP_REVIT_APPROVAL_MODE=auto, approval is skipped.
Does it send my model to the cloud?
The server and the add-in run on your machine, and the bridge listens on
localhost. What the AI assistant sees depends on the client you use: the tool
results go to that client's model provider. Cloud-facing providers, such as
Speckle, only run when you configure them and call their tools.
Does it work with IFC files without Revit?
Yes. The IFC provider reads files with IfcOpenShell. It can return file
metadata, the spatial structure, element properties and bounding boxes, run
queries by class, GUID, name or property, and validate the schema. It does
not edit IFC files.
Can I use it without Revit installed?
You can run the server in mock mode for development and tests. Live model work
needs Revit 2024 to 2027 and the add-in.
Releases and versions
AEC Model Bridge follows Semantic Versioning. Releases are tagged vX.Y.Z on
GitHub, and a root VERSION file holds the version number. See
docs/versioning.md for the release process and
CHANGELOG.md for what changed in each version.
Development
# Python tests
python -m pytest packages/mcp-server-revit/tests
# Build one Revit version, for example 2026
.\scripts\build-addin.ps1 -RevitVersion 2026 -Configuration Release
# Build all supported versions
.\scripts\package.ps1 -RevitVersion All
CI builds the Python server and the add-in targets for Revit 2024 through 2027.
See CONTRIBUTING.md before opening a pull request.
Documentation
- Installation guide
- Tool reference
- Architecture
- Configuration reference
- Security
- MCP clients and registry
- Versioning and releases
- Contributing
- Contributors
Project and license
Maintained by A. Sam Mohammad.
LinkedIn |
Issues
Version 1.1.0 and later is available under your choice of
GPL-3.0-or-later with the Revit Linking Exception, or a separate commercial
license. The GPL option permits community use while allowing the
add-in to operate through Autodesk Revit APIs. Commercial terms are available
for proprietary distribution and negotiated requirements. Version 1.0.2 and
earlier remains available under the MIT License.
AEC Model Bridge is an independent project and is not sponsored, endorsed, or
provided by Autodesk. Autodesk and Revit are trademarks of the Autodesk group
of companies. See TRADEMARKS.md.
Reviews (0)
Sign in to leave a review.
Leave a reviewNo results found