Revit-MCP status

Point clouds, 2D plans and IFC storeys to native Revit elements through the pyRevit agent runtime. State 24.10.2026. Open functions and tasks per sub-project: open items. How the models are built: modelling guideline. What the agent team did and found: agent scoreboard. Features built, in progress and planned, with the time and tokens spent: features and effort. Plans and decisions: agent team, decisions, drawings and scans, deviation and review, local LLM, GitHub sources.

42functions scored
34pass in a real Revit (score 4 or 5)
3proven on real project data (score 5)
15missing features planned

Current functions in Revit

Before and after for each main function: on the left what the route starts from (point cloud, plan, IFC), on the right the native Revit model, exported by the unattended Revit test. Synthetic examples only (project data stays private).

Maturity by topic

Each function has a maturity level from 0 to 5. A bar shows the functions of one topic: each coloured segment is one level, the number in it how many functions are at that level. Further right and darker green is more mature.

Convert point clouds
2131
16 functions, average 3.9
Convert floor plans
117
9 functions, average 3.2
Convert IFC
51
6 functions, average 4.2
Revit and MCP (all routes)
461
11 functions, average 3.7
All functions
116313
42 functions, average 3.8
0 not started1 designed only2 code exists, not verified3 passes the synthetic tests and the benchmark, or runs on real data without Revit4 passes in a real Revit (scan2revit/tools/revit_e2e.py)5 proven on real project data in Revit, measured against a reference

Scale

ScoreMeaning
0not started
1designed only
2code exists, not verified
3passes the synthetic tests and the benchmark, or runs on real data without Revit
4passes in a real Revit (scan2revit/tools/revit_e2e.py)
5proven on real project data in Revit, measured against a reference

Current functionality

Convert point clouds

FunctionScoreEvidenceGap
Levels and storeys from the scan5real project data (details private)–
Straight walls (faces, thickness, squaring, joins)4all scan examples in Revit; real project data (details private)densely partitioned real floors: real project data (details private)
Curved walls4curved_bay: radius exact in Revitcircular arcs only
Doors and windows from holes in the faces4scan examples in Revit: all hosted, sills to the millimetrefew found on real floors
Door swing and hinge side4door facing checks pass in Revit–
Ghost points (glass, mirrors)3benchmark S9: 97 % removed–
Stairs, slab openings4three stair examples in Revit, 16 risers, tread rightstraight runs only
Rooms, floor outline4scan examples: rooms bounded, areas within 3 %; slivers under 1 m2 left out–
E57 reader (real scans, in blocks)4real project data (details private)–
Large scans: thinning to 2 cm4real project data (details private)–
Slice-weighted storeys (walls 0.3-0.7 m, windows 1.1-1.3 m)4real project data (details private)real project data (details private)
Slice route: walls, doors, windows, rooms, floor from two 20 cm slices (slice2d)4synthetic (bench SL1-SL5): all walls (faces within 1 mm), doors with swing, windows, rooms; example all 18 checks in Revit (0.7, through pyRevit). real project data (details private)rooms not closed in Revit where walls are missing; opening heights given, not measured; sloped roofs
Slabs and levels from vertical sections (sections), refined where neighbours differ3synthetic: floors exact, slab thickness within 2 cm, gallery found, beds and a ramp no level; real project data (details private); floors and slab thickness go into the slice routea gallery real project data (details private) is missed at 3 m spacing; some slab thicknesses from few pairs; galleries not built as their own Revit level yet
Slab regions per floor from horizontal slices: outlines, voids (shafts, stairwells, courtyards), galleries4synthetic: floor regions, a stairwell void, a hidden floor filled, the gallery; real project data (details private)outlines from a 10 cm raster (Revit sketch warnings); voids under 5 m2 not cut; stairs in the voids not read
External scans (drone, facade) in the survey frame (facade): exterior walls seen from inside get their measured thickness, slab outlines from the facade ring, courtyards as voids4synthetic tests (outer face behind window frames, ring with courtyard and canopy, open ring); real project data (details private) ; real project data (details private); rings closed stepwise (gaps up to 1.6, 2.4, 3.2 m), slab edge on the walls' outer facenot under a roof or below ground; rings still open where no facade is seen
Storeys merged in the survey frame, vertical check4real project data (details private)–

Convert floor plans

FunctionScoreEvidenceGap
DXF and vector PDF4plan examples in Revit, all checks–
Several storeys, aligned4two-storey PDF in Revit, stair and void right–
CAD sheet with several storeys (sheet.py): drawings split, storey labels, scale from the title block4real project data (details private)sheets with turned text; no test yet (example sheets from the user)
Walls drawn as filled areas, openings where the wall colour is absent, swings from chains of short lines4real project data (details private)corner joins of short stubs; knee walls under a sloping roof drawn as roof bands
Room stamps: name, unit as Revit department, number storey.unit.nn, a room at every stamp4real project data (details private)rooms the walls do not close are placed, not enclosed
Clutter filter (built-in units, sanitary, text masks, annotation), list in the guideline and plans/filters.json4real sheet: crossed boxes, circles and masks left out, windows drawn as crossed boxes keptfurniture only implicitly
Raster plans through plan-extract (fpx.py)4plan-extract examples in Revitone room the walls do not close; never on a real result
plan-extract run locally1repository clonedblocked: the segmenter model is not public
Own raster reader0–not built

