Revit 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
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| revit_pingA | Check the RevitModelMcp connection without reading the model. Returns a response with data="pong", even when no document is active. Connection failures and timeouts raise errors; no partial result is returned. If more than one Revit instance is running, document is required; otherwise any instance may respond. |
| revit_document_infoA | Read general information about the active Revit model. Returns data with file name, Revit version, levels (elevations in mm), area schemes, worksets and view count. Absent collections are empty; non-workshared models have no worksets. Call revit_list_views next for view analysis. A missing active document, read failure or timeout raises an error; partial data is not returned. If more than one Revit instance is running, document is required; otherwise any instance may respond. |
| revit_model_healthA | Read model quality counts before an export or hand-over. Returns data with project metadata, file size in bytes, counts, unit settings and the ten most frequent warning groups. Absent objects have zero counts; unavailable metrics are null and listed in skipped with their errors. Use revit_list_warnings to inspect affected elements. A missing active document, overall read failure or timeout raises an error; timeout partials are not returned. If more than one Revit instance is running, document is required; otherwise any instance may respond. |
| revit_links_statusA | Read RVT, CAD and image link status before an export or hand-over. Returns data with summary counts and rvtLinks, cadLinks and images lists containing status, paths and instance counts. Each list is capped at 100 entries by ID without pagination; summary counts cover all entries. No links produce empty lists; per-entry failures appear in error with status Other. A missing active document, overall read failure or timeout raises an error; timeout partials are not returned. If more than one Revit instance is running, document is required; otherwise any instance may respond. |
| revit_shared_coordinatesA | Read project and survey coordinates before an export or hand-over. Returns data with base/survey points, the active site, project locations and link offsets in mm and rotations in degrees, rounded to one decimal. Location and link lists are capped at 100 without pagination, with total counts; no links produce an empty sharedSiteFromLinks list. A missing active document, read failure or timeout raises an error; partial data is not returned. If more than one Revit instance is running, document is required; otherwise any instance may respond. |
| revit_parameter_fill_checkA | Count filled, empty and missing parameters before an export or hand-over. Returns data with scope, per-parameter and per-category counts, instance/type ownership, storage types and empty/missing element ID samples. No matching elements produce zero counts and empty samples; absent parameters count as missing, and numeric zero counts as filled. A missing document, invalid scope or timeout raises an error; partial data is not returned. If more than one Revit instance is running, document is required; otherwise any instance may respond. |
| revit_list_catalogA | Discover valid model names before filtering. Returns data with section and items containing names and section-specific IDs, categories, types or counts; an empty catalog returns items=[]. section is required: categories, family-types, levels, area-schemes, views, worksets, phases or parameters. The parameters section reports localized names, categories and value types. Start universal queries here, then prefer revit_aggregate_elements for counts and breakdowns; use revit_query_elements only for individual rows. An unknown section, missing document, read failure or timeout raises an error; partial data is not returned. If more than one Revit instance is running, document is required; otherwise any instance may respond. |
| revit_aggregate_elementsA | Summarize matching elements by one or two fields after revit_list_catalog. Returns data with matchedElements and groups containing keys, count and optional numericCount, sum, average and unit. Lengths use mm, areas m2 and volumes m3; groups without numeric values have null sum and average. No matches return groups=[]; invalid field or filter names raise errors even for empty results. Call revit_list_catalog first; prefer this tool for counts and breakdowns, and revit_query_elements only for individual rows. For area totals, group by level and select the area scheme. A missing document, read failure or timeout raises an error; partial data is not returned. If more than one Revit instance is running, document is required; otherwise any instance may respond. |
| revit_query_elementsA | Read a page of matching element rows after revit_list_catalog. Returns data with elements (id and values), fields, total, offset, limit and hasMore; values include availability, source and units when available. Lengths use mm, areas m2 and volumes m3; optional geometry uses model mm rounded to one decimal, and unavailable geometry is omitted. Use roomCenterMm for placement inside rooms; a bounding-box centre can lie outside the room. No matches or an offset beyond the result return elements=[]; advance offset while hasMore=true. Call revit_list_catalog first and prefer revit_aggregate_elements for counts and breakdowns. Invalid fields or filters, a missing document, read failure or timeout raise errors; partial data is not returned. If more than one Revit instance is running, document is required; otherwise any instance may respond. |
| revit_list_viewsA | Find non-template views before analyzing a view. Returns data with views containing id, name, type, level, scale and template, plus total and processed counts for scanned non-template views. No filter matches return views=[]. Use a returned name with revit_view_summary before requesting element pages. A missing document, read failure or timeout raises an error; partial data is not returned. If more than one Revit instance is running, document is required; otherwise any instance may respond. |
| revit_view_summaryA | Read element categories and counts for a selected view. Returns data with header metadata and categories containing count and differentTypes; an empty view returns categories=[]. Prefer this tool for view counts; select relevant categories before calling revit_view_elements for individual rows. A missing document, unknown or unsupported view, read failure or timeout raises an error; partial data is not returned. If more than one Revit instance is running, document is required; otherwise any instance may respond. |
| revit_export_viewA | Export a selected view to PNG when numbers do not explain geometry. Returns data with localPath on the MCP client, image width/height in pixels, sizeBytes and view metadata, without base64. The export does not change the active view or write to the model; use it to inspect outlines, zones and room boundaries. A missing document, unknown or unsupported view, existing destination, missing PNG or download failure raises an error. Uses the default 120-second response and 300-second pickup budgets; timeouts raise errors without partial data. If more than one Revit instance is running, document is required; otherwise any instance may respond. |
| revit_view_elementsA | Read one page of elements in a selected view. Returns data with elements, total, offset, limit and hasMore; rows include IDs, category, family, type, level and available measurements in mm, m2 and m3. No matches or an offset beyond the result return elements=[]; advance offset while hasMore=true. Prefer revit_view_summary for counts and category discovery; use this tool for individual rows and revit_element_details for all parameters. A missing document, unknown or unsupported view, read failure or timeout raises an error; partial data is not returned. If more than one Revit instance is running, document is required; otherwise any instance may respond. |
| revit_element_detailsA | Read parameters and geometry of an element by Revit ID. Returns data with element, instance parameters, available typeElement parameters and related warnings; no warnings return an empty list. Rooms include level, area in m2, volume in m3 and boundaries in mm; parameter values include display/internal values and metric units when available. Location and boundingBox use model mm rounded to one decimal; unavailable geometry is omitted. Use roomCenterMm for placement inside rooms; boundingBox.centerMm may lie outside a nonrectangular room. An absent element or document, read failure or timeout raises an error; partial data is not returned. If more than one Revit instance is running, document is required; otherwise any instance may respond. |
| revit_view_warningsA | Read warnings involving elements present in a selected view. Returns data with view and warnings containing text, severity and element IDs with presentOnView flags; no related warnings return warnings=[]. A warning may also involve elements outside the view. Use revit_view_summary to inspect view contents, or revit_list_warnings for model-wide warning groups. A missing document, unknown or unsupported view, read failure or timeout raises an error; partial data is not returned. If more than one Revit instance is running, document is required; otherwise any instance may respond. |
| revit_list_warningsA | Group model warnings by description text. Returns data with totalWarnings and groups containing text, severity, count, affectedElementCount and optional element rows. Start without filters, then repeat with a returned warning_text and include_elements=true to inspect one group. No model warnings return groups=[]; an unmatched warning_text raises an error. A missing document, read failure or timeout raises an error; partial data is not returned. If more than one Revit instance is running, document is required; otherwise any instance may respond. |
| revit_list_relationsA | Read model object membership or dependencies. Returns data with relation, source and elements containing IDs, names, categories, families and types; no related objects return elements=[]. relation is required: level-rooms, area-scheme-elements or view-template-dependents with source_name, or group-elements or nested-family with source_id. Obtain source names from revit_list_catalog and IDs from element queries. An invalid relation, missing or wrong source, missing document, read failure or timeout raises an error; partial data is not returned. If more than one Revit instance is running, document is required; otherwise any instance may respond. |
| revit_list_instancesA | List Revit processes and their active documents. Returns a list of documentName, documentPath, revitVersion, processId and pluginResponding records; no matching instances return []. Local and SSH modes use add-in heartbeats with process fallback; fallback records have an empty document and pluginResponding=false. HTTP mode reports only its connected process; transport failures raise errors. Use this tool before choosing a unique document substring for other tools. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 18 tools
Each tool has a clearly distinct purpose: catalog discovery, element queries, view summaries, view-scoped elements, warnings, health checks, links, coordinates, relations, and export are all separated cleanly. Cross-references explicitly direct which tool to prefer, so an agent is unlikely to misselect between similarly scoped tools like query_elements and view_elements.
All names share the revit_ prefix and use lowercase snake_case, which makes the set feel uniform. The minor inconsistency is that some names are verb-led (list_, query_, export_) while others are noun-led (document_info, model_health, links_status), but the pattern remains readable and predictable.
At 18 tools, the server is slightly above the typical 3-15 range, but the breadth is justified by the wide read-only inspection surface covering elements, views, warnings, links, coordinates, parameters, and export. Each tool has a distinct role and there is no obvious redundancy, so the count feels reasonable rather than bloated.
For its apparent read-only Revit inspection and export scope, the server covers the full workflow: catalog discovery, paginated element queries, view analysis, element details, warnings, model health, links, shared coordinates, parameter fill, instance enumeration, and PNG export. There are no dead ends; tools are explicitly chained with next-step guidance, making the surface complete for its purpose.