Skip to main content
Glama
sharafutdinovdi

Revit Model MCP

Place Family

revit_place_family
Destructive

Place a loaded unhosted Revit family on a named level at specified XY coordinates for layout, with optional rotation and dry-run verification.

Instructions

Place a loaded unhosted family on a named level for layout.

family accepts a family name or Family: Type, case-insensitively. null type_name uses the embedded type or the first type. Conflicting types are rejected. Missing families return similar names with categories. Model XY is in millimetres and Z rotation in degrees. Use roomCenterMm when placing something inside a room.

dry_run executes and rolls back, returning the same verification block without changing the model. Pass document to address a specific open model when several are open; an unknown or ambiguous reference is rejected.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
x_mmYes
y_mmYes
levelYes
familyYes
dry_runNo
documentNoCase-insensitive substring of the target open document's title or file name. Required to disambiguate when the Revit process has more than one document open; omit only when a single document is open (the active document is used). An unknown or ambiguous reference is rejected before any change.
type_nameYes
rotation_degNo

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. Addedv0.7.0

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag a non-read-only, non-idempotent, destructive operation; the description adds real behavioral detail beyond them — dry_run executes then rolls back and returns the same verification block, unknown/ambiguous document references are rejected before any change, and missing families return similar names with categories. It stops short of explaining what a placement disrupts or how existing geometry is affected.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core operation in one sentence, then uses short paragraphs for name resolution, units, dry_run, and document disambiguation. Efficient overall, though the phantom roomCenterMm line is wasted/inaccurate content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 8-parameter, 5-required mutation tool with rich annotations and an output schema, the description covers the highest-risk semantics — naming/type resolution, units, dry-run rollback, and document targeting. It leaves level semantics and failure/rollback behavior for real (non-dry-run) placements unexplained, and the schema-absent roomCenterMm mention slightly undercuts completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With only 13% schema description coverage, the description carries the burden well: it documents family ('name' or 'Family: Type', case-insensitive), type_name null semantics and type-conflict rejection, XY units in millimetres, and rotation in degrees. However, it references 'roomCenterMm', a parameter that does not exist anywhere in the input schema, which could mislead an agent attempting that argument.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Place a loaded unhosted family on a named level') plus the purpose ('for layout'), which cleanly separates it from siblings like revit_move, revit_edit_families, and revit_list_instances. An agent can identify the operation without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete usage conditions: null type_name falls back to the embedded/first type, conflicting types are rejected, missing families return near-matches, dry_run rolls back, and document must be passed to disambiguate multiple open models. It does not, however, say when to prefer this over alternatives such as revit_batch or revit_move for positioning.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.