create_line_based_element
Create line-based elements like walls, beams, or pipes in Revit by specifying coordinates, dimensions, and parameters for batch modeling tasks.
Instructions
Create one or more line-based elements in Revit such as walls, beams, or pipes. Supports batch creation with detailed parameters including family type ID, start and end points, thickness, height, and level information. All units are in millimeters (mm).
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| data | Yes | Array of line-based elements to create |
Implementation Reference
- The handler function that executes the tool logic by forwarding parameters to the Revit client using sendCommand.async (args, extra) => { const params = args; try { const response = await withRevitConnection(async (revitClient) => { return await revitClient.sendCommand( "create_line_based_element", params ); }); return { content: [ { type: "text", text: JSON.stringify(response, null, 2), }, ], }; } catch (error) { return { content: [ { type: "text", text: `Create line-based element failed: ${ error instanceof Error ? error.message : String(error) }`, }, ], }; } } );
- Input schema using Zod for validating the array of line-based element parameters.{ data: z .array( z.object({ name: z .string() .describe("Description of the element (e.g., wall, beam)"), typeId: z .number() .optional() .describe("The ID of the family type to create."), locationLine: z .object({ p0: z.object({ x: z.number().describe("X coordinate of start point"), y: z.number().describe("Y coordinate of start point"), z: z.number().describe("Z coordinate of start point"), }), p1: z.object({ x: z.number().describe("X coordinate of end point"), y: z.number().describe("Y coordinate of end point"), z: z.number().describe("Z coordinate of end point"), }), }) .describe("The line defining the element's location"), thickness: z .number() .describe( "Thickness/width of the element (e.g., wall thickness)" ), height: z .number() .describe("Height of the element (e.g., wall height)"), baseLevel: z.number().describe("Base level height"), baseOffset: z.number().describe("Offset from the base level"), }) ) .describe("Array of line-based elements to create"), },
- src/tools/create_line_based_element.ts:5-81 (registration)Registration function that sets up the tool on the MCP server with name, description, schema, and handler.export function registerCreateLineBasedElementTool(server: McpServer) { server.tool( "create_line_based_element", "Create one or more line-based elements in Revit such as walls, beams, or pipes. Supports batch creation with detailed parameters including family type ID, start and end points, thickness, height, and level information. All units are in millimeters (mm).", { data: z .array( z.object({ name: z .string() .describe("Description of the element (e.g., wall, beam)"), typeId: z .number() .optional() .describe("The ID of the family type to create."), locationLine: z .object({ p0: z.object({ x: z.number().describe("X coordinate of start point"), y: z.number().describe("Y coordinate of start point"), z: z.number().describe("Z coordinate of start point"), }), p1: z.object({ x: z.number().describe("X coordinate of end point"), y: z.number().describe("Y coordinate of end point"), z: z.number().describe("Z coordinate of end point"), }), }) .describe("The line defining the element's location"), thickness: z .number() .describe( "Thickness/width of the element (e.g., wall thickness)" ), height: z .number() .describe("Height of the element (e.g., wall height)"), baseLevel: z.number().describe("Base level height"), baseOffset: z.number().describe("Offset from the base level"), }) ) .describe("Array of line-based elements to create"), }, async (args, extra) => { const params = args; try { const response = await withRevitConnection(async (revitClient) => { return await revitClient.sendCommand( "create_line_based_element", params ); }); return { content: [ { type: "text", text: JSON.stringify(response, null, 2), }, ], }; } catch (error) { return { content: [ { type: "text", text: `Create line-based element failed: ${ error instanceof Error ? error.message : String(error) }`, }, ], }; } } ); }