Skip to content

Tool reference

The default tool list contains 84 tools, about 26,450 tokens. The core,read selection contains 22 tools, about 6,730 tokens. These estimates come from build/tool_size.py; the tool list size table lists bytes and counts by toolset.

confirm_token is a two-step handshake with the AI app. The AI app is expected to show the action to you; Model MCP does not show its own dialog. The token does not prove human approval.

Toolsets

tools/list costs context in every MCP client that does not load tools on demand. Set REVIT_MCP_TOOLSETS (or start the server with --toolsets) to a comma-separated list to expose only some tools. core is always included, all exposes everything, and an unknown name stops the server with the list of valid names. A hidden tool cannot be called; the tools stay registered in tool-manifest.json, which lists each tool's toolset.

Toolsets limit visibility only. They are not a permission: read-only mode, confirmation tokens and the add-in's own checks apply to every listed tool.

Session tools revit_activate_view, revit_activate_document, revit_select, revit_show, revit_isolate (temporary view state) and revit_close_views do not change the model. Their MCP annotations are readOnlyHint=true and destructiveHint=false. Model-changing tools retain their action annotations. These hints describe model access; workstation locks and policy checks still apply.

The default is all, so existing setups see the same tools. Clients with a small tool budget, or that warn about many tools, should set REVIT_MCP_TOOLSETS=core,read (22 tools, about 6,730 tokens) and add actions, views-sheets or others when needed. The prompts and the coordinator guide name read tools; the batch prompt needs batch.

Toolset Tools
core revit_ping, revit_list_instances, revit_documents, revit_document_info, revit_ui_state, revit_set_read_only, revit_jobs, revit_cancel_job, revit_undo_last
read revit_list_catalog, revit_aggregate_elements, revit_query_elements, revit_element_details, revit_list_relations, revit_model_health, revit_model_audit, revit_list_warnings, revit_links_status, revit_shared_coordinates, revit_parameter_fill_check, revit_model_snapshot, revit_schedule_data
actions revit_set_parameter, revit_update_parameters, revit_move, revit_rotate, revit_copy, revit_mirror, revit_change_type, revit_delete, revit_run_actions
documents revit_open_document, revit_activate_document, revit_new_document, revit_close_document, revit_save_document, revit_sync_document
views-sheets revit_list_sheets, revit_list_views, revit_view_info, revit_view_summary, revit_view_elements, revit_view_warnings, revit_capture_elements, revit_export_view, revit_activate_view, revit_close_views, revit_create_view, revit_duplicate_view, revit_apply_view_template, revit_set_view_visibility, revit_override_graphics, revit_tag_elements, revit_create_schedule, revit_select, revit_show, revit_isolate, revit_create_sheet, revit_place_views_on_sheet
family revit_family_audit, revit_edit_families, revit_load_family, revit_place_family, revit_place_families
links revit_compare_link_datums, revit_align_link_datums, revit_remove_links
cad-mep revit_link_cad, revit_walls_from_cad, revit_create_wall, revit_create_mep_run
export revit_export, revit_export_nwc, revit_nwc_settings_check, revit_issue_register
batch revit_batch_start, revit_batch_status, revit_batch_cancel, revit_batch_fetch, revit_build_report, revit_audit_report, revit_process_models
code revit_execute_code, revit_api_lookup

Tool list size

cd server && uv run python ../build/tool_size.py measures the tools/list payload (compact JSON of every tool, bytes; tokens are bytes divided by 4, an estimate). Tool and parameter descriptions state plain behavior. The confirmation procedure, addressing rules and long-job handling live in the server instructions and the revit://guides/coordinator resource, not in each description.

Toolset Tools Bytes About tokens
core 9 7,574 1,893
read 13 19,347 4,836
actions 9 11,103 2,775
documents 6 4,952 1,238
views-sheets 22 25,837 6,459
family 5 8,967 2,241
links 3 4,104 1,026
cad-mep 4 5,663 1,415
export 4 7,283 1,820
batch 7 8,149 2,037
code 2 2,821 705
all (default) 84 105,800 26,450
core,read 22 26,921 6,730

These measurements use the default tool schemas. Optional server arguments can increase the payload.