Convert IFC

FunctionScoreEvidenceGap
One storey to native Revit (ifc.py)5real project data (details private)stairs with landings
All storeys in one model (merge.py)4real project data (details private)doors on locked families
Openings on the right wall piece, panes left out4'cannot cut from wall' 359 -> 36 on the whole building–
Rooms without IfcSpace (cells between the walls)4real project data (details private); synthetic house exactareas off where walls overlap
Pre-check of what Revit refuses (ifc/precheck.py), wall pieces at their base offset, slab holes4real project data (details private)walls assigned to the wrong storey
Synthetic IFC example and tests4bench/ifc_synth.py: 3 tests, 22 of 22 checks in Revit–

Revit and MCP (all routes)

FunctionScoreEvidenceGap
End-to-end runner (start, calls, checks, report)4every example, a real IFC building and real scan storeys (0.5 add-in); all nine examples through pyRevit, 218 of 218 checks (0.7, 20.10.2026)the real IFC building and the scan storeys again through pyRevit
Unattended runs: failure dialogs answered and logged5real project data (details private)–
Wall types for every thickness4real project data (details private); every thickness of the nine examples through pyRevit (0.7)–
Door and window types for every size4every size of the nine examples made in Revit 2025, through the add-in and through pyRevit (Swiss families through the masonry opening; passage families without a leaf never used for a door); size check in every runfire-rated door families lock their size
Images: a plan per level and a 3D view, JPEG4every example and the real models (0.5 add-in); every example through pyRevit: a fresh plan per level without the template's view template, cropped, fine detail (0.7)–
Revit through the pyRevit agent runtime (stages, read back, checks)4all nine examples in Revit 2025 through pyrevit mcp, unattended, 218 of 218 checks (20.10.2026); fixed on the way: Room.Name under IronPython, umlauts in results, a Revit chosen by process id; real project data (details private); results too large for the response read from the run–
Revit API check (tools/api_check.py)4all 136 API names of the Revit module found in Revit 2025.1–
Agent team: 9 agents, workflow with gates, phase tool for one model3three examples built phase by phase in the stand-in, every check passes; the family man's types stage makes every type before the buildersfirst run in Revit
Agent team bookkeeping: scoreboard, rule ids with checks, rule proposals, run comparison3first team test (synthetic, 25.10.2026): 10 findings filed, one tool defect fixed at gate 1, one rule approvedthe build stage
Comparison with a reference plan per LOA class (core/compare.py)3real project data (details private)arcs, stairs, opening heights
Input reports with verdicts (core/inputs.py), scan coverage3synthetic scan: 12 of 13 ok (coverage needs the plan); floors from the sections (G-4.4)limits are start values

Missing features

Sorted by value, then effort. Value 1 to 5, effort S (hours), M (a day or two), L (more). By sub-project, with the gaps and the tasks: open items.

#FunctionValueEffortDepends onRaises
1Wall detection on densely partitioned real floors5L–scan walls 4 to 5
2A door and a window family with free size in the blank project4Stemplate (you)door sizes 3 to 4
4Raster PDF into Revit4S to Ldecision: segmenter model, own reader or web appraster plans 1 to 4
3Room separation lines where the slice route's rooms have no wall (rooms closed in Revit)4M–slice route rooms
13Stairs and ramps in the voids of the slab regions (steps in thin horizontal slices)4M–stairs 4 to 5
14Slab outlines: straight, square edges instead of the 10 cm raster3S–fewer Revit warnings
15Modelling guideline, open points: phase "Existing" for every element, a parameter measured / assumed on walls, floors, doors and windows (done 24.10.2026)3S–guideline met
6IFC: wall types by the IFC type name3M–type quality
7IFC: slab holes and openings3M–floors
8IFC: columns and beams3M–new element classes
12Slice route: opening heights (a third slice or the top of each gap), sloped roofs, one wall from its upper and lower face3M–slice route 4 to 5
5Stairs with landings (IFC flights, scans)3L–stairs
9IFC: curtain walls with their doors and windows3L–new element class
11Own raster reader (instead of plan-extract)3Ldecision in 4raster plans 0 to 3
10Door swing from the IFC (done 24.10.2026)2S––

Reading

Every route reaches Revit natively and passes in a real Revit, since 20.10.2026 through pyRevit (all nine examples, 218 of 218 checks). real project data (details private) Closing the rooms of the slice route in Revit (3) and finding the rest of the walls on densely partitioned floors (1) are the main open items.