Skip to main content
Glama
hellstein-dev

fusion-mcp

feature_extrude

Extrude sketch profiles, planar faces, or sketch text into a solid, surface, or thin wall; use cut, join, or intersect operations to modify existing bodies.

Instructions

Extrude sketch profiles, planar faces or sketch texts into a solid (or cut/join/ intersect existing bodies).

Units: plain-number lengths are in units (default mm), angles in degrees; a string is a Fusion expression ("wall * 2", "5 deg") and keeps the feature driven by it. Refs: profiles from sketch_draw / sketch_profiles ("profile:@x,y") or {"sketch": , "all": true}; planar faces and to_entity targets from inspect_query; planes from construction_plane or origin:XY|XZ|YZ; sketch texts from sketch_draw (kind "text"). Refs to faces/bodies go stale after later features - take them from the latest results.

Modes:

  • one_side: side1 + direction (positive = sketch normal) + taper1;

  • two_sides: side1 and side2 independent (each its own extent and taper);

  • symmetric: side1 must be a distance; symmetric_full_length picks total vs half. A negative distance extrudes the other way. operation="cut" with through_all and direction="negative" cuts down through a body below the sketch.

Surface: is_solid=false extrudes a surface body (operation new_body / new_component, no thin); profiles may then also be open sketch curve refs or edge refs (one kind, connected curves are chained) - e.g. an open line becomes a wall sheet.

Errors: wrong field for the mode or a wrong entity kind -> INVALID_PARAMS (nothing changed); a stale profile point -> ENTITY_NOT_FOUND with details.profiles (current profiles); a feature Fusion computes with an error -> FUSION_API_ERROR and the timeline is rolled back. A warning keeps the feature and is reported in health.

Returns {"feature": {ref, type, name}, "health": {"state": ok|warning|error|unknown, "message"}, "created_bodies": [{ref, type, name}], "modified_bodies": [{ref, type, name}], "removed_bodies": [<refs of bodies consumed by join/cut>], "component"?: {ref, type, name} (new_component only)}. Body geometry is not repeated: describe the bodies with inspect_* if needed.

Examples:

  • feature_extrude(profiles=["profile:@10,10"], side1={"type": "distance", "distance": 20})

  • feature_extrude(profiles=[...], operation="cut", side1={"type": "through_all"}, direction="negative")

  • feature_extrude(profiles=[...], mode="symmetric", side1={"type": "distance", "distance": 40}, symmetric_full_length=true, thin={"thickness": 2, "location": "center"})

Input Schema

NameRequiredDescriptionDefault
modeNoone_side (default), two_sides or symmetricone_side
thinNoThin wall instead of a solid: {"thickness", "location": side1|side2|center, "thickness2"? (two_sides)}
side1Yes{"type": "distance", "distance"} | {"type": "to_entity", "entity", "offset"=0, "chained"=true} | {"type": "through_all"}
side2NoSecond side extent; required for two_sides only
startNoWhere the extrude starts: {"type": "profile_plane"} (default) | {"type": "offset", "offset"} | {"type": "entity", "entity", "offset"=0}
unitsNoUnit of plain-number lengths and pointsmm
taper1NoTaper of side 1, degrees
taper2NoTaper of side 2, degrees (two_sides only)
is_solidNotrue (default) = solid; false = surface body (new_body / new_component only; close surfaces with surface_stitch, check is_solid)
profilesYesProfiles to use: 'profile:<sketch>@x,y' refs from sketch_profiles / sketch_draw, {"sketch", "point"} / {"sketch", "curves"} / {"sketch", "all": true}, or planar face refs (inspect_query)
directionNoone_side only: positive (default, along the sketch normal) or negative
operationNonew_body (default), join, cut, intersect or new_componentnew_body
participant_bodiesNoBody refs join/cut/intersect act on (default: every body it touches); not allowed with new_body / new_component
symmetric_full_lengthNosymmetric only: true = side1.distance is the total length, false = length of each half

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.1.0

TDQS

A4.6/5.0
Behavior5/5

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

With no annotations, the description carries the full burden and does: it discloses failure modes and side effects (INVALID_PARAMS changes nothing, ENTITY_NOT_FOUND returns current profiles, FUSION_API_ERROR rolls the timeline back, a warning keeps the feature and reports in `health`), plus the critical ref-staleness caveat after later features. This is exactly the behavioral context an agent cannot infer from the schema.

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-loaded with purpose then sectioned into Units, Refs, Modes, Surface, Errors, Returns, Examples, which is easy to scan. It is long and the Examples section largely restates what the Modes bullets already say, so a little trimming is possible, but nearly every sentence earns its place given 14 parameters.

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

Completeness5/5

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

For a 14-parameter, high-complexity feature tool with no output schema, the description documents the full return object (feature ref, health state/message, created/modified/removed bodies, optional component) and even tells the agent body geometry must be fetched via inspect_*. Nothing an agent needs to invoke or interpret results is missing.

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?

Schema coverage is 100%, so the baseline is 3, but the description adds cross-parameter semantics the schema does not encode: negative distance reverses direction, symmetric requires side1 be a distance, side2 applies only to two_sides, symmetric_full_length picks total vs half, and a string value becomes a driven Fusion expression. The units/string-vs-number convention is also restated usefully.

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?

Opens with a specific verb plus resource ('Extrude sketch profiles, planar faces or sketch texts into a solid') and immediately scopes the operation variants (cut/join/intersect) that distinguish it from feature_revolve/sweep/loft siblings. An agent can tell exactly what this tool produces 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?

Explicitly maps the three modes to their required fields and gives condition-dependent advice ('operation="cut" with through_all and direction="negative" cuts down through a body below the sketch', 'is_solid=false ... no thin'). It explains where refs come from and how to get them, but never names an alternative sibling tool (e.g. feature_revolve) as the choice when profiles are non-planar, so it stops short of full when-not guidance.

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

Deploy Server

Other Tools