Skip to main content
Glama

fillet_edges

Applies a fillet (round) to specified edges of a 3D part by a given radius, validating the result to avoid corrupt geometry.

Instructions

Fillet edges of a shaped Part object. edges accepts tags (e_... from list_edges, preferred), 'EdgeN' strings, or bare 1-based ints. radius is the blend radius in mm (> 0).

Every result is validated before a handle comes back (issue #283): this OCC build's fillet is edge- and order-sensitive enough to produce corrupt geometry with no exception at all — a 20 mm cube filleted on all 12 edges at r=11 returns one solid with a LARGER volume and a 13 mm larger bounding box. The checks are Shape.isValid(), an unchanged solid count, and no growth of the tight bounding box (a fillet only removes or holds the envelope).

per_edge: skip the single-shot apply and add the edges one at a time, validating after each. Slower (one recompute per edge); for geometry already known to be blend-hostile. allow_partial: accept a partial result instead of aborting. Off by default.

Returns {handle, name, volume (mm^3), edges (the 1-based indices actually filleted), checks {valid, solids, envelope_ok, envelope_growth_mm, envelope_tol_mm}, mode ('batch' | 'per_edge'), partial}. When partial is True the reply also carries skipped_edges and a warnings entry saying the solid is NOT the part that was asked for.

On failure the handler retries per edge to find the culprits, removes the failed feature from the document and raises BlendCheckFailed naming the offending edges and the subset that does fillet cleanly. It never returns a handle to corrupt geometry, and never quietly drops a fillet unless allow_partial was asked for.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
edgesYes
handleYes
radiusNo
per_edgeNo
allow_partialNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.5/5.0
Behavior5/5

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

With no annotations, the description carries the entire burden and does so richly: it discloses validation gates (isValid, solid count, envelope growth), the silent-corruption failure mode, the per-edge retry-and-raise behavior on failure, and the guarantee that no handle to corrupt geometry is ever returned. This is far beyond what a schema or annotation would convey.

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 and parameter formats, then behavior. It is dense but a couple of passages (the 20 mm cube anecdote, restating the envelope rule) run longer than needed, though the concrete example does earn some of its space by illustrating the failure mode.

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?

No output schema exists, yet the description fully specifies the return dict (handle, name, volume, edges, checks, mode, partial plus skipped_edges/warnings), and covers mutation, partial-result, and failure semantics. An agent has everything needed to call and interpret this tool.

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

Parameters5/5

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

Schema description coverage is 0%, so the description must compensate — and it does: `edges` accepts tags/'EdgeN'/bare 1-based ints (tag preferred), `radius` is mm and must be > 0, and both booleans have their semantics and defaults explained. Each documented parameter gains meaning absent from the bare schema.

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

Purpose4/5

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

States a specific verb+resource ('Fillet edges of a shaped Part object') and immediately specifies the accepted edge identifier formats, which pins down exactly what the tool operates on. It does not differentiate itself from the sibling fillet/chamfer tools (partdesign_fillet, chamfer_edges), so it falls short of the top mark.

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?

The per_edge and allow_partial options carry explicit when-to-use guidance ('for geometry already known to be blend-hostile', 'accept a partial result instead of aborting'). It never names an alternative tool or states when not to fillet at all, so it stops short of full routing 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