Skip to main content
Glama
pzfreo

build123d-mcp

recognise_features

Read-only

Identify and inventory editable features (holes, bosses, blends) in a 3D model, returning exact face handles for targeted edits.

Instructions

Run the shared quiddity inventory once and return exact, run-local edit evidence. With families='' the response is a compact inventory and targetable-family count; pass comma-separated families such as 'holes,bosses,blends' for structured records and @feature handles. Returned handles are usable inside execute() as recognition_faces(handle), or recognition_faces(handle, role='defining'), and fail if their source geometry has been replaced. coordinate_frame='caller' (default) preserves the imported model coordinates used by edit instructions; 'part' uses a rigid-equivariant part-relative frame and returns that frame. include_faces adds exact caller-face indices and geometry descriptors. max_features limits expanded records to 1..100; counts remain exact.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
familiesNo
object_nameNo
max_featuresNo
include_facesNo
coordinate_frameNocaller

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
resultYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Addedv0.3.90

TDQS

A4.1/5.0
Behavior4/5

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

The readOnlyHint annotation already covers the safe read nature; the description adds valuable behavior beyond that: it discloses that handles fail if source geometry is replaced, explains the difference between coordinate frames ('caller' vs. 'part'), and notes that counts remain exact when max_features is set. This goes beyond the annotation without contradicting it.

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?

The description is a single dense paragraph but is efficiently packed with necessary information. The main purpose is stated first, followed by mode distinctions and usage details. It avoids fluff, though it could be broken into bullet points for readability. Still, every sentence adds value and the structure is logical.

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?

Given the presence of an output schema (which is not shown but noted), the description need not detail return structures. It covers the key behaviors: default family behavior, handle usage in execute(), failure conditions, coordinate frame semantics, and max_features limits. The only minor gap is a lack of explicit mention of what happens when object_name is provided, but overall it is complete enough for an agent to call the tool correctly.

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 schema description coverage at 0%, the description carries the full burden for parameter meaning. It explains families (empty vs. comma-separated), coordinate_frame (caller vs. part), include_faces (adds caller-face indices and geometry descriptors), and max_features (limits expanded records to 1..100). It does not explicitly describe object_name, but that parameter is likely self-explanatory given the tool name. Overall, it compensates well for the missing schema descriptions.

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?

The description clearly states a specific action ('run the shared quiddity inventory once') and a specific output ('exact, run-local edit evidence'), and explains two distinct modes (empty families vs. specified families). It distinguishes itself from sibling tools like find_holes or find_bosses by describing a general inventory + feature-recognition operation with @feature handles, which is a unique capability. No tautology or ambiguity.

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

Usage Guidelines3/5

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

The description provides usage context (e.g., how to select families, coordinate frames, and handle use inside execute()), but it does not explicitly state when to prefer this tool over alternatives such as find_holes or find_bosses. It implies a broader role ('shared quiddity inventory') but lacks explicit exclusions or comparisons to siblings, leaving some choice to inference.

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