MEP routing, graphic overrides, view and sheet creation, element tagging, schedule creation, CAD linking and wall construction actions are listed in Action tools. revit_place_views_on_sheet accepts a sheet element ID (integer or numeric string), sheet number, or sheet name; an unmatched reference returns candidate sheets.

Revit-backed tools support local, SSH and HTTP transports. revit_build_report runs on the MCP client machine from snapshot files and needs no Revit transport or running instance. revit_capture_elements downloads a highlighted element PNG over local or SSH transport; HTTP is unavailable. revit_export_view downloads PNG through /views/{name}/image in HTTP mode. revit_list_instances reports the connected Revit process in HTTP mode.

Every addressed Revit-backed read tool accepts optional process_id (alias processId), a strict positive integer. It selects an exact Revit process and must agree with document when both are given. See batch collection.

Every Revit-backed read tool except revit_list_sheets, revit_ui_state, revit_export_view, revit_capture_elements, revit_issue_register, revit_list_instances and revit_family_audit accepts timeout_seconds=120 and document=null. The server environment variable REVIT_MCP_PICKUP_TIMEOUT_SECONDS configures the file-channel pickup timeout (default 300 seconds). revit_ui_state accepts only process_id. Family audit accepts timeout_seconds=600 and document=null. Timeouts are seconds; pickup timeout applies only to local and SSH transports. Every timeout argument is named timeout_seconds; defaults and limits differ per tool and are listed in the tool schema. revit_jobs(wait_seconds) is a wait, not a timeout. Arguments named output_path (a file) and output_dir (a directory) write on the machine that runs the MCP client, unless the description says the path is on the workstation. revit_export, revit_process_models exports and save.output_dir write on the workstation. save_as is a Revit Save As path on the workstation. Arguments without defaults in these tables are required. The query filters shared by aggregation and queries are categories, family, type_name, level, view, workset, phase, area_scheme and parameter_filters; each defaults to null.

Every successful Revit-backed read result returns top-level skipped and skippedCount. Each skipped entry has what and reason. An empty list means no fields were omitted. A non-empty list means the answer is incomplete. The list keeps the first 100 entries; skippedCount reports the uncapped total. revit_list_instances returns instances with empty diagnostics. Model health uses this common shape instead of a nested metric/error list. Links status also keeps each link's error and mirrors it in skipped.

Tool Arguments beyond the common read options Purpose
revit_ping None Check connectivity; returns data:"pong" and readOnly: { enabled, source, setBy, setAtUtc }.
revit_set_read_only enabled, confirm_token=null Control the shared workstation lock. Lock immediately. Unlock only after an explicit user request and confirmation with the returned token. Policy locks cannot be changed. See read-only mode.
revit_jobs job_id=null, wait_seconds=40 List jobs, or wait up to 50 seconds for an action job (0 through 50, default 40; poll again for longer jobs). Returns progress or the original final action response.
revit_nwc_settings_check settings_xml Parse exporter XML on the Revit workstation without exporting; return values, mapping, notApplied and ignored.
revit_document_info None Read document, levels, area schemes and worksets.
revit_documents include_linked=false List every open document in one Revit process, including background documents; linked documents are excluded by default.
revit_ui_state None Read the active document and view, open UI views, up to 500 selected elements, and all open documents.
revit_list_catalog section, name_contains=null, limit=200 (1 to 2000) Discover names with a case-insensitive filter. Returns total before the limit and hasMore.
revit_aggregate_elements group_by, sum_field=null, shared query filters Group by one or two fields (group_by takes 1-2 items); return counts and optional sum/average.
revit_query_elements Shared query filters, fields=null, offset=0, limit=100, sort_field="id", sort_direction="asc", include_geometry=false Read a page of matching elements.
revit_list_sheets include_unplaced_views=true, offset=0, limit=200, document=null; no timeout argument Read sheets, title blocks, revisions, placed view IDs and unplaced views.
revit_list_views view_type=null, name_contains=null Find views in the active document.
revit_view_summary view Read view metadata and category counts.
revit_view_info view (name or decimal ID) Inspect view template controls, display settings, hidden categories, worksets, filters, links and temporary modes.
revit_capture_elements element_ids, pixel_size=1600, padding_mm=1500, mode="3d", output_path=null, document=null; no timeout arguments Capture 1-500 model elements highlighted red in a temporary 3D or plan view. Returns PNG image content and local path; the view is rolled back. Local/SSH only.
revit_export_view view, pixel_size=1600, output_path=null, document=null; no timeout arguments Download a PNG; pixel_size is 32-4000 pixels (Revit rejects smaller images) on the fitted image dimension.
revit_schedule_data schedule, max_rows=500, offset=0 Read visible schedule columns and data rows with totalRows and truncated. Paging excludes heading rows. Rejects non-schedules.
revit_view_elements view, categories=null, offset=0, limit=100 Read a page of elements in a view.
revit_element_details element_id Read instance/type parameters and geometry by unitless Revit ID; element_id must be at least 1.
revit_view_warnings view Read warnings involving elements in a view.
revit_list_warnings warning_text=null, include_elements=false Group warnings or inspect a specific warning group.
revit_list_relations relation, source_id=null, source_name=null Read membership or dependencies.
revit_list_instances document=null; no timeout arguments Return endpoint or heartbeat information in instances.
revit_model_health output_path (optional) Read model quality counts and top warnings; save an Excel health report on the MCP server machine.
revit_links_status None Read RVT, CAD and image status, paths and instance counts.
revit_shared_coordinates None Read base/survey points, sites and link transforms in mm and degrees. Refused for family documents.
revit_family_audit families=null, detail="summary", timeout_seconds=600 Summary returns parameter counts and up to 20 unused parameter names, shared status, and purge candidates. detail="full" returns all parameter metadata with group IDs and groupName labels. ["*"] audits the first 200 editable families sorted by name; data.skipped lists each remaining name and reason, with skippedCount.
revit_parameter_fill_check categories, parameters, level=null, workset=null, view=null, sample_limit=20, include_types=true Count filled, empty and missing values; sample unitless element IDs.
revit_api_lookup query, kind="search", limit=25, include_inherited=false, include_obsolete=true, document=null, process_id=null Look up public types and members in the running Revit API.
revit_model_snapshot parameter_rules=null, document=null, process_id=null Read a schema version 1 project snapshot for batch audits.
revit_batch_start paths=null, folder=null, recursive=false, parameter_rules=null, years=null, open_timeout_minutes=null Start persistent read-only collection; see batch collection.
revit_batch_status run_id Read persisted run and model status.
revit_batch_cancel run_id Persist cancellation and stop unstarted models.
revit_batch_fetch run_id, output_dir Copy completed JSON snapshots to new local files.
revit_compare_link_datums link, kinds=null (grids and levels), name_map=null (no renames), prefix="", suffix="", level_offset_mm=0, reuse_matching=true, tolerance_mm=0.5 Compare link grids and levels with host datums without modifying the model.
revit_issue_register output_path, project, issues, pixel_size=900, document=null; no timeout arguments Write a new local .xlsx review register with documents, severity totals, category chart, element rows and snapshots.
revit_build_report snapshots_dir, output_path, previous_dir=null, findings=null; no Revit document or timeout arguments Build a local .xlsx report from schema-v1 snapshots.

Pinned elements

pinned is a built-in boolean field read from Element.Pinned. Use it in revit_query_elements fields and revit_aggregate_elements group_by. Filter it with parameter_filters=[{"parameter":"pinned","operator":"equals","value":"true"}] (or "false"). It also supports exists, empty and not-empty; the field always has a value. Returned values use value="true" or "false" and numericValue=1 or 0.

List sheets

revit_list_sheets(include_unplaced_views=True, offset=0, limit=200, document=None) reads the active or addressed document. It returns data.sheets[{id,number,name,titleBlock,revisionCount,viewportCount,viewIds}], data.unplacedViews[{id,name,viewType}], and data.total, data.offset, data.limit, data.hasMore. The response envelope includes skipped and skippedCount. Failed item reads are reported there.

Sheets include placeholders and sort by number, then ID. Paging applies only to sheets. The limit accepts 1 to 5000. Total counts all sheets, including skipped rows. The title block is the type name of the first title block by ID, or null. Revision count includes all revisions on the sheet. Viewport count excludes schedules. View IDs include viewport views, schedules, and panel schedules, sorted and deduplicated.

Unplaced views are returned in full on every page, sorted by ID. Setting include_unplaced_views=False returns an empty list. Templates, sheets, browsers, internal views, and walkthroughs are excluded. Printable plans, elevations, sections, details, drafting views, 3D views, legends, and renderings are eligible. User schedules and panel schedules are included only if they have no placement on any sheet. Internal keynote and title block revision schedules are excluded. A legend or schedule placed on any sheet is never unplaced. This read opens no transaction.

Snapshot report

snapshots_dir contains regular *.json files directly in that directory. Files are read in filename order. output_path is a client-machine .xlsx path; missing parent directories are created and an existing file is never overwritten. previous_dir, when supplied, follows the same input rules and matches models by passport.title. Duplicate titles are rejected. findings is an optional list with model, severity, rule, element_ids (or elementIds) and recommendation; IDs are integers.

The sheets appear in this order: Summary, Warnings, Families, Parameters, Skipped, optional Changes, Findings. Summary has one row per current snapshot and uses passport.fileLastWriteUtc for File system time: this is the OS-observed file timestamp, not a save or sync timestamp. Revit Server change and user cells are blank when that data is absent. Warning and parameter sample IDs are comma-separated; truncated warning IDs have a marker. Parameters and Changes percentages are numeric values. Changes subtracts previous values from current values, with weighted model fill percent computed as total filled divided by total elements across parameter rows. Models without a previous match have blank deltas. Findings is header-only when omitted. Every sheet freezes the header and has an auto-filter.

Sheet Columns
Summary Model, Saved-in year, Runtime year, Upgraded, Workshared, Number of saves, File system time, Revit Server last change, Revit Server last user, Elements, Views, Sheets, Families, Family types, Links, Warnings total, Families total, In-place families, Family signals, Skipped
Warnings Model, Warning, Count, Element IDs
Families Model, Family, Category, In-place, Editable, Type count, Instance count, Warning count, Signals
Parameters Model, Category, Parameter, Total, Filled, Empty, Missing, Fill percent, Sample IDs
Skipped Model, What, Reason
Changes Model, Warnings delta, Families delta, Fill percent delta, Number of saves delta
Findings Model, Severity, Rule, Element IDs, Recommendation

revit_model_snapshot accepts an ordered list of {"category": "Walls", "parameter": "Mark"} rules. Each rule pairs one category and one parameter. No rules return empty parameterFill.rows. Warning groups contain at most 200 distinct affected element IDs, with elementIdsTruncated showing whether more exist. Closed user worksets add a skipped entry because element, family instance, warning attribution, and parameter fill results can be incomplete. For an ordinary open document, source.path, saved-in year, and file metadata come from the document's source file. A detached interactive document has no usable source file; its snapshot contains one source file skipped entry with reason detached document has no source file, and file-derived fields remain empty. fileLastWriteUtc is an operating system file observation, not a Revit save or sync time. passport.revitServer is always null and reserved for the later batch runner.

The settings_xml path rejects device paths, .. segments and UNC shares absent from trustedNetworkRoots; files over 1 MiB are refused before reading.

link accepts one linked instance ID or a case-insensitive substring of its instance or type name; ambiguous and unloaded links fail. Comparison transforms link geometry into host coordinates and reports aligned, differs, missing_in_host, host_only or unsupported. A same-name host datum matches first; a coincident differently named datum may match by geometry. Distances are millimetres and angles are degrees. Geometric alignment does not create a monitor relationship or later Coordination Review warnings.

revit_view_info returns id, name, type, isTemplate, template with controlled parameter names, detail level, display style, discipline, phase and phase filter, scale, crop and 3D section box in millimetres. It also returns the background type and colours where supported, category class toggles, individually hidden categories, filter visibility and enabled flags, Revit link visibility, and active temporary mode flags. worksets is null outside workshared documents. Link graphic overrides are inspected on Revit 2024 and later; earlier versions report instance and category hiding.

Family audit

On an open .rfa, omit families; the audit reads that family without saving it. In a project, pass 1-200 exact family names (case-insensitive) or ["*"] for every editable loadable family. The add-in opens each family with EditFamily and closes it without loading it back. In-place, non-editable and missing families have a skipped result with a reason. A project transaction must be closed before the call.

Each parameter reports scope, shared GUID, group type ID, formula, reporting status and use. Associations, formula substrings and dimension or array labels count as use. Formula matching is deliberately over-inclusive. An unused shared parameter has dataCarrierRisk:true because project schedules and tags can still depend on its values.

purgeable groups Revit's unused-element candidates by category. Coverage is full in Revit 2024 and later. In Revit 2022-2023, coverage is families-and-types; materials, patterns and styles are not included.

Coordinator checks. Call revit_model_health → revit_links_status → revit_shared_coordinates → revit_parameter_fill_check(categories=["Walls","Doors"], parameters=["Mark","Comments"]) before an export or hand-over. Category and parameter names use the model language; the fill check accepts 1-20 categories, 1-30 parameters and a sample limit of 1-100. Coordinator location and link lists are capped at 100 without pagination; locations are sorted by name and links by ID. pinned and viewSpecific are true when any instance of the reported type qualifies. Parameter names resolve through LookupParameter(name), which returns the first match by name; GUID and BuiltInParameter selection are unavailable. Paged reads that exceed their 60-second add-in budget return partial:true regardless of the client timeout. Family audit uses its own response budget and reports each attempted family. Image exports (revit_export_view, revit_capture_elements) are not cut at the 60-second budget: a written PNG produces a complete result (success:true) and output_path is honored; the client/response timeout still applies.

Offsets are zero-based row counts (at least 0); limits are positive row counts (at least 1). revit_query_elements and revit_view_elements clamp limits above 5000 to 5000. Lengths use mm, areas m2 and volumes m3 where metric fields are provided. Other numeric filter values follow document display units; returned query values carry a unit field when available. See the feed format for the distinction between filter inputs and numeric outputs. Parameter names come from the model's language; use revit_list_catalog(section="parameters") before filtering. output_path is a new file path on the MCP client's machine and never overwrites an existing file. The path is resolved on the machine that runs the MCP server, which is the client's machine for local and SSH setups; a path from another machine is not translated.

revit_element_details returns geometry alongside parameters in data. revit_query_elements(include_geometry=True) adds the same fields to each element in the returned page. The query flag defaults to False; default queries omit geometry. All coordinates use model axes in millimetres rounded to one decimal place.

Field Contents
location Point: type:"point", xMm, yMm, zMm. Curve: type:"curve", startMm, endMm, lengthMm.
boundingBox minMm, maxMm, centerMm as [x,y,z] arrays from the element's model bounding box. Rooms use their own bounding box.
roomCenterMm [x,y,z] from a placed room's location. Use roomCenterMm when placing something inside a room. A bounding box centre may lie outside a nonrectangular room.

Unavailable geometry is omitted.

Action job polling

Long actions and revit_jobs waits send progress notifications when the client requests a progress token. revit_run_actions publishes data.progress.steps with completed, total, and current (the last attempted action kind) after each step, including a failed step. The existing data.steps array retains per-step results. Completed steps count attempted steps; the final committed and rolledBack fields determine whether changes remain in the model. Long actions may return status:"running", jobId, progress, and partial per-model results. Call revit_jobs(job_id=jobId, wait_seconds=40) until the original final action response is returned. The action may already have changed the model; do not resubmit it while it runs. Action results remain available for 24 hours across MCP server restarts; see result retention. See long action jobs for cancellation and retention.

Issue register

output_path requires a new .xlsx path on the MCP server machine. Parent directories are created; existing files are refused before contacting Revit. project accepts optional string fields name, model, reviewer, client, stage, date and a documents list of {title, reference, revision} objects. issues requires 1-60 objects with title, category, finding and severity (critical, major, minor, info). Optional fields are id (default ISS-001 onwards), requirement_source, requirement, recommendation, status (default Open), responsible, due, element_ids (up to 500 positive integers) and snapshot (3d, plan, none). Categories are free text; typical values are Information standard, Naming, Level of information need, Model health, Coordinates and levels, Classification, Spatial and Geometry. Snapshots default to 3d with element IDs and none otherwise. The workbook contains Cover, Summary, Register and Elements. The finding cell contains the issue title and finding; snapshots occupy the final column. Captures run sequentially for the first 25 eligible issues in severity order, with stable input order for ties. The remaining issues receive Snapshot skipped: limit of 25 per register. A 210-second capture budget reserves time within the 240-second client limit for writing the workbook. A capture failure receives Snapshot unavailable: <reason> and does not fail the register. Result fields are path, issueCount, snapshotCount, bySeverity and warnings.

Saved health report

revit_model_health(output_path="C:\\Reports\\health.xlsx") writes a new workbook on the machine running the MCP server. outputPath is an alias for output_path. The path must end in .xlsx, its parent directory must exist, and an existing file is refused. Without output_path, the response is unchanged. With output_path, the response adds workbook with path, snapshotCount and warnings. The workbook contains Health, Warnings and Counts sheets. All warning groups include affected element IDs; snapshots cover up to five groups with the highest counts, with at most 50 elements per capture. The total capture budget is 60 seconds; failed or skipped captures become warnings.

The Health sheet uses the following default review thresholds. These are review defaults, not project requirements. Unavailable metrics receive Review status.

Check Pass threshold
Warnings 0
Views not on sheets At most 20% of all views; 0% when there are no views
Unused family types At most 300
In-place families 0
CAD imports 0
Unplaced rooms 0
Rooms not enclosed 0
Design options 0 at the stage under review
Images At most 20
Model groups At most 50

Errors and refusals

Every tool follows one rule.

Case What the client gets
Invalid, missing or unknown argument, unknown batch run, unknown document, command execution timeout, failed read An MCP tool error (isError) with a message.
Unavailable SSH, named pipe, or HTTP transport A normal result with success:false, command, error, errorCode:"transport_unavailable", and retryable:true.
A refused or failed action, including read-only mode A normal result with success:false, command, error and errorCode.
An action that needs confirmation success:true with data.needsConfirmation:true, confirmationText and confirmToken. This is not an error.

A tool rejects an argument it does not declare and names it. If the argument is a former name, the message names the new one. Documented aliases such as timeoutSeconds are accepted.

Read errorCode for programmatic handling. Read-only messages identify the workstation lock and explain how to remove it.

errorCode Meaning
read_only Refused because the workstation user lock is on. The message names ribbon, chat, or file, its UTC time, and removal options.
policy_blocked Refused by the machine policy an administrator set, for example a denied tool or disabled code execution. error starts with Blocked by organization policy:. See the policy reference.
transport_unavailable Revit cannot be reached over SSH, a named pipe, or HTTP. retryable is true. Retry when the workstation or tunnel is back.
action_failed The add-in tried the action and reported a failure. error holds the add-in's message.

New codes can appear in a minor release; treat an unknown code as a failed action. A timed-out action is a tool error, not a result: the action may have changed the model, so inspect it before retrying. The same rule covers revit_undo_last, revit_cancel_job, revit_batch_start and revit_batch_cancel. The last two start and stop Revit processes, so they are refused in read-only mode like any action; revit_batch_status and revit_batch_fetch stay available.

Model audits

Tool Purpose
revit_model_audit Read one addressed model against local YAML or JSON rules, inline rules or a builtin pack. Save immutable results and compare with earlier results. Toolset: read.
revit_audit_report Build new XLSX and self-contained HTML files from a local audit result without Revit. Toolset: batch.

See Model audit for rule examples, packs, evidence limits, statuses, history paths and report columns. revit_model_audit accepts rules, rules_inline, compare_with="previous", save=true, timeout_seconds, document and process_id. revit_audit_report accepts audit, output and format="both" (xlsx, html or both).

For revit_issue_register, audit findings map to issues through the pure Python helper audit.to_register_issues(result): title stays title, category comes from pack, finding describes measured value and threshold, severity stays severity, and requirement_source and requirement come from reference. Only failed findings and partial findings with observed violations become issues. The existing register limits remain in force.

My tools

My tools stores parameterized C# procedures on the Revit workstation. The saved tool commands belong to the code toolset.

Tool Purpose
revit_save_tool Compile and store a confirmed revision.
revit_list_tools List saved tools on the workstation.
revit_get_tool Read a saved tool and its parameter schema.
revit_run_tool Execute a saved revision with validated arguments.
revit_delete_tool Delete a saved tool after confirmation.

List and get carry readOnlyHint; save and delete require confirmation, and run follows the saved mode and execute_code confirmation flow. Every saved tool command is unavailable wherever execute_code is disabled.