RevitCAUTION
Independent Revit MCP ( Model Context Protocol integration for Revit software ).
Overview
From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.
AEC Model Bridge is the open, secure runtime that puts Revit, Rhino, Navisworks, and Power BI behind one MCP call center — so an AI agent orchestrates them directly, instead of you manually dumping data between disconnected apps.
[](https://registry.modelcontextprotocol.io/?q=io.github.Sam-AEC%2Faec-model-bridge) [](LICENSING.md) [](https://www.python.org/) [](https://www.autodesk.com/products/revit/)
Available now
In progress
Coming soon
Install | Tools | Documentation | [Latest release](https://github.com/Sa
626cf70de10cOBSERVED · 2026-10-08Connect
Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control. Replace the environment placeholders with a token scoped to the least it needs.
claude mcp add aec-model-bridge --env AEC_MODEL_BRIDGE_REVIT_TOKEN=${AEC_MODEL_BRIDGE_REVIT_TOKEN} --env APS_CLIENT_SECRET=${APS_CLIENT_SECRET} --env AUTODESK_CLIENT_SECRET=${AUTODESK_CLIENT_SECRET} --env MCP_REVIT_BRIDGE_TOKEN=${MCP_REVIT_BRIDGE_TOKEN} -- uvx aec-model-bridge{
"mcpServers": {
"aec-model-bridge": {
"command": "uvx",
"args": [
"aec-model-bridge"
],
"env": {
"AEC_MODEL_BRIDGE_REVIT_TOKEN": "${AEC_MODEL_BRIDGE_REVIT_TOKEN}",
"APS_CLIENT_SECRET": "${APS_CLIENT_SECRET}",
"AUTODESK_CLIENT_SECRET": "${AUTODESK_CLIENT_SECRET}",
"MCP_REVIT_BRIDGE_TOKEN": "${MCP_REVIT_BRIDGE_TOKEN}"
}
}
}
}Exposed tools (200)
131 read · 71 write · 3 destructive. Blast radius: 3 tools can delete or overwrite — an agent that can be talked into calling a tool can be talked into calling this one.
| Tool | Risk | Description |
|---|---|---|
aec_map_workspace_path | read | Map and convert workspace paths between relative formats, Windows absolute format, and POSIX path format. |
aec_register_mapping | read | Register custom relationship links between different BIM workflows (e.g. Revit element ID to Rhino object UUID). |
aec_translate_id | read | Translate an element identifier between Revit UniqueId/GUID, IFC GlobalId, and custom registered workflows. |
approve_plan | read | Approve a pending ActionPlan for execution. |
autodesk_data_auth_status | read | Get Autodesk OAuth authentication status. |
autodesk_data_checkout_version | read | Checkout Autodesk version metadata. |
autodesk_data_create_issue | write | Compatibility alias for create_topic. |
autodesk_data_create_topic | write | Create a BCF-compatible issue/topic through a configured endpoint. |
autodesk_data_get_version_metadata | read | Read Autodesk item/version metadata. |
autodesk_data_health | read | Check Autodesk Data provider health. |
autodesk_data_list_hubs | read | List Autodesk Construction Cloud hubs. |
autodesk_data_list_items | read | List Autodesk items in a project folder or container. |
autodesk_data_list_projects | read | List Autodesk projects in a hub. |
autodesk_data_oauth_exchange_code | read | Exchange an Autodesk OAuth authorization code. |
autodesk_data_oauth_refresh | read | Refresh the Autodesk OAuth access token. |
autodesk_data_oauth_start | write | Generate an Autodesk OAuth authorization URL using PKCE. |
execute_plan | write | Run every action in an approved ActionPlan. Report-and-continue: a partial |
exporter_db_health | read | Check health and readiness of the local database exporter. |
exporter_graph_to_sqlite | read | Extract the active semantic network graph and dump its nodes, properties, and typed edges to a local SQLite database in the workspace. |
exporter_to_sqlite | read | Export a structured payload of BIM elements, parameters, and relationships to a local SQLite database in the workspace. |
fake_mutate | read | Mock mutating tool |
fake_tool | read | A fake tool for testing |
graph_add_relation | write | Add a typed relation between two existing nodes. |
graph_audit_clashes | read | Audit axis-aligned bounding boxes for clashes using a tolerance value. |
graph_audit_disconnected | read | Audit disconnected nodes or components using degree and connectivity rules. |
graph_audit_structural_loads | read | Audit structural load-bearing and support consistency using SUPPORTED_BY relations. |
graph_compile | read | Compile workspace model nodes and relations into the in-memory semantic graph. |
graph_health | read | Check graph provider health and current graph size. |
graph_query_relations | read | Query relations by node, related node, relation type, and direction. |
ifc_get_bounding_box | read | Get bounding box dimensions and placement information for a specific element |
ifc_get_metadata | read | Get file schema, header metadata, units, and georeferencing summary from an IFC file |
ifc_get_properties | read | Get property sets, quantities, and direct attributes for a specific element in an IFC file |
ifc_get_spatial_structure | read | Get the spatial hierarchy (Project -> Site -> Building -> Storey -> Element Types/Counts) from an IFC file |
ifc_health | read | Check status of IfcOpenShell and get version info |
ifc_query_elements | read | Query elements by IFC class, GUID, name, or simple property name/value criteria |
ifc_validate | read | Perform schema validation on the IFC file and return errors/warnings list |
job_cancel | read | Cancel a running or queued background job. |
job_status | read | Get the status, progress, results, or error details of a background job. |
list_pending_plans | read | List all pending ActionPlans waiting for review. |
module_list_commands | read | List all registered modules and their commands for dockable panels |
navisworks_activate_viewpoint | read | Activate a saved viewpoint by Guid |
navisworks_append_file | read | Append a file (e.g. NWD, NWG, IFC) to the active document |
navisworks_create_viewpoint | write | Create a new saved viewpoint from the current view |
navisworks_get_clash_results | read | Get results for a clash test by Guid |
navisworks_get_document_info | read | Get info about the active Navisworks document |
navisworks_get_model_tree | read | Get the model hierarchy tree in Navisworks |
navisworks_get_selection | read | Get active selection items in Navisworks |
navisworks_health | read | Check if Navisworks is running and get status information |
navisworks_invoke_method | write | Invoke a C# method in Navisworks via reflection |
navisworks_list_clash_tests | read | List clash tests defined in Clash Detective |
navisworks_list_viewpoints | read | List saved viewpoints |
navisworks_reflect_get | read | Get a C# property value from a Navisworks object via reflection |
navisworks_reflect_set | write | Set a C# property value on a Navisworks object via reflection |
navisworks_refresh | read | Refresh all updated files in the active document |
navisworks_run_clash_test | write | Run a clash test by Guid |
plan_actions | write | Create a draft ActionPlan of proposed modifications, capturing their before-states. |
powerbi_execute_dax | write | Execute a DAX query against the active Power BI dataset |
powerbi_health | read | Check if Power BI External Tool Bridge is running |
powerbi_invoke_method | write | Invoke a C# method in Power BI bridge via reflection |
powerbi_reflect_get | read | Get a C# property value from a Power BI bridge object via reflection |
powerbi_reflect_set | write | Set a C# property value on a Power BI bridge object via reflection |
reject_plan | read | Reject and archive a pending ActionPlan. |
revit_apply_view_template | write | Apply view template to a view |
revit_batch_create_sheets_from_csv | write | Create multiple sheets from a CSV file |
revit_batch_set_parameters | write | Set a parameter value for multiple elements |
revit_batch_set_parameters_by_filter | write | Set a parameter value on all elements matching a filter (category, type, level, or parameter value). |
revit_calculate_material_quantities | read | Calculate material volumes for a category |
revit_change_element_type | read | Swap all instances of one element type to another type. |
revit_check_clashes | read | Check clashes between categories |
revit_close_document | read | Close active document |
revit_convert_to_group | read | Convert elements into a group |
revit_copy_element | read | Copy an element |
revit_create_3d_view | write | Create a new 3D view |
revit_create_beam | write | Create structural beam |
revit_create_column | write | Create structural column |
revit_create_conduit | write | Create electrical conduit |
revit_create_dimension | write | Create linear dimension between elements |
revit_create_duct | write | Create duct |
revit_create_floor | write | Create a floor in Revit with a rectangular or custom boundary |
revit_create_floor_plan_view | write | Create a floor plan view for a level |
revit_create_foundation | write | Create foundation |
revit_create_grid | write | Create a grid line in Revit |
revit_create_group | write | Create a group |
revit_create_level | write | Create a new level in Revit |
revit_create_material | write | Create a new material with color and properties |
revit_create_new_document | write | Create new project |
revit_create_pipe | write | Create pipe |
revit_create_project_parameter | write | Create a new project parameter |
revit_create_roof | write | Create a roof in Revit |
revit_create_room | write | Create a room at a specific point on a level |
revit_create_schedule | write | Create a schedule |
revit_create_section_view | write | Create a section view |
revit_create_shared_parameter | write | Create a new shared parameter |
revit_create_sheet | write | Create a new sheet |
revit_create_tag | write | Tag an element |
revit_create_text_note | write | Create a text note |
revit_create_wall | write | Create a wall in Revit between two points |
revit_delete_element | destructive | Delete an element by ID |
revit_delete_sheet | destructive | Delete a sheet |
revit_duplicate_sheet | read | Duplicate a sheet |
revit_edit_family | write | Open a family for editing |
revit_execute_python | write | Execute arbitrary Python/IronPython code inside Revit with broad access to the public Revit API. |
revit_export_dwg | read | Export view to DWG |
revit_export_ifc | read | Export to IFC |
revit_export_image | read | Export view to Image |
revit_export_navisworks | read | Export to NWC |
revit_extract_snapshot | read | Extract a semantic BIM snapshot of the active document. Streams to a JSON file in the workspace directory. |
revit_get_categories | read | List Revit categories |
revit_get_design_options | read | Get design options |
revit_get_document_info | read | Get information about the active Revit document |
revit_get_element_bounding_box | read | Get element bounding box |
revit_get_element_geometry | read | Get geometric data for an element: location point or curve endpoints, bounding box, level, area, volume, and length. |
revit_get_element_parameters | read | Get all parameters of an element |
revit_get_element_type | read | Find element types/families |
revit_get_elements_by_type | read | Get element IDs and key parameters, filtered by type, category, and/or level. |
revit_get_group_members | read | Get group members |
revit_get_link_instances | read | Get link instances |
revit_get_parameter_value | read | Get a specific parameter value |
revit_get_phase_filters | read | Get phase filters |
revit_get_phases | read | Get project phases |
revit_get_revision_sequences | read | Get list of revision sequences |
revit_get_rvt_links | read | Get RVT links |
revit_get_schedule_data | write | Get schedule data |
revit_get_selection | read | Get currently selected element IDs |
revit_get_sheet_info | read | Get detailed information about a sheet |
revit_get_snapshot_delta | read | Get lists of unique IDs for elements added, modified, or deleted during the active session. |
revit_get_type_parameters | read | Get type parameters for an element |
revit_get_view_templates | read | Get list of view templates |
revit_get_warnings | read | Get current project warnings |
revit_get_worksets | read | Get all worksets |
revit_health | read | Check if Revit is running and get status information |
revit_invoke_method | write | Invoke any Revit API method dynamically using Reflection |
revit_list_elements | read | List elements by category (Walls, Floors, Roofs, Doors, Windows, etc.) |
revit_list_families | read | List all loaded families and their types |
revit_list_levels | read | List all levels in the Revit project |
revit_list_project_parameters | read | List project parameters |
revit_list_shared_parameters | read | List shared parameters in the document |
revit_list_sheets | read | List all sheets |
revit_list_titleblocks | read | List available titleblocks |
revit_list_views | read | List all views in the Revit project |
revit_mirror_element | read | Mirror an element |
revit_move_element | write | Move an element |
revit_pin_element | read | Pin an element |
revit_place_door | read | Place a door in a wall |
revit_place_family_instance | read | Place a family instance (e.g., furniture, equipment) |
revit_place_viewport_on_sheet | read | Place a view on a sheet |
revit_place_window | read | Place a window in a wall |
revit_populate_titleblock | read | Populate titleblock parameters |
revit_reflect_get | read | Get any Revit property value dynamically |
revit_reflect_set | write | Set any Revit property value dynamically |
revit_relinquish_all | read | Relinquish all elements and worksets |
revit_render_3d | read | Render 3D view to image |
revit_renumber_sheets | read | Batch renumber sheets |
revit_replace_family_type | read | Replace all instances of one family/type combination with another, identified by name. |
revit_rotate_element | read | Rotate an element |
revit_save_document | write | Save the current Revit document |
revit_select_by_unique_ids | read | Select and zoom to elements in the active view by their UniqueId |
revit_set_element_material | write | Set material for an element or specific face |
revit_set_parameter_value | write | Set a parameter value for an element |
revit_set_selection | write | Set selection by element IDs |
revit_set_type_parameter | write | Set a type parameter value |
revit_sync_to_central | write | Sync to central model |
revit_tag_all_in_view | read | Tag all elements of a category in view |
revit_ungroup | read | Ungroup a group |
revit_unpin_element | read | Unpin an element |
rhino_boolean_difference | read | Subtract cutter Breps from a base Brep; returns new object GUIDs |
rhino_boolean_union | read | Boolean union a list of Brep objects by GUID; returns new object GUIDs |
rhino_clear_scene | destructive | Delete all objects in the Rhino document, or only objects on a specific layer |
rhino_create_box | write | Create a box (rectangular prism) from two corner points in metres |
rhino_create_cylinder | write | Create a capped cylinder from base point, height, and radius in metres |
rhino_create_sphere | write | Create a sphere by centre point and radius in metres |
rhino_generate_diagrid_tower | read | Generate a parametric diagrid skyscraper with aluminum mullion sweeps and glass panel solids. All dims in metres. |
rhino_get_document_info | read | Get the active Rhino document name, path, unit system, and object count |
rhino_get_lines | read | Get all curves/lines from the active Rhino document |
rhino_get_scene | read | Get all objects in the Rhino scene with their type, layer, and bounding box |
rhino_health | read | Check if the Rhino bridge is running and healthy |
rhino_invoke_method | write | Invoke a C# method on a Rhino object via reflection |
rhino_list_layers | read | List all layers in the Rhino document with name, color, visibility, and lock state |
rhino_reflect_get | read | Get a C# property value from a Rhino object via reflection |
rhino_reflect_set | write | Set a C# property value on a Rhino object via reflection |
rhino_run_python | write | Execute arbitrary IronPython code inside Rhino with full RhinoCommon access. stdout is captured and returned. |
rhino_set_material | write | Apply a material to objects by GUID list or by layer name |
rhino_set_view | write | Set the active Rhino viewport display mode or projection |
rhino_transform_objects | write | Move, rotate, or scale objects by GUID. Provide exactly one of: translation, rotation, or scale |
rollback_plan | read | Rollback an executed ActionPlan using inverse values. |
snapshot_diff | read | Compare two saved snapshots and identify differences (added, deleted, modified). |
snapshot_query | read | Query element records within a saved snapshot using filter DSL. |
snapshot_take | write | Extract and save a complete semantic BIM snapshot of the active Revit model. |
speckle_auth_status | read | Get Speckle OAuth authentication status. |
speckle_checkout_version | read | Checkout Speckle version metadata. |
speckle_create_branch | write | Create an isolated Speckle branch for compatibility with model workflows. |
speckle_create_model | write | Create an isolated Speckle model. |
speckle_get_version_metadata | read | Read Speckle version metadata. |
speckle_health | read | Check Speckle provider health. |
speckle_list_models | read | List Speckle models for a project. Branch aliases are included for compatibility. |
speckle_list_projects | read | List Speckle projects. |
speckle_list_versions | read | List Speckle versions for a model or branch. |
speckle_merge_branch | write | Compatibility alias for merge_model. |
speckle_merge_model | write | Merge one Speckle model or branch into another through GraphQL. |
speckle_oauth_exchange_code | read | Exchange a Speckle OAuth authorization code. |
Trust audit
CAUTIONgrade B · trust 88/100 Install with care. The audit found things worth knowing before you trust its output.
| Layer | What it checks | Result |
|---|---|---|
| L0 | Provenance & inventory | PASS |
| L1 | Static analysis of the code | WARN |
| L2 | Instruction surface (what it tells the agent) | PASS |
| L3 | Class-specific surface | WARN |
| L4 | Behavioural (sandbox) | SKIPPED |
What the source does
- Filesystem
- declared (1 observation(s))
- Network
- declared (8 observation(s))
- Shell
- none-observed
- Dependencies
- pinned
- Secrets in source
- found
Findings (7)
# Bridge URL (default: http://127.0.0.1:3000)
MCP_REVIT_BRIDGE_URL=http://127.0.0.1:3000
def __init__(self, base_url: str = "http://127.0.0.1:3000", timeout: int = 30, token: str | None = None):
received_base.token = "sensitive_token_to_redact"
revit_delete_element, revit_delete_sheet, rhino_clear_scene
"endpoint": "http://127.0.0.1:<port>",
The script discovers the active Revit bridge from `%LOCALAPPDATA%\AECModelBridge\registry\`, falls back to `http://127.0.0.1:3000`, and saves to `fixtures/canonical-model/generated/canonical_test_mode
Gates applied: no_behavioural_pass.
626cf70de10cfull audit observations/trust-audit/mcp-server/sam-aec__revit-5.json · Report an issue / request a re-scanAudit history
Every audit this server has had. A grade with a past is a grade somebody is still checking.
| Date | Source | Verdict | Grade | Score | Change |
|---|---|---|---|---|---|
| 2026-10-08 | 626cf70de10c | CAUTION | B | 88 | first audit |
Questions
What is the Revit MCP server?
Independent Revit MCP ( Model Context Protocol integration for Revit software ).
What tools does Revit expose?
200 in total: 131 read-only, 71 that write, and 3 that can delete or overwrite (revit_delete_element, revit_delete_sheet, rhino_clear_scene). Every one is listed on this page with its risk.
Is Revit safe to connect to an agent?
With care. The audit graded it B (88/100) and found 7 things worth knowing before you trust this server, listed below with the exact line each was found on. Separately from the audit: 3 of its tools can destroy data, so scope the token you give it to what you actually need.
What credentials does Revit need?
It reads AEC_MODEL_BRIDGE_REVIT_TOKEN, APS_CLIENT_SECRET, AUTODESK_CLIENT_SECRET and MCP_REVIT_BRIDGE_TOKEN from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.
How does Revit run?
It speaks stdio, so it runs as a local process your client starts. It is published on PyPI as aec-model-bridge.
How current is this page?
The grade is for one exact copy of the source (626cf70de10c), read on 2026-10-08. The repository is watched and re-audited when it changes.