# demolinator/revit-mcp-server architecture

> Architecture diagram of the GitHub repository demolinator/revit-mcp-server, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-27). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/demolinator/revit-mcp-server
- Repository: https://github.com/demolinator/revit-mcp-server

## Overview

Revit MCP Server exposes Revit operations as MCP tools in a local Python process, sends tool requests over HTTP to pyRevit routes, and performs them against the active Revit document. The main workflow is client request → domain tool → HTTP bridge → route handler → Revit model/result. The README documents additional analysis, documentation, interop, persistence, and code-execution capabilities; their detailed wiring is not sampled, so those branches are shown at the subsystem level.

Main entry points: [`main.py`](https://github.com/demolinator/revit-mcp-server/blob/master/main.py) (HTTP bridge), [`tools/building_tools.py`](https://github.com/demolinator/revit-mcp-server/blob/master/tools/building_tools.py) (Building creation), [`tools/__init__.py`](https://github.com/demolinator/revit-mcp-server/blob/master/tools/__init__.py) (Tool registry), [`revit_mcp/placement.py`](https://github.com/demolinator/revit-mcp-server/blob/master/revit_mcp/placement.py) (Family placement)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_mcp["MCP interface"]
  node_server["MCP server<br/>[main.py]"]
  node_tool_registry["Tool registry<br/>[__init__.py]"]
  node_http_bridge["HTTP bridge<br/>[main.py]"]
end

subgraph group_model["Model operations"]
  node_startup["Route registration<br/>[startup.py]"]
  node_building["Building creation<br/>[building_tools.py]"]
  node_placement["Family placement<br/>[placement.py]"]
  node_editing["Model editing<br/>[editing.py]"]
  node_meptools["MEP creation<br/>[mep_tools.py]"]
  node_mep["MEP routes<br/>[mep.py]"]
end

subgraph group_insight["Analysis and views"]
  node_views["View queries<br/>[views.py]"]
  node_analysis["Model analysis<br/>[analysis.py]"]
  node_clash["Clash detection<br/>[clash.py]"]
  node_annotation["Annotation and tags<br/>[annotation.py]"]
  node_documentation["Document outputs<br/>[documentation.py]"]
  node_colors["Element coloring<br/>[colors.py]"]
end

subgraph group_exchange["Interop and persistence"]
  node_interop["File interop<br/>[interop.py]"]
  node_persistence["Model persistence<br/>[document.py]"]
  node_code["Code execution<br/>[code_execution.py]"]
end

node_client(("MCP client"))
node_routes_api["pyRevit Routes"]
node_revit["Revit API and document"]

node_client -->|"sends tool requests"| node_server
node_server -->|"registers tools"| node_tool_registry
node_server -->|"provides HTTP calls"| node_http_bridge
node_building -->|"posts requests"| node_http_bridge
node_meptools -->|"posts requests"| node_http_bridge
node_tool_registry -->|"supplies callbacks"| node_http_bridge
node_http_bridge -->|"sends HTTP requests"| node_routes_api
node_startup -->|"registers handlers"| node_routes_api
node_routes_api -->|"dispatches requests"| node_building
node_routes_api -->|"dispatches requests"| node_mep
node_routes_api -->|"dispatches requests"| node_placement
node_routes_api -->|"dispatches requests"| node_editing
node_routes_api -->|"dispatches requests"| node_views
node_routes_api -->|"dispatches requests"| node_analysis
node_routes_api -->|"dispatches requests"| node_clash
node_routes_api -->|"dispatches requests"| node_annotation
node_routes_api -->|"dispatches requests"| node_documentation
node_routes_api -->|"dispatches requests"| node_colors
node_routes_api -->|"dispatches requests"| node_interop
node_routes_api -->|"dispatches requests"| node_persistence
node_routes_api -->|"dispatches requests"| node_code
node_building -->|"creates elements"| node_revit
node_placement -->|"places families"| node_revit
node_editing -->|"modifies elements"| node_revit
node_mep -->|"creates systems"| node_revit
node_views -->|"queries and exports views"| node_revit
node_analysis -->|"analyzes model"| node_revit
node_clash -->|"checks interferences"| node_revit
node_annotation -->|"adds annotations"| node_revit
node_documentation -->|"exports documents"| node_revit
node_colors -->|"applies overrides"| node_revit
node_interop -->|"imports and exports"| node_revit
node_persistence -->|"saves document"| node_revit
node_code -->|"executes in context"| node_revit

click node_server "https://github.com/demolinator/revit-mcp-server/blob/master/main.py"
click node_tool_registry "https://github.com/demolinator/revit-mcp-server/blob/master/tools/__init__.py"
click node_http_bridge "https://github.com/demolinator/revit-mcp-server/blob/master/main.py"
click node_startup "https://github.com/demolinator/revit-mcp-server/blob/master/startup.py"
click node_building "https://github.com/demolinator/revit-mcp-server/blob/master/tools/building_tools.py"
click node_placement "https://github.com/demolinator/revit-mcp-server/blob/master/revit_mcp/placement.py"
click node_editing "https://github.com/demolinator/revit-mcp-server/blob/master/revit_mcp/editing.py"
click node_meptools "https://github.com/demolinator/revit-mcp-server/blob/master/tools/mep_tools.py"
click node_mep "https://github.com/demolinator/revit-mcp-server/blob/master/revit_mcp/mep.py"
click node_views "https://github.com/demolinator/revit-mcp-server/blob/master/revit_mcp/views.py"
click node_analysis "https://github.com/demolinator/revit-mcp-server/blob/master/revit_mcp/analysis.py"
click node_clash "https://github.com/demolinator/revit-mcp-server/blob/master/revit_mcp/clash.py"
click node_annotation "https://github.com/demolinator/revit-mcp-server/blob/master/revit_mcp/annotation.py"
click node_documentation "https://github.com/demolinator/revit-mcp-server/blob/master/revit_mcp/documentation.py"
click node_colors "https://github.com/demolinator/revit-mcp-server/blob/master/revit_mcp/colors.py"
click node_interop "https://github.com/demolinator/revit-mcp-server/blob/master/revit_mcp/interop.py"
click node_persistence "https://github.com/demolinator/revit-mcp-server/blob/master/revit_mcp/document.py"
click node_code "https://github.com/demolinator/revit-mcp-server/blob/master/revit_mcp/code_execution.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_server,node_tool_registry,node_http_bridge,node_client toneBlue
class node_startup,node_building,node_placement,node_editing,node_meptools,node_mep toneAmber
class node_views,node_analysis,node_clash,node_annotation,node_documentation,node_colors,node_routes_api,node_revit toneMint
class node_interop,node_persistence,node_code toneRose
```

## Components

### MCP interface

- [MCP server](https://github.com/demolinator/revit-mcp-server/blob/master/main.py): `main.py`
- [Tool registry](https://github.com/demolinator/revit-mcp-server/blob/master/tools/__init__.py): `tools/__init__.py`
- [HTTP bridge](https://github.com/demolinator/revit-mcp-server/blob/master/main.py): `main.py`

### Model operations

- [Route registration](https://github.com/demolinator/revit-mcp-server/blob/master/startup.py): `startup.py`
- [Building creation](https://github.com/demolinator/revit-mcp-server/blob/master/tools/building_tools.py): `tools/building_tools.py`
- [Family placement](https://github.com/demolinator/revit-mcp-server/blob/master/revit_mcp/placement.py): `revit_mcp/placement.py`
- [Model editing](https://github.com/demolinator/revit-mcp-server/blob/master/revit_mcp/editing.py): `revit_mcp/editing.py`
- [MEP creation](https://github.com/demolinator/revit-mcp-server/blob/master/tools/mep_tools.py): `tools/mep_tools.py`
- [MEP routes](https://github.com/demolinator/revit-mcp-server/blob/master/revit_mcp/mep.py): `revit_mcp/mep.py`

### Analysis and views

- [View queries](https://github.com/demolinator/revit-mcp-server/blob/master/revit_mcp/views.py): `revit_mcp/views.py`
- [Model analysis](https://github.com/demolinator/revit-mcp-server/blob/master/revit_mcp/analysis.py): `revit_mcp/analysis.py`
- [Clash detection](https://github.com/demolinator/revit-mcp-server/blob/master/revit_mcp/clash.py): `revit_mcp/clash.py`
- [Annotation and tags](https://github.com/demolinator/revit-mcp-server/blob/master/revit_mcp/annotation.py): `revit_mcp/annotation.py`
- [Document outputs](https://github.com/demolinator/revit-mcp-server/blob/master/revit_mcp/documentation.py): `revit_mcp/documentation.py`
- [Element coloring](https://github.com/demolinator/revit-mcp-server/blob/master/revit_mcp/colors.py): `revit_mcp/colors.py`

### Interop and persistence

- [File interop](https://github.com/demolinator/revit-mcp-server/blob/master/revit_mcp/interop.py): `revit_mcp/interop.py`
- [Model persistence](https://github.com/demolinator/revit-mcp-server/blob/master/revit_mcp/document.py): `revit_mcp/document.py`
- [Code execution](https://github.com/demolinator/revit-mcp-server/blob/master/revit_mcp/code_execution.py): `revit_mcp/code_execution.py`

### Other components

- **MCP client**
- **pyRevit Routes**
- **Revit API and document**

## Connections

- MCP client → MCP server: sends tool requests
- MCP server → Tool registry: registers tools
- MCP server → HTTP bridge: provides HTTP calls
- Building creation → HTTP bridge: posts requests
- MEP creation → HTTP bridge: posts requests
- Tool registry → HTTP bridge: supplies callbacks
- HTTP bridge → pyRevit Routes: sends HTTP requests
- Route registration → pyRevit Routes: registers handlers
- pyRevit Routes → Building creation: dispatches requests
- pyRevit Routes → MEP routes: dispatches requests
- pyRevit Routes → Family placement: dispatches requests
- pyRevit Routes → Model editing: dispatches requests
- pyRevit Routes → View queries: dispatches requests
- pyRevit Routes → Model analysis: dispatches requests
- pyRevit Routes → Clash detection: dispatches requests
- pyRevit Routes → Annotation and tags: dispatches requests
- pyRevit Routes → Document outputs: dispatches requests
- pyRevit Routes → Element coloring: dispatches requests
- pyRevit Routes → File interop: dispatches requests
- pyRevit Routes → Model persistence: dispatches requests
- pyRevit Routes → Code execution: dispatches requests
- Building creation → Revit API and document: creates elements
- Family placement → Revit API and document: places families
- Model editing → Revit API and document: modifies elements
- MEP routes → Revit API and document: creates systems
- View queries → Revit API and document: queries and exports views
- Model analysis → Revit API and document: analyzes model
- Clash detection → Revit API and document: checks interferences
- Annotation and tags → Revit API and document: adds annotations
- Document outputs → Revit API and document: exports documents
- Element coloring → Revit API and document: applies overrides
- File interop → Revit API and document: imports and exports
- Model persistence → Revit API and document: saves document
- Code execution → Revit API and document: executes in context
