Model MCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| REVIT_MCP_HOST | No | Set to 'local' for local Windows clients using the Revit user's account. For remote clients, configure an SSH tunnel to the workstation's loopback endpoint. | |
| REVIT_MCP_ALLOW_WRITE | No | Set to '1' to allow write actions. Both this and the workstation allow-write file are required for actions. | |
| REVIT_MCP_REDACT_PATHS | No | Set to '1' to hide directories in response path fields. Default is likely '0' (not redacted). |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| revit_jobsA | List recent jobs, or wait up to wait_seconds (0 to 50, default 40) for the result of an action jobId. Results stay on the workstation for 24 hours, across server restarts. skipped means incomplete; skippedCount is the total skipped. |
| revit_compare_link_datumsB | Compare host grids and levels with one loaded Revit link. Changes nothing. skipped means incomplete; skippedCount is the total skipped. |
| revit_pingA | Check the connection to Revit without reading the model. Returns data="pong", even when no document is active. skipped means incomplete; skippedCount is the total skipped. |
| revit_nwc_settings_checkA | Parse a Navisworks exporter XML file on the Revit workstation without exporting. skipped means incomplete; skippedCount is the total skipped. |
| revit_document_infoA | Read the active model's file name, Revit version, levels (elevations in mm), area schemes, worksets and view count. skipped means incomplete; skippedCount is the total skipped. |
| revit_documentsA | List every open document in one Revit process, including background documents. Linked documents are listed only when include_linked is set. skipped means incomplete; skippedCount is the total skipped. |
| revit_ui_stateB | Read the active document, open views, selection and open documents. skipped means incomplete; skippedCount is the total skipped. |
| revit_api_lookupA | Look up public Revit API types and members. The agent calls this before writing C# for an unfamiliar type. Results describe the running Revit's API version only. XML summaries are optional. skipped means incomplete; skippedCount is the total skipped. |
| revit_model_snapshotA | Read a schema version 1 project snapshot for batch audits. Closed worksets can make the result incomplete. skipped means incomplete; skippedCount is the total skipped. |
| revit_model_healthB | Read model quality counts: project metadata, file size, counts, units and the ten most frequent warning groups. Unavailable metrics are null and listed in skipped. output_path also writes an .xlsx health report with up to five snapshots. skipped means incomplete; skippedCount is the total skipped. |
| revit_links_statusA | Read RVT, CAD and image link status. Each list is capped at 100 entries; summary counts cover all links. skipped means incomplete; skippedCount is the total skipped. |
| revit_shared_coordinatesA | Read project and survey coordinates: base and survey points, active site, project locations and link offsets (mm, degrees). Lists are capped at 100 with total counts. skipped means incomplete; skippedCount is the total skipped. |
| revit_parameter_fill_checkA | Count filled, empty and missing parameters per parameter and category, with samples of empty and missing element IDs. Numeric zero counts as filled. skipped means incomplete; skippedCount is the total skipped. |
| revit_list_catalogB | List catalog names for one section: categories, family-types, levels, area-schemes, views, worksets, phases or parameters. name_contains filters names case-insensitively; limit bounds results (default 200, maximum 2000). Returns total before the limit and hasMore. skipped means incomplete; skippedCount is the total skipped. |
| revit_aggregate_elementsA | Summarize matching elements by one or two fields, with optional sum and average. Lengths use mm, areas m2, volumes m3. For area totals, group by level and select the area scheme. skipped means incomplete; skippedCount is the total skipped. |
| revit_query_elementsB | Read a page of matching element rows. Lengths use mm, areas m2, volumes m3; optional geometry is in model mm. roomCenterMm is a point inside the room, a bounding-box centre can lie outside it. hasMore=true means further pages exist. skipped means incomplete; skippedCount is the total skipped. |
| revit_list_sheetsB | List sheets with title blocks, revisions and placed view IDs, plus unplaced views. skipped means incomplete; skippedCount is the total skipped. |
| revit_list_viewsB | List non-template views with id, name, type, level, scale and template. skipped means incomplete; skippedCount is the total skipped. |
| revit_view_infoB | Inspect one view's template, display, categories, worksets, filters and links. skipped means incomplete; skippedCount is the total skipped. |
| revit_view_summaryB | Read element categories and counts for a selected view. skipped means incomplete; skippedCount is the total skipped. |
| revit_schedule_dataB | Read displayed schedule header and body cell text, with paging. skipped means incomplete; skippedCount is the total skipped. |
| revit_capture_elementsA | Render a highlighted PNG that marks 1 to 500 elements, for issue evidence. Supports 3d or plan mode over local or SSH transport. The temporary view is rolled back. skipped means incomplete; skippedCount is the total skipped. |
| revit_export_viewA | Save a picture of the selected view as a PNG file in a folder the user names on the AI app computer. output_path names the new file; without it, a temporary folder is used. Existing files are refused. The active view and model stay unchanged. skipped means incomplete; skippedCount is the total skipped. |
| revit_view_elementsA | Read one page of elements in a selected view, with IDs, category, family, type, level and measurements (mm, m2, m3). skipped means incomplete; skippedCount is the total skipped. |
| revit_element_detailsA | Read parameters and geometry of an element by Revit ID, with its type parameters and related warnings. Geometry is in model mm; roomCenterMm is a point inside the room. skipped means incomplete; skippedCount is the total skipped. |
| revit_view_warningsA | Read warnings involving elements present in a selected view. A warning may also involve elements outside the view. skipped means incomplete; skippedCount is the total skipped. |
| revit_list_warningsA | Group model warnings by description text. warning_text with include_elements=true returns the elements of one group. skipped means incomplete; skippedCount is the total skipped. |
| revit_list_relationsB | Read model object membership or dependencies. relation is level-rooms, area-scheme-elements or view-template-dependents (with source_name), or group-elements or nested-family (with source_id). skipped means incomplete; skippedCount is the total skipped. |
| revit_list_instancesA | List Revit processes with documentName, documentPath, revitVersion, processId and pluginResponding. Busy or unresponsive processes stay listed with pluginResponding=false. HTTP mode reports only its connected process. |
| revit_family_auditA | Audit an open family or named project families without saving or loading changes. Project mode takes exact family names or ["*"]; family mode takes none. detail="summary" returns parameter counts and up to 20 unused parameter names; detail="full" returns all parameter metadata with group IDs and groupName labels. The wildcard audits the first 200 editable families sorted by name; data.skipped lists each remaining name and reason, with skippedCount. skipped means incomplete; skippedCount is the total skipped. |
| revit_set_read_onlyA | Set the workstation read-only lock for all Revit versions of this Windows user. Locking needs no token. Unlocking requires a user request and explicit confirmation. The first call returns confirmationText and a token; the second call with confirm_token unlocks. Workstation policy cannot be changed. |
| revit_open_documentA | Open a local, UNC or RSN model. Central models open detached by default. Cloud paths are unsupported. May commit; revit_jobs polls; retry repeats. |
| revit_activate_documentB | Activate an already open document by title or path reference. |
| revit_activate_viewB | Activate a non-template view. Zoom to fit, preserve zoom, or frame element IDs. |
| revit_close_viewsC | Close open UI views in the active document. |
| revit_new_documentC | Create a project or family from a template on the Revit workstation. |
| revit_close_documentB | Close a background document. Needs confirm_token from a first call, which changes nothing. |
| revit_save_documentB | Save a document. Needs confirm_token from a first call, which changes nothing. |
| revit_sync_documentB | Synchronize a workshared document with central. Needs confirm_token from a first call, which changes nothing. |
| revit_set_view_visibilityB | Change category, workset and filter visibility in one view; dry_run previews. Categories accept the Revit UI name, the BuiltInCategory name (OST_StructuralColumns), the English name or an ID. |
| revit_remove_linksA | Delete selected link types and their instances; dry_run previews. Cannot be undone in Revit. Needs confirm_token from a first call, which changes nothing. |
| revit_save_toolC | Compile C# and schema without execution, then save a revision after the token handshake. Returns full source, hash and confirm_token. Uses a two-step AI app token handshake. |
| revit_list_toolsB | List saved tools and schemas without source. |
| revit_get_toolC | Return approved source and schema without execution. |
| revit_run_toolA | Run saved C#. First run per Revit session needs confirm_token, even read/dry_run. Action commits need a token. Read/dry_run roll back. transaction=group permits script-owned transactions and edit scopes in one Undo group. Uses execute_code gates; store runs require machine ExecuteCode=confirm, including read mode and dry runs. Timeouts may follow commit. Uses a two-step AI app token handshake. |
| revit_delete_toolC | Delete all revisions with confirm_token after a first confirmation challenge. No Undo. Uses a two-step AI app token handshake. |
| revit_execute_codeA | Run a C# body or public static Script.Execute(ScriptContext ctx) on the Revit thread. revit_api_lookup supplies API metadata. Auto owns a Transaction; group lets scripts own Transactions and edit scopes inside one Undo group. Close all scopes before returning; transaction="none" is refused. Needs confirm_token except dry_run, which rolls back. May commit; revit_jobs polls; retry repeats. |
| revit_undo_lastA | Undo the last MCP action through Revit's own undo command. Runs only when the target document is active, no command is pending and Revit's last undo entry is the one this session recorded; otherwise the result carries a refusal reason. |
| revit_align_link_datumsB | Align host grids and levels to a loaded link, with optional creation and rollback preview. Does not create a monitor relationship. |
| revit_cancel_jobA | Request cancellation of an action jobId. Process-models stops before the next model and marks unstarted models cancelled; a single running Revit operation finishes, and completed changes stay committed. |
| revit_selectA | Select element IDs for inspection in Revit; an empty list clears the selection. |
| revit_showA | Display elements in Revit, optionally selecting them; opens a level plan or 3D view when needed. |
| revit_isolateA | Temporarily isolate element IDs in the active view; an empty list resets. |
| revit_moveA | Move elements by dx_mm, dy_mm and dz_mm on model axes. dry_run rolls back and returns the verification block. Group members, pinned, hosted and constrained elements are reported in skipped.inGroup, skipped.pinned, skipped.hosted and skipped.constrained and are not changed; the call is refused if every element is a group member. |
| revit_override_graphicsB | Colour elements in selected model views; reset restores overrides saved in this Revit session. |
| revit_rotateA | Rotate elements about a vertical axis through center_mm, or through their combined bounding box center. dry_run rolls back. Group members, pinned, hosted and constrained elements are reported in skipped.inGroup, skipped.pinned, skipped.hosted and skipped.constrained and are not changed; the call is refused if every element is a group member. |
| revit_copyA | Create 1 to 100 successive copies at multiples of the model-axis offset in mm. dry_run rolls back. Group members are reported in skipped.inGroup; the call is refused if every element is a group member. |
| revit_mirrorA | Mirror across a model X or Y parallel line through point_mm; copy keeps originals. dry_run rolls back. Group members, pinned, hosted and constrained elements are reported in skipped.inGroup, skipped.pinned, skipped.hosted and skipped.constrained and are not changed; the call is refused if every element is a group member. |
| revit_change_typeA | Change each element to one compatible type; family resolves duplicate type names. dry_run rolls back. Group members are reported in skipped.inGroup; the call is refused if every element is a group member. |
| revit_update_parametersA | Update a parameter on elements matching the same filters as revit_query_elements. Group members are reported in skipped.inGroup instead of failing the call; dry_run predicts this. |
| revit_place_familyA | Place a loaded unhosted family on a named level. family is a name or Family: Type; a null type_name uses the embedded or first type. XY is in mm, rotation in degrees. |
| revit_load_familyA | Load workstation .rfa files in one undo entry. Existing families are skipped unless overwrite is true. |
| revit_place_familiesC | Load optional families and place instances in one transaction and undo entry. |
| revit_create_wallB | Create a straight wall on a named level. XY endpoints and height are in mm; a null wall_type uses the first basic type. |
| revit_create_mep_runA | Create connected duct, pipe, cable tray or conduit segments from model mm points. A missing Z uses the level elevation plus the kind's default offset. Unplaceable elbows are reported as unjoined pairs. |
| revit_link_cadB | Link or import a DWG into a plan view on the Revit workstation. Returns CAD layers and extents in mm. |
| revit_walls_from_cadB | Bridge openings, pair parallel CAD lines and join basic walls in one undo entry. Dimensions are mm. Joins Revit rejects are left out and reported as unjoinedEnds with unjoinedReasons; dry_run reports the same join numbers. |
| revit_create_viewB | Create a plan, section, 3D or drafting view. Unbounded 3D views show the whole model, shaded, fine detail. Box coordinates are model mm. |
| revit_duplicate_viewC | Duplicate a view, optionally with detailing or as a dependent view. |
| revit_apply_view_templateC | Apply a matching view template to one or more views. |
| revit_create_sheetC | Create a sheet with the first loaded or a named title block. |
| revit_place_views_on_sheetB | Place views and schedules on a sheet. Coordinates are sheet mm. |
| revit_tag_elementsA | Tag elements in a view, chosen by category names or by element IDs (exactly one of the two). Returns created tag IDs in createdElementIds; already tagged elements are skipped unless skip_tagged is false, and untaggable inputs are listed in skipped. tag_type matches a tag type name, a family name or "Family: Type"; the default tag type is used otherwise. Room tags need a plan view. dry_run rolls back and returns the tags that would be created. |
| revit_create_scheduleA | Create a schedule for one category with the named fields in the given order, using Revit UI names such as Mark, Level or Count. filters keep rows by field, operator and value; sort orders and, with header or footer, groups rows. Lengths in mm, areas in m2, volumes in m3. itemized=false collapses identical rows. Returns viewId and the resolved fields; unknown names are listed in skipped. dry_run rolls back. |
| revit_set_parameterA | Set one instance or type parameter. parameter_id selects by BuiltInParameter name, shared GUID or ParameterElement ID; otherwise parameter takes a localized UI name, BuiltInParameter name or English alias, and ambiguous matches are refused. Value is a string, integer or number by storage type; lengths in mm, areas in m2. Group members fail with a clear message. dry_run rolls back and returns the verification block. |
| revit_deleteA | Delete elements and their Revit dependencies; the count includes dependents. dry_run returns the count. Above 500 elements including dependents a confirm_token from a first call is needed; revit_run_actions refuses such deletions. |
| revit_exportA | Save PDF, DWG, IFC or schedule CSV files to a folder the user names with output_dir on the Revit workstation; dry_run returns planned file names. Replacing existing files (overwrite=true) uses a two-step confirm_token handshake with the AI app. The AI app is expected to show the action to you; Model MCP does not show its own dialog. May commit; revit_jobs polls; retry repeats. |
| revit_export_nwcB | Save an NWC file to a folder the user names through path on the Revit workstation; needs the Navisworks exporter. settings_xml applies exporter XML values, explicit arguments take precedence. Replacing an existing file (overwrite=true) uses a two-step confirm_token handshake with the AI app. The AI app is expected to show the action to you; Model MCP does not show its own dialog. May commit; revit_jobs polls; retry repeats. |
| revit_run_actionsA | Execute up to 50 actions with one undo step; the whole batch rolls back on its first failure. dry_run rolls back and returns the verification block. |
| revit_process_modelsB | Open each model in the interactive session, run steps and C# code, export, save as requested, and close. In-place saves and code need a confirm_token from the preview response. dry_run replaces only code.transaction="none" with "auto" and reports the override in warnings. May commit; revit_jobs polls; retry repeats. |
| revit_edit_familiesB | Edit an open family in place, or named project families (exact names or ["*"]), one load cycle each. A dry run rolls back all changes. May commit; revit_jobs polls; retry repeats. |
| revit_batch_startC | Start a persistent, read-only run over local, UNC or RSN models. open_timeout_minutes is the per-model open deadline (default 30, 45 when upgrading in memory). |
| revit_batch_statusB | Read durable run and model status after the initiating client exits. |
| revit_batch_cancelB | Persist cancellation and prevent unstarted models from running. |
| revit_batch_fetchB | Download completed snapshots to new local files without overwriting. |
| revit_model_auditA | Audit one model with local YAML or JSON rules, or pack:model-health by default. Reads only. Save immutable history on the server machine and compare with previous, a result path, or none. Unsupported evidence is not_assessed. The run is bounded to ten minutes. skipped means incomplete; skippedCount is the total skipped. |
| revit_audit_reportA | Write new XLSX and self-contained HTML reports from a local audit JSON file. Paths resolve on the server machine. Existing files are refused. |
| revit_build_reportA | Build a local Excel report from snapshots without contacting Revit. |
| revit_issue_registerA | Write a new local .xlsx issue register with element snapshots and review documents. Takes 1 to 60 issues; captures at most 25 snapshots (by severity) within a 210-second budget, and failed snapshots become cell notes. Snapshots need local or SSH transport. Existing output files are refused. skipped means incomplete; skippedCount is the total skipped. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| model_overview | Review one open model: health, warnings, links, coordinates and families, as a findings table. |
| pre_issue_check | Check an open model before issuing it: health, warnings, links, coordinates, parameter fill and families. |
| warnings_triage | Group and prioritize model warnings with affected element IDs. |
| parameter_fill_report | Report how completely the requested parameters are filled for the requested categories. |
| daily_qa | Run the daily read-only model QA routine and report counts and trends. |
| sheet_set | Plan and create sheets from CSV or markdown rows after explicit approval. |
| batch_audit | Collect snapshots from many models in the background and build a comparison report. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| coordinator_guide | Guide for reviewing a Revit model: tool order, result fields and reporting conventions. |
TDQS
Scored across 89 tools
Many tools are individually distinct, but there are substantial overlapping clusters: revit_run_tool/revit_execute_code/revit_run_actions, revit_place_family/revit_place_families, revit_update_parameters/revit_set_parameter, and several query/read/audit tools. Detailed descriptions help, but an agent still needs careful selection among similar capabilities.
All tools use a consistent revit_ snake_case prefix, and most follow a clear verb_noun or noun-action pattern. A few names such as revit_document_info, revit_ui_state, and revit_jobs are less verb-oriented, but the overall convention remains readable and predictable.
With 89 tools, this server is far beyond a practical toolset for agent selection, even for a broad Revit automation domain. The surface is comprehensive but heavily overloaded, with many niche and overlapping operations that increase cognitive load and misselection risk.
The surface covers model and element CRUD, views and sheets, documents and worksharing, families, exports, auditing, batch runs, and C# escape hatches. Some direct creation operations such as levels, grids, rooms, dimensions, or text notes are not exposed as first-class tools, but they can be worked around through code execution.