MCP_CAD
Provides tools for SOLIDWORKS automation, including part, assembly, configuration, drawing, inspection, and verification operations, plus reusable automation plans.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@MCP_CADcreate a new rectangular part: 100 x 50 x 20 mm"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
MCP_CAD
MCP_CAD is a local Model Context Protocol (MCP) server for controlled SOLIDWORKS automation. It exposes typed operations for parts, assemblies, configurations, drawings, inspection, verification, and reusable automation plans.
The core server communicates over standard input/output and can be used by any MCP client that supports local stdio servers. It does not require a particular model provider.
SOLIDWORKS is proprietary software and is not included with MCP_CAD. A licensed local installation is required for live CAD operation. This project is independent and is not affiliated with, endorsed by, or sponsored by Dassault Systèmes or SOLIDWORKS.
What is included
A Python MCP server built with FastMCP.
A constrained
SolidWorksClientprotocol with three execution backends.Part, assembly, configuration, drawing, inspection, and verification tools.
Record-review-run plans for repeatable assembly, batch, and macro workflows.
A local part index for reuse-oriented searches.
A deterministic in-memory mock for development without SOLIDWORKS.
An optional C# in-process add-in backend.
Call the MCP tool list_capabilities for the authoritative runtime tool inventory. See docs/TOOLS.md for detailed tool documentation.
Related MCP server: SolidworksMCP-python
Execution backends
Backend | Selection | Platform and purpose |
Mock |
| In-memory development and automated tests. Does not open or modify SOLIDWORKS files. |
pywin32 COM | Default | Live Windows backend. Drives a running local SOLIDWORKS process out of process through COM. |
C# add-in |
| Opt-in Windows backend. Routes implemented operations to the in-process add-in through a local named pipe and falls back to pywin32 COM for operations not yet ported. |
The public tool surface uses millimetres for lengths and degrees for angles. Conversion to SOLIDWORKS-native units occurs at the backend boundary.
Some inputs accept localized SOLIDWORKS entity names, including English and Spanish default plane names. This is a compatibility feature for installations using different UI languages; the project documentation and API guidance use neutral English.
Requirements
For the core MCP server:
Python 3.10 or newer.
uvfor the documented environment and run commands.An MCP client that can start a local stdio server.
Windows, a licensed local SOLIDWORKS installation, and
pywin32for live operation.
macOS and Linux can run the mock backend for development, but cannot use the live COM backends.
Install
Clone the repository, then install the core server:
git clone <repository-url> MCP_CAD
cd MCP_CAD
uv syncStart the server directly in mock mode to confirm that the Python entry point loads:
MCP_CAD_USE_MOCK=1 uv run mcp_cadPowerShell equivalent:
$env:MCP_CAD_USE_MOCK = "1"
uv run mcp_cadThe process waits for MCP messages on standard input. It is normal for it to appear idle when launched without an MCP client.
Configure an MCP client
Configure your client to run uv run mcp_cad with this repository as its working directory. The exact configuration location and property names depend on the client. A common stdio-server shape is:
{
"mcpServers": {
"mcp_cad": {
"command": "uv",
"args": ["run", "mcp_cad"],
"cwd": "C:\\path\\to\\MCP_CAD"
}
}
}For a development session without SOLIDWORKS, add MCP_CAD_USE_MOCK=1 using the environment-variable syntax supported by your MCP client. Do not put model-provider API keys in the MCP_CAD server configuration; the core server does not need one.
Restart the MCP client after changing its server configuration. Then invoke:
list_capabilitiesto confirm tool discovery.verify_setupto identify the active backend and check the SOLIDWORKS connection.
An inactive-document warning from verify_setup is expected when no part or assembly is open.
Live SOLIDWORKS setup
Install the project on the Windows workstation that runs SOLIDWORKS.
Make sure
MCP_CAD_USE_MOCKis not set.Start SOLIDWORKS and open a part or assembly.
Start or restart the MCP client.
Invoke
verify_setup.
The default live path is the out-of-process pywin32 COM backend. The C# add-in is optional; see addin/README.md for build, registration, verification, and removal instructions.
Privacy and safety boundary
MCP_CAD runs locally and exposes a bounded set of CAD operations; it does not itself provide a hosted model service. However, an MCP client or model provider may receive prompts, tool arguments, tool results, captured images, filenames, metadata, or other context that the client chooses to send. Review the client and provider configuration before using confidential designs.
The server does not make every operation read-only. Use source control or normal CAD backups, review tool calls, and test unfamiliar workflows on copies. Approval behavior is controlled by the MCP client or agent loop; do not assume every third-party MCP client will request confirmation before a mutating call.
Arbitrary VBA execution is disabled by default. Enabling it with
MCP_CAD_ENABLE_UNSAFE_MACROS=1 accepts code-execution risk; source review and
token scanning are not a sandbox.
Development
Lint and confirm the mock backend loads:
uv sync
uvx ruff check .
MCP_CAD_USE_MOCK=1 uv run mcp_cadtools/addin_ping.py requires a live SOLIDWORKS session with the add-in enabled and must be run explicitly.
When adding a CAD operation, keep the protocol seam aligned:
Add the method to
SolidWorksClient.Implement deterministic mock behavior.
Implement the pywin32 COM behavior.
If appropriate, add or port the operation in the C# add-in.
Expose the operation as an MCP tool.
Useful references:
docs/TOOLS.md — tool arguments, results, and workflows.
docs/DESIGN_GUIDE.md — part and assembly build/verification workflow.
docs/DEPLOYMENT.md — installation, configuration, troubleshooting, updates, and removal.
addin/README.md — optional in-process backend.
docs/ARCHITECTURE.md — component boundaries and runtime flow.
CONTRIBUTING.md — development and pull-request guidance.
SECURITY.md — private reporting and security boundaries.
NOTICE — trademark and third-party dependency notices.
License
Licensed under the Apache License, Version 2.0. Third-party
components retain their own licenses — see NOTICE.
Available Tools
100 toolsactivate_configurationA
Activar otra configuración del documento activo.
El cambio dispara un rebuild: las supresiones y dimensiones definidas para la configuración objetivo se aplican. Útil para verificar que una variante construida con build_variant_family se ve correcta antes de guardar. [en: Switch the active document to a different configuration. The switch triggers a rebuild — suppressions and dimension values defined for the target config take effect. Useful to verify a variant built with build_variant_family looks right before saving.]
Args: name: Name of the configuration to activate.
Returns the previously-active configuration name.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses that activation triggers a rebuild, applies suppressions and dimension values, and returns the previous configuration name. No annotations exist, so the description fully carries the burden.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Concise bilingual description with front-loaded main action, then details, use case, and parameter doc. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Fully covers the tool's behavior, return value, and use case. No output schema, but description explains return. Complete for a simple tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Describes the single parameter 'name' as 'Name of the configuration to activate', adding meaning beyond the schema's type string. Schema coverage is 0% but the description compensates.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the verb "activate" and resource "configuration" clearly, and distinguishes from siblings like create_configuration or delete_configuration by specifying the action of switching and the rebuild trigger.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly mentions the use case: verify a variant built with build_variant_family before saving. Provides context but does not list conditions when not to use or alternatives other than build_variant_family.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_angle_mateA
Mate de ángulo — fuerza un ángulo fijo entre dos entidades.
Uso típico autopartes: articulaciones de eslabón (cadena, bisagra), posiciones angulares de palancas y brazos, configuraciones rotadas de subconjuntos. Las dos entidades deben ser PLANARES (caras planas o planos de referencia) o EJES — no se puede aplicar un mate de ángulo entre dos caras cilíndricas concéntricas. [en: Add an angle mate (fixed angular offset) between two entities. Typical use: chain-link articulation, hinge angles, lever/arm rotational positions, rotated subassembly configs. Both entities must be PLANAR (planar faces or reference planes) or AXES — angle mates cannot be applied between two concentric cylindrical faces.]
Args: angle_deg: The fixed angle to enforce, in degrees. Positive rotates per SW's right-hand-rule about the inferred axis. Other args: same as add_concentric_mate.
Returns the created mate's metadata (including angle_deg).
Gotcha: if both selected entities are coplanar, SW's solver may reject the mate (over-defined). Choose entities that share a rotation axis but aren't already parallel at angle 0°.
Related: add_mate_by_face_position (no-entity-name convenience for coincident/distance only — angle mates still need entity strings).
| Name | Required | Description | Default |
|---|---|---|---|
| align | No | ALIGNED | |
| angle_deg | Yes | ||
| entity1_id | Yes | ||
| entity2_id | Yes | ||
| component1_name | Yes | ||
| component2_name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description reveals behavioral traits: it enforces a fixed angle, uses right-hand-rule for rotation direction, and warns about solver rejection for coplanar entities. It also hints at parity with add_concentric_mate. Some details like permissions or side effects are omitted, but the disclosure is substantial.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is moderately long with bilingual text (Spanish and English), which adds redundancy. It is structured with sections (typical use, args, returns, gotcha, related) but could be more concise by removing the Spanish section or merging it. Every sentence provides value, but the bilingual duplication reduces efficiency.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 0% schema coverage and no output schema, the description covers the return metadata and mentions a key gotcha. However, it fails to document most parameters (5 out of 6 are vague). It does differentiate from sibling tools adequately. Coverage gaps leave the agent underinformed for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so description must compensate. It explains angle_deg (degrees, rotation rule). However, it defers other parameters to 'same as add_concentric_mate' without referencing that tool's description. The remaining 5 parameters (component names, entity IDs, align) are not explained, leaving significant ambiguity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it adds an angle mate (fixed angular offset) between two entities. It uses specific verbs and resources, and distinguishes from sibling tools like add_coincident_mate and add_concentric_mate through typical use cases and entity type restrictions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly provides typical uses (chain-link, hinge angles, etc.), required entity types (planar or axes), forbidden cases (concentric cylindrical faces, coplanar entities), and mentions a related tool (add_mate_by_face_position) for alternative usage. This offers clear when-to-use and when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_bolt_circleA
Agregar un círculo de pernos — N barrenos en círculo, en una operación.
Composes a single sketch with N circles placed at (cx + r·cos θ, cy + r·sin θ) plus one extrude_cut. Sketch-based (not feature-pattern- based) so it works for any center position — not restricted to origin-centered geometry.
Args: plane: Sketch plane. Same name conventions as other composites. center_x_mm, center_y_mm: Center of the bolt circle in sketch coords. circle_diameter_mm: Diameter of the bolt circle (the imaginary circle the BOLT CENTERS sit on — NOT the individual hole diameter). Must be > 0 and > hole_diameter_mm. hole_count: Total number of holes (3..24 typical). Must be >= 3. hole_diameter_mm: Individual through-hole diameter. Must be > 0 and < circle_diameter_mm. angle_offset_deg: Rotation of the first hole from the +X axis. Default 0 = first hole on the +X side. Useful for aligning bolt patterns to existing geometry. end_condition: "through_all" (default) or "blind" with depth_mm. depth_mm: Required when end_condition="blind". reverse_direction: Flip the cut direction (escape hatch for when the parent body sits on the opposite side of the sketch plane and the holes would cut into air). Same semantics as extrude_cut. target_bodies: Restrict the cut to these body names (from get_active_part_info "bodies"); None lets SW cut every body the holes intersect — pass a list to scope a through pattern in a multi-body part.
Returns the resulting Cut-Extruir Feature info (single feature for all N holes — they share one sketch).
Caveat: NOT parametric. Changing hole_count requires deleting the feature and re-running the composite. For parametric counts use create_reference_axis + circular_pattern (origin-only axes for now).
Example — 6-bolt M8 clearance (8.5mm) on a O60mm bolt circle, Top plane: add_bolt_circle("top", 0, 0, 60, 6, 8.5)
| Name | Required | Description | Default |
|---|---|---|---|
| plane | Yes | ||
| depth_mm | No | ||
| hole_count | Yes | ||
| center_x_mm | Yes | ||
| center_y_mm | Yes | ||
| end_condition | No | through_all | |
| target_bodies | No | ||
| angle_offset_deg | No | ||
| hole_diameter_mm | Yes | ||
| reverse_direction | No | ||
| circle_diameter_mm | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since no annotations are provided, the description fully discloses behavior: it creates a single sketch with all holes and a single extrude cut, returns feature info, and highlights that it is not parametric. It explains reverse_direction and target_bodies, and the caveat that changing hole_count requires deletion and re-run.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a brief summary, detailed args, caveats, and an example. It is front-loaded with the main purpose. However, it is somewhat verbose due to the level of detail required for 11 parameters, but it earns its length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (11 parameters, no annotations, no output schema), the description is very complete. It explains the return value (single feature info), all parameter constraints, and provides usage context (e.g., alignment, scoping cuts with target_bodies).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema coverage, the description provides detailed parameter explanations in an Args section, including constraints (e.g., hole_count >=3, circle_diameter > hole_diameter), defaults, and when parameters are required (depth_mm when end_condition='blind'). This fully compensates for the lack of schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it adds a bolt circle by composing a sketch with N circles placed on a circle and then an extrude cut. It distinguishes itself from feature-pattern-based approaches, noting it's sketch-based and works for any center position.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use (sketch-based, any center position) and when not to use (not parametric; for parametric counts use circular_pattern). It provides a concrete example and explains parameters like angle_offset_deg for alignment.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_coincident_mateA
Mate coincidente — empareja dos entidades planas (caras o planos).
Uso típico autopartes: cara-contra-cara entre brida y placa, plano base de un sub-ensamble contra el plano de montaje del ensamble principal. Mismo formato de argumentos que add_concentric_mate. [en: Add a coincident mate between two planar entities. Typical use: flange-to-plate face contact, sub-assembly base plane against the parent assembly's mounting plane. Same argument shape as add_concentric_mate.]
Related: add_mate_by_face_position (no-entity-name convenience), stack_components (3 mates in one call).
| Name | Required | Description | Default |
|---|---|---|---|
| align | No | ALIGNED | |
| entity1_id | Yes | ||
| entity2_id | Yes | ||
| component1_name | Yes | ||
| component2_name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It only describes what it does without mentioning side effects, permission requirements, error conditions, or consequences (e.g., mate suppression). This is insufficient for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is brief and front-loaded with the core purpose. Every sentence adds value, avoiding unnecessary details. The bilingual format is efficient for the context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Without output schema, annotations, or parameter descriptions, the description leaves significant gaps. It covers purpose and typical use but lacks behavioral, parameter, and result information. For a tool with 5 parameters and no schema coverage, more is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the description does not explain any parameter meaning. It only notes 'same argument shape as add_concentric_mate', which is vague. The 'align' parameter's default is unelaborated. Description adds minimal value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool adds a coincident mate between two planar entities, with concrete examples (flange-to-plate, sub-assembly base plane). It distinguishes itself from sibling tools like add_concentric_mate and add_mate_by_face_position by noting same argument shape and naming a convenience alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides typical use cases (autopartes, specific scenarios) and references to related tools. However, it does not explicitly state when not to use (e.g., non-planar entities) or provide exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_concentric_mateA
Mate concéntrico — alinea ejes de dos entidades cilíndricas/cónicas.
Uso típico autopartes: alineación de ejes de barrenos (perno + bocina, bocina + flecha, dos cojinetes en una caja). [en: Add a concentric mate between two cylindrical / conical entities — typical autoparts use is aligning bolt+sleeve, sleeve+shaft, or two bearings in a housing.]
Args: component1_name, component2_name: SW component instance names from get_active_assembly_info (e.g. "bracket_L-1"). entity1_id, entity2_id: SW entity name strings, e.g. "Face@bracket_L-1@assy" (locale-sensitive — copy verbatim from the assembly info response). align: "ALIGNED" or "ANTIALIGNED".
Returns the created mate's metadata.
Related: add_mate_by_face_position (no-entity-name convenience for box-style components), stack_components (3 mates in one call for a fully-constrained stacked pair).
| Name | Required | Description | Default |
|---|---|---|---|
| align | No | ALIGNED | |
| entity1_id | Yes | ||
| entity2_id | Yes | ||
| component1_name | Yes | ||
| component2_name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the behavioral disclosure burden. It states the tool returns created mate's metadata, but omits details on permissions, side effects (e.g., modification of assembly), or state dependencies. However, for a straightforward mate creation, the basic behavior is implied, earning a mid-range score.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a summary, typical use, argument details, return info, and related tools. It is slightly long but efficiently front-loaded with the purpose. Every sentence contributes value, though minor redundancy exists (bilingual repetition could be streamlined).
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (5 parameters, no output schema, 0% schema coverage), the description thoroughly covers all aspects: purpose, parameter meanings, usage context, related tools, and return value. It is fully adequate for correct invocation without requiring external resources.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description is essential. It explains each parameter: component1_name and component2_name with examples ('bracket_L-1'), entity1_id and entity2_id with locale-sensitive string examples, and the align parameter with allowed values. This adds significant meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Mate concéntrico — alinea ejes de dos entidades cilíndricas/cónicas.' It uses a specific verb ('add concentric mate') and resource ('cylindrical/conical entities'), effectively distinguishing it from siblings like add_mate_by_face_position and stack_components.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides typical use cases ('Uso típico autopartes: alineación de ejes de barrenos') and explicitly references related tools, explaining when to use alternatives ('add_mate_by_face_position for box-style components, stack_components for fully-constrained stacked pair'). This gives clear guidance on when to use this tool versus others.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_distance_mateB
Mate de distancia — fuerza un offset fijo entre dos entidades.
Uso típico autopartes: separación entre placas paralelas, espacio entre dos cojinetes en una flecha, gap controlado entre componentes. [en: Add a distance mate (fixed offset) between two entities. Typical use: parallel plate separation, bearing-to-bearing distance on a shaft, controlled gap between components.]
Args: distance_mm: The fixed distance to enforce, in millimeters. Other args: same as add_concentric_mate.
Returns the created mate's metadata.
Related: add_mate_by_face_position (no-entity-name convenience), stack_components (3 mates in one call for fully-constrained pair).
| Name | Required | Description | Default |
|---|---|---|---|
| align | No | ALIGNED | |
| entity1_id | Yes | ||
| entity2_id | Yes | ||
| distance_mm | Yes | ||
| component1_name | Yes | ||
| component2_name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It states 'fixed offset' and 'returns metadata' but does not disclose side effects, permissions, reversibility, or other behavioral traits beyond the basic function.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with purpose but includes redundant Spanish and English versions. It could be more concise without losing essential information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 6 parameters and no output schema, the description is incomplete. It explains distance_mm but omits meanings for align, entity IDs, and component names, and only vaguely mentions return value.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only distance_mm is described ('fixed distance in millimeters'). The description references 'other args: same as add_concentric_mate' without elaboration, leaving 5 out of 6 parameters undocumented. With 0% schema coverage, the description insufficiently compensates.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it adds a distance mate (fixed offset) between two entities, and gives specific use cases (parallel plate separation, bearing distance, controlled gap). It distinguishes from siblings by mentioning related tools like add_concentric_mate, add_mate_by_face_position, and stack_components.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides typical use case context and references sibling tools for comparison (e.g., 'same as add_concentric_mate', 'related: add_mate_by_face_position'). However, it does not explicitly state when not to use this tool or provide clear exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_drill_patternA
Patrón de barrenos (drill pattern) — drill N holes at specified positions using ISO Metric standards.
Junior workflow: "drill 4 M8 tapped holes in the corners of this plate, 15mm deep". Builds the equivalent of N hole_wizard calls in one go, with bore diameters from ISO 2306 (tap), ISO 273 (clearance), ISO 4762 (counterbore for socket-head cap screws).
Args: hole_type: 'tap' (rosca / threaded), 'clearance' (paso para perno / pass-through), 'counterbore' (refrentado / recess for socket-head cap screws). size: ISO M5–M12 nominal. Tap + clearance accept M5/M6/M8/M10/M12; counterbore accepts M5/M6/M8/M10 (M12 not in v1). positions_mm: List of [x_mm, y_mm] points in the plane/face local frame. Minimum 1 point. No duplicates within 0.01mm. plane: Plane name — 'front'/'top'/'right' (lowercase English), Spanish UI ('Alzado'/'Planta'/'Vista lateral'), or a user-created plane ('Plano1'). Mutually exclusive with face_centroid_mm. face_centroid_mm: Face centroid from list_faces() — mutually exclusive with plane. Use this for face-anchored drilling (e.g. mounting holes on a body's top face). end_condition: 'blind' (depth-controlled, depth_mm required) or 'through_all' (passes through the body, depth ignored). depth_mm: Hole depth for blind. Required if end_condition='blind'. counterbore_depth_mm: CBORE recess depth (only for hole_type= 'counterbore'). Defaults to ISO 4762 head height for the size (M5→5, M6→6, M8→8, M10→10).
Returns dict: feature_names: 1 entry for tap/clearance, 2 for counterbore (the bore + the recess). hole_count: number of holes drilled. hole_diameter_mm: bore diameter (from ISO lookup). counterbore_diameter_mm: only for counterbore (else None). counterbore_depth_mm: actual depth used (else None).
Caveat (v1): holes show as 'Cortar-Extruir' features in the SW feature tree, NOT as 'Taladro roscado' / 'Refrentado' Hole Wizard features. No cosmetic threads (rosca visualization). For a single hole with proper Hole Wizard styling + cosmetic threads, use hole_wizard directly. This composite is for multi-position patterns where hole_wizard's single-hole-per-call limit makes it impractical.
Example — 4× M8 tap holes in a 50x50 plate's corners: add_drill_pattern( 'tap', 'M8', positions_mm=[[10, 10], [40, 10], [10, 40], [40, 40]], plane='front', end_condition='blind', depth_mm=15, )
Example — 2× M6 counterbore on the top face of an existing body: faces = list_faces() top = max((f for f in faces if f['normal'][2] > 0.9), key=lambda f: f['centroid_mm'][2]) add_drill_pattern( 'counterbore', 'M6', positions_mm=[[20, 20], [60, 20]], face_centroid_mm=top['centroid_mm'], end_condition='blind', depth_mm=10, )
| Name | Required | Description | Default |
|---|---|---|---|
| size | Yes | ||
| plane | No | ||
| depth_mm | No | ||
| hole_type | Yes | ||
| positions_mm | Yes | ||
| end_condition | No | blind | |
| face_centroid_mm | No | ||
| counterbore_depth_mm | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Although no annotations are provided, the description fully discloses behavioral traits: caveat about feature tree representation (Cortar-Extruir instead of Hole Wizard), no cosmetic threads, and details on return values including hole_count, diameters, and counterbore depth.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but well-structured with sections for parameter details, return dict, caveats, and examples. Every sentence provides necessary context; however, some repetition (e.g., ISO standards mentioned twice) could be trimmed slightly. Still, it's efficient for the complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 8 parameters, 0% schema coverage, no output schema, and no annotations, the description is comprehensive: covers purpose, parameters, return format edge cases, and usage examples. No gaps remain for an AI agent to misuse.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so description carries full burden. It explains every parameter with constraints: hole_type options, size ISO range and limitations, positions_mm format and uniqueness, plane vs. face_centroid_mm mutual exclusivity, end_condition and depth requirements, counterbore_depth_mm default. This adds significant value beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool 'drills N holes at specified positions using ISO Metric standards.' It specifies action (drill pattern), resource (holes), and distinguishes from sibling hole_wizard by noting multi-position capability vs. single-hole per call.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says when to use (multi-position patterns) and when not (single hole needing proper Hole Wizard styling, direct user to hole_wizard). It also provides two concrete examples for different use cases (tap holes on plane, counterbore on face).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_end_keywayA
Cuñero — DIN 6885-style axial keyway cut into a shaft end.
Junior workflow: "agrega un cuñero al extremo izquierdo de la flecha,
ancho 6mm, largo 20mm, profundidad 3mm, 5mm adentro del extremo".
Operates on the active part — assumes a shaft along world X already
exists (typically just built with build_stepped_shaft). Composes:
create_reference_plane("top", offset = D/2) -> tangent plane on
top of the shaft
create_sketch() -> slot sketch
create_slot(...) -> keyway profile
extrude_cut(depth, reverse_direction=True) -> cut INTO body
CRITICAL — reverse_direction=True is non-obvious here. The default
extrude_cut direction goes AWAY from the body for offset-plane
sketches: the tangent plane's outward normal is +Y, but the shaft
body is below the plane at Y < D/2. reverse_direction=True flips the
cut so it removes material going from the plane DOWN into the shaft.
Without it the cut is a no-op (cuts empty space above the cylinder).
Args:
end: "start" (the X=0 end — keyway sits at axial_offset from the
min-X face) or "end" (the far +X end — keyway sits at
axial_offset from the max-X face). End position resolved
best-effort via get_bounding_box on the active part.
diameter_at_end_mm: Diameter of the shaft at the end being cut.
Used to compute the tangent-plane offset (= D/2). Must be
greater than keyway_depth_mm + 1.0 (need at least 1mm of
remaining material below the cut).
keyway_width_mm: Slot width perpendicular to the shaft axis.
Standard DIN 6885 widths (Ø range → width): Ø6-8 → 3mm,
Ø10-12 → 4mm, Ø13-17 → 5mm, Ø18-22 → 6mm, Ø22-30 → 8mm,
Ø30-38 → 10mm. Default 5mm (covers Ø13-17).
keyway_length_mm: Slot total axial length (including rounded
ends). Must be greater than width (slot is rectangle + 2
semicircles; degenerate when length ≤ width). Default 15mm.
keyway_depth_mm: Cut depth from the shaft surface inward.
Standard ~D/8 for power transmission. Default 2.5mm.
axial_offset_from_end_mm: Distance from the shaft end face to
the nearest slot edge. Default 5mm (typical clearance for
keystock insertion).
Returns dict: cut: Feature info for the extrude_cut (cut_extrude). plane: Plane dict (name, parent_plane, offset_mm) for the tangent reference plane. input echoes (end, diameter_at_end_mm, keyway_*_mm, axial_offset_from_end_mm). keyway_start_x_mm, keyway_end_x_mm: DERIVED — world-X positions of the slot edges. Use these to verify the cut landed where you intended. shaft_bbox_mm: {"min", "max", "size"} — the bbox we resolved the axial position from. Reported so the caller can audit the best-effort end resolution (multi-feature parts — shaft plus flange disk, end cap, etc. — may have bbox X-extremes that aren't the shaft tip). warning: present (string) ONLY if the resolved keyway overlaps the bbox extent — non-fatal, surfaces the question to the caller without raising.
Caveat (orientation): assumes shaft axis = world +X, shaft cross- section centered on Y=Z=0. This matches build_stepped_shaft's contract. For shafts in arbitrary orientation, use the primitive chain (create_reference_plane → create_sketch → create_slot → extrude_cut(reverse_direction=True)) directly.
| Name | Required | Description | Default |
|---|---|---|---|
| end | Yes | ||
| keyway_depth_mm | No | ||
| keyway_width_mm | No | ||
| keyway_length_mm | No | ||
| diameter_at_end_mm | Yes | ||
| axial_offset_from_end_mm | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, description fully discloses internal steps, the critical reverse_direction flag, axis assumption, resolution of end position, and return fields including warnings. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with overview, workflow, critical note, parameter list, returns, and caveat. Every sentence adds value; front-loaded with purpose. Appropriate length for complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and no annotations, description covers input, output, side effects, constraints, and verification fields. Complete for a tool with 6 parameters and internal steps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 0% coverage, but description adds complete semantic meaning for all 6 parameters: defaults, constraints, standard DIN width table, and specific usage notes for each.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Describes specific verb (add) and resource (axial keyway cut into shaft end), includes junior workflow example, and distinguishes from siblings like extrude_cut and build_stepped_shaft. No ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use: after building a shaft with build_stepped_shaft, and provides a caveat for arbitrary orientation suggesting alternative primitive chain. Includes critical parameter behavior.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_global_variableA
Agregar variable global (ecuación) — declara un parámetro nombrado como "A", "B", "C" que las dimensiones de croquis y de feature pueden referenciar mediante una ecuación. Requisito habitual para piezas paramétricas como el CSWA Tool Block donde A, B, C deben modificarse entre pasos sin reconstruir.
[en: Add a global variable (equation) — declare a named parameter like "A", "B", "C" that sketch and feature dimensions can reference via an equation. Standard requirement for parametric parts like the CSWA Tool Block where A, B, C must change across steps without rebuilding.]
Args: name: Variable name (LHS of the equation). Cannot contain quotes, =, comma, or @. SW convention: short uppercase, e.g. "A", "B". value: The numeric value in the specified units. units: "mm" (default, length), "deg" (angle), or "raw" (dimensionless). SW stores values internally as meters / radians; this argument controls the equation suffix and the internal conversion.
Returns dict with: name, value, units, equation (raw SW string like '"A" = 81mm'), index (0-based position in the equation table).
Binding a dim to this variable: after creating the global, ADD ANOTHER EQUATION whose LHS is the dim name and whose RHS is the variable: add_global_variable("D1@Croquis1", '"A"', units="raw") (Pass an expression string; the equation manager accepts dim-paths on the LHS in addition to variable names.)
To change the value later, use set_global_variable. Do NOT call
add_global_variable again with the same name.
Related: set_global_variable (modify existing), modify_dimension (feature dims only, not global vars).
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| units | No | mm | |
| value | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description fully carries the burden. It discloses the internal storage (meters/radians), the equation manager's behavior (accepts dim-paths on LHS), and the warning against re-adding. It also describes the return value in detail, ensuring the agent understands the tool's behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (purpose, usage, parameters, return, additional notes). It is front-loaded with the primary purpose. While slightly lengthy, every sentence adds value, so it earns a 4 rather than a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers parameters, return value, and usage context thoroughly. It includes an example of binding a dimension. However, it lacks error handling details or edge cases, which would make it complete given the lack of an output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description compensates fully. It explains each parameter: name (LHS with constraints), value (numeric), units (options and default). It gives SW conventions and examples, adding significant meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: to add a global variable (equation) as a named parameter. It specifies the verb 'add' and the resource 'global variable', and distinguishes from siblings like set_global_variable and modify_dimension. The context of parametric parts is also provided.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use guidance (parametric parts like CSWA Tool Block) and when-not (do not call again with same name; use set_global_variable for modification). It also explains how to bind dimensions to the variable and lists related tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_mate_by_face_positionA
Crea un mate entre dos componentes usando posiciones de cara.
Conveniencia: en lugar de copiar nombres de entidades sensibles a locale ("Cara<1>@bracket-1@assy"), nombras la cara por su posición relativa en el componente — "top"/"bottom"/"left"/"right"/"front"/ "back". El tool resuelve la cara cuyo normal apunta en el eje pedido. [en: Mate two components by face position — convenience wrapper avoiding locale-sensitive face-index or entity-name handling. Resolves position keywords to the matching face on each component.]
Args: component1_name, component2_name: SW component instance names from get_active_assembly_info, e.g. "Pieza1-5" / "Pieza1-6". face1_position, face2_position: One of "top", "bottom", "left", "right", "front", "back". Interpreted in each component's local coordinate frame: - top = +Y (highest Y face) - bottom = -Y (lowest Y face) - right = +X left = -X - back = +Z front = -Z (the original sketch face for an extrusion in +Z direction). For Pieza-style box parts inserted at default orientation this matches viewport intuition. mate_type: "coincident" (parts touch face-to-face) or "distance" (parts maintain a fixed offset). distance_mm: Required for "distance" mates; ignored for "coincident". align: "ALIGNED" (face normals same direction — parts overlap) or "ANTIALIGNED" (face normals opposite — parts touch). Default "ANTIALIGNED" because that's the typical stacking intent.
Example — stack Pieza1-6 on top of Pieza1-5: add_mate_by_face_position( "Pieza1-5", "top", "Pieza1-6", "bottom", mate_type="coincident", )
| Name | Required | Description | Default |
|---|---|---|---|
| align | No | ANTIALIGNED | |
| mate_type | No | coincident | |
| distance_mm | No | ||
| face1_position | Yes | ||
| face2_position | Yes | ||
| component1_name | Yes | ||
| component2_name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It thoroughly explains how face positions are resolved to actual faces based on local coordinate frames, including axis mapping for each keyword. It also describes default behavior and mate types. It does not mention side effects or undo capacity, but this is acceptable for a creation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise yet comprehensive, using clear sections (intro, args explanation, example). Every sentence adds value, no wasted words. The structure aids quick scanning for key information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 7 parameters and no output schema, the description covers all aspects: parameter semantics, relationships, coordinate frame interpretation, and a practical example. It is complete enough for an agent to invoke correctly without additional context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description fully compensates by detailing each parameter: component names from get_active_assembly_info, face positions with axis mappings, mate_type with options, distance_mm condition, and align with defaults. The example ties everything together.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it creates a mate between two components using relative face positions (top/bottom etc.), differentiating it from other mate tools that require entity names or indices. The verb 'creates a mate' and specific resource handling are explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the tool is a convenience wrapper to avoid locale-sensitive face naming, and provides an example for stacking. It implies when not to use (if you have exact entity names or need precise face selection), but does not explicitly list alternatives or when to use other mate tools. However, the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_sketch_chamferA
Chaflán de croquis — corta una esquina del croquis con un chamfer a 45° (distancia igual en ambos lados). Reemplaza el vértice donde dos líneas se encuentran con una tercera línea inclinada.
Uso típico CSWA Tool Block: las esquinas del outline llevan chamfers como "5×45°" (= distance_mm=5). Es más limpio que dibujar la línea inclinada a mano.
[en: Sketch chamfer — cuts a sketch corner with a 45° equal-distance chamfer. Replaces the vertex where two sketch lines meet with a third inclined line. Typical for the CSWA Tool Block outline.]
Args: line1_x_mm, line1_y_mm: A point that lies ON the first line. Typically near the corner — SW picks the closest segment. line2_x_mm, line2_y_mm: A point that lies ON the second line. distance_mm: The chamfer distance from the corner along EACH line. A 45° chamfer with distance_mm=14 means each adjacent line is shortened by 14 mm and the corner is connected by a new line at 45°. z_mm: Z-coordinate of the points (default 0 — front-plane sketches).
Returns the chamfer's metadata.
Requires the sketch to be in EDIT mode (just like add_sketch_dimension). The two selected lines must be ADJACENT (share an endpoint), else SW rejects the chamfer.
Gotcha: in this binding ISketchManager.CreateChamfer is not
universally reachable. If it fails, the recommended workaround is to
draw the chamfer manually using two create_line calls.
Related: chamfer (3D edge chamfer, not sketch corner).
| Name | Required | Description | Default |
|---|---|---|---|
| z_mm | No | ||
| line1_x_mm | Yes | ||
| line1_y_mm | Yes | ||
| line2_x_mm | Yes | ||
| line2_y_mm | Yes | ||
| distance_mm | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, description carries full burden. Discloses behavior: replaces vertex with line, requires edit mode, adjacent lines, potential API failure, and workaround. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Bilingual (Spanish/English) adds length, but structure is clear with sections. Could be more concise by deduplicating languages, but still well-organized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 6 params, no output schema, no annotations, description covers purpose, prerequisites, gotchas, workaround, and return type. Slight gap: no detail on return format, but sufficient for agent invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but description fully explains each parameter: line points, z default, distance along each line. Adds meaningful context beyond schema titles.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it cuts a sketch corner with a 45° equal-distance chamfer, distinguishes from sibling 'chamfer' (3D edge chamfer) and 'add_sketch_fillet'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use (e.g., CSWA Tool Block), prerequisites (sketch in edit mode, adjacent lines), and workaround if API fails. Also notes distinction from 3D chamfer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_sketch_dimensionA
Cota de croquis — agrega una dimensión gobernante (driving dimension) a la entidad de croquis que pasa por el punto (x, y, z) dado. La cota queda nombrada automáticamente "D1@Croquis1", "D2@Croquis1", etc.
Uso típico CSWA: tras dibujar el outline del Tool Block con create_line/create_arc, agregar cotas a los segmentos clave (A=largo total, B=alto total) para luego ligarlas a variables globales y parametrizar el diseño.
[en: Sketch dimension — add a driving dimension to the sketch entity that lies at the given point. Auto-named "D1@", "D2@...", etc. Used to make a sketch parametric so its dimensions can be modified in-place (vía modify_dimension) or linked to a global variable.]
Args: entity_x_mm, entity_y_mm, entity_z_mm: A point in the part frame (mm) that lies ON the sketch entity to dimension (e.g., the midpoint of a sketch line, or a point on a sketch circle's perimeter). SW selects the closest sketch segment to this point. value_mm: The desired dimension value, in millimeters. SW first creates the dim with the entity's current geometric value, then this tool overrides it to value_mm (forcing the geometry to update). text_offset_x_mm, text_offset_y_mm: Where to place the dim text, as an offset from the entity point in mm. Cosmetic only; defaults to (20, 10) for legible callouts.
Returns: the dim's full name (e.g., "D1@Croquis1"), suitable for use
with modify_dimension(sketch_name, "D1", new_value_mm) or for
binding to a global variable via an equation.
Requires the sketch to be in EDIT MODE — call right after create_sketch / create_sketch_on_face and BEFORE the sketch is closed by extrude_sketch / extrude_cut.
Gotcha: SW infers the dim TYPE from what was selected (line→length, circle→diameter, two lines→angle). If you pass a point that lies on a circle's perimeter, you get a diameter dim. To force a specific type, ensure your entity_point is clearly inside one entity.
| Name | Required | Description | Default |
|---|---|---|---|
| value_mm | Yes | ||
| entity_x_mm | Yes | ||
| entity_y_mm | Yes | ||
| entity_z_mm | No | ||
| text_offset_x_mm | No | ||
| text_offset_y_mm | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully compensates. It explains that SW selects the closest entity, infers dimension type, overrides the value, and returns the dim name. It also includes a gotcha about forcing dimension type.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a front-loaded action and bullet points, but includes Spanish content that is redundant for an English-language AI agent. Still, every English sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (6 parameters, required edit mode, return value), the description covers all aspects: prerequisites, behavior, gotchas, and follow-up usage with modify_dimension and global variables. It is fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the description explains each parameter in detail: entity point must lie on the entity, value_mm overrides, text_offset defaults to (20,10). It adds meaning far beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool adds a driving dimension to a sketch entity at a given point, with auto-naming. It distinguishes well from sibling tools like add_sketch_relation and add_sketch_fillet by focusing on dimensioning.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit context: typical use after creating sketch entities in CSWA, and a strict prerequisite requiring sketch edit mode. It also warns about dimension type inference. It doesn't explicitly name when not to use, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_sketch_filletA
Redondeo de croquis — redondea una esquina del croquis con un arco tangente de radio dado entre dos líneas adyacentes. Reemplaza el vértice donde dos líneas se encuentran con un arco.
Uso típico CSWA Tool Block: las esquinas internas llevan redondeos "R3" (= radius_mm=3). Más limpio y exacto que dibujar el arco a mano con create_arc.
[en: Sketch fillet — rounds a sketch corner with a tangent arc of the given radius between two adjacent sketch lines. Typical for the CSWA Tool Block rounded corners.]
Args: line1_x_mm, line1_y_mm: A point that lies ON the first line (near the corner — SW picks the closest segment). line2_x_mm, line2_y_mm: A point that lies ON the second line. radius_mm: The fillet radius, in mm. z_mm: Z-coordinate of the points (default 0 — front-plane sketches).
Returns the fillet's metadata.
Requires the sketch to be in EDIT mode. The two selected lines must be ADJACENT (share an endpoint), else SW rejects the fillet.
Related: add_sketch_chamfer (45° corner cut); fillet (3D edge round).
| Name | Required | Description | Default |
|---|---|---|---|
| z_mm | No | ||
| radius_mm | Yes | ||
| line1_x_mm | Yes | ||
| line1_y_mm | Yes | ||
| line2_x_mm | Yes | ||
| line2_y_mm | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses that it replaces vertex with arc, requires sketch edit mode, and that lines must be adjacent. Mentions it returns metadata. No annotations provided, so description carries the burden and does it well.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is bilingual (Spanish and English) which adds length, but is well-structured and front-loaded with key information. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description mentions it returns metadata. It covers preconditions (edit mode, adjacent lines), differentiates from siblings, and provides typical usage example.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 0% coverage, so description fully explains each parameter: line1_x_mm and line1_y_mm are points on the first line near the corner, similarly for line2, radius_mm is the fillet radius, and z_mm is Z-coordinate with default 0.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool rounds a sketch corner with a tangent arc, replacing the vertex. It distinguishes itself from create_arc and add_sketch_chamfer, and mentions typical use (CSWA Tool Block).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Describes when to use (rounded corners, CSWA Tool Block) and compares to alternatives (chamfer, manual arc). Does not explicitly list exclusions or when not to use, but provides sufficient context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_sketch_relationA
Relación de croquis — agrega una restricción geométrica (horizontal, vertical, coincident, tangent, equal, fix) a uno o dos segmentos del croquis activo. ESTA es la pieza que faltaba para que un croquis quede TOTALMENTE DEFINIDO y no "nade" 1-2 mm cuando SolidWorks resuelve sus relaciones automáticas.
Uso típico CSWA: tras dibujar el outline con create_line/create_arc, fija las aristas planas con 'horizontal'/'vertical' y combínalas con add_sketch_dimension (cotas gobernantes) hasta que el croquis se vuelva negro (totalmente definido). Así A/B/C quedan paramétricas y un cambio es una sola llamada a modify_dimension — sin reconstruir desde cero.
[en: Sketch relation — add a geometric constraint (horizontal/vertical/ coincident/tangent/equal/fix) to one or two segments of the active sketch. This is what makes a sketch FULLY DEFINED so it stops drifting 1-2 mm under SW's auto-relations.]
Args: relation: one of "horizontal", "vertical", "coincident", "tangent", "equal", "fix". horizontal/vertical/fix take 1 point; coincident/ tangent/equal take 2. entity_points_mm: list of [x, y] (or [x, y, z]) points in mm, each lying ON a target sketch segment (the closest segment is picked).
Returns {relation, constraint, sketch_name, points}.
Requires the sketch in EDIT mode (call after the geometry, before extrude_sketch closes it). No rebuild — locked in on the next exit.
Related: add_sketch_dimension (driving cotas); add_sketch_fillet / add_sketch_chamfer (corner geometry).
| Name | Required | Description | Default |
|---|---|---|---|
| relation | Yes | ||
| entity_points_mm | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses behavioral traits: sketch edit mode required, no rebuild until exit, relation makes sketch fully defined and prevents drifting. Also explains return format. Comprehensive for a tool without annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Contains redundant bilingual text (Spanish and English versions). While the English part is well-structured, the duplication adds unnecessary length. Could be more concise by removing one language section.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations and no output schema, the description covers purpose, usage constraints, parameter details, return info, and related tools. Fully adequate for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so description adds crucial meaning: relation values are listed (horizontal, vertical, etc.), entity_points_mm explained as points on segments with closest-segment picking. Also specifies which relations take 1 or 2 points. Greatly enhances schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool adds geometric constraints (horizontal, vertical, coincident, tangent, equal, fix) to sketch segments. It uses specific verbs and resources, and distinguishes from sibling tools like add_sketch_dimension and add_sketch_fillet.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit context: sketch must be in edit mode, used after drawing geometry and before extrusion. Mentions typical CSWA workflow and combination with add_sketch_dimension. Lacks explicit exclusion of alternatives but sufficiently guides when to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
break_all_edgesA
Desbarbar todas las aristas — chamfer every edge (linear and circular by default).
Universal edge-break for autoparts: every machined drawing calls out edge breaks per ISO 13715, every Tier 1 customer requires deburred edges before assembly. This composite implements "achaflana todo" / "desbarbar todo" in one call instead of three (list_edges + filter
chamfer).
Args:
distance_mm: Chamfer leg length. Default 0.5mm — typical
machined-edge deburr. Use 0.3mm for fine deburr or 1.0mm
for noticeable lead-ins.
angle_deg: Angle from reference face. Default 45° (autoparts
standard for ~99% of cases).
min_edge_length_mm: Skip linear edges shorter than this. Default
1.0mm — filters tiny sub-edges left over from prior
fillet/chamfer features. Circular edges (arc / circle) skip
this filter — their length_mm is the chord length and
isn't meaningful for the deburr decision.
body_name: If given, only chamfer edges of that body. Else
enumerate all solid bodies in the active part.
include_arcs: If True (default), include arc and circle edges
in the chamfer set. Required for round autoparts (rines,
cubos, discos de freno, engranes) where every edge is
circular. Set False for the legacy linear-only behavior.
Returns: { "feature": {"name": "Chaflán1", "type": "chamfer", "dimensions": {...}}, "edges_chamfered": int, }
Caveat: NOT parametric — re-running with different distance_mm requires deleting the feature first. After break_all_edges runs, the part has many short sub-edges from the chamfer; calling fillet_all_edges next will re-process those unless min_edge_length_mm filters them out. Recommend using only one edge-break tool per part.
Example — standard 0.5mm × 45° deburr on every edge: break_all_edges()
Example — heavy 1mm × 45° on a single body in a multi-body part: break_all_edges(distance_mm=1.0, body_name="Saliente-Extruir2")
Example — strict linear-only deburr (skip circular edges): break_all_edges(include_arcs=False)
| Name | Required | Description | Default |
|---|---|---|---|
| angle_deg | No | ||
| body_name | No | ||
| distance_mm | No | ||
| include_arcs | No | ||
| min_edge_length_mm | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully carries the transparency burden. It discloses that the operation is not parametric, creates sub-edges affecting subsequent operations, and explains parameter defaults and behaviors (e.g., min_edge_length_mm filter skips circular edges). It also specifies the return structure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a summary, context, args, returns, caveats, and examples. It is not overly verbose given the complexity, though the length could be slightly trimmed (e.g., the Spanish phrase could be more concise). Overall, every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema, the description explains the return type and fields. It covers parameter details, edge cases (circular edges skip filter), and caveats. Examples illustrate typical and advanced use. The tool is complex, but the description is fully sufficient for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 0% description coverage, but the description adds extensive semantics for all five parameters: distance_mm (with recommended values), angle_deg (default), min_edge_length_mm (filter logic for linear vs circular), body_name (scope), and include_arcs (linear-only option). Each parameter is given practical context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool chamfers every edge (linear and circular by default) for deburring autoparts. It specifies the verb 'chamfer' and resource 'all edges', and distinguishes from siblings like fillet_all_edges and single-edge chamfer tools by noting it replaces three steps.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit context: universal edge-break for autoparts where deburring is required. It contrasts with manual three-step process, warns about non-parametric nature and interaction with fillet_all_edges, and gives examples for standard, single-body, and linear-only use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
build_closed_profileA
Perfil cerrado — construye un croquis a partir de UNA lista ordenada de segmentos (líneas y arcos) en UNA sola llamada, en vez de ~16 create_line/ create_arc sueltas. Valida que el lazo cierre ANTES de tocar SolidWorks (un perfil abierto mata la extrusión silenciosamente), luego dibuja todo y deja el croquis ABIERTO para que añadas cotas/relaciones y extruyas.
Uso típico CSWA Tool Block: pasa el outline completo (lados + chamfers
rectos + arcos R10/R20) como segments; el croquis queda listo para
add_sketch_relation / add_sketch_dimension / add_sketch_fillet y luego
extrude_sketch.
[en: Closed profile — build a sketch from ONE ordered list of segments (lines + arcs) in a single call instead of ~16 separate primitives. Validates the loop closes BEFORE any SW call (an open loop silently kills the extrude), then draws it and leaves the sketch OPEN to constrain.]
Args:
plane: sketch plane ("front"/"top"/"right", Spanish aliases, or a
reference-plane name).
segments: ordered loop. Each item is either
{"type":"line", "x1","y1","x2","y2"} or
{"type":"arc", "cx","cy","radius_mm","start_angle_deg",
"end_angle_deg","direction"("ccw"|"cw", default "ccw")}.
Each segment's end must meet the next segment's start.
close: if True (default), auto-add a closing line from the last
endpoint back to the first start when there's a gap. If False and
the loop isn't closed, raises.
name_hint: optional; reserved for future naming. Currently unused.
exact: if True (default), draw the loop in SolidWorks' exact mode
(ISketchManager.AddToDB) — segments land at their exact input
coordinates with NO automatic-relation inference, so the profile
does NOT drift 1-3 mm (and mass several %) as SW relaxes inferred
relations. This is the fix for the CSWA Tool Block drift: a true-arc
profile builds at the exact intended bbox and mass instead of
drifting by mm and grams. Pass exact=False ONLY if you deliberately
want SW to infer horizontal/vertical/tangent relations for later
parametric editing (and accept the drift). Best-effort: if the
driver can't toggle exact mode it falls back to inference-on.
variables: optional dict para coordenadas paramétricas — cualquier
coordenada de segmento puede ser un STRING como "A-29" o "B/2"
evaluado contra este dict (solo números, variables, + - * / y
paréntesis). Variante nueva = misma llamada con otro variables.
Returns {sketch_name, plane, segment_count, closed, vertices}. The sketch is left OPEN — add relations/dimensions, then extrude_sketch.
NOTE: call-count atomic, not SW-transactional — the up-front loop validation is the guardrail against a half-drawn open profile.
Related: create_sketch + create_line/create_arc (the primitives this composes); add_sketch_relation / add_sketch_dimension (constrain it after).
| Name | Required | Description | Default |
|---|---|---|---|
| close | No | ||
| exact | No | ||
| plane | Yes | ||
| segments | Yes | ||
| name_hint | No | ||
| variables | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses behavior: validates loop closure before SolidWorks call, leaves sketch open, explains exact mode to avoid drift, and notes it's call-count atomic but not SW-transactional. All important traits are covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is lengthy but well-structured with clear sections, bilingual text, and bold headings. It is front-loaded with the core purpose and typical use. Minor redundancy from bilingual text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description explains the return value (dict with sketch_name, plane, etc.) and mentions related tools. All aspects of a complex tool are adequately covered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description carries the full burden. It provides detailed explanations for all 6 parameters, including format, defaults, valid values, and usage notes. The segments parameter is thoroughly described with sub-fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it builds a sketch from a single ordered list of segments, distinguishing it from the many separate create_line/create_arc calls. It also emphasizes the validation of loop closure, making the purpose very specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a typical use case (CSWA Tool Block) and contrasts with primitives. However, it does not explicitly state when not to use this tool or list alternatives beyond create_line/create_arc.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
build_extruded_closed_profileB
Build an exact closed profile and extrude it as one composite.
Segment coordinates and depth_mm accept string expressions over
variables (e.g. depth_mm="C", x2="A-29") — a size variant is the same
call with a new variables dict.
| Name | Required | Description | Default |
|---|---|---|---|
| exact | No | ||
| merge | No | ||
| plane | No | front | |
| depth_mm | Yes | ||
| segments | Yes | ||
| variables | No | ||
| end_condition | No | blind | |
| reverse_direction | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses the parametric expression capability, but lacks details on side effects (e.g., does it merge automatically? What if the profile is not closed?), error behavior, or prerequisites. Essential behavioral traits are omitted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (two sentences) and front-loaded with purpose. However, it lacks structural formatting (e.g., bullet points) that could improve readability, especially for a parameter-heavy tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (8 params, no output schema, no annotations), the description is incomplete. It explains only the variable expression aspect, leaving out parameter semantics, output details, and workflow integration. A more complete description would address the purpose of each parameter and the expected result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so description must compensate. It adds meaning for 'segments' and 'depth_mm' (accept expressions over variables), but ignores the other six parameters (exact, merge, plane, end_condition, reverse_direction, variables). The description is insufficient for an 8-parameter tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action: 'Build an exact closed profile and extrude it as one composite.' It uses specific verbs and resources, and distinguishes from siblings like 'build_closed_profile' which only builds, and 'extrude_sketch' which extrudes an existing sketch.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for parametric designs by mentioning string expressions over variables, but does not explicitly state when to use this tool versus alternatives (e.g., building a closed profile then extruding separately). No when-not or exclusion criteria are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
build_flange_bossA
Crear un saliente cilíndrico (con barreno opcional pasante).
Junior workflow: "agrega un saliente de O40mm x 8mm en el centro, con barreno O20mm". Composes a sketch+circle+extrude_sketch for the boss, plus an optional sketch+circle+extrude_cut for the through bore.
Args: plane: Sketch plane the boss sits on. Same name conventions as build_rectangular_pocket. center_x_mm, center_y_mm: Boss center in sketch coords. outer_diameter_mm: Outer diameter of the boss cylinder. > 0. height_mm: Boss extrusion height (positive). bore_diameter_mm: If set, drills a through-bore at the boss centerline. Must be > 0 and < outer_diameter_mm. The bore is colinear with the boss by construction (same sketch plane, same center coords). reverse_extrude: If True, the boss grows opposite the SW-default direction along the sketch plane normal. Useful when the boss should sit on the opposite side of the parent body. bore_target_bodies: Restrict the through-bore to these body names (from get_active_part_info "bodies"). None (default) lets SW cut every body the bore intersects — pass [the boss/parent body] to stop the through_all bore from punching unintended bodies in a multi-body / multi-wall part (the caveat below).
Returns: {"boss": Feature info, "bore": Feature info | None}.
Caveat: the bore (when requested) goes "through_all" so it punches through everything in its path unless bore_target_bodies scopes it. For blind bores, call extrude_cut separately after this composite.
Example — bearing seat O40mm x 8mm with O20mm through-bore on Top plane: build_flange_boss("top", 0, 0, 40, 8, bore_diameter_mm=20)
| Name | Required | Description | Default |
|---|---|---|---|
| plane | Yes | ||
| height_mm | Yes | ||
| center_x_mm | Yes | ||
| center_y_mm | Yes | ||
| reverse_extrude | No | ||
| bore_diameter_mm | No | ||
| outer_diameter_mm | Yes | ||
| bore_target_bodies | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It details the composite operation, default direction, through_all behavior for the bore, and caveats about unintended cuts. It also explains the colinear construction and return format.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a summary, example, parameter list, returns, caveat, and usage example. It is front-loaded and every sentence adds value. Though lengthy, it is justified for the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description includes return format. It thoroughly covers all 8 parameters with constraints and examples, plus caveats. This provides complete context for an AI agent to use the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description fully documents each parameter with conditions (e.g., bore_diameter_mm > 0 and < outer_diameter_mm, reverse_extrude effect, bore_target_bodies scoping). This adds significant meaning beyond the schema's bare titles.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it creates a cylindrical boss with optional through bore, using specific verbs like 'crear' and 'composes'. It distinguishes from sibling tools by describing its composite nature (sketch+extrude for boss and optional bore). The example clarifies the purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a junior workflow example and explicit exclusion: 'For blind bores, call extrude_cut separately after this composite.' It also advises when to use bore_target_bodies. However, it does not contrast with similar sibling tools like build_stepped_shaft or build_threaded_boss.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
build_l_bracketA
Soporte / bracket en L — L-shaped autoparts bracket with bolt holes on each leg, in one call.
Junior workflow: "soporte L para fijar el sensor a la carcasa, 50×80×40mm con 2 barrenos M8 en cada cara". Wraps the extrude-L-profile + face-anchored-cut flow into one call. The most-common stamped autopart in the Mexican PYME shop floor.
Composes: create_sketch("front") + 6×create_line -> L-profile extrude_sketch(width) -> L body create_sketch_on_face × 2 + create_circle×N + extrude_cut × 2 -> bolt holes through each leg
Args: leg1_length_mm: Length of the first leg (vertical leg in the standard orientation). Must be > 2×thickness_mm. leg2_length_mm: Length of the second leg (horizontal leg). Must be > 2×thickness_mm. width_mm: Bracket depth (out-of-page in side view). Must be > 0. thickness_mm: Wall thickness — same for both legs. Default 5mm (typical stamped-steel autopart). leg1_bolt_count: Number of bolt holes through leg 1. 0..6. 0 = no bolts on this leg (one-sided bracket). Default 2. leg2_bolt_count: Same for leg 2. Default 2. bolt_hole_diameter_mm: Through-hole diameter for each bolt. Default 8.5mm = ISO 273 medium fit for M8. bolt_hole_inset_mm: Distance from leg edge to first/last bolt center (mm). Default 15. Constraint: 2×inset + bolt_hole_diameter must fit in each leg's length.
Returns dict: body: Feature info for the L-shape extrude (boss_extrude). leg1_bolts: Feature info for the leg-1 cut, or None if leg1_bolt_count=0. leg2_bolts: Feature info for the leg-2 cut, or None if leg2_bolt_count=0. leg1_length_mm, leg2_length_mm, width_mm, thickness_mm, leg1_bolt_count, leg2_bolt_count: echo back the input dimensions for LLM verification.
Geometry (orientation contract): - L-profile in Front plane (XY): leg1 along +Y, leg2 along +X - Inside corner of L at world (thickness, thickness, 0) - Body extruded +Z by width_mm - Outer face of leg 1 = -X face (X=0); bolts drilled in +X - Outer face of leg 2 = -Y face (Y=0); bolts drilled in +Y
Caveat (no inside fillet): the inside corner of the L is sharp.
For stress relief, post-process with fillet on the inside-corner
edge (use list_edges to find it) — typical R = 1×thickness.
Example — autoparts wall-bracket 60×80mm × 40 wide × 4mm thick, M6 bolts, 2 per leg: build_l_bracket( leg1_length_mm=60, leg2_length_mm=80, width_mm=40, thickness_mm=4, bolt_hole_diameter_mm=6.6, # M6 ISO 273 )
| Name | Required | Description | Default |
|---|---|---|---|
| width_mm | Yes | ||
| thickness_mm | No | ||
| leg1_length_mm | Yes | ||
| leg2_length_mm | Yes | ||
| leg1_bolt_count | No | ||
| leg2_bolt_count | No | ||
| bolt_hole_inset_mm | No | ||
| bolt_hole_diameter_mm | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, but the description is extensive: it details the internal composition steps, the return dictionary, geometry orientation contract, and a caveat about a sharp inside corner. This fully compensates for the lack of annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with sections, but the junior workflow example and detailed step composition could be considered slightly verbose. However, it remains clear and front-loaded with the purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (8 parameters, no output schema, no annotations), the description is comprehensive. It covers purpose, parameters, geometry, return values, and provides an example, making it complete for agent selection.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage, but the description provides detailed explanations for all 8 parameters, including defaults, constraints, and units. It adds significant meaning beyond the schema titles.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool builds an L-shaped autoparts bracket with bolt holes, and distinguishes it from siblings by specifying it wraps multiple steps into one call. The verb 'build' and resource 'L-bracket' are specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description indicates it is for the most common stamped autopart and wraps a multi-step flow, but does not explicitly state when to use this tool versus alternatives like build_plate_with_hole_pattern or build_flange_boss. However, the specificity makes usage clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
build_part_dslA
Construye una pieza desde un script FLUIDO estilo build123d en UNA llamada.
"Compila una vez, construye una vez": escribe la pieza como UNA expresión encadenada; el servidor la compila a una op-list y la ejecuta como un solo lote (mismas garantías que execute_batch — redibujo/reconstrucción diferidos, rollback todo-o-nada, una sola aprobación). NO ejecuta código: solo una gramática CERRADA (Part() + métodos en lista blanca + edges() + literales); cualquier otra cosa se rechaza.
Ejemplos: build_part_dsl("Part().sketch('front').circle(0,0,20).extrude(30)" ".chamfer(edges(geom='circle', sort='z', dir='desc', pick='first'), d=1)") build_part_dsl("Part().sketch('front').rectangle(-30,-20,30,20).extrude(15)" ".fillet(edges(geom='line'), r=2)")
Métodos: sketch(plane), rectangle(x1,y1,x2,y2), circle(cx,cy,r), line(x1,y1,x2,y2), arc(cx,cy,r,start,end,direction='ccw'), extrude(depth, reverse=False), cut(depth=0, through_all=False), fillet(edges(...), r=R), chamfer(edges(...), d=D, angle=45). Multi-feature: encadena varios sketch(plano) en planos por defecto ('front'/'top'/'right'). edges(...): geom/body/axis/at/tol/min/max/radius/sort/dir/pick/scope (scope 'last_feature'/'new' = Select.LAST/NEW). v1: NO sketch-sobre-cara / selectores de cara (usa create_sketch_on_face con selector por separado).
[en: Build a part from a fluent build123d-style script in one call. A closed grammar compiled to the execute_batch op-list and run; no code is executed.]
Args: script: la expresión fluida. dry_run: si True, solo compila y devuelve la op-list (no toca SolidWorks). rebuild: una reconstrucción al cerrar el lote (default True).
Devuelve el resultado de execute_batch + compiled_ops (qué se ejecutó) +
summary. DSL inválido -> error claro; cae a execute_batch o tools sueltas.
| Name | Required | Description | Default |
|---|---|---|---|
| script | Yes | ||
| dry_run | No | ||
| rebuild | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully reveals behavioral traits: closed grammar, no code execution, rollback all-or-nothing, deferred redraw/rebuild, single approval, clear error messages, and return structure (execute_batch result + compiled_ops + summary).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is detailed and well-structured with examples, method list, and English summary. While a bit long, each sentence adds value given the complexity of the DSL grammar.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex DSL tool with no output schema, the description covers the entire API: grammar, supported methods, edges, parameters, return value, and error handling. It's fully self-contained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has 0% description coverage, but the description fully compensates by explaining 'script' as the fluent expression with examples, 'dry_run' as compile-only without touching SolidWorks, and 'rebuild' as a rebuild upon batch close.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it builds a part from a fluent build123d-style script in one call. It distinguishes from siblings like execute_batch by explaining it compiles to an op-list and runs as a batch, and from other build tools by emphasizing the closed grammar and no-code-execution nature.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use (fluent script, one call), what not to use (NO sketch-on-face, use create_sketch_on_face separately), and mentions fallback to execute_batch or standalone tools. It also provides a list of methods and constraints on grammar.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
build_part_indexA
Indexa una carpeta de piezas .SLDPRT en un catálogo LOCAL (PDM-lite).
Abre cada pieza EN SERIE (solo lectura), toma nombre/bbox/masa/inventario
de barrenos, la cierra, y guarda todo en mcp_cad_index.sqlite DENTRO de
la carpeta — nada sale del equipo (sin red, sin telemetría). Incremental:
archivos sin cambios (mtime+tamaño) se saltan; rebuild=True relee todo.
Corre con SolidWorks desocupado: abre y cierra documentos.
Args: folder: carpeta raíz (búsqueda recursiva; ignora temporales ~$). rebuild: True relee también los no-modificados. max_parts: tope de archivos por corrida.
Returns: {indexed, skipped_unchanged, removed_stale, failed[], parts, bores, db_path, truncated_at_max_parts}.
| Name | Required | Description | Default |
|---|---|---|---|
| folder | Yes | ||
| rebuild | No | ||
| max_parts | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even without annotations, the description fully discloses behavior: opens files read-only in series, saves locally, no network/telemetry, incremental based on mtime+size, rebuild and max_parts limits, and that it opens/closes documents requiring SolidWorks idle.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured: summary sentence, then process details, then args list, then return fields. Every sentence adds value, no fluff. Front-loaded with the main purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description lists return fields. It fully covers how the tool works, what it produces, and edge cases (incremental, rebuild, max_parts). Complete for a file scanning/indexing tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description explains all three parameters (folder, rebuild, max_parts) in detail, providing meaning beyond the bare schema. It clarifies folder recurses and ignores temporary files, rebuild forces re-read, and max_parts is a cap per run.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb (index), resource (folder of .SLDPRT parts), and result (local catalog in mcp_cad_index.sqlite). It distinguishes from siblings by being a local indexing tool vs. modeling or query tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context for when to use (indexing parts locally), includes conditions (SolidWorks idle), and explains incremental behavior and rebuild option. Lacks explicit comparison to siblings like search_part_catalog, but the use case is well-defined.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
build_plate_with_hole_patternA
Build a rectangular plate and drill drawing-grounded through holes.
Use either explicit hole_positions_mm or a bolt circle
(bolt_circle_diameter_mm + bolt_count). The rectangle is drawn from
(origin_x_mm, origin_y_mm) to (origin_x_mm + width, origin_y_mm + height).
| Name | Required | Description | Default |
|---|---|---|---|
| plane | No | front | |
| width_mm | Yes | ||
| height_mm | Yes | ||
| bolt_count | No | ||
| origin_x_mm | No | ||
| origin_y_mm | No | ||
| thickness_mm | Yes | ||
| angle_offset_deg | No | ||
| hole_diameter_mm | Yes | ||
| hole_positions_mm | No | ||
| reverse_direction | No | ||
| bolt_circle_center_x_mm | No | ||
| bolt_circle_center_y_mm | No | ||
| bolt_circle_diameter_mm | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It explains the plate geometry and hole modes but omits critical behavioral details: it does not state whether the tool creates a new part or modifies an existing sketch, whether the holes are destructive (through-cuts) or additive, or what the output is. The phrase 'drawing-grounded through holes' is ambiguous. Missing: required document context, effect on existing features, and return value.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, each delivering essential information. The first sentence states the core function; the second explains the hole pattern alternatives and coordinate system. No redundant or extraneous text. Well-structured and front-loaded with the most important action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (14 parameters, no output schema, no annotations), the description is insufficient. It does not explain the broader build context (e.g., requires an active part document? affects existing geometry?), nor does it describe the result type. Sibling tools exist for similar operations, but no guidance is provided on when to use this tool over composing smaller steps. The description leaves many agent decisions unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description compensates partially. It adds meaning for `hole_positions_mm`, `bolt_circle_diameter_mm`, `bolt_count`, and the rectangle coordinate system (origin, width, height). However, many parameters remain undocumented: `plane`, `angle_offset_deg`, `reverse_direction`, `bolt_circle_center_x_mm`, `bolt_circle_center_y_mm`. The description covers about 6 of 14 parameters, which is adequate but not comprehensive.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Build a rectangular plate and drill drawing-grounded through holes,' specifying the action (build, drill) and resource (plate with holes). It further distinguishes two hole pattern modes (explicit positions vs. bolt circle), which differentiates it from sibling tools like add_bolt_circle or add_drill_pattern that only handle hole patterns without creating the plate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the two modes of hole creation ('Use either explicit `hole_positions_mm` or a bolt circle'), giving clear context for parameter usage. However, it does not explicitly state when to use this compound tool versus alternative tools (e.g., build_rectangular_pocket plus add_bolt_circle), nor does it mention any prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
build_rectangular_pocketA
Hacer un vaciado rectangular en una sola operación.
Junior workflow: "agrégame un vaciado de 30x20mm centrado en (50, 30) de la cara frontal, 5mm de profundidad". Composes: create_sketch(plane) -> create_rectangle(corners) -> extrude_cut
Args: plane: Sketch plane — "front"/"top"/"right" (English) or "Alzado"/"Planta"/"Vista lateral" (Spanish), or a custom "Plano1" returned by create_reference_plane. center_x_mm, center_y_mm: Center of the pocket in sketch coords. width_mm: Pocket extent in the sketch's X direction. Must be > 0. height_mm: Pocket extent in the sketch's Y direction. Must be > 0. depth_mm: Cut depth. Required positive when end_condition="blind"; ignored when end_condition="through_all". end_condition: "blind" (fixed depth) or "through_all" (through the entire body). Default "blind". reverse_direction: Flip the cut direction. The plane-anchored default cuts toward the SW-default side of the sketch plane; if the parent body sits on the OTHER side the pocket cuts into air and extrude_cut returns None — pass True to correct it (same escape hatch as extrude_cut's reverse_direction). target_bodies: Restrict the cut to these body names (from get_active_part_info "bodies"). None (default) lets SW cut every body the pocket intersects — pass a list to keep a through cut from punching unintended bodies in a multi-body part.
Returns the resulting Cut-Extruir Feature info.
Example — 30x20mm pocket 5mm deep, centered on origin of Front plane: build_rectangular_pocket("front", 0, 0, 30, 20, 5)
| Name | Required | Description | Default |
|---|---|---|---|
| plane | Yes | ||
| depth_mm | No | ||
| width_mm | Yes | ||
| height_mm | Yes | ||
| center_x_mm | Yes | ||
| center_y_mm | Yes | ||
| end_condition | No | blind | |
| target_bodies | No | ||
| reverse_direction | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries full burden. It details parameter effects (e.g., reverse_direction flips cut, target_bodies restricts bodies, end_condition ignored if through_all) and notes that the pocket may cut into air if the parent body is on the wrong side. Return value is described as 'Cut-Extruir Feature info'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is moderately long but well-structured, with a clear intro, workflow breakdown, and parameter list. It is front-loaded with the core purpose and example, though some sentences could be tightened.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 9 parameters and no output schema, the description covers parameter usage thoroughly, includes an example invocation, and describes the return value type. It could be improved by detailing the structure of the returned feature info, but is largely complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description adds comprehensive meaning for all 9 parameters. It includes examples for plane (English/Spanish), units for dimensions, constraints (e.g., width_mm > 0), defaults, and special behavior (e.g., depth_mm ignored when end_condition='through_all').
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Hacer un vaciado rectangular en una sola operación' (Make a rectangular pocket in a single operation). It also provides a concrete example workflow, distinguishing it from generic cut tools like extrude_cut.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a junior workflow example and explains it composes create_sketch, create_rectangle, extrude_cut, implying it is a shortcut. However, it does not explicitly state when to use this tool over alternatives or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
build_revolved_profileA
Build an axisymmetric profile in one safe chain.
Creates a reference axis, builds an exact closed profile, then revolves it.
This is the preferred path for turned parts where the sketch profile is
already known as ordered line/arc segments. Segment coordinates accept
string expressions over variables (e.g. "D/2") — a size variant is the
same call with a new variables dict.
| Name | Required | Description | Default |
|---|---|---|---|
| exact | No | ||
| merge | No | ||
| plane | No | front | |
| segments | Yes | ||
| angle_deg | No | ||
| variables | No | ||
| axis_reference_1 | No | front | |
| axis_reference_2 | No | top | |
| reverse_direction | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It mentions a 'safe chain' and the steps involved, but lacks details on permissions, error handling, or side effects. It adds useful context about string expressions in coordinates but is not comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise at 4 sentences, each adding value. It front-loads the main purpose, then provides usage context and a noteworthy feature (string expressions). No extraneous information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 9 parameters, no output schema, and 0% schema coverage, the description is incomplete. It covers only purpose and two parameters, leaving many behavioral and parameter details unaddressed, which is inadequate for an AI agent to use correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%. The description adds meaning to 'segments' (ordered line/arc) and 'variables' (string expressions), but does not explain parameters like exact, merge, plane, angle_deg, or axis references. It compensates partially but not enough for 9 parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool builds an axisymmetric profile by creating a reference axis, closed profile, and revolving. It explicitly distinguishes this as the preferred path for turned parts with known ordered segments, differentiating it from siblings like revolve_sketch and build_closed_profile.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a clear context for when to use: 'for turned parts where the sketch profile is already known as ordered line/arc segments.' It implies this is the recommended approach but does not explicitly state when not to use or list alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
build_stepped_shaftA
Flecha escalonada — build a stepped (multi-diameter) cylindrical shaft in one call. Standard turned-part workflow for autoparts: flechas de transmisión, bujes con escalones, poleas, ejes de salida.
Junior workflow: "una flecha de Ø10×20, luego Ø20×30, luego Ø15×15". Composes: create_reference_axis(front, top) -> X axis through origin create_sketch("front") -> profile in XY plane create_line × N -> stepped half-silhouette revolve_sketch(axis_name) -> boss-revolve
Args: diameters_mm: List of step diameters in mm. One per step. Must be 1..20 entries, all > 0. v1 has no taper — each step is a pure cylinder of constant diameter. lengths_mm: List of step lengths in mm. Same length as diameters_mm. All > 0. angle_deg: Sweep angle in (0, 360]. Default 360 = full revolution. Partial angles produce a sector (useful for cams or half-housings). merge: True (default) merges with adjacent solid material. False keeps the shaft as a separate body (multi-body modeling).
Returns dict: name, type, dimensions: Standard Feature info from revolve_sketch (type='boss_revolve', D1=angle_deg). axis_name: The "Eje{N}" reference axis created. Reusable in circular_pattern or further revolve calls. step_count, total_length_mm, max_diameter_mm: Computed metadata for the LLM to verify against intent.
Caveat (v1 orientation): the shaft always grows along the +X world axis from the origin, sketched on the Front plane. To orient differently, use revolve_sketch directly with a custom axis + sketch plane.
Caveat (transitions): each step is a square shoulder (no fillet/chamfer between steps). Post-process with fillet/chamfer on the resulting edges if smoother transitions are needed.
Caveat (no taper): each step is a pure cylinder. For tapered shafts (e.g. transmission shafts with conical sections), use revolve_sketch with a triangular profile section.
Example — 3-step pulley shaft: build_stepped_shaft( diameters_mm=[10, 20, 15], lengths_mm=[20, 30, 15], )
| Name | Required | Description | Default |
|---|---|---|---|
| merge | No | ||
| angle_deg | No | ||
| lengths_mm | Yes | ||
| diameters_mm | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries full burden. It fully discloses the composition (creates axis, sketch, lines, revolve), orientation (along +X, Front plane), square shoulders (no fillets), and output structure. Limitations (v1 no taper, fixed orientation) are clearly stated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with title, workflow, args, returns, caveats, and example. It is front-loaded with the purpose. While slightly long, every sentence adds value; no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema or annotations present. The description covers purpose, parameters, internal behavior, output structure, caveats, and example. For a tool with 4 parameters and moderate complexity, this is fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must explain all parameters. It does so thoroughly: diameters_mm as list of step diameters, lengths_mm same length, angle_deg sweep angle (0,360] default 360, merge boolean default true. Constraints (1..20 entries, >0) are provided, adding significant value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states 'Flecha escalonada — build a stepped (multi-diameter) cylindrical shaft in one call.' It clearly identifies the resource (stepped shaft) and verb (build), and distinguishes from siblings like revolve_sketch by noting it is a composite operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a junior workflow example, caveats for orientation, transitions, and no taper, and explicitly mentions when to use revolve_sketch directly for tapered shafts or custom orientation. It includes a concrete example, giving strong guidance on when and how to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
build_threaded_bossA
Saliente roscado — cylindrical boss with a centered tap hole, in one call. Standard autoparts pattern: torres roscadas en carcasas (threaded posts on housings), salientes para tornillos, mounting bosses on stamped/cast brackets, sensor mounts.
Junior workflow: "agrega un saliente roscado M8 en el centro, Ø20mm × 12mm de altura, rosca 10mm". Composes: outer disk -> extrude_sketch (the boss body) tap hole -> extrude_cut (ISO 2306 tap-drill diameter)
Args: plane: Sketch plane — "front"/"top"/"right" (English) or "Alzado"/"Planta"/"Vista lateral" (Spanish), or a custom "Plano1" returned by create_reference_plane. center_x_mm, center_y_mm: Boss center in sketch coords. outer_diameter_mm: Boss OD. Must be > 0 and > tap-drill diameter (the boss must have a wall around the tap). height_mm: Boss extrusion height. Must be > 0. thread_size: ISO Metric — 'M5' | 'M6' | 'M8' | 'M10' | 'M12'. The tap-drill diameter is looked up from ISO 2306 coarse- pitch (M5 → 4.2, M6 → 5.0, M8 → 6.8, M10 → 8.5, M12 → 10.2). thread_depth_mm: Tap depth in mm. Default = 0.8 × height_mm (leaves 20% of the boss as solid base — typical for cast/ machined bosses). Must be ≤ height_mm if blind. end_condition: 'blind' (depth-controlled, default) or 'through_all' (passes through the boss + any material below). reverse_extrude: If True, the boss grows opposite the SW-default direction along the sketch plane normal. Useful when the boss should sit on the opposite side of the parent body. tap_target_bodies: Restrict the tap cut to these body names (from get_active_part_info "bodies"); None lets SW cut every body the tap intersects. Pass [the boss/parent body] to keep a through_all tap from punching unintended bodies below it.
Returns dict: boss: Feature info for the cylinder (type=boss_extrude). tap_hole: Feature info for the tap (type=cut_extrude). thread_size, tap_drill_diameter_mm, thread_depth_mm: echo back the standard data for LLM verification.
Caveat (v1): the tap hole shows as a 'Cortar-Extruir' feature, NOT a 'Taladro roscado' Hole-Wizard feature. No cosmetic threads (rosca visualization). For a Hole-Wizard tap with cosmetic threads, use hole_wizard directly on the boss face after building the boss with build_flange_boss.
Example — M8 threaded boss on top face, Ø20×12mm, 10mm tap: build_threaded_boss('top', 0, 0, 20, 12, 'M8', thread_depth_mm=10)
Example — M6 through-tapped boss for a brass insert: build_threaded_boss('top', 25, 0, 16, 8, 'M6', end_condition='through_all')
| Name | Required | Description | Default |
|---|---|---|---|
| plane | Yes | ||
| height_mm | Yes | ||
| center_x_mm | Yes | ||
| center_y_mm | Yes | ||
| thread_size | Yes | ||
| end_condition | No | blind | |
| reverse_extrude | No | ||
| thread_depth_mm | No | ||
| outer_diameter_mm | Yes | ||
| tap_target_bodies | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses the tool's behavior: it composes an extrude_sketch and an extrude_cut, notes that the tap hole is not a Hole-Wizard feature, and explains limitations (no cosmetic threads). It also describes the return dict and provides caveats about v1.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured into clear sections (overview, workflow, args, returns, caveats, examples), but it is somewhat verbose with extraneous details like the Spanish phrase. However, it is front-loaded with the core purpose and remains informative without repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (10 parameters, no output schema, no annotations), the description is exceptionally complete. It covers all parameters, constraints, return values, usage examples, and caveats. It leaves no significant gaps for an AI agent to misinterpret.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage, so the description compensates fully by explaining each parameter in detail: plane with examples, center coordinates, outer_diameter_mm with constraint, height_mm, thread_size with ISO metric mapping, thread_depth_mm with default, end_condition options, reverse_extrude, and tap_target_bodies. This adds significant value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool creates a cylindrical boss with a centered tap hole. It distinguishes from alternatives like hole_wizard by noting that this tool does not produce cosmetic threads, and it explicitly positions itself as a standard autoparts pattern. The purpose is specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use this tool (for threaded bosses in autoparts patterns) and when not to (when cosmetic threads are needed, use hole_wizard). It includes a junior workflow example and constraints on parameters (e.g., outer_diameter_mm must be > tap-drill diameter).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
build_variant_familyA
Crear una familia de configuraciones cambiando una sola dimensión.
Junior workflow: "crea las configuraciones Corto/Mediano/Largo con longitudes 80/120/160mm". Composes (create_config + activate + modify_dimension) once per variant + a single save at the end.
Args:
feature_name: Name of the feature carrying the dimension (e.g.
"Saliente-Extruir1"). Must exist in the active part.
dimension_name: Name of the dimension on that feature (e.g. "D1").
Must exist in the feature's dimensions dict.
variants: Mapping from configuration name → new dimension value
(mm). Non-empty, all values > 0.
parent_config: Parent configuration for the new variants (empty =
root). Same value passed to create_configuration for each.
activate_at_end: Optional name of the variant to activate after
creation. None = leave the active config wherever it landed
after the loop. Must be a key of variants if provided.
Returns: {"created": [variant names in iteration order], "active_at_end": name | None}.
Caveat: If the loop fails partway through (e.g. modify_dimension raises on variant #2), the part is left with the configurations that were created up to that point. v1 surfaces the error with partial- state info so the user can manually delete_configuration to clean up. Auto-rollback isn't attempted (deletion is deferred by design per CLAUDE.md).
Example — 3-variant length family: build_variant_family( "Saliente-Extruir1", "D1", {"Corto": 80.0, "Mediano": 120.0, "Largo": 160.0}, activate_at_end="Mediano", )
| Name | Required | Description | Default |
|---|---|---|---|
| variants | Yes | ||
| feature_name | Yes | ||
| parent_config | No | ||
| dimension_name | Yes | ||
| activate_at_end | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It includes a 'Caveat' section detailing partial failure behavior and the lack of auto-rollback, which is useful. It also explains the composition order and single save at the end. However, it could be more explicit about side effects like saving the document.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a purpose line, args section, returns, caveat, and example. Each section adds value, though the arg descriptions could be slightly more concise. The caveat is particularly important and earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and the tool's complexity (composing multiple operations), the description is highly complete. It covers purpose, all parameters with constraints, return format, failure behavior, and provides an example. The caveat addresses real-world usage concerns.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 0% description coverage, so the description must compensate. It provides detailed semantics for each parameter: constraints for variants (non-empty, >0), meaning of parent_config, and requirement that activate_at_end must be a key of variants. This far exceeds the schema's basic type info.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Crear una familia de configuraciones') and resource (cambiando una sola dimensión). It distinguishes itself from siblings by explaining it composes create_config, activate, and modify_dimension into a single macro, which is a higher-level operation than individual tools like create_configuration.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a junior workflow example but lacks explicit when-to-use vs when-not-to-use guidance. It implies usage for multi-variant creation along one dimension, but does not explicitly contrast with using individual tools for a single variant. More directive guidance would improve agent decision-making.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
capture_viewsA
Render the active part or assembly to PNG for visual verification.
Privacy warning: the connected MCP client decides where returned image content is sent. A hosted model provider may receive these screenshots. Pixels are not redacted and may contain confidential geometry, logos, file names, or part numbers. Review the client's data policy before using this tool with sensitive models.
Cadence — render at CHECKPOINTS and at the END of a build, not after
every feature: each call is one image per view (heavy tokens). Between
features trust the cheap signals (mutator receipt.feature_count,
batch summary); a final render before declaring a part done is
mandatory (or bundle it via verify_build_report capture_view_names).
Per-feature renders are for debugging a flaky build.
Args: views: subset of ["iso", "front", "top", "right", "trimetric"]. Default (None) = ["iso", "front", "top", "right"]. Unknown view name → ValueError (fail fast, no silent default). with_dims: accepted but a v1 NO-OP (dimension-annotation overlay needs a much larger surface). The param exists so the signature is stable. TODO(with_dims). section: optional {"plane": "front"|"top"|"right" (or Spanish UI name), "offset_mm": float} — render each view through a graphics CUT PLANE so INTERNAL cuts the outer silhouette hides (pockets, banded/saddle cuts, bores) become visible. offset_mm is signed from the standard plane (0 = through origin). Use this to diff against a drawing's SECTION view. Standard projections cannot show an occluded internal cut; for a purely internal feature an iso render proves nothing — also confirm it via list_faces.
Returns a list: one inline image per requested view, followed by a summary
dict with the resolved
views, the local PNG paths, with_dims, and a privacy note.
Caveat: requires a part open in SolidWorks. Image bytes are NOT name-redacted (see ADVERTENCIA). Temp PNGs live in the OS temp dir and are read lazily when the result is serialized — they are not deleted by this tool.
Example — verify a base plate before drilling: extrude_sketch(25.0) capture_views(views=["iso", "front"]) # eyeball it get_bounding_box() # confirm extents
| Name | Required | Description | Default |
|---|---|---|---|
| views | No | ||
| section | No | ||
| with_dims | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries full burden. It discloses privacy risks (images may contain confidential data, sent to client/host), cadence advice, behavior of parameters (with_dims is a no-op, section creates cut planes), return format (list of images + summary), and caveats (requires open part, temp files not deleted). No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is lengthy but well-structured with clear sections (privacy warning, cadence, args, returns, caveat, example). Each part adds value, though it could be slightly tightened. The front-loading of purpose and privacy warning is effective.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description covers return values (list of images + summary dict with resolved views, paths, with_dims, privacy note) and handles edge cases (unknown view raises ValueError, section behavior, with_dims no-op). Includes an example showing integration with other tools. All essential context for correct use is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 0% description coverage; the description fully explains all three parameters. views: acceptable subset of view names, default, error on unknown. section: optional dict with plane and offset_mm, how it works for internal cuts. with_dims: accepted but no-op, rationale. Provides concrete examples and constraints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool renders the active part or assembly to PNG for visual verification. It uses specific verbs and resources (render, PNG, visual verification) and distinguishes itself from sibling tools by emphasizing its role in visual checks, not modeling or other operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance: use at checkpoints and end of build, not after every feature; trust cheaper signals in between; per-feature renders only for debugging; mandatory final render. It also mentions an alternative (verify_build_report capture_view_names) for bundling renders.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
chamferA
Chaflán — bevel one or more edges (distance + angle).
Edge addressing, the selector schema (recommended), failure modes, and
the batch-all-identical-edges-in-ONE-call rule are IDENTICAL to fillet
— see its description. E.g. chamfer every hole rim at the top face (z≈10):
chamfer(selector={"filter": {"geom": "circle", "axis": "z",
"at_mm": 10, "tol_mm": 0.5}}, distance_mm=1.0)
Standard autoparts use: bolt-hole entry chamfers (lead-in for assembly), deburred edges on machined parts, parting-line breaks on cast housings. 45° distance-angle is the autoparts default; distance-distance and vertex chamfers are deferred.
Args: edge_midpoints_mm: Optional. Edge addressing by midpoint (line edges; from list_edges() e["midpoint_mm"]). distance_mm: Chamfer leg length (the distance the chamfer extends along the edge's faces). Must be > 0. Typical autoparts values: 0.3-0.5mm for deburr, 1-2mm for bolt-hole lead-ins. angle_deg: Angle from the reference face. Must be in (0, 90). Default 45° (standard for almost all autoparts chamfers). flip: If True, the angle is measured from the OTHER adjacent face. Useful when the default direction goes the wrong way. edge_indices: Optional. Edge addressing by (body, index) — required for closed-loop circular edges (midpoint_mm is None for those).
Returns the resulting Chaflán feature (name, type="chamfer", dims).
| Name | Required | Description | Default |
|---|---|---|---|
| flip | No | ||
| selector | No | ||
| angle_deg | No | ||
| distance_mm | No | ||
| edge_circles | No | ||
| edge_indices | No | ||
| edge_midpoints_mm | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries the burden. It discloses parameter behavior, typical values, and the return type. It mentions the batch-all-identical-edges rule and failure modes are identical to fillet, but doesn't detail side effects or nesting limitations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear opening, followed by detailed parameter explanations and an example. It is slightly verbose but every sentence adds value, and it is front-loaded with the main action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 7 parameters, no output schema, and no annotations, the description covers most critical aspects: typical use cases, parameter constraints, and references to fillet for common patterns. It lacks details on edge_circles and the full selector schema, but overall provides sufficient context for an AI agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds meaning beyond the schema for 6 of 7 parameters, explaining distance_mm, angle_deg, flip, edge_midpoints_mm, edge_indices, and selector with typical values and use cases. However, it misses edge_circles entirely, and the selector is only briefly described via reference to fillet.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Chaflán — bevel one or more edges (distance + angle).' It also distinguishes from fillet by referencing it for common details and provides an example use.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage context with standard autoparts applications, default angles, and deferred features. It directs users to fillet for the selector schema and failure modes, but doesn't explicitly state when not to use or alternatives beyond fillet.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
circular_patternA
Circular pattern (patrón circular) — repeat features around an axis.
Standard autoparts use: bolt circles on flanges, fan blades, gear teeth blanks, dial markings. Always preceded by a create_reference_axis call to define the rotation axis.
Args:
feature_names: Names of features to pattern. Pass exact names from
get_active_part_info — e.g. ["Cortar-Extruir1"] for one hole.
axis_name: Name of the axis to rotate around. Use the "Eje1"-style
name returned by create_reference_axis.
count: Total number of instances INCLUDING the original (>= 2).
For 6 holes around a bolt circle, pass count=6.
total_angle_deg: Total angular span in degrees. Default 360
(full circle, evenly distributed). Pass smaller values for
partial arcs (e.g. 180 for a semicircle pattern, 90 for a
quarter, 120 for three instances spread over a third turn).
equal_spacing: When True (default), total_angle_deg is the
total span and instances divide it equally. When False, it's
interpreted as the angle BETWEEN consecutive instances —
useful for "every 30 degrees, count=N" use cases.
reverse: Flip rotation direction (clockwise vs counter-clockwise
when viewing along the axis).
Returns the new pattern Feature with name (e.g. "CirPattern1").
Example — bolt circle of 6 evenly-spaced holes around an axis through a hole's center: eje = create_reference_axis("Cara<3>@Cortar-Extruir1") circular_pattern(["Cortar-Extruir2"], eje["name"], count=6)
Example — 3 ribs over the top half of a flange (180° arc, equal spacing): circular_pattern( ["Saliente-Extruir1"], "Eje1", count=3, total_angle_deg=180.0, )
| Name | Required | Description | Default |
|---|---|---|---|
| count | Yes | ||
| reverse | No | ||
| axis_name | Yes | ||
| equal_spacing | No | ||
| feature_names | Yes | ||
| total_angle_deg | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It explains parameter behaviors (equal_spacing, reverse, total_angle_deg) and mentions the return value (a new Feature with name). It does not discuss side effects or destructive actions, but the tool is a pattern creation which is typically non-destructive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with clear sections, bullet points for arguments, and examples. While verbose, every sentence adds value for a parameter-heavy tool. Could be slightly more concise, but overall effective.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 6 parameters and no output schema, the description covers all parameters, explains the return value, and provides two complete examples. It also notes the prerequisite, making it fully actionable for an AI agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the description provides detailed semantics for all 6 parameters, including types, defaults, and usage (e.g., count includes original, total_angle_deg default 360, equal_spacing behavior). This adds significant value beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'repeat features around an axis' and provides specific use cases like bolt circles and fan blades. It distinguishes from siblings like linear_pattern by describing the circular axis-based repetition and the prerequisite create_reference_axis call.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly mentions the prerequisite create_reference_axis call and provides examples for common use cases. It does not explicitly state when not to use, but the context and examples imply appropriate scenarios, and it guides the user on parameter settings for partial arcs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
clarify_autoparts_intentA
Devuelve interpretaciones autoparts para un término en español/spanglish.
Phase 2 / Layer 2: cuando un usuario use un término informal de autopartes ('rin', 'buje', 'soporte', 'brida', 'cubo', 'flecha', 'polea', 'tapa', 'caja', 'gancho', 'balero', etc.) y necesites confirmar qué arquetipo geométrico quiere ANTES de proponer un plan, llama esta herramienta para obtener el mapeo curado.
Devuelve:
primary_archetype: la interpretación más común
alternative_archetypes: otras lecturas razonables
typical_dimensions: rangos esperados (mm/grados/conteos)
disambiguation_question: pregunta exacta para el usuario
[en: Look up an informal Mexican-Spanish autoparts term and get its curated geometric interpretation — primary archetype + alternatives + typical dim ranges + a ready-to-ask disambiguation question — use it to ground your interpretation when the user's request hinges on an ambiguous term. v1 vocabulary is Mexican-Spanish-specific and fixed in code; v1.1 may make it customer-extensible.]
Args: term: The Spanish / Spanglish term to look up. Case- and accent-insensitive ('Rin', 'rin', 'RIN' all match).
Returns: On match: { "term": str, # canonical spelling "primary_archetype": str, # internal handle "primary_description": str, # Spanish description "alternative_archetypes": [str, ...], "alternative_descriptions": [str, ...], "typical_dimensions": {key: [min, max], ...}, "disambiguation_question": str, "notes": str, "found": True, } On miss: { "term": str, "found": False, "fallback": str, # what to do instead "available_terms": [str, ...], # what IS in the glossary }
Caveat: this v1 vocabulary is Mexican-Spanish autoparts only. Argentine, Brazilian, or Peninsular Spanish usage may differ. Customers wanting their own vocabulary need v1.1 customer-config support.
Caveat: NOT all terms have a clean primary archetype. Generic terms like 'soporte', 'caja', 'balero', 'tornillo', 'rosca' map to 'ambiguous' or 'needs_custom_modeling' — use the disambiguation_question to narrow down.
Example — disambiguating 'rin' before building geometry: intent = clarify_autoparts_intent("rin") # → primary_archetype="wheel_rim", # alternatives=["wheel_hub_disc", "brake_rotor"], # typical_dimensions={od_mm: [330, 560], pcd_mm: [98, 120], ...} # Use the disambiguation_question to confirm the reading with # the user before any geometry runs.
| Name | Required | Description | Default |
|---|---|---|---|
| term | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully shoulders behavioral disclosure. It details return structures for match and miss, caveats about Mexican-Spanish specificity, terms that are generic or ambiguous, and mentions version limitations (v1 vs v1.1). No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer but well-structured with sections for use case, return values, caveats, and example. Information is front-loaded with the core purpose in Spanish and English. Every sentence adds value, but the dual-language nature slightly increases length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 1 parameter, no output schema, and no annotations, the description covers purpose, parameters, return structures (both match and miss), caveats, and example usage. It is fully complete for the tool's complexity and context signals.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% (no description in schema), so description adds all meaning. It thoroughly explains the 'term' parameter: case- and accent-insensitive, and specifies the context (Spanish/Spanglish autoparts term). This far exceeds baseline and compensates for lack of schema description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool returns curated geometric interpretations for informal Spanish/Spanglish autoparts terms, specifying the verb 'look up' and resource 'autoparts terms'. It distinguishes itself from sibling CAD/modeling tools by being a disambiguation/interpretation step before proposing a plan.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs to use in Phase 2 / Layer 2 when a user uses an informal term and interpretation is needed before proposing a plan. Provides example terms and emphasizes the need to confirm geometric archetype via the disambiguation question. Though no explicit 'do not use', the context and caveats effectively guide appropriate usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
close_active_documentA
Cerrar el documento activo en SolidWorks.
Útil para flujos iterativos (build → save_as → close → new_part → rebuild) que de otra manera dejan ventanas viejas abiertas y hacen que save_as falle por colisión de archivo. Por defecto exige que el documento esté guardado; pasa force=True para descartar cambios sin aviso. [en: Close the active document in SolidWorks. Used in iterative build/save/rebuild flows that otherwise pile up open windows and make save_as collide on the open file. Default refuses to close a dirty doc; force=True discards unsaved changes silently.]
Args: force: False (default) raises if the active document has unsaved changes. True silently discards them — use ONLY when the doc is disposable (e.g., rebuilding from scratch). Distinct verbs under the hood: ISldWorks.CloseDoc for clean docs, ISldWorks.QuitDoc for force-discards.
Returns dict: closed: True if the close succeeded. name: The document title at the time of close (trailing '*' stripped if present). was_modified: Whether the document had unsaved changes at the moment of close (== True only when force=True was needed).
Raises: - SolidWorksError if no active document. - SolidWorksError if the document was dirty and force=False.
Example — canonical iterative-rebuild flow: save_as(r"C:\CAD\output\shaft.SLDPRT") close_active_document() # default: errors if unsaved new_part() # fresh blank # ... rebuild geometry ...
Example — force-close a throwaway probe: close_active_document(force=True)
| Name | Required | Description | Default |
|---|---|---|---|
| force | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Explains default behavior (refuses dirty doc) and force behavior (discards unsaved changes), underlying verb distinction (CloseDoc vs QuitDoc), return dict fields (closed, name, was_modified), and error conditions. Highly transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with sections (Args, Returns, Raises, Examples) and front-loaded purpose. However, includes both English and Spanish translations which may be slightly redundant. Generally clear but could be more concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, description covers return dict and errors. Provides examples, explains error conditions, and gives canonical use cases. Complete for a simple tool with one parameter.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 0% description coverage (no param descriptions), so description must add meaning. It does: explains default (False) raises error if dirty, True silently discards, with use case (throwaway doc). Adds significant value beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description uses specific verb 'Close' and resource 'active document in SolidWorks', with additional context about its role in iterative workflows. Clearly distinguishes from siblings like save_as and open_document.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly describes when to use (iterative build→save_as→close→new_part→rebuild flows) and why (prevents window pile-up and save_as collisions). Mentions default vs force behavior but doesn't explicitly state when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compile_feature_plan_from_drawing_specA
Compile a stored DrawingSpec into an ordered FeaturePlan.
Advisory only: returns MCP tool names + params to execute, but does not mutate SolidWorks. It supports the first PDF archetypes explicitly: axisymmetric_revolved, extruded_closed_profile, and plate_hole_pattern.
| Name | Required | Description | Default |
|---|---|---|---|
| drawing_spec_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries full burden. It discloses that the tool is advisory-only and does not mutate SolidWorks, and that it returns MCP tool names and parameters. Supported archetypes are listed. Missing details on error handling or behavior for unsupported archetypes, but overall strong.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences that convey all essential information without redundancy. The first sentence is a clear action statement; the second adds critical behavioral context. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one parameter and no output schema, the description covers purpose, non-mutating behavior, and supported archetypes. It hints at output (tool names+params). Minor gap: no mention of error states or behavior when archetype is not supported, but overall sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage for its single parameter. The description implies 'drawing_spec_id' is an identifier for a stored DrawingSpec, but adds no additional meaning, format, or usage context beyond the name.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool compiles a DrawingSpec into a FeaturePlan, uses a specific verb-resource pair, and distinguishes itself by being advisory-only and non-mutating. It also explicitly lists supported archetypes, making its scope clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied: use when you have a DrawingSpec and want a plan. However, there is no explicit guidance on when to use vs. alternatives (e.g., run_feature_plan), nor any when-not conditions. The advisory nature is mentioned but not contrasted with execution tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_arcA
Arco — draw a center-defined arc on the active sketch.
Center + radius + start/end angles. The angle convention is standard
math: 0° points along the +X sketch axis, angles grow CCW. The
direction flag picks which of the two possible arcs (the short
or long way around) gets drawn between the two endpoints.
Args:
cx_mm, cy_mm: Arc center in mm (sketch-local frame). Long-form
aliases center_x_mm / center_y_mm accepted (kwarg-only)
for parity with the composite tools. Pass one name per axis.
radius_mm: Arc radius in mm. Must be positive.
start_angle_deg: Start angle from the +X sketch axis.
Standard math convention (CCW-positive).
end_angle_deg: End angle, same convention. Must differ from
start_angle_deg (use create_circle for full circles).
direction: "ccw" (default) sweeps counter-clockwise from
start to end; "cw" sweeps the other way around. Counter-
intuitive: for the SAME start/end angles, "ccw" and "cw"
produce arcs that sweep opposite ways. Quarter-arc from
start=180° to end=90°: "cw" → 90° sweep (natural quarter),
"ccw" → 270° sweep (the long way around). If a revolve_sketch
after the arc fails, the arc landed on the wrong side —
flip direction.
Returns dict with center, radius, angles, direction, computed start/end XY coords, signed sweep angle, and arc length.
Common autoparts use: - Slot end-cap when create_slot doesn't fit (e.g. one-ended slot with custom radius) - 2D fillet between two lines in a sketch (radius = corner fillet, start/end angles set by the line directions) - Curved scraper / handle profiles where the chevron+slant polygon would otherwise approximate
Example — quarter circle, R=10, from +X axis to +Y axis, CCW: create_arc(0, 0, 10, 0, 90) # or equivalently: create_arc(center_x_mm=0, center_y_mm=0, radius_mm=10, start_angle_deg=0, end_angle_deg=90)
Example — rounded slot end at the right side of a horizontal slot (180° arc spanning the slot width = 6mm at x=50): create_arc(50, 0, 3, -90, 90)
Caveat: requires an active sketch (call create_sketch or create_sketch_on_face first).
| Name | Required | Description | Default |
|---|---|---|---|
| cx_mm | No | ||
| cy_mm | No | ||
| direction | No | ccw | |
| radius_mm | No | ||
| center_x_mm | No | ||
| center_y_mm | No | ||
| end_angle_deg | No | ||
| start_angle_deg | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Explains angle convention (CCW), direction flag with counter-intuitive example, returns dict with fields, and troubleshooting tip (flip direction if revolve fails). Missing some error cases but overall transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured: purpose first, then parameters, returns, use cases, examples, caveat. Front-loaded and efficient, though slightly long. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 8 parameters, no output schema, and no annotations, the description covers parameter conventions, examples, use cases, and a key caveat (active sketch needed). Does not cover all edge cases but is sufficient for typical use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 0% description coverage; the description explains all 8 parameters in detail: meanings, defaults, constraints (radius positive, start/end different), long-form aliases, and direction behavior. Fully compensates for schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'draw a center-defined arc on the active sketch' with specific parameters (center, radius, angles). It distinguishes from siblings like create_circle (full circles) and create_slot (slot end-caps).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context: requires active sketch, common use cases (slot end-cap, 2D fillet, curved profiles), and explicitly says to use create_circle for full circles. Lacks explicit when-not-to-use but gives good guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_circleA
Draw a circle on the active sketch.
Args:
cx_mm, cy_mm: Center point in mm (sketch-local frame). Long-form
aliases center_x_mm / center_y_mm accepted (kwarg-only) for
parity with the composite tools (add_bolt_circle,
build_rectangular_pocket, etc.). Pass one name per axis, not
both.
radius_mm: Circle radius in mm. Must be positive.
Returns the circle's center and radius/diameter. Common autoparts use: bolt holes, bearing bores, fillet circles before extruding/cutting.
Example — 8.5 mm clearance hole at origin (M8 medium per ISO 273): create_circle(0, 0, 4.25) # or equivalently: create_circle(center_x_mm=0, center_y_mm=0, radius_mm=4.25)
Caveat: requires an active sketch.
Caveat (paramétrico): el croquis NO es paramétrico. modify_dimension NO puede redimensionar el diámetro ni mover el centro post-hoc — solo la profundidad de extrusión es paramétrica. Si el usuario pide "hazlo más grande" o "cámbialo a Ø10", reconstruye desde una pieza nueva. [en: Sketch geometry has NO driving dimension — modify_dimension cannot resize the OD or move the center post-hoc; only extrude depth is parametric. To resize ("make it bigger"), rebuild from a fresh part.]
Related: add_bolt_circle (one call for N holes on a bolt circle — use instead of N create_circle + extrude_cut sequences for typical flange / bracket bolt patterns).
| Name | Required | Description | Default |
|---|---|---|---|
| cx_mm | No | ||
| cy_mm | No | ||
| radius_mm | No | ||
| center_x_mm | No | ||
| center_y_mm | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses behavior: requires active sketch, geometry is non-parametric (cannot resize post-hoc), returns center/radius/diameter, and suggests rebuilding from fresh part for resize. This goes beyond basic operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear header, parameter list, return, common uses, example, caveats, and related tools. It is front-loaded and every section adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having no output schema, the description covers return values. It includes prerequisites, limitations, and alternative tools. For a simple drawing tool, it is comprehensively complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description compensates by explaining all 5 parameters: cx_mm, cy_mm, radius_mm, and aliases center_x_mm, center_y_mm. It clarifies the constraint to pass one name per axis and that radius must be positive, with an example.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Draw a circle on the active sketch' with a specific verb and resource. It distinguishes itself from siblings by mentioning add_bolt_circle as an alternative for bolt patterns, and provides common autoparts uses.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the prerequisite (requires active sketch) and explicitly names an alternative tool (add_bolt_circle). It implies when to use via common uses, but does not explicitly state when not to use (e.g., for parametric circles).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_configurationA
Crear una configuración nueva en la pieza o ensamble activo.
Una configuración es metadata: comparte la geometría base pero permite variar supresiones de componentes/features y valores de dimensiones. Es la vía v1 para variantes (trim, tamaño, opcionales) sin duplicar archivos. [en: Create a new configuration on the active part or assembly. A configuration is metadata: shares base geometry but lets you vary component/feature suppressions and dimension values — the v1 path for variants without duplicating files.]
Args: name: New configuration name (must be unique; idempotent if it exists). parent: Optional parent configuration name (for derived configs). description: Optional description for the configuration.
Returns the configuration name.
Gotcha (verificado en vivo): crear la configuración la ACTIVA — la config activa ya no es la anterior. Lee active_config antes de confiar en operaciones "scoped" subsecuentes, y reactiva la config original si no querías cambiarte.
Related: build_variant_family (one call to create N configurations that vary suppressions and dimensions — use this when the user asks for "small/medium/large" or "M6/M8/M10" trim variants instead of N separate create_configuration calls).
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| parent | No | ||
| description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description fully covers behavioral traits: it discloses that creating a configuration activates it, warns to read active_config before relying on scoped operations, and notes idempotency. This is thorough and honest.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-organized with clear sections (purpose, args, gotcha, related) and is bilingual which adds some length but is acceptable. It is informative without being overly verbose, though the 'verificado en vivo' note could be more concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema, the description states it returns the configuration name. It covers behavior, parameters, side effects, and alternatives thoroughly. For a tool with 3 parameters, this is complete and leaves no obvious gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 0% parameter descriptions, but the description provides clear explanations for each parameter: name (unique, idempotent), parent (optional for derived configs), description (optional). This adds significant meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool creates a new configuration on the active part or assembly, explains what a configuration is (metadata sharing geometry but allowing variations), and distinguishes from the sibling build_variant_family which creates multiple configs in one call.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use (v1 path for variants without duplicating files) and names an alternative tool (build_variant_family) for creating multiple variants. Also includes a gotcha about activation side effect, guiding the agent on proper usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_lineA
Draw a line on the active sketch.
Args: x1_mm, y1_mm: Start point in mm (sketch-local frame). x2_mm, y2_mm: End point.
Returns the line's geometry (endpoints + length). Used as a building block for non-rectangular profiles before extrusion.
Caveat: requires an active sketch (call create_sketch first).
Caveat (paramétrico): el croquis NO es paramétrico. modify_dimension NO puede mover los endpoints ni cambiar la longitud post-hoc — solo la profundidad de extrusión es paramétrica. Para cambiar la línea, reconstruye desde una pieza nueva. [en: Sketch geometry has NO driving dimension — modify_dimension cannot move endpoints or resize length post-hoc; only extrude depth is parametric. To resize, rebuild from a fresh part.]
| Name | Required | Description | Default |
|---|---|---|---|
| x1_mm | Yes | ||
| x2_mm | Yes | ||
| y1_mm | Yes | ||
| y2_mm | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries full burden. It discloses return value (geometry with endpoints and length) and includes a critical caveat about the line not being parametric (modify_dimension cannot adjust endpoints or length). This reveals important behavioral limits beyond the simple 'draw' action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The first sentence front-loads the purpose. The structure includes args, return, usage, and caveats. The bilingual caveat adds length but is reasonable for international users. Could be slightly more concise, but overall well-organized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema or annotations, the description covers purpose, parameters, return value, prerequisite, and an important behavioral caveat. It does not mention whether the line is immediately visible or if there are constraints, but this is sufficient for a simple tool given sibling context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must add meaning. It explains x1_mm, y1_mm as 'Start point in mm (sketch-local frame)' and x2_mm, y2_mm as 'End point.' This provides units and frame context that the schema lacks, though coordinate system orientation or bounds are omitted.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Draw a line on the active sketch.' It distinguishes the tool from siblings like create_rectangle, create_circle, and create_arc by noting it is used for non-rectangular profiles before extrusion. The verb 'Draw' and resource 'line' are specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly requires an active sketch via 'requires an active sketch (call create_sketch first).' It also implies usage as a building block for non-rectangular profiles, but does not explicitly exclude alternatives (e.g., use create_rectangle for rectangles). Clear context but lacks explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_rectangleA
Draw a corner-defined rectangle on the active sketch.
Args: x1_mm, y1_mm: One corner of the rectangle in mm (sketch-local). x2_mm, y2_mm: The opposite corner.
The rectangle is added to whatever sketch was started by the most recent create_sketch() call. Returns the rectangle's geometric properties (width and height in mm) for the LLM to verify.
Example — 50mm × 30mm rectangle starting at the origin: create_rectangle(0, 0, 50, 30)
Caveat: requires an active sketch (create_sketch first).
Caveat (paramétrico): el croquis NO es paramétrico. modify_dimension NO puede redimensionar el ancho/alto post-hoc — solo la profundidad de extrusión es paramétrica. Para cambiar el tamaño del rectángulo, reconstruye desde una pieza nueva. [en: Sketch geometry has NO driving dimension — modify_dimension cannot resize the rectangle post-hoc; only extrude depth is parametric. To resize, rebuild from a fresh part.]
Related: build_rectangular_pocket (sketch + cut in one call when the intent is a rectangular pocket — most common autoparts use of this primitive).
| Name | Required | Description | Default |
|---|---|---|---|
| x1_mm | Yes | ||
| x2_mm | Yes | ||
| y1_mm | Yes | ||
| y2_mm | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes that rectangle is added to most recent sketch, returns geometric properties, and crucially warns that rectangle is not parametric (modify_dimension cannot resize; only extrude depth is parametric). No annotations provided, so description fully bears transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with args, example, caveat, and related tool. Front-loaded purpose. No filler; every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, parameters, example, behavioral caveats (non-parametric), prerequisites, and sibling alternative. No output schema needed since return value is simple geometric properties. Complete for safe agent usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Explains param meaning: 'One corner of the rectangle in mm' and 'The opposite corner.' Provides example (0,0,50,30) to clarify usage. Input schema has 0% description coverage, so description compensates fully.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'Draw a corner-defined rectangle on the active sketch.' Distinguishes from sibling build_rectangular_pocket by noting it is sketch-only vs sketch+cut.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly requires an active sketch ('create_sketch first'). Provides alternative build_rectangular_pocket for rectangular pockets, guiding when to use this primitive vs a combined operation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_reference_axisA
Create a reference axis (eje de referencia) at the intersection of two planes — or, where supported, from a single feature reference.
Two ways to call:
Two planes (recommended for v1) — pass both
reference_nameandreference_2as plane names. The axis is created at their intersection. Verified live for default-plane combinations (Alzado + Planta, Alzado + Vista lateral, etc.). The most reliable v1 axis source.Single reference (limited) — pass only
reference_name. Currently works for refplane / refaxis feature names, but face/edge names ("Cara@Pieza1") don't resolve in part-document context in this SolidWorks binding. Until face introspection ships, prefer the two-plane path.
World-axis mapping for the two-plane intersection mode. The intersection of two default planes through the origin lies along one of the world axes — which one depends on the pair you pick:
reference_name | reference_2 | World axis returned |
"front" | "top" | X (left-right) |
"front" | "right" | Y (up-down) |
"top" | "right" | Z (in-out) |
(Spanish UI names map identically: "Alzado"+"Planta" → X, etc.)
For axisymmetric revolves around world X — the standard orientation
that build_stepped_shaft and build_revolved_profile assume — use
("front", "top"). This is the same call build_stepped_shaft
makes internally (see the construction site at build_stepped_shaft
in this file). Picking
("front", "right") instead returns world Y and your revolve will
sweep the wrong way around — surface gets rebuilt.
Args: reference_name: Name of the first entity. For two-plane mode, the first plane: "front"/"top"/"right" (English) or "Alzado"/"Planta"/"Vista lateral" (Spanish UI), or a custom "Plano1" from create_reference_plane. reference_2: Name of the second plane for two-plane intersection mode. Same naming rules as reference_name. Pass None for the single-reference mode.
Returns: {"name": "Eje1", "type": "two_plane_intersection" | "from_one_object"}
Use case: define a rotation axis for circular_pattern when you don't have a cylindrical-face name. The intersection of two perpendicular default planes through the origin is a perfectly good axis for any feature centered there.
Example — axis through the part origin (intersection of Front + Top), then 6-instance circular pattern around it: eje = create_reference_axis("front", reference_2="top") circular_pattern(["Cortar-Extruir1"], eje["name"], count=6)
| Name | Required | Description | Default |
|---|---|---|---|
| reference_2 | No | ||
| reference_name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite no annotations, the description fully discloses behavior: creation operation, modes available, limitations of single-reference mode (face/edge names not supported), and world-axis mapping. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with bullet points, a table, and a code example. It is lengthy but every section adds value; no redundancy. Minor deduction for length but fully justified by complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 2 parameters, no output schema, and no annotations, the description is exceptionally complete: covers return value format, use cases, limitations, examples, and edge cases. No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description provides complete parameter semantics: explains reference_name and reference_2 inputs, naming rules (English/Spanish, custom planes), and default values. This fully compensates for the lack of schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool creates a reference axis from two planes or a single feature, with explicit verb 'Create' and resource 'reference axis'. It distinguishes this from related sibling tools like create_reference_plane by specifying the output and usage context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance on when to use the two-plane mode (recommended) vs single-reference mode (limited), gives detailed mapping of plane pairs to world axes, and includes an example with a specific use case for circular patterns. No ambiguity about alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_reference_planeA
Create a reference plane parallel to a default plane or a face.
Two anchoring modes (pass exactly ONE of offset_from /
face_centroid_mm):
Default-plane mode — pass
offset_fromas a default plane name. The new plane is parallel to that source plane, offset by offset_mm.Face mode (Lote 3 — chained features) — pass
face_centroid_mmas a 3-element [x, y, z] from list_faces(). The new plane is parallel to that face, offset along the face's outward normal direction. Use case: anchor a sketch above an angled bracket flange, on a draft surface, or above a previously- extruded boss top.
Args: offset_from: Default plane name — "front" / "top" / "right" (English) or Spanish UI: "Alzado" / "Planta" / "Vista lateral". offset_mm: Signed distance in mm. Positive = along the source plane's normal (or the face's outward normal); negative = opposite. Zero is rejected (would produce a coincident plane). Offsets negativos verificados en vivo (2026-06): ±30 desde "top" producen planos espejo. Para ejes de mate sigue siendo buena práctica el barreno en el origen de la pieza + create_reference_axis("front","right") (cero planos custom). face_centroid_mm: [x, y, z] in mm — face centroid from list_faces().
Returns the new plane's SW-assigned name (e.g., "Plano1"), parent reference, and the signed offset.
Common autoparts use: - Default-plane: rib offsets, fixture-clearance planes, layer references for in-plane mate fixtures. - Face mode: counterbore-on-flange-top, hole pattern offset above an angled bracket flange, layer planes anchored to a previously-extruded surface.
Example — sketch plane 25mm above the Front plane: create_reference_plane("front", 25.0)
Example — sketch plane 10mm above the top of a 50×50×20 block (after list_faces returns the +Z face's centroid): faces = list_faces() top = max( (f for f in faces if f["normal"] and f["normal"][2] > 0.9), key=lambda f: f["centroid_mm"][2], ) create_reference_plane(face_centroid_mm=top["centroid_mm"], offset_mm=10)
Caveat: angled and through-3-points reference planes are still deferred — face + signed offset covers most v1 needs.
| Name | Required | Description | Default |
|---|---|---|---|
| offset_mm | No | ||
| offset_from | No | ||
| face_centroid_mm | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description fully covers behavior: signed offset with positive/negative directions, zero rejected, return value (plane name, parent reference, signed offset), and even mentions tested offset limits from live verification (2026-06). This gives the agent a clear understanding of effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with headings, bullet points, and code examples. Each sentence provides essential information without redundancy. Front-loaded with core purpose, then details. Efficient use of space.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 3 params and no output schema, the description is comprehensive: covers both modes, parameter details, return value, examples, caveats, and use cases. No gaps remaining for an agent to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but description adds rich semantics: explains `offset_from` default plane names in English and Spanish, `offset_mm` as signed distance with zero rejection and practical limits, and `face_centroid_mm` as array from list_faces(). Code examples further clarify usage. Adds significant value beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it creates a reference plane parallel to a default plane or a face, with two distinct modes described. The verb 'Create' and resource 'reference plane' are specific. No sibling tool duplicates this purpose, so the description effectively distinguishes it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs to pass exactly one of `offset_from` or `face_centroid_mm`, and describes when to use each mode: 'Default-plane mode' for rib offsets, 'Face mode' for counterbore-on-flange-top. Also includes a caveat about deferred angled/through-3-points planes, indicating when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_sketchA
Start a new sketch on a named reference plane.
Args: plane_name: One of "front", "top", "right" (lowercase English), OR the Spanish UI names "Alzado" (Front), "Planta" (Top), "Vista lateral" (Right). Spanish UI names are case-sensitive.
Returns the new sketch's name (e.g., "Croquis5") and the resolved plane name. The sketch is left in EDIT mode — call create_rectangle (and other future primitives) to add geometry, then extrude_sketch to close and turn it into a 3D feature.
Caveat: requires a part document (not assembly). Open a fresh part via SW UI before calling.
| Name | Required | Description | Default |
|---|---|---|---|
| plane_name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that the sketch is left in EDIT mode after creation, and returns the sketch name and resolved plane name. With no annotations, it carries full burden; some minor aspects like error handling on invalid plane names are not covered, but overall it's good.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: one sentence for purpose, a bullet list for parameter values, and clear flow instructions. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter tool with no output schema or annotations, the description covers input, behavior (edit mode), return values, prerequisites, and post-creation steps. It is sufficiently complete for an agent to use correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the description fully explains the plane_name parameter: lists valid values ('front', 'top', 'right' and Spanish equivalents) and notes case-sensitivity. This adds complete meaning beyond the schema that only defines type 'string'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Start a new sketch on a named reference plane' with specific verb and resource. Among siblings like create_sketch_on_face, it correctly distinguishes by specifying the starting reference is a plane, not a face.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use (requires a part document, not assembly) and provides a workflow sequence: create_sketch first, then add geometry with create_rectangle, then extrude_sketch. It also warns about the prerequisite of opening a fresh part.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_sketch_on_faceA
Croquis sobre cara — start a new sketch on a body face.
Unlike create_sketch (default planes only), this anchors a sketch to a face on an existing body. After this, draw geometry with create_circle / create_rectangle / create_line / create_slot, then close with extrude_sketch / extrude_cut — same as a default-plane sketch.
selector (recommended) — pick the face by INTENT instead of reading
list_faces() and copying a centroid, e.g. the top planar face:
create_sketch_on_face(selector={"filter": {"geom": "planar",
"normal_axis": "+z"}, "sort": {"axis": "z", "dir": "desc"},
"pick": "first"})
Closed schema: filter{geom:planar|cylindrical|conical|spherical|other|any,
body, normal_axis:+x/-x/+y/-y/+z/-z, axis:x|y|z + at_mm/tol_mm or
min_mm/max_mm, min_area_mm2/max_area_mm2}, sort{axis:x|y|z|area, dir},
pick:all|first|last|int|[int]. Must resolve to EXACTLY ONE face (add
pick:'first' or refine if it matches several). Mutually exclusive with
face_centroid_mm. The result echoes selector_matched {n, sample_points_mm}.
Args:
face_centroid_mm: [x, y, z] coords in mm — the centroid of the
target face. Get this from list_faces() — pass the
centroid_mm value verbatim. (Omit when using selector.)
Returns: - name: the new sketch's SW-assigned name (e.g., "Croquis5"). - face_centroid_mm: round-trip of the input centroid. - body_name: which body the face belongs to. - sketch_axis_mapping: dict mapping sketch (X, Y) coords to world coords (or None for cylindrical / non-planar faces). Use this to translate sketch-local positions to world coordinates without guessing — closes a real failure mode where the LLM assumed the wrong axis convention and built geometry in the wrong place.
Schema:
{
"sketch_x_world_direction": [x, y, z], # unit vector
"sketch_y_world_direction": [x, y, z], # unit vector
"sketch_origin_world_mm": [x, y, z], # world coords
# of sketch (0,0)
}Common autoparts use: counterbore on top of a flange, hole pattern on a bracket's side face, pocket on a sub-face from a previous cut.
Gotcha — extrude direction default after this call:
For raised features (hubs, bosses, sello salientes), the next
extrude_sketch call needs reverse_direction=True. The default
extrudes INTO the body (toward the inward normal — the cut/pocket
case). See extrude_sketch's reverse_direction arg.
Gotcha — sketch axis mapping is NOT intuitive on Y-normal faces:
For a face with normal +Y or -Y, sketch +Y maps to world ∓Z
(opposite sign of the face normal's Y component). Always read
sketch_axis_mapping from the response BEFORE drawing geometry
whose world position matters — don't assume sketch +Y = world +Z.
Failure modes: - centroid doesn't match any face within 0.01 mm → raises with hint to re-run list_faces. - centroid matches multiple faces → raises listing candidates; tighten the coordinate. - face is hidden / view occluded → IFace2.Select4 returns False; reorient the SW view and retry.
Example — Ø10 hole through the top face of a block: sk = create_sketch_on_face(selector=<top planar face — see above>) # read sk["sketch_axis_mapping"] before placing geometry create_circle(25, 25, 5) extrude_cut(end_condition="through_all")
| Name | Required | Description | Default |
|---|---|---|---|
| selector | No | ||
| face_centroid_mm | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Discloses two methods for specifying face (selector vs face_centroid_mm), return structure with sketch_axis_mapping, failure modes (centroid mismatch, hidden face), and behavioral nuance that extrude_sketch defaults to inward direction. No contradictions with any annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with sections (purpose, comparison, args, returns, gotchas, failure modes, example), front-loaded with key info. Length is justified by tool complexity, though some repetition (e.g., gotchas restated) could be trimmed. Slightly verbose but efficient overall.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and low schema coverage, description covers all essential aspects: parameters, return values, failure modes, axis mapping, extrusion direction, and an example. Addresses real failure modes (LLM assumption about axes). Comprehensive for a complex geometry tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so description must compensate. It does so extensively: explains selector with closed schema and example, explains face_centroid_mm sourced from list_faces, notes mutual exclusivity, and describes return fields including sketch_axis_mapping schema. Adds meaning far beyond bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool creates a sketch anchored to a face on an existing body, and distinguishes it from create_sketch which only works on default planes. The verb 'start a new sketch on a face' is specific and the resource is clearly identified.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when to use (face-based sketch) vs alternative (create_sketch for default planes). Outlines workflow with other tools (create_circle, extrude_sketch) and includes common use cases (counterbore, hole pattern). Also gives gotchas about extrude direction and axis mapping, guiding correct usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_slotA
Draw a straight slot on the active sketch.
The slot is a rounded-rectangle: a rectangle of (length × width_mm) with semicircular end-caps. The center line runs from (x1, y1) to (x2, y2); width_mm is the slot's narrow dimension.
Args: x1_mm, y1_mm: One endpoint of the center line. x2_mm, y2_mm: The other endpoint. width_mm: Slot width (diameter of the round end-caps).
Common autoparts use: adjustable bolt slots in stamped brackets, typically 1× thru 2× the bolt clearance diameter for ±tolerance.
Caveat: requires an active sketch.
Caveat (paramétrico): el croquis NO es paramétrico. modify_dimension NO puede redimensionar el ancho ni mover los endpoints post-hoc — solo la profundidad de extrusión es paramétrica. Para cambiar la ranura, reconstruye desde una pieza nueva. [en: Sketch geometry has NO driving dimension — modify_dimension cannot resize the slot width or move endpoints post-hoc; only extrude depth is parametric. To resize, rebuild from a fresh part.]
| Name | Required | Description | Default |
|---|---|---|---|
| x1_mm | Yes | ||
| x2_mm | Yes | ||
| y1_mm | Yes | ||
| y2_mm | Yes | ||
| width_mm | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description discloses key behavioral traits: the sketch geometry is not parametric, modify_dimension cannot resize slot width or move endpoints, and rebuilding from a fresh part is required for changes. This provides good transparency beyond 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear opening sentence, bullet-style parameter explanations, and separate caveats. The bilingual section adds useful context but could be trimmed slightly; overall, every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 5 required parameters, no annotations, and no output schema, the description covers shape definition, parameter roles, usage caveats, and a common use case. It lacks explicit output specification but is otherwise thorough.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All five parameters are explained in the description: endpoints (x1_mm,y1_mm and x2_mm,y2_mm) and width (width_mm) as slot width. The shape semantics are clarified (semicircular end-caps). Given 0% schema description coverage, this compensates effectively.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool draws a straight slot on the active sketch, describes its geometry, and distinguishes it from sibling tools like create_line or create_rectangle by specifying the slot's rounded-rectangle shape and intended use.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions a common use case (adjustable bolt slots) and a prerequisite (requires active sketch), but does not explicitly guide when to use this tool over alternatives or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_configurationA
Eliminar una configuración del documento activo.
Es la ÚNICA herramienta de eliminación en el v1 MCP — borrar componentes o features no está expuesto. La supresión cubre la mayoría de los casos legítimos de "haz que esto desaparezca" reversiblemente. Configuration deletion es la excepción porque las configuraciones son pura metadata: borrar no cascada a geometría rota. [en: Delete a configuration from the active document. This is the ONLY deletion tool in the v1 MCP — component and feature deletion are intentionally not exposed; suppression covers most reversible "make this go away" needs. Configurations are the carveout because they're pure metadata — deletion can't cascade into broken geometry.]
Validates up-front that: - The configuration exists. - It is NOT the active configuration (SW would refuse; activate a different one first via activate_configuration). - It is NOT the only configuration in the document.
Use case: cleanup of obsolete trim variants after an ECN deprecates them, or removing test/scratch configurations from an iteration cycle.
Args: name: The configuration to delete.
Returns the deleted configuration name on success.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Discloses up-front validations (existence, not active, not only), notes reversibility (configs are pure metadata, no broken geometry), and specifies return value. Lacks mention of permissions or error handling, but covers key behavioral traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with purpose first, then scope, validations, and use case. Slightly verbose due to bilingual content, but each sentence adds value. Front-loaded key information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Comprehensive coverage for a deletion tool: explains preconditions, edge cases (active/only config), return value, and typical use cases. No output schema, but return value is described. Sibling reference enhances context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has one required string 'name' with 0% field description coverage. Description adds 'The configuration to delete' which clarifies purpose but is minimal. For a simple single-parameter tool, this is adequate but not exceptional.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly specifies that the tool deletes a configuration from the active document. Distinguishes itself as the only deletion tool in v1 MCP, explicitly contrasting with component/feature deletion which is not exposed.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use (cleanup of obsolete trim variants, removing test/scratch configurations) and when not to use (not for components/features). Provides prerequisites (not active, not only configuration) and references sibling tool activate_configuration for switching active config.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
describe_featureA
Describir una operación — read a built feature's definition.
Returns {name, type, found, through, depth_mm, internal, source}. Used by verify_build_report to tell a through-hole from a blind one and read its depth. The rich path is the in-process add-in (MCP_CAD_USE_ADDIN, reads the real feature definition); the COM driver degrades to feature-tree dims (through/depth may be None — hole-wizard dims aren't exposed over COM).
Args: feature_name: exact feature name from get_active_part_info (verbatim; locale-sensitive — never translate it).
| Name | Required | Description | Default |
|---|---|---|---|
| feature_name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full behavioral disclosure weight. It reveals that COM driver may return None for through/depth, indicating a degradation in capability. It does not mention idempotency or auth, but for a read-only feature inspection tool, the provided details are sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is mostly concise but includes a Spanish fragment at the start which may confuse some agents. The key information is front-loaded and each sentence adds value, but the bilingual aspect slightly reduces clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a single parameter, no output schema, and no annotations, the description fully covers the tool's behavior: return fields, usage scenario, parameter specification, and limitations. It is complete for agent invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It provides detailed semantics for feature_name: exact name, verbatim requirement, locale-sensitivity, and source (get_active_part_info). This is critical for proper invocation and far exceeds basic schema repetition.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool reads a built feature's definition and lists the returned fields. It also mentions its use by verify_build_report, providing a specific use case that distinguishes it from sibling tools like get_feature_inventory.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly explains when to use the tool (e.g., for distinguishing through-hole vs blind features) and provides conditions for accurate results (rich path vs COM driver, locale-sensitive feature names). This gives clear guidance beyond the basic purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
edit_sketchA
Reabrir un croquis existente para editarlo (agregar cotas, relaciones, o geometría) SIN reconstruir la pieza desde cero. Tras reabrir, las herramientas add_sketch_dimension / add_sketch_relation / create_line funcionan igual que en un croquis recién creado.
Uso típico CSWA: parametrizaste el Tool Block con cotas A/B/C; para ajustar otra arista, reabre el croquis con edit_sketch, agrega/edita, y sal con la siguiente operación (extrude/etc.) para fijar el cambio.
[en: Reopen an existing sketch for editing (dims, relations, geometry) without rebuilding the part. After reopening, add_sketch_dimension / add_sketch_relation / create_line behave as on a fresh sketch.]
Args: sketch_name: exact sketch name, e.g. "Croquis1".
Returns {name, editing: True}. The sketch stays OPEN — you MUST exit it (extrude_sketch or another sketch-consuming op) to lock the changes in; a rebuild while open will exit it on SW 2026 ES.
Related: create_sketch (new sketch); modify_dimension (drive a named cota without even reopening).
| Name | Required | Description | Default |
|---|---|---|---|
| sketch_name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses that the sketch stays open, must be exited to save changes, and that a rebuild while open will exit it on SW 2026 ES. It also notes that other sketch tools work as on a fresh sketch. Missing error handling (e.g., sketch not found) slightly reduces score.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is fairly concise and front-loaded with the purpose. It includes both Spanish and English, which may be redundant but adds clarity for bilingual users. Key sections: purpose, usage, args, returns, caveat.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (1 param, no output schema, no annotations), the description is thorough: explains purpose, usage, behavioral nuances, return value, and related tools. Nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema coverage, the description compensates by specifying the parameter 'sketch_name' as an exact name with an example ('Croquis1'). This adds meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: reopening an existing sketch for editing (dimensions, relations, geometry) without rebuilding the part. It distinguishes itself from sibling tools by specifying it's for editing, not creating.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a typical CSWA usage example and explicitly mentions when to use alternatives like create_sketch or modify_dimension. It also instructs that after editing, the user must exit with a sketch-consuming operation to lock changes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
execute_batchA
Ejecuta una lista ORDENADA de operaciones de bajo nivel en UNA sola pasada.
Es el primitivo "compila una vez, construye una vez" estilo build123d: en vez
de N llamadas sueltas (cada una = un viaje al add-in + un rebuild/redibujo de
SolidWorks), envía TODO el lote en una sola llamada. El add-in lo ejecuta
in-process con redibujo, árbol de operaciones y reconstrucción SUPRIMIDOS, y
hace UNA sola reconstrucción al final. La superficie sigue acotada: cada tool
del lote se despacha por el mismo switch de operaciones permitidas — NO puede
invocar API arbitraria ni geometría inventada.
[en: Run an ORDERED list of low-level ops in ONE pass — the build123d-style "compile once, build once" primitive. The add-in runs them in-process with redraw/feature-tree/rebuild suppressed and ONE rebuild at the end.]
Args:
ops: lista de {"tool": <nombre-de-operación>, "args": {: valor}}.
tool debe ser una operación de PROTOCOLO (p.ej. "create_sketch",
"create_line", "create_circle", "extrude_sketch", "fillet") — NO un
compuesto build_* ni una herramienta de percepción/IO. Los nombres de
args deben coincidir EXACTAMENTE con los parámetros de esa operación
(p.ej. create_line: x1_mm, y1_mm, x2_mm, y2_mm). No se permiten
begin_batch / end_batch / execute_batch dentro del lote.
rebuild: si True (default), una reconstrucción al cerrar el lote.
verify: "summary" (default) adjunta un chequeo BARATO post-build
(feature_count + bbox, SIN render) para verificar sin gastar un
capture_views; "none" lo omite. Renderiza tú al final, no por feature.
Semántica TODO-O-NADA: si una operación falla, se revierte el modelo a su conteo de operaciones previo al lote (deshacer) y se reporta el índice/paso que falló — nunca se deja una pieza a medio construir que "parece" correcta.
Devuelve {ok, count, results:[{index,tool,result}], rebuilt, summary?} en éxito, o {ok:false, failed_index, failed_tool, error, rolled_back, applied_before_failure} en fallo. Aprobación humana: esta llamada (aprobada por el diseñador en el cliente MCP) ES la aprobación del lote completo.
| Name | Required | Description | Default |
|---|---|---|---|
| ops | Yes | ||
| verify | No | summary | |
| rebuild | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes the all-or-nothing semantics with rollback on failure, suppressed redraw/rebuild, and verification options. Without annotations, this fully discloses behavioral traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is somewhat verbose due to bilingual text (Spanish and English), but it is well-structured with sections. Information is valuable and front-loaded with the core concept.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity, no annotations, and no output schema, the description covers all essential aspects: purpose, usage, parameters, return values for success and failure, and behavioral guarantees. It is fully informative for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema coverage, the description extensively documents all parameters: ops format (tool and args with examples), rebuild default, and verify options. This compensates fully for the schema's lack of parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool executes an ordered list of low-level operations in one pass, using a 'compile once, build once' approach. It distinguishes from making separate calls and explicitly notes it is not for composite or perception/IO tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance on when to use (batch instead of individual calls) and what not to include (no nested batch calls, no composite tools). Also clarifies that human approval on this call is approval for the entire batch.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
extrude_cutA
Exit the active sketch and cut (subtract) material from the part.
Mirrors the SolidWorks "Cortar-Extruir → Direccion 1" UI panel. Most common autoparts use: drilling bolt holes through a bracket, cutting slots for adjustment, removing material around features.
Args: depth_mm: Cut depth in mm. Required (positive) for end_conditions "blind", "mid_plane", and "offset_from_surface" (per-condition meaning below). Ignored for the others — pass 0.0 (the default).
end_condition: One of:
- "blind" (default, "Hasta profundidad especificada"): cut a
fixed depth on ONE side of the sketch plane.
- "through_all" ("Por todo"): cut through everything on ONE
side of the sketch plane. Useful for bolt holes when you
don't know the body thickness.
- "through_all_both" ("Por todo - Ambos lados"): cut through
everything on BOTH sides of the sketch plane. Use when the
sketch sits in the middle of a body.
- "mid_plane" ("Plano medio"): cut symmetrically about the
sketch plane. depth_mm is total — split equally per side.
Common for keyways, oil grooves, symmetric lightening
pockets in cast housings and shafts.
- "up_to_next" ("Hasta el siguiente"): cut up to the next
surface that intersects the cut profile. Useful for cuts in
multi-wall weldments / housings where the cut should stop
at the next inner wall. No depth or reference required.
- "up_to_surface" ("Hasta la superficie"): cut up to a named
face or reference plane. Requires `reference_name`.
Live caveat: in SW Spanish 2024 via this binding, FeatureCut4
with T1=UpToSurface accepts FACE references but rejects
reference-plane references (returns None even with the plane
correctly selected at Mark=32). Use a face name (e.g.
"Cara<2>@Pieza1") for "up_to_surface". For "cut up to a
reference plane", use "offset_from_surface" with a very
small offset, which works for both faces and planes.
- "offset_from_surface" ("Equidistante de la superficie"):
cut up to an offset distance past a named face. Requires
`reference_name` AND positive depth_mm. Use `offset_reverse`
to flip which side of the face the offset goes.
- "up_to_body" ("Hasta el sólido"): cut up to a named solid
body. Requires `reference_name` (the body name from
get_active_part_info "bodies"). Common in multi-body
weldments and fixture layouts.
reference_name: Locale-sensitive entity name from
get_active_part_info — face/plane name (e.g. "Cara<2>@Pieza1",
"Plano1@Pieza1") or solid-body name (e.g. "Saliente-Extruir1").
Required when end_condition needs a reference; pass None
otherwise (the tool will reject reference_name on conditions
that don't accept one — fail loud rather than silently
ignored).
target_bodies: Feature Scope (alcance de la operación). Pass None
(default) to let SolidWorks auto-select all bodies the cut
geometrically intersects. Pass a list of body names to
restrict the cut to exactly those bodies (the SW UI's
"Cuerpos seleccionados" mode). Body names come from
get_active_part_info "bodies". Empty list raises — pass None
to mean "all".
offset_reverse: Only meaningful for "offset_from_surface" — flips
which side of the reference face the offset goes. Ignored for
all other end conditions.
reverse_direction: Flip the cut direction relative to the
sketch's natural default. The default (False) cuts INTO the
body for both plane-anchored and face-anchored sketches. Pass
True when the sketch's orientation breaks that heuristic —
sketch on a back face, ref plane interior to the body, etc.
If the result is "FeatureCut4 returned None" with cut
direction listed as a likely cause, retry with True.
start_condition: Where the cut BEGINS — "sketch_plane" (default) or
"offset". "offset" starts the cut start_offset_mm off the sketch
plane, so a sketch on a real outer face can carve a mid-body BAND
(start_offset_mm = where it begins, depth_mm = its width with
end_condition="blind") WITHOUT an interior reference plane (which
silently makes a zombie sketch).
start_offset_mm: Offset (mm, >0) from the sketch plane to the cut
start; only for start_condition="offset". start_flip picks side.
start_flip: Flip the offset to the other side of the sketch plane.Returns the new Feature with name (e.g., "Cortar-Extruir1"), type ("cut_extrude"), and dimensions.
Caveat: requires an active sketch AND the sketch geometry must intersect existing solid material. If the sketch is empty/open or misses the body, FeatureCut4 fails.
Failure recovery: same contract as extrude_sketch — on failure the sketch is RE-OPENED so you can fix the profile with more sketch primitives and retry (otherwise later geometry calls would silently no-op against a closed sketch).
Example — M8 clearance hole through a 5mm bracket: create_sketch("front"); create_circle(25, 15, 4.25) extrude_cut(5.0, "blind") Example — in a 2-body part, cut only through the upper boss: extrude_cut(end_condition="through_all", target_bodies=["Saliente-Extruir2"])
Related composites: build_rectangular_pocket (sketch+cut in one call), add_bolt_circle (N holes on a bolt circle), linear_pattern (repeat an existing seed cut).
| Name | Required | Description | Default |
|---|---|---|---|
| depth_mm | No | ||
| start_flip | No | ||
| end_condition | No | blind | |
| target_bodies | No | ||
| offset_reverse | No | ||
| reference_name | No | ||
| start_condition | No | sketch_plane | |
| start_offset_mm | No | ||
| reverse_direction | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Discloses requirement for active sketch and intersecting material, failure behavior (sketch re-opened), return format (Feature with name/type/dimensions), and a known bug with up_to_surface and reference planes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Long but well-structured with sections (Args, Returns, Caveat, Failure recovery, Example). Every sentence adds value. Front-loaded with purpose. Slightly verbose due to complexity but justified.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Completely covers all 9 parameters, return value, caveats, failure recovery, examples, and even a known bug. No output schema, but description provides sufficient behavioral and semantic context for correct usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero schema description coverage, but description provides rich parameter details: conditional meaning of depth_mm, locale-sensitive reference_name, target_bodies as scope, offset_reverse only for offset_from_surface, start_condition/start_offset_mm, etc. Adds value well beyond schema types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the tool cuts/subtracts material from a part after exiting an active sketch. Provides a SolidWorks analogy and common use cases. Distinguishes from siblings like extrude_sketch (additive) and other cut tools by focusing on linear extrude cuts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Extensive guidance on when to use each end_condition, target_bodies, and other parameters. Includes failure recovery and related composites. Could be more explicit about when not to use this tool vs. revolve_cut, sweep_cut, etc., but the detail is thorough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
extrude_sketchA
Exit the active sketch and extrude it as a boss (solid) feature.
Args: depth_mm: Extrusion depth in mm (must be positive). end_condition: "blind" (fixed depth — default) or "through_all" (extrudes to the next surface; depth_mm is ignored). reverse_direction: Flip the extrude direction along the sketch plane normal. Default (False) extrudes the SW-default way — for a Front-plane sketch in this binding, that's +Z. Pass True to extrude the opposite way (e.g. -Z from Front).
Gotcha — face-anchored sketches: after `create_sketch_on_face`,
the default extrudes INTO the body (toward the inward normal —
the cut/pocket case). Pass `reverse_direction=True` for raised
features (hubs, bosses) — the typical intent on top of a face.
merge: If True (default), the new boss merges with any existing
solid material it touches. Pass False to keep the new
extrusion as a SEPARATE body — required for back-to-back
stacks where two extrudes share a face (without merge=False
on the second one, SW fuses them into one body), and for any
multi-body workflow where target_bodies needs to address the
new body independently.Returns the new Feature with name (e.g., "Saliente-Extruir1"), type ("boss_extrude"), and dimensions. After this call the sketch is closed and the part has a new solid feature.
Caveat: the active sketch must contain at least one closed profile (e.g., a rectangle from create_rectangle). FeatureExtrusion3 fails if the sketch is empty, open, or self-intersecting.
Failure recovery: when extrude_sketch fails (e.g., open profile), the sketch is RE-OPENED automatically — fix the profile with more sketch primitives and retry (otherwise later geometry calls would silently no-op against a closed sketch).
Example — 50×30×5 mm box on the Front plane: create_sketch("front") create_rectangle(0, 0, 50, 30) extrude_sketch(5.0)
Example — back-to-back blocks (one in +Z, one in -Z) from the same Front-plane sketch, kept as TWO separate bodies: create_sketch("front"); create_rectangle(0, 0, 30, 30) extrude_sketch(20.0) # body in +Z create_sketch("front"); create_rectangle(0, 0, 30, 30) extrude_sketch(20.0, reverse_direction=True, merge=False) # body in -Z, separate
Related: build_flange_boss (sketch + extrude in one call). Use revolve_sketch / sweep_sketch / shell_part for true Revolución / Barrer / Vaciar features — don't approximate with stacked extrudes. loft is NOT in v1 (see list_capabilities() for the gap list).
| Name | Required | Description | Default |
|---|---|---|---|
| merge | No | ||
| depth_mm | Yes | ||
| end_condition | No | blind | |
| reverse_direction | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so description carries full burden. It discloses extrusion behavior, parameter effects (including reverse_direction gotcha for face sketches), merge behavior, return values, sketch closure, and failure recovery. Exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is thorough and well-structured with sections (Args, Returns, Caveat, etc.) and front-loaded action. While somewhat lengthy, every sentence adds value with no redundancy. Could be slightly tighter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, 4 parameters, and no annotations, the description covers all critical aspects: parameters, return info, prerequisites, error handling, multiple examples, and sibling tool relationships. Nothing missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 0% description coverage; the description fully compensates. Each parameter (depth_mm, end_condition, reverse_direction, merge) is explained with constraints, defaults, and behavioral effects. Examples illustrate usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool exits the active sketch and extrudes it as a boss feature. It uses a specific verb (extrude) and resource (active sketch). It distinguishes from siblings like build_flange_boss and revolve_sketch.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly provides when to use vs alternatives: mentions build_flange_boss for combined sketch-extrude, advises against using extrudes for revolve/sweep features, and notes loft is not available. Also covers failure recovery and examples.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
filletA
Redondeo — fillet (round) one or more edges, constant radius.
selector (recommended) — pick edges by INTENT instead of reading
list_edges() and guessing an index. A closed-schema dict resolved against
the live geometry, e.g. round every circular edge:
fillet(selector={"filter": {"geom": "circle"}}, radius_mm=2)
or the single largest-radius edge:
fillet(selector={"filter": {"geom": "circle"}, "sort":
{"axis": "radius", "dir": "desc"}, "pick": "first"}, radius_mm=3)
Schema: filter{geom:circle|line|arc|other|any, body, radius_mm/radius_tol_mm,
axis:x|y|z + at_mm/tol_mm or min_mm/max_mm}, sort{axis:x|y|z|radius, dir},
pick:all|first|last|int|[int]. Mutually exclusive with edge_* args. The
result echoes selector_matched {n, sample_points_mm} so you can sanity-check.
Standard autoparts use: stress relief on cast/forged parts, deburred machined edges, transition radii on stamped reinforcements (ISO 8062 on Schaeffler-style brackets). Constant-radius is the v1 variant — variable-radius and full-round fillets are deferred (rare in autoparts juniors' workflows).
Args (edge addressing — pass exactly ONE of selector / edge_midpoints_mm / edge_indices): edge_midpoints_mm: Optional. List of [x, y, z] midpoints from list_edges() → e["midpoint_mm"] (line / partial-arc edges only). radius_mm: Fillet radius. Must be > 0. Typical autoparts values: 0.5-1mm for machined edge softening, 2-5mm for cast-part transitions, R = 0.5-1.5 × wall_thickness for plastic ribs. tangent_propagation: If True (default), SW propagates the fillet along tangent-continuous neighboring edges. False = strict per-edge (each edge gets a separate filleted region). edge_indices: Optional. List of {"body_name": str, "index": int} from list_edges(), verbatim. Works for ANY edge — required for closed-loop circles (disc rims, hole edges, cylinder tops) where midpoint_mm is None.
Returns the resulting Redondeo feature (name, type="fillet", R1).
Failure modes:
- midpoint doesn't match any edge → raises with hint to re-run
list_edges()
- midpoint matches multiple edges within 0.01mm → raises listing
candidates
- edge_indices: unknown body or out-of-range index → raises
with the available bodies / valid index range
- radius exceeds adjacent edge lengths → SW silently rejects;
we surface "no new feature" with a hint
- body name shifts after first fillet ("Saliente-Extruir1" →
"Redondeo1"). When filleting N identical-class edges (e.g.
all 4 vertical corner edges of a plate), pass ALL N indices
in ONE call. Batching N/2 now + N/2 later addresses the OLD
body name on the second call and fails with "no new
feature"; recovery is undo + redo as one batch.
Caveat: NOT parametric. Re-radiusing requires deleting the feature and re-running. Parametric edits via modify_dimension on "Redondeo1" → "R1" work for simple cases.
| Name | Required | Description | Default |
|---|---|---|---|
| selector | No | ||
| radius_mm | No | ||
| edge_circles | No | ||
| edge_indices | No | ||
| edge_midpoints_mm | No | ||
| tangent_propagation | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries full burden. It discloses that the tool creates a non-parametric feature (re-radius requires delete+re-run), but notes that parametric edits via modify_dimension work for simple cases. It also surfaces failure modes and side effects like body name shifts, but lacks explicit mention of whether the operation is reversible or what 'Redondeo' implies.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is highly detailed and well-structured with paragraphs, bullet points, and examples, but it is verbose (over 30 lines). While thorough, it could be more concise by trimming redundant explanations (e.g., repeating failure modes). Not minimal, but organized and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (6 parameters, no output schema, no annotations), the description is remarkably complete. It covers all aspects: parameter purpose, failure modes with hints, typical usage values, and return value (Redondeo feature). It also warns about caveats like non-parametric behavior and body name shifts.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description must compensate. It extensively documents most parameters (selector, edge_midpoints, edge_indices, radius_mm, tangent_propagation), including nested schemas and usage examples. However, it fails to explain the 'edge_circles' parameter in the schema, leaving a gap. Overall, adds significant meaning but incomplete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool rounds one or more edges with a constant radius. It specifies the resource (edges) and the action (fillet/round). It distinguishes from variable-radius fillets by noting they are deferred, and from sibling tools like 'fillet_all_edges' by implication (this tool targets specific edges).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use each edge-addressing method (selector recommended vs. edge_midpoints vs. edge_indices), including failure modes and recovery strategies. It also gives typical radius values for different autoparts contexts and warns against batching fillets that cause body name shifts, effectively guiding correct invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fillet_all_edgesA
Redondear todas las aristas — fillet every edge (linear and circular by default).
Universal edge softening for autoparts: cast/forged parts get transition radii (ISO 8062), structural brackets get stress-relief fillets, plastic injection-molded parts need rounded edges. This composite implements "redondea todo" in one call.
Args:
radius_mm: Fillet radius. Default 1.0mm — typical machined-edge
softening. Use 2-5mm for cast-part transitions, R = 0.5-1.5
× wall_thickness for plastic ribs.
tangent_propagation: If True (default), SW propagates the
fillet along tangent-continuous neighboring edges, producing
one smooth filleted region for rows of co-linear edges.
Pass False for strict per-edge fillets (each edge gets its
own region). True is what most "redondea todo" intents mean.
min_edge_length_mm: Skip linear edges shorter than this.
Default 1.0mm. Circular edges (arc / circle) skip this
filter — their length_mm is the chord length and isn't
meaningful for the softening decision.
body_name: If given, only fillet edges of that body.
include_arcs: If True (default), include arc and circle edges
in the fillet set. Required for round autoparts (rines,
cubos, discos de freno, engranes) where every edge is
circular. Set False for the legacy linear-only behavior.
Returns: { "feature": {"name": "Redondeo1", "type": "fillet", "dimensions": {...}}, "edges_filleted": int, }
Caveat: NOT parametric — re-radiusing requires deleting the feature. With tangent_propagation=True, SW collapses adjacent edges into one filleted region; the resulting feature may show fewer "branches" than edges_filleted in the SW UI tree.
Example — soften every edge of a bracket at R=1mm: fillet_all_edges()
Example — large R=5mm transition on cast housing, no tangent prop: fillet_all_edges(radius_mm=5.0, tangent_propagation=False)
Example — strict linear-only fillet (skip circular edges): fillet_all_edges(include_arcs=False)
| Name | Required | Description | Default |
|---|---|---|---|
| body_name | No | ||
| radius_mm | No | ||
| include_arcs | No | ||
| min_edge_length_mm | No | ||
| tangent_propagation | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses key behaviors: non-parametric nature, tangent propagation collapsing edges, filtering rules for min_edge_length_mm, and include_arcs effect.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with clear sections for args, returns, and examples, though slightly long; every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers all aspects: purpose, parameters, return format, behavior notes, and examples. Output schema is implicitly provided in description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Despite 0% schema coverage, the description provides detailed, meaningful explanations for each parameter including typical values, behaviors, and edge cases.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'fillet every edge' and provides specific use cases for autoparts, distinguishing it from siblings like 'fillet' and 'break_all_edges'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit when-to-use contexts (cast/forged parts, brackets, plastic parts) and includes examples, but lacks direct when-not-to-use or alternative tool mentions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_active_assembly_infoA
Return metadata about the currently active SolidWorks assembly.
Includes assembly name, modified flag, active configuration, all configurations, components (top-level only — no sub-assembly recursion), and existing mates. Call this before any mate / suppression / configuration operation so the LLM knows what entities exist.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes return content in detail. No side effects noted; 'get' implies read-only. Could mention error handling for no open assembly, but sufficient for agent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences with purpose first, then content, then usage guidance. No waste, well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Provides full return details without output schema, plus usage context. Complete for a metadata retrieval tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, schema coverage 100%. Baseline 4 appropriate as description adds no parameter info, but none needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it returns metadata about the active assembly, listing specific content (name, modified flag, configs, components, mates). Distinguishes from sibling manipulation tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs 'Call this before any mate / suppression / configuration operation', providing clear when-to-use context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_active_part_infoA
Return metadata about the currently active SolidWorks part.
Includes the part name, whether it has been modified since open, the list
of features with their dimensions, and the list of solid bodies (typically
one per part; multi-body parts have several). Use this to inspect what's
in the current part before suggesting modifications, and to discover the
body names you need for extrude_cut's target_bodies / reference_name
arguments.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses the return contents (part name, modified status, features, bodies) and implies read-only behavior, but doesn't mention potential limitations like performance impact.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three well-structured sentences: purpose, contents, usage guidance. No extraneous words, front-loaded with key information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and a simple tool, description adequately covers what the tool returns and its purpose. Could mention prerequisite (part must be open) but implied by 'active part'.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters, so schema coverage is 100%. Description adds full meaning beyond the empty schema by detailing the information returned.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description uses a specific verb ('Return') and resource ('active SolidWorks part') and clearly distinguishes from siblings by mentioning its use for discovering body names needed for extrude_cut.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use (before modifications) and references a specific sibling tool (extrude_cut) to provide context for body name discovery.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_bounding_boxA
Caja envolvente — overall axis-aligned bounding box of the active part OR assembly, in mm. Read-only — does not modify the document.
Returns a dict in mm-native units (part frame): - min_mm (list[float], 3): [x, y, z] of the minimum corner. - max_mm (list[float], 3): [x, y, z] of the maximum corner. - size_mm (list[float], 3): [dx, dy, dz] overall extents (max − min). This is the part's bounding-box footprint. - center_mm (list[float], 3): [x, y, z] box center ((min + max) / 2).
Unions the bounding boxes of every solid body, so multi-body parts report the combined envelope.
Common autoparts uses: - Stock selection: size_mm tells you the minimum bar / plate / billet the part fits in. - Sanity check after a build: confirm the part's overall dimensions match what was intended BEFORE trusting the feature tree (cheap verification, no screenshot needed). - Nesting / fixturing envelope.
Example — verify a plate's footprint: bbox = get_bounding_box() assert abs(bbox["size_mm"][0] - 100) < 0.5 # expected 100mm wide
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explicitly states the tool is read-only and does not modify the document. It explains that for multi-body parts, the bounding box unions all solid bodies. Since no annotations are provided, the description fully covers behavioral traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-organized with a summary, field list, behavioral note, use cases, and an example. It is concise without superfluous information, though slightly longer than necessary for a zero-parameter tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters and no output schema, the description is complete. It explains what the tool does, its return values, behavior for multi-body parts, and practical applications. No additional information is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has no parameters, so schema coverage is 100% trivially. The description adds value by detailing the return dict structure (min_mm, max_mm, size_mm, center_mm) and their meanings, compensating for the lack of output schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns the axis-aligned bounding box of the active part or assembly in mm. It specifies the output fields and distinguishes from other tools by focusing solely on bounding box retrieval. No sibling tool serves this purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides common autoparts uses like stock selection, sanity checks, and nesting. While it doesn't explicitly list when not to use this tool, the use cases are clear and there are no direct alternatives among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_feature_inventoryA
Inventario completo de operaciones — one read of EVERY feature in the tree.
Per feature: name, type, dimensions, plus per-cut detail (kind, through, depth,
diameter, internal) and the source of each value ('feature' | 'geometry' |
'addin'). On cuts, unknowns are explicit (through=None over COM, named in
unverified); on non-cut features the N/A cut fields are omitted.
occluded:true cuts cannot be verified by an iso render — check them with
capture_views(section=...) / list_faces.
Also returns bores: a GEOMETRY-FIRST inventory of every cylindrical bore in
the solid (Ø, axis, center, through/blind, and split=True when a slot crosses
the bore — a clevis/fork, not a solid-hub hole), read from face geometry, not
the feature tree. This catches what per-feature detail can't: a split pin hole,
a bore shared across features, two bores in one cut.
USE BEFORE modifying any multi-feature part: enumerate every cut, change one, re-call, then confirm feature_count + the OTHER features are unchanged. The inventory is a contract. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses behavior: it is a read-only operation that reads every feature and returns specific details. It mentions handling of unknowns ('through=None') and occluded cuts, and explicitly states 'Read-only.' There are no contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is relatively long but well-structured with clear sections: overall purpose, feature details, bore info, and usage advice. Every sentence adds necessary information, though some redundancy could be trimmed. It is front-loaded with the main purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description provides a thorough explanation of all returned data: per-feature fields, per-cut details, source of values, handling of unknowns and occluded cuts, and the bore inventory. This ensures the AI agent understands exactly what to expect.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the description does not need to explain parameter meaning. According to the rubric, 0 parameters warrants a baseline of 4. The description adds value by explaining the output structure, which is helpful for understanding what the tool returns.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool provides a complete inventory of every feature in the tree with detailed per-feature and per-cut information, plus a geometry-based bore inventory. It distinguishes itself from siblings like 'describe_feature' and 'list_faces' by offering a comprehensive overview suitable for before-modification verification.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit guidance is given: 'USE BEFORE modifying any multi-feature part: enumerate every cut, change one, re-call, then confirm feature_count + the OTHER features are unchanged.' This clearly indicates when to use the tool and the intended workflow. The description also notes that occluded cuts require a different tool ('capture_views'), providing when-not-to-use context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_mass_propertiesA
Propiedades de masa — read mass, volume, surface area, center of mass, density, and principal moments of inertia for the active part OR assembly (works on both doc types). Read-only.
Returns a dict in mm-native units: - mass_g (float, gramos): total mass in grams. - volume_mm3 (float): total volume in mm³. - surface_area_mm2 (float): total surface area (área superficial) in mm². - center_of_mass_mm (list[float], 3): [x, y, z] of the centro de gravedad in the part frame (mm). - density_kg_per_m3 (float): density (densidad) in kg/m³ — the SW canonical density unit, NOT mm-converted. - principal_moments_g_mm2 (list[float], 3): [Ixx, Iyy, Izz] in g·mm² about the centroid.
Caveat: requires a material to be set on the part for mass to be
meaningful. SW's "Default Material" returns mass_g=0 (no density
assigned). Call set_material first if the part has no material.
Common autoparts uses: - Cotización (quoting): mass_g × material price/kg. - Lightening pass: measure mass before / after a vaciado, target a mass reduction without dropping below stiffness threshold. - Inertia for dynamic analysis: principal_moments_g_mm2.
Example — quote a turned shaft: set_material("AISI 1045 Steel") props = get_mass_properties() cost = (props["mass_g"] / 1000) * 65.0 # MXN/kg
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fully discloses behavior: it is read-only, returns data in specific units, lists all return fields with types and units, and notes the dependency on a material being set. No surprises or contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is thorough but not overly verbose. It is well-structured with sections for purpose, return dict, caveats, uses, and example. The front-loading of the core purpose is good. Could be slightly more concise, but the structure aids readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters and no output schema, the description provides a complete explanation of the tool's functionality and return values. It also provides context for typical use cases and prerequisites, making it fully self-contained for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no parameters, so the schema coverage is 100%. The description adds value by detailing the output format and units, which goes beyond the empty input schema. Baseline 4 is appropriate as the description compensates for the lack of parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the tool reads mass properties (mass, volume, surface area, etc.) for the active part or assembly. The verb 'read' and specific resource 'mass properties' make the purpose unambiguous. It distinguishes itself from sibling tools by specifying its exact output fields.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly mentions common use cases (quoting, lightening pass, inertia analysis) and provides a concrete example. Includes caveats: requires material to be set, behavior with default material, and references set_material as a prerequisite. This provides clear when-to-use and actionable guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hole_wizardA
Asistente de barrenos (Hole Wizard) — drill ONE standard ISO Metric hole on a face: tapped (con rosca) or counterbore (refrentado para tornillo socket).
Junior workflow: "agrega un barreno M8 con rosca en esta cara, profundidad 15mm". Tool replaces manual drill-diameter lookup (ISO 273 / ISO 2306) — pass the fastener size and SW reads geometry from its Toolbox database.
Args: hole_type: One of: - 'tap' (rosca): tapped (threaded) hole. Sizes M5–M12. - 'counterbore' (cilindro avellanado / refrentado): for socket-head cap screws (tornillo de cabeza cilíndrica con hueco hexagonal). Sizes M5–M10. size: ISO fastener nominal — 'M5','M6','M8','M10','M12' for tap; 'M5','M6','M8','M10' for counterbore. face_centroid_mm: Face to drill into. Pass a centroid from list_faces() (matched within 0.01mm tolerance). The hole is placed at the face's local origin (where SW positions it by default). end_condition: 'blind' (depth-controlled, depth_mm required) or 'through_all' (passes through the entire body, depth ignored). depth_mm: Hole depth for end_condition='blind'. Required if blind. For tapped holes, this is the FULL hole depth; SW computes thread depth from the toolbox. thread_class: ISO 965 thread tolerance class for tapped holes. Default '6H' (standard internal thread for steel/aluminum brackets). Ignored for counterbore.
Returns dict with name (e.g. 'Taladro roscado M81' or 'Refrentado para tornillo con cabeza hueca de M81' on Spanish-locale SW), type 'hole_wizard', and dimensions {'D1': diameter_mm, 'D2': depth_mm}.
Caveat (v1 limitations):
Requires SOLIDWORKS Toolbox add-in to be loaded. If not, raises a clean error pointing to Herramientas > Complementos.
Single hole per call at the face's centroid. For multi-hole patterns (e.g. 4 corner mounting holes), use add_bolt_circle (clearance) or call hole_wizard once per distinct face. Multi- position via sketch points is deferred to a later batch.
Clearance through-holes are NOT supported in v1 — SW's swWzdHole API path silently rejects all FTI/SSize combinations on this binding. Use add_bolt_circle (clearance, multi-position) or extrude_cut on a sketched circle for clearance holes.
End-face guard: rejects a centroid that isn't on the bbox extreme along the face normal (a stale
list_facescentroid), and a post-call bbox-shrink check auto-undos + raises if the hole consumed more than the requested depth — a known HoleWizard5 surprise on the end face of a multi-step shaft. Workaround there:add_drill_patternorextrude_cuton the end face.
Example — single M8 tap on a 50×50 mounting face: faces = list_faces() top = max((f for f in faces if f['normal'][2] > 0.9), key=lambda f: f['centroid_mm'][2]) hole_wizard('tap', 'M8', face_centroid_mm=top['centroid_mm'], end_condition='blind', depth_mm=15.0)
Example — M6 counterbore for a socket-head cap screw: hole_wizard('counterbore', 'M6', face_centroid_mm=top['centroid_mm'], end_condition='blind', depth_mm=8.0)
| Name | Required | Description | Default |
|---|---|---|---|
| size | Yes | ||
| depth_mm | No | ||
| hole_type | Yes | ||
| thread_class | No | 6H | |
| end_condition | No | blind | |
| face_centroid_mm | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
In absence of annotations, description fully discloses requirements (Toolbox add-in), limitations (single hole, clearance not supported), and unexpected behaviors (end-face guard, auto-undo on depth consumption). No contradiction with missing annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with Args, Returns, Caveats, and Examples sections. Slightly verbose but each sentence adds value. Could be tightened, but clarity benefits from thoroughness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, describes return dict. Includes caveats with workarounds and examples. Covers all necessary context for a complex tool, making it self-contained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 0% description coverage; description compensates by explaining each parameter: hole_type values, size ranges per type, face_centroid_mm usage from list_faces, end_condition options, depth_mm requirement, and thread_class default. Adds meaning well beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the tool drills one standard ISO Metric hole on a face, specifying tapped or counterbore types. Distinguishes from siblings like add_bolt_circle and extrude_cut by explicitly mentioning alternatives for clearance holes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use (single hole, standard ISO fasteners) and when-not-to-use (clearance not supported, multi-hole patterns). References alternatives like add_bolt_circle and extrude_cut for unsupported cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
insert_componentA
Insert a part or sub-assembly into the active assembly at the given XYZ.
IMPORTANT (mate-or-incomplete): insert_component alone does NOT finish the job. The FIRST component in an assembly is auto-fixed, but every subsequent component needs ≥1 mate (concentric / coincident / distance, or the composites stack_components / add_mate_by_face_position) before the assembly is valid. An assembly with floating components is wrong even if the iso view looks placed correctly. If you can't identify mating entities at insert time, call get_active_assembly_info first or ASK the user — don't push a floating component. See DESIGN_GUIDE.md for the full SKELETON → MATE PLAN → INSERT+MATE → VERIFY loop.
Args: file_path: Absolute path to the .sldprt or .sldasm to insert. x_mm, y_mm, z_mm: Insertion point in mm (assembly frame). config_name: Specific source-document configuration to use; empty string uses the source's currently-active configuration.
Returns the inserted component's instance metadata.
Related: add_concentric_mate, add_coincident_mate, add_distance_mate, stack_components (3 mates in one call for stacked pairs), add_mate_by_face_position (no-entity-name convenience).
| Name | Required | Description | Default |
|---|---|---|---|
| x_mm | No | ||
| y_mm | No | ||
| z_mm | No | ||
| file_path | Yes | ||
| config_name | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses behavioral traits: the first component is auto-fixed, subsequent components need mates, and an assembly with floating components is considered wrong even if it looks correct. It also mentions that the tool returns instance metadata.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a bold warning, bullet-like arg list, return info, and related tools. It is slightly lengthy but every sentence adds value. Minor redundancy could be trimmed, but it remains efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of CAD assembly insertion, the description is very complete. It covers the workflow, prerequisites (need for mates), common pitfalls, references a design guide, and specifies the return type. No output schema is present, but the description mentions returning 'instance metadata', which is adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% coverage (no parameter descriptions), but the tool description provides clear explanations for each parameter: file_path (absolute path), x/y/z_mm (insertion point in mm), and config_name (specific configuration or empty string for active config). This adds significant meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Insert a part or sub-assembly into the active assembly at the given XYZ.' It specifies the verb 'insert' and the resource, and distinguishes itself from siblings like 'place_and_mate' and 'stack_components' by noting that it does not complete the assembly on its own.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'insert_component alone does NOT finish the job' and provides guidance on when to use it (only as part of a larger process) and when not (if mating entities cannot be identified, use get_active_assembly_info or ask the user). It also lists alternative tools like 'stack_components' and 'add_mate_by_face_position'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
linear_patternA
Pattern (patrón lineal) features in a single straight line.
Repeats one or more existing features along a direction at fixed spacing — the autoparts default for hole rows, fin arrays, and bolt grids. Single-direction only in v1; the second-direction (rectangular grid) variant is deferred since junior designers rarely use it.
Args: feature_names: Names of features to pattern. Pass exact names from get_active_part_info — e.g. ["Cortar-Extruir1"] for a single hole, ["Cortar-Extruir1", "Saliente-Extruir2"] for a hole + boss pair. direction_reference: Name of the entity defining the pattern direction. Easiest source: an "Eje1" name returned by a prior create_reference_axis call. Also accepted: a linear edge name (e.g. "Arista<1>@Pieza1") or a sketch-line name. Names are locale-sensitive. spacing_mm: Distance between consecutive instances in mm. Must be positive. count: Total number of instances INCLUDING the original (must be ≥ 2). For 5 holes total, pass count=5 — the original feature counts as instance #1. reverse: Flip the pattern direction along the reference. Default (False) follows the SW-default direction; pass True if the pattern goes the wrong way.
Returns the new pattern Feature with name (e.g. "LPattern1"), type ("linear_pattern"), and dimensions (D1=spacing, Num=count).
Example — 5 holes spaced 15 mm apart along an existing axis: eje = create_reference_axis("Arista<1>@Pieza1") # use a long edge linear_pattern(["Cortar-Extruir1"], eje["name"], spacing_mm=15.0, count=5)
| Name | Required | Description | Default |
|---|---|---|---|
| count | Yes | ||
| reverse | No | ||
| spacing_mm | Yes | ||
| feature_names | Yes | ||
| direction_reference | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries a heavy burden. It discloses that the tool returns a new pattern feature with name, type, and dimensions, and describes the behavior of parameters (spacing must be positive, count includes original, reverse default false). However, it does not warn about failure modes (e.g., invalid feature names or direction references) or clarify whether the original features are modified.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear Args, Returns, and an Example section. It is concise yet thorough, every sentence adds value, and it is front-loaded with the tool's purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 5 parameters, no schema descriptions, and no output schema, the description provides solid coverage. It explains the return format (name, type, dimensions) and includes an example. However, it lacks details on error handling or edge cases, such as what happens if the direction reference is invalid or if pattern instances exceed limits.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% coverage, so the description must fully define each parameter. It does so comprehensively: 'feature_names' lists exact names from get_active_part_info, 'direction_reference' provides sources (Eje1, edges, sketch lines) with locale-sensitivity, 'spacing_mm' must be positive, 'count' includes original and must be ≥2, 'reverse' defaults false. This adds significant meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool patterns features in a straight line, using specific verbs like 'Repeats' and providing concrete examples (hole rows, fin arrays, bolt grids). It distinguishes itself from siblings like 'circular_pattern' by specifying 'single straight line' and mentioning that the second-direction variant is deferred.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use this tool (single-direction patterns) and notes that the second-direction variant is not available in v1. It provides an example usage but does not explicitly mention when not to use it or suggest alternative tools for other pattern types.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_capabilitiesA
Inventario autoritativo de herramientas MCP_CAD — solo nombres.
Las descripciones completas ya viajan en cada tools/list; este catálogo
confirma la superficie viva (conteo + nombres) sin duplicar ese contexto.
[en: authoritative live tool inventory, names only. Full descriptions
already ship with tools/list — call this to confirm the live surface
or an exact tool name without re-paying for the docstrings.]
Returns: {"tool_count": int, "tools": [str, ...]} # alphabetical names
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses behavior: returns a JSON object with tool_count and alphabetical tool names. It also clarifies that full descriptions are not included, preventing false expectations. This is complete transparency for a listing tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise with bilingual text, front-loaded with the main purpose. Every sentence adds value: purpose, distinction from alternatives, and return format. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema, the description specifies the exact return format and contents. For a zero-parameter tool with a simple inventory list, this is fully complete and sufficient for an AI agent to understand and use correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, so the description does not need to add parameter semantics. Baseline 4 is appropriate as there are no gaps to fill.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists authoritative tool names. It specifies 'solo nombres' and 'names only', distinguishing it from tools/list which provides full descriptions. This directly addresses the purpose of inventory listing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly advises using this tool to confirm the live surface or exact tool name without the overhead of full docstrings from tools/list. It provides clear context for when to use this tool versus the alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_dimensionsA
Descubre qué dimensión mover — lista TODAS las cotas del documento activo.
El paso de descubrimiento para edición conversacional ("hazlo 5mm más largo", "cambia el barreno a Ø8"): enumera cada dimensión alcanzable — de operaciones Y de croquis — con su path exacto ("D1@Saliente-Extruir1"), valor actual y unidades. Para mapear lenguaje a la cota correcta, cruza el VALOR hablado con los valores listados (el largo de 80 → la cota que vale 80); en empate, desambigua por owner_type o pregunta. Luego pasa owner/name verbatim a modify_dimension. Read-only.
Returns: {count, dimensions: [{path, owner, owner_type, name, value, units("mm"|"deg")}]}. Con un ensamble activo lista las cotas de mates (D1 de distance/angle; owner_type "mate_distance"/"mate_angle") — las cotas internas de componentes requieren abrir la pieza. Caveat (COM): cotas renombradas fuera de D1..Dn no aparecen; una cota angular de croquis se reporta como longitud en mm.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses read-only behavior, lists dimension types (operations, sketches, mates), and mentions limitations like renamed dimensions not appearing and angular sketches reported as length.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is informative but somewhat verbose. It front-loads the purpose but could be slightly more concise without losing clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description fully explains the return value structure (count, dimensions with path, owner, etc.) and covers behavior in assemblies and caveats. Complete for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, schema coverage is 100%, so baseline is 3. Description does not need to add parameter info.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists all dimensions in the active document ('lista TODAS las cotas del documento activo'). It specifies the use case as a discovery step for conversational editing and distinguishes itself from sibling tools like modify_dimension.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly describes when to use (as discovery step for editing), provides guidance on mapping spoken values to dimensions, and tells the user to pass owner/name to modify_dimension. Also includes caveats about renamed dimensions and angular reporting.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_edgesA
Listar aristas — enumerate edges of one or all solid bodies.
Returns one dict per edge with:
- index: 0-based per-body. NOT durable across rebuilds.
- body_name: which body the edge belongs to.
- type: "line" | "circle" | "other"
- midpoint_mm: [x, y, z] in mm. DURABLE reference for fillet/chamfer.
None for closed-loop edges (full circles) — a circle has no
canonical midpoint. For those, pass edge_indices to
fillet/chamfer instead of edge_midpoints_mm. Partial arcs
(post-fillet corner arcs) and line edges DO have midpoints.
- length_mm: edge length in mm (None for closed loops).
Args: body_name: If given, return only edges of that body. Else return edges of every solid body in the active part.
Use case: pre-fillet/pre-chamfer LLM workflow. The LLM enumerates edges, reasons spatially ("the four top edges have z=10mm"), then passes midpoints to fillet() / chamfer().
Caveat: in this SolidWorks binding, edges can't be selected by name string in part-doc context — coordinate matching is the only durable address. Use the midpoint values returned here verbatim; don't recompute them in the LLM.
Example — list every edge in the active part: edges = list_edges() # edges = [{"index": 0, "body_name": "Saliente-Extruir1", # "type": "line", "midpoint_mm": [0, 0, 5], ...}, ...]
| Name | Required | Description | Default |
|---|---|---|---|
| body_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses behavioral traits: index instability across rebuilds, midpoint being null for closed-loop edges, and the inability to select edges by name string. It explains durable vs non-durable references.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is detailed and well-organized with sections for return values, args, use case, caveat, and example. While slightly lengthy, every sentence adds value. The structure aids comprehension.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one optional parameter) and the presence of an output schema, the description thoroughly covers return fields, use case, caveats, and parameter behavior. It is complete for agent invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The sole parameter 'body_name' has 0% schema description coverage, but the description fully explains its effect: when given, returns edges of that body; otherwise returns edges of all bodies. This adds complete meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it enumerates edges of one or all solid bodies, with specific return fields. It distinguishes from sibling tools like list_faces and fillet/chamfer by providing the use context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly guides use for pre-fillet/pre-chamfer workflows and advises using midpoint values verbatim. It does not list exclusions but provides a caveat about edge selection limitations, offering practical guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_facesA
Listar caras — enumerate faces of one or all solid bodies.
Mirror of list_edges for faces. Returns one dict per face with: - index: 0-based per-body. NOT durable across rebuilds. - body_name: which body the face belongs to. - type: "planar" | "cylindrical" | "conical" | "spherical" | "other". Informational; addressing is by centroid. - centroid_mm: [x, y, z] in mm — midpoint of the face's bounding box. DURABLE reference for create_sketch_on_face. - area_mm2: face area in mm² (None if SW didn't expose it). - normal: outward normal [nx, ny, nz] for planar faces; None if SW didn't expose it. OMITTED on non-planar faces (token economy — structurally N/A there). - radius_mm, axis, concave: for cylindrical faces only — the geometry-side bore Ø used by verify_build_report; concave True = bore wall, False = outer boss/step face, None = unknown. OMITTED on non-cylindrical faces. - box_mm: axis-aligned bounding box [xmin,ymin,zmin,xmax,ymax, zmax] in mm (None if SW didn't expose it) — lets verify_build_report derive through-vs-blind from geometry (a bore face spanning both ends of the body is a through cut, regardless of the feature-definition read).
Args: body_name: If given, return only faces of that body. Else return faces of every solid body in the active part.
Use case: chained-feature LLM workflow. The LLM lists faces, reasons spatially ("the top face has the largest +Z normal"), passes the centroid to create_sketch_on_face, then sketches and extrudes/cuts on it.
Caveat: per-body face ordering is determined by SW's internal topology and is NOT durable across rebuilds. Re-run list_faces immediately before create_sketch_on_face rather than caching centroids across model edits.
Example — find the top face of a 50x50x20 block (sketched on Front, extruded +Z by 20): faces = list_faces() top = max( (f for f in faces if f["normal"] and f["normal"][2] > 0.9), key=lambda f: f["centroid_mm"][2], ) # top["centroid_mm"] = [25.0, 25.0, 20.0]
| Name | Required | Description | Default |
|---|---|---|---|
| body_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so description carries full burden. It exhaustively documents return fields, durability caveats, and omitted fields for non-planar/non-cylindrical faces, ensuring full transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with sections (Args, Use case, Caveat, Example). Slightly long but every sentence adds value, and the bullet format keeps it readable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given output schema exists, description still provides rich detail on all return fields, edge cases, and an example, making it fully self-contained for the agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter, body_name, is fully explained: if given, filter to that body; else all bodies. Schema has no description (0% coverage), but this description completely compensates.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'enumerate faces of one or all solid bodies' and explicitly frames it as a mirror of list_edges for faces, clearly distinguishing its purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear when to use via the body_name parameter and describes a chained-feature use case. Missing explicit 'when not to use' or alternative tool mention, but still strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_recent_plansA
Devuelve los planes registrados en esta sesión (depuración).
Útil cuando el LLM olvida un id de plan. El registro vive en memoria — se borra al reiniciar el servidor MCP.
[en: Debug aid — assembly plans, compiled feature plans, batch jobs, and macro jobs recorded this session. In-memory only; clears on server restart.]
Returns: {"assembly_plans": [, ...], "feature_plans": [, ...], "batch_jobs": [, ...], "macro_jobs": [, ...]}
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that data lives in memory and clears on server restart, which is useful. However, it does not state whether the operation is read-only, synchronous, or any potential side effects. More detail (e.g., no destructive actions, idempotent) would improve transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is bilingual with Spanish first then English, which adds length. While the information is valuable, the duplication reduces conciseness. The front-loaded first sentence in Spanish is clear but could be streamlined into a single, multilingual-friendly paragraph.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (no parameters, no output schema), the description is fairly complete. It lists all returned fields with types (dictionaries) and notes the in-memory nature. It does not mention any size limits or performance caveats, but these are minor omissions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the schema description coverage is 100% by default. The description does not need to add parameter meaning, but it could explain any implicit context (e.g., session-scoped). A baseline score of 4 is appropriate as the description provides a clear purpose for the tool without requiring parameter details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it returns plans recorded in the current session, specifying the verb 'list' and resource 'recent plans'. It provides a detailed breakdown of the plan types (assembly, feature, batch, macro) and explicitly positions itself as a debug aid when the LLM forgets a plan ID, differentiating it from other tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states the use case ('Útil cuando el LLM olvida un id de plan' / 'Debug aid'), indicating when to invoke it. While it doesn't explicitly list when not to use or alternative tools, the sibling tools (e.g., record_*, run_*) are clearly distinct operations, making the guidance sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mirror_featureA
Mirror (simetría) features about a plane or planar face.
Useful for symmetric brackets, mirrored mounting bosses, and any part where you've modeled half and want SW to mirror the rest. ≈50% of autoparts geometry has at least one mirror plane.
Args: feature_names: Names of features to mirror. Pass exact names from get_active_part_info — e.g. ["Cortar-Extruir1"] for a single hole, ["Saliente-Extruir2", "Cortar-Extruir3"] to mirror a boss + a hole together. mirror_plane: Name of the plane or planar face to mirror about. Accepts: - Default plane aliases: "front" / "top" / "right" (English) or "Alzado" / "Planta" / "Vista lateral" (Spanish UI). - User-created reference plane: "Plano1" / "Plano2" etc. (returned by create_reference_plane). - Planar face name: e.g. "Cara<3>@Pieza1" for a flat face. geometry_pattern: When True (default), the mirror is a fast exact-geometry copy. Pass False to make SW recompute each mirrored feature's dimensions from scratch — useful when the source feature uses sketch dimensions that should re-evaluate on the mirrored side.
Returns the new mirror Feature with name (e.g. "Simetría1") and type ("mirror_feature").
Example — mirror a hole pattern about the part's centerline (Front plane in this binding): mirror_feature(["Cortar-Extruir1", "LPattern1"], "front")
| Name | Required | Description | Default |
|---|---|---|---|
| mirror_plane | Yes | ||
| feature_names | Yes | ||
| geometry_pattern | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries full burden. It explains the geometry_pattern behavior, parameter sources, and return value, but doesn't mention potential side effects or permissions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with paragraphs, bullet points, and a clear example. Every sentence adds value, no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-param tool with no output schema, the description covers purpose, all parameters with examples, usage tips, and return value, making it self-contained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema coverage, the description fully compensates: explains feature_names sourcing, mirror_plane aliases and syntax, and geometry_pattern effect, far exceeding the schema's type/default info.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it mirrors features about a plane or planar face, provides concrete examples like symmetric brackets, and distinguishes it from other pattern tools among siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use it (symmetric parts, half-modeling) and provides an example, but does not explicitly contrast with alternatives like linear_pattern or circular_pattern.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
modify_dimensionA
Change a single dimension on a feature in the active part or assembly.
Args: feature_name: Exact name of the feature, e.g. "Boss-Extrude1" — or a mate name ("Distance1") when an ensamble is active. dimension_name: Exact name of the dimension within the feature, e.g. "D1". new_value_mm: New value in millimeters (degrees for angle dims, including angle mates).
Returns the updated feature state.
| Name | Required | Description | Default |
|---|---|---|---|
| feature_name | Yes | ||
| new_value_mm | Yes | ||
| dimension_name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It discloses that the tool modifies a dimension and returns updated state, but omits behavioral traits like whether the operation is destructive, requires specific permissions, or triggers model rebuilds. This is insufficient for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear opening sentence, bulleted Args with examples, and a returns statement. Every sentence adds value, and the front-loaded main action aids quick understanding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations and no output schema, the description covers parameters well but lacks context on error conditions, required document state, or side effects. Returns statement is useful but incomplete for safe invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description compensates fully. It explains feature_name includes mate names in assemblies, dimension_name expects exact naming like 'D1', and new_value_mm specifies units and handling of angle dimensions. This adds critical meaning beyond the basic schema titles.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Change a single dimension on a feature in the active part or assembly,' providing a specific verb and resource. It distinguishes from sibling tools like list_dimensions or add_sketch_dimension by focusing on modification of existing dimensions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for modifying existing dimensions, but no explicit guidance on when to use versus alternatives, nor any exclusion criteria. It lacks context about prerequisites or when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
move_componentA
Mover componente — set a component's pose (drag-equivalent).
Sets the component's assembly-frame position (and optionally its 3x3 rotation, row-major) via IComponent2.Transform2, then rebuilds. Use it to stage a component at its EXACT pose before creating mates — angle and distance mates have two solutions each and capture the branch nearest the creation-time pose, so posing first then mating (see place_and_mate) eliminates the mirror-flip failure mode.
Args: component_name: Instance name from get_active_assembly_info. origin_mm: [x, y, z] target position of the part origin (mm). rotation_rows: Optional 9 row-major 3x3 rotation entries; None keeps the current rotation.
Returns requested vs post-rebuild pose plus moved (False = the pose
did NOT hold: the component is fixed or fully mate-driven — report it,
don't assume).
| Name | Required | Description | Default |
|---|---|---|---|
| origin_mm | Yes | ||
| rotation_rows | No | ||
| component_name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses behavior: it sets position/rotation, triggers a rebuild, and returns whether the movement held. It explains the significance of 'moved=False' (component fixed or mate-driven).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a one-line summary, a detailed explanation of use case, and a clear 'Args' section. Every sentence is informative and there is no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description fully explains return values (requested vs post-rebuild pose, plus 'moved' flag). It also covers the rebuild side effect and constraints (fixed/mate-driven components). Complete for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Despite 0% schema description coverage, the description explains all parameters: 'component_name' from get_active_assembly_info, 'origin_mm' as [x,y,z] in mm, and 'rotation_rows' as optional 9-element row-major rotation matrix. This adds critical meaning beyond the schema's basic types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'set a component's pose (drag-equivalent)' by positioning and optionally rotating a component. It distinguishes from sibling tools like 'place_and_mate' by explaining its specific use case.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The explicit guidance to use this tool for staging a component at exact pose before creating mates, and warning about the alternative 'place_and_mate' for combined posing and mating, provides clear usage context. Also informs about interpretation of the 'moved' return value.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
new_assemblyA
Crear un ensamble nuevo y vacío (documento .SLDASM).
Abre y activa un ensamble en blanco desde la plantilla por defecto. Punto de partida para insertar componentes y mates. [en: Create + activate a new empty assembly — the starting point for inserting components and mates.]
Returns: {"name": str, "type": "assembly", "created": True}
Caveat: requiere SolidWorks abierto (NO lanza el proceso). [en: requires SW already running; does not launch it.]
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, description fully discloses behavior: creates and activates empty assembly, requires SW already running, does not launch SW. Returns a dictionary with name and created status.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Bilingual but concise, covering purpose, usage context, caveat, and return value in a few sentences. Information is well-structured and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No parameters or output schema needed. Description completely covers essential information: what it does, return format, and prerequisite (SW running).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Tool has zero parameters; baseline score of 4 applies. Description does not need to add parameter info.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Explicitly states it creates a new empty assembly (.SLDASM), activates it from default template, and is starting point for inserting components. Clearly distinguishes from sibling tools like new_part and open_document.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Describes as starting point for components and mates, and includes caveat that SolidWorks must already be running. Provides clear context for when to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
new_partA
Crear una pieza nueva y vacía en SolidWorks (documento .SLDPRT).
Abre y activa una pieza en blanco desde la plantilla por defecto. Úsalo cuando no haya pieza abierta o quieras empezar desde cero — las demás herramientas de geometría requieren una pieza activa. [en: Create + activate a new empty part. Use when no part is open or you want a fresh start — geometry tools require an active part.]
Returns: {"name": str, "type": "part", "created": True}
Caveat: requiere SolidWorks abierto (NO lanza el proceso). Si no hay plantilla de pieza por defecto, usa la creación legacy. [en: requires SW already running; does not launch it.]
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It states that the tool requires SolidWorks already running (does not launch it), activates a new part, and uses legacy creation if no default template exists. It also specifies the return value. However, it does not describe error behavior if SolidWorks is not open or if creation fails, which would improve transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is bilingual (Spanish/English) and well-structured: purpose, usage, return type, caveat. Each sentence provides essential information with no fluff. However, the repetition of content in both languages slightly reduces conciseness; a single-language description could be shorter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (no parameters, no annotations, no output schema), the description covers the necessary context: creation action, activation, prerequisite (SW open), fallback for missing template, and return format. Missing details include potential error states or what happens if the tool is called when SW is closed. Still, it is reasonably complete for a straightforward tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has no parameters and schema coverage is 100%, so the baseline is 3. The description adds meaning beyond the schema by explaining the tool's purpose and context, but it does not provide additional parameter-specific information since none is needed. The description is adequate for a parameterless tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool creates a new empty part in SolidWorks (.SLDPRT), uses a specific verb ('Crear', 'Create'), and distinguishes itself from sibling tools like 'new_assembly' by specifying 'part'. It also notes that geometry tools require an active part, implying this is a prerequisite.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Úsalo cuando no haya pieza abierta o quieras empezar desde cero' (Use when no part is open or you want a fresh start), providing clear context for usage. It also mentions that geometry tools require an active part, guiding the agent to use this tool first. The caveat about SolidWorks needing to be open and legacy fallback adds practical usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
open_documentA
Abrir un documento de SolidWorks existente por ruta absoluta.
Carga un .SLDPRT / .SLDASM / .SLDDRW ya guardado. El tipo se infiere de la extensión y SW lo activa automáticamente — el documento abierto pasa a ser el documento activo que reportan get_active_part_info, list_faces, list_edges, etc. [en: Open an existing SolidWorks document by absolute path. Doc type is inferred from the extension; SW auto-activates the opened doc so the standard "active document" tools (get_active_part_info, etc.) operate on it immediately.]
Úsalo para "modifica esta pieza guardada" — se reabre y se modifica en su lugar, nunca se rehace desde cero.
Args: path: Ruta absoluta al archivo INCLUYENDO la extensión. La extensión determina el tipo: .SLDPRT parts (swDocPART) .SLDASM assemblies (swDocASSEMBLY) .SLDDRW drawings (swDocDRAWING) Cualquier otra extensión → SolidWorksError.
Returns: { "name": str, # title del doc (sin trailing '*') "path": str, # path tal cual lo pasaste "type": "part" | "assembly" | "drawing", "opened": True, "errors": 0, # bitmask placeholder (OpenDoc6 path "warnings": 0, # for these is v1.1) }
Raises: - ValueError si path está vacío. - SolidWorksError si el archivo no existe en disco. - SolidWorksError si la extensión no es .SLDPRT/.SLDASM/.SLDDRW. - SolidWorksError si SW devuelve None (archivo corrupto, versión más nueva que la instalación, mismatch tipo↔extensión).
Caveat:
Usa ISldWorks.OpenDoc (la variante simple de 2 args), no OpenDoc6. Por eso errors/warnings vienen siempre en 0 — el bitmask completo requiere VARIANT BYREF bajo pywin32 late-binding y está deferido a v1.1. Para "abrió bien o no", basta con "opened": True.
Si ya hay un documento con el mismo nombre abierto en SW, SW activa el existente en vez de re-abrir. Comportamiento default de SW — no lo sobreescribimos.
Desktop and Documents locations may be redirected. Use an explicit absolute path instead of assuming a profile-folder layout.
Example — abrir una pieza guardada y verificar: open_document(r"C:\CAD\input\bracket.SLDPRT") get_active_part_info() # name + saved feature tree (Para refrescar tras una edición externa: close_active_document(force=True) → open_document(...).)
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It details auto-activation behavior, the behavior when a document with the same name is already open (SW activates existing), the limitation of using OpenDoc vs OpenDoc6 (errors/warnings always 0), and caveats about redirected paths. It also explains error types (ValueError, SolidWorksError) and conditions under which they occur.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections: main description, usage guidance, args, returns, raises, caveat, and example. Every sentence adds value. However, it is bilingual (Spanish and English), which duplicates content and slightly reduces conciseness. Despite this, the structure is logical and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity (1 parameter, no output schema), the description is highly complete. It explains the return value structure, error handling, caveats about OpenDoc vs OpenDoc6 and existing documents, and provides a concrete example. All necessary context for correct invocation is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema only defines 'path' as a string with 0% coverage. The description adds critical meaning: the path must be absolute and include the extension, which determines the document type. It lists valid extensions, explains that invalid extensions cause SolidWorksError, and specifies that empty path raises ValueError. This goes far beyond the schema's minimal definition.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it opens an existing SolidWorks document by absolute path, specifies the supported file extensions (.SLDPRT, .SLDASM, .SLDDRW), and explains that the opened document becomes the active document for other tools. This distinguishes it from sibling tools like new_part, new_assembly, save_active_document, and close_active_document.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage context: 'Úsalo para modifica esta pieza guardada' and explains that it reopens and modifies in place, never rebuilding from scratch. It also gives an example of refreshing after external edits using close_active_document and open_document. However, it lacks explicit 'when not to use' statements or comparisons to alternatives beyond the example, so it does not fully exclude alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
place_and_mateA
Posicionar y matear — pose a component exactly, THEN create its mates.
The branch-safe mating recipe: angle/distance mates are bistable (two
solutions; rebuilds can flip to the mirror). Creating each mate while the
component already sits at the exact target pose makes the solver capture
the intended branch. After the mates, the pose is read back and compared
against the request — pose_held=False means a mate pulled the component
elsewhere (wrong branch / conflicting mate): fix it, don't trust it.
Args: component_name: Instance name from get_active_assembly_info. origin_mm / rotation_rows: Exact target pose (see move_component). mates: Ordered mate specs, each {"type": "coincident"|"concentric"|"distance"|"angle", "entity1_id": ..., "entity2_id": ..., "component2_name": ..., # the mate partner "align": "ALIGNED"|"ANTIALIGNED", # optional "distance_mm": float, "angle_deg": float} # per type pose_tolerance_mm: Max |Δorigin| per axis for pose_held (default 0.1).
Returns {pose_before, mates, pose_after, pose_held}.
| Name | Required | Description | Default |
|---|---|---|---|
| mates | No | ||
| origin_mm | Yes | ||
| rotation_rows | No | ||
| component_name | Yes | ||
| pose_tolerance_mm | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears full responsibility. It explains the bistable nature of angle/distance mates, the risk of rebuilds flipping, and the pose_held check that indicates problems. It does not detail permissions or side effects, but the core behavioral traits are well disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and rationale. It is structured with a brief intro, detailed reasoning, argument list, and return value description. Every sentence adds value, though a slight tightening could be achieved.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 5 parameters and no output schema, the description covers the purpose, usage rationale, argument details, and return keys. It explains the pose_held concept which is critical for interpreting results. It lacks error handling details but is otherwise comprehensive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description compensates by explaining each parameter: component_name from get_active_assembly_info, origin_mm/rotation_rows as exact target pose, mates structure with example fields, and pose_tolerance_mm default. It adds meaningful context beyond the schema's type-only definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: to pose a component exactly and then create its mates. It distinguishes itself from sibling tools like add_angle_mate or move_component by combining both actions in a specific order, with a rationale about branch-safe mating.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the branch-safe mating recipe and why the order matters, providing clear context for when to use this tool. It does not explicitly list alternatives or when not to use, but the context implies it is for precise placement where mate branch stability is critical.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_part_libraryA
Busca piezas parecidas en el catálogo local — '¿ya hicimos algo así?'.
Filtros combinables (AND): texto libre en español (por tokens, ignora acentos; busca en nombre de archivo/pieza/notas), Ø de barreno requerido ± tolerancia, ventana de masa, y envelope [x,y,z] mm donde la pieza debe caber (sin importar orientación). Read-only sobre el índice; corre build_part_index primero en esa carpeta.
Args: folder: carpeta ya indexada. text: p.ej. 'buje balero'. bore_diameter_mm: la pieza debe tener un barreno de este Ø. diameter_tol_mm: tolerancia del Ø. min_mass_g / max_mass_g: ventana de masa. fits_envelope_mm: [x, y, z] del material en bruto disponible. limit: máximo de resultados.
Returns: {count, results: [{filename, path, part_name, bbox_size_mm, mass_g, feature_count, cut_count, bores, notes, indexed_at}]}.
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | ||
| limit | No | ||
| folder | Yes | ||
| max_mass_g | No | ||
| min_mass_g | No | ||
| diameter_tol_mm | No | ||
| bore_diameter_mm | No | ||
| fits_envelope_mm | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explicitly states the tool is read-only ('Read-only sobre el índice'), which is critical for safety. It details the filter behavior (AND logic, tolerance, envelope). With no annotations provided, the description effectively communicates the non-destructive nature and search behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear purpose, filter explanation, argument list, and return format. It is front-loaded with the main goal. However, it is slightly verbose; the inline parameter explanations could be shortened if schema descriptions were provided.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool complexity (8 parameters, no output schema, no annotations), the description provides comprehensive details: filter combinations, tolerance semantics, envelope orientation-agnostic behavior, indexing prerequisite, and a full return structure. Nothing essential is missing for an agent to correctly use this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description compensates by listing and explaining each parameter in the Args section, including examples (e.g., 'buje balero' for text). It adds meaning beyond the raw schema, though some parameters could use more detail on format (e.g., fits_envelope_mm).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: searching for similar parts in a local catalog ('¿ya hicimos algo así?'). It provides a specific verb and resource, but does not explicitly differentiate from the sibling tool 'search_part_catalog', which may have overlapping functionality.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description includes a prerequisite: 'corre build_part_index primero en esa carpeta' (run build_part_index first). It also states it is read-only. However, it does not provide guidance on when not to use this tool or suggest alternative tools for similar queries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
record_assembly_planA
Registra un AssemblyPlan estructurado (SKELETON → lista de partes → plan de mates) ANTES de tocar SolidWorks. Solo asesoría: no muta nada. Muéstrale el plan al diseñador; luego ejecútalo con run_assembly_plan.
Args: intent: Una oración: ¿qué ensamble es? skeleton: {file_path, insert_xyz_mm?, config_name?} — el componente FIJO (primer insert, auto-fijado). Elígelo deliberadamente (base/housing, nunca un tornillo). SIN mates. components: lista ORDENADA de {file_path, insert_xyz_mm?, config_name?, mates: [{tool, params, note?}], confidence?, note?}. Cada componente DEBE traer ≥1 mate (mate-or-incomplete). tool ∈ add_coincident_mate / add_concentric_mate / add_distance_mate / add_angle_mate / add_mate_by_face_position / stack_components / place_and_mate. En params usa '' (la instancia recién insertada) y '' — se sustituyen con los nombres vivos al ejecutar. Prefiere mates por posición/composites (nombres de entidad crudos son sensibles a locale); mates biestables (distance/angle) → envuélvelos en place_and_mate. save_path: .SLDASM para guardar al final ("" = no guardar). use_active_assembly: False → new_assembly primero. confidence: 0–10 global (escala de confianza del plan: ≥6 ejecuta).
Devuelve {assembly_plan_id, plan, warnings, unmated_components, go_recommendation}. Componentes sin mates o params '' BLOQUEAN run_assembly_plan. [en: Record a structured assembly plan — advisory only; review with the designer, then execute via run_assembly_plan.]
| Name | Required | Description | Default |
|---|---|---|---|
| intent | Yes | ||
| skeleton | Yes | ||
| save_path | No | ||
| components | Yes | ||
| confidence | No | ||
| assumptions | No | ||
| use_active_assembly | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description fully covers behavioral traits: clearly states 'no muta nada' (does not mutate), 'solo asesoría' (advisory only), and describes return values including warnings and blocking conditions for incomplete components. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is verbose and bilingual (Spanish and English), adding length without additional information for an English-speaking agent. While structured and front-loaded, it could be more concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (7 params, nested objects, no output schema or annotations), the description is quite detailed, covering the plan structure, mate tools, substitution mechanism, and return values. However, it misses the 'assumptions' parameter, and the confidence scale is briefly touched but not fully elaborated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so description must add meaning. It explains details for 6 of 7 parameters (intent, skeleton, components, save_path, use_active_assembly, confidence) but completely omits the 'assumptions' parameter from the description, which is present in the schema. This is a significant gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it records a structured assembly plan before touching SolidWorks, is advisory only, and does not mutate anything. It distinguishes from run_assembly_plan by noting that the plan should be reviewed with the designer and then executed via that tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells when to use ('ANTES de tocar SolidWorks', advisory only) and when to use the sibling tool run_assembly_plan for execution. Also mentions that incomplete components block execution, guiding proper usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
record_batch_jobA
Registra un BatchJob (UN verbo determinista sobre un conjunto de archivos) y devuelve una VISTA PREVIA EN SECO (old→new por archivo) SIN mutar nada — esa vista previa ES la aprobación humana a escala (no se aprueban 70k archivos uno por uno; se aprueba verbo + alcance + el diff). Revísala; luego ejecútalo con run_batch_job.
Args: intent: Una oración: ¿qué cambio masivo es? fileset: {root, glob?, recurse?, paths?, exclude?, confidence?} — la carpeta (+filtro) o una lista explícita de rutas. Resolver el alcance lee SOLO metadatos de ruta; la geometría no se transmite. operation: {verb, params} — verb ∈ set_custom_property / export_document / force_rebuild / check_interference / get_bom. Ej: {"verb":"set_custom_property", "params":{"name":"Proveedor","value":"ACME","config":""}}. save_after: guardar cada archivo tras un verbo que modifica el documento (p.ej. set_custom_property). export/health/BOM no guardan el origen. continue_on_error: True → un archivo malo no aborta el lote (cada salto se reporta en el manifiesto). out_dir: carpeta ÚNICA para las salidas (export/BOM) y el manifiesto ("" = junto al origen). Una ruta de red aquí dispara una advertencia (la geometría no debe salir del host). confidence: 0–10 del plan (afecta go_recommendation: <6 → handback). preview_cap: máximo de filas en la vista previa.
Devuelve {batch_job_id, matched_files, preview, preview_truncated, warnings, go_recommendation}. [en: Record a batch job + return a dry-run preview — advisory only; review, then run_batch_job.]
| Name | Required | Description | Default |
|---|---|---|---|
| intent | Yes | ||
| fileset | Yes | ||
| out_dir | No | ||
| operation | Yes | ||
| confidence | No | ||
| save_after | No | ||
| preview_cap | No | ||
| continue_on_error | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It explains no mutation, dry-run only, advisory recommendations, metadata-only reading, network path warnings, and confidence affecting go_recommendation. Fully transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with bullet-point Arg list, but slightly verbose with explanatory prose. Still front-loaded and every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given complexity (8 params, nested objects, no output schema), the description covers purpose, parameters, return fields, usage flow, and limitations. Extremely complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Despite 0% schema coverage, the description provides detailed explanations for all 8 parameters, including examples for 'operation' and semantics for 'fileset'. Adds immense value beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool records a batch job and returns a dry-run preview without mutation. It uses specific verbs ('Registra...devuelve...SIN mutar') and distinguishes from the sibling 'run_batch_job'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly guides use: first use this tool for advisorial preview, then use 'run_batch_job' to execute. It lacks explicit 'when not to use' but context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
record_drawing_specA
Record a structured DrawingSpec (LEGACY/dormant spine — see docs/AUTOMATION_LANE.md).
Advisory only: does NOT mutate SolidWorks. Pins a structured part spec (the
LLM's own reading, from any source) so compile_feature_plan_from_drawing_spec
→ run_feature_plan can build it deterministically. Generating a part from a
drawing is a legacy path, not the product focus (automation + reuse).
Args:
source: Dict with pdf_path, page_number, crop_pdf_pts, render_path, note.
interpretation: One-sentence part interpretation.
archetype: One of axisymmetric_revolved, extruded_closed_profile,
plate_hole_pattern, custom.
dimensions: List of {name, value, units, status, source, tolerance,
confidence, note}. status is grounded/derived/assumed/missing.
features: List of {kind, label, tool, params, source_dimensions,
confidence, note}. If tool is set, compile_feature_plan will use
it directly; otherwise it emits archetype defaults.
internal_features: List of {type, diameter_mm, radius_mm, depth_mm, axis,
position_mm, status, note} — the dashed-line bores/grooves/threads
to model. type is through_hole/blind_hole/counterbore/countersink/
groove/thread/radius_cut. radius_cut (a swept-arc / scooped cut) uses
radius_mm instead of diameter_mm. verify_build_report reconciles each
against the built tree to catch silently-dropped or wrong-sized features.
views: Optional list of source-view notes/crops.
assumptions: Assumptions explicitly chosen by the LLM/user.
missing_dimensions: Required dimensions not visible in the source.
confidence: Global confidence 0..10.
notes: Free-form audit notes.
Returns the stored spec, warnings, expected_size_mm when inferable, and a short build recommendation.
| Name | Required | Description | Default |
|---|---|---|---|
| notes | No | ||
| views | No | ||
| source | Yes | ||
| features | No | ||
| archetype | Yes | ||
| confidence | No | ||
| dimensions | No | ||
| assumptions | No | ||
| interpretation | Yes | ||
| internal_features | No | ||
| missing_dimensions | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description clearly states the tool does not mutate SolidWorks and details the return value, including stored spec, warnings, expected size, and build recommendation. Without annotations, it provides good behavioral disclosure, though it could elaborate on overwrite behavior or error conditions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is lengthy (over 500 words) and includes some tangential details (e.g., references to AUTOMATION_LANE.md, legacy path explanation). It is structured with an Args section, but the first paragraph is cluttered and could be trimmed for better conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex tool with 11 parameters and no output schema, the description covers the workflow, parameter details, and return values comprehensively. However, it lacks information on error handling or validation behavior, which slightly detracts from completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description fully compensates by providing a detailed Args block for each of the 11 parameters, including allowed values for archetype and internal_features.type, and explaining the structure of nested fields like dimensions and features.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool records a structured DrawingSpec and explicitly notes it does NOT mutate SolidWorks, distinguishing it from mutation-focused siblings. However, the purpose is somewhat buried in a verbose opening about legacy/dormant spine and file references, which could be more direct.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions the tool is advisory-only and part of a legacy path, and it explicitly connects to compile_feature_plan_from_drawing_spec and run_feature_plan, giving some usage context. But it does not explicitly state when to use this tool over alternatives or provide clear exclusions, leaving some ambiguity for an AI agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
record_macro_jobA
Registra un MacroJob: código VBA escrito por la IA para ejecutarse vía
RunMacro2. CRUZA la restricción #2 (API arbitraria de SolidWorks) a
propósito, para cubrir tareas fuera del catálogo de verbos. Solo asesoría: NO
ejecuta nada. La REVISIÓN HUMANA de generated_source aquí es la aprobación;
luego ejecútalo con run_macro_job.
Args:
intent: Una oración: ¿qué hace la macro?
generated_source: el cuerpo VBA completo (un Sub main, salvo proc_name).
Solo formato .swb (texto plano VBA7).
proc_name: el Sub de entrada (por defecto 'main').
provenance: {source_kind?: authored|template|recorded, template_id?,
generated_by?, notes?} — para auditoría.
confidence: 0–10 (afecta go_recommendation).
Devuelve {macro_job_id, source_preview, line_count, proc_name, warnings, risky, go_recommendation}. '' en el código BLOQUEA run_macro_job. [en: Record an AI-authored VBA macro job — advisory only; reviewing the source IS the approval. Crosses constraint #2 by design.]
| Name | Required | Description | Default |
|---|---|---|---|
| intent | Yes | ||
| proc_name | No | main | |
| confidence | No | ||
| provenance | No | ||
| assumptions | No | ||
| generated_source | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully carries the burden of behavioral disclosure. It states the tool records only, does not execute, requires human review of generated_source, and that '<required>' in code blocks run_macro_job. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is somewhat lengthy but well-structured with a purpose paragraph and an args list. It is front-loaded with critical information. Every sentence adds value, though it could be slightly more concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 6 parameters, no output schema, and no annotations, the description covers the tool's purpose, parameters (except assumptions), return object, and workflow. It is sufficiently complete for a recording/advisory tool, though error handling is omitted.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds detailed meaning for most parameters (intent, generated_source, proc_name, provenance, confidence) beyond the schema (which has 0% description coverage). However, the 'assumptions' parameter is not explained, leaving a minor gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool records an AI-authored VBA macro job for execution via RunMacro2. It distinguishes itself from sibling tools like run_macro_job by emphasizing it is advisory only and crosses constraint #2 for tasks outside the verb catalog.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says when to use this tool (for tasks outside the standard verb catalog) and when not to use it (it does not execute; instead, use run_macro_job after human review). It also explains the approval workflow, making it clear how to proceed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
revolve_cutA
Cortar por revolución — revolve cut: remove material by sweeping a closed sketch profile around an axis.
Standard autoparts use: ranuras O-ring (O-ring grooves), ranuras de anillo de retención (retaining-ring grooves), asientos de cono (bearing cone seats), inner steps on bujes. Mirror of revolve_sketch but subtractive.
Args:
axis_name: Eje name from create_reference_axis. Same constraints
as revolve_sketch.axis_name.
angle_deg: Angular sweep in (0, 360]. Default 360 — most autoparts
revolve cuts are full-circle (annular grooves).
reverse_direction: Flip rotation sense around the axis.
Returns the new CortarRevolución feature (type=cut_revolve,
D1=angle_deg).
Example — Ø3mm O-ring groove on a Ø20 shaft, 5mm from the end: # shaft already built via revolve_sketch eje = create_reference_axis("front", reference_2="right") create_sketch("front") create_circle(10, 5, 1.5) # 1.5mm-radius cross-section revolve_cut(eje["name"])
| Name | Required | Description | Default |
|---|---|---|---|
| angle_deg | No | ||
| axis_name | Yes | ||
| reverse_direction | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It explains the subtractive nature and return type (CortarRevolución, type='cut_revolve'), but lacks disclosure of prerequisites (closed sketch, axis existence), errors, or side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is front-loaded with purpose and use cases, then parameter details, then a concrete example. Could be slightly more concise but the structure is logical.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema, description covers usage, parameters, return type, and provides a detailed example. It gives domain context for autoparts, making it complete for a moderate-complexity tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so description must compensate. It explains axis_name as from create_reference_axis with same constraints, angle_deg as sweep range (0,360] with default 360 and typical full-circle use, and reverse_direction as sense flip. This adds significant meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it is a subtractive revolve operation, explicitly distinguishing it from revolve_sketch as its mirror. It provides specific autoparts use cases (O-ring grooves, retaining-ring grooves) and contrasts with sibling tools like extrude_cut and sweep_cut.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives concrete examples of when to use (autoparts grooves) and notes it's the subtractive counterpart of revolve_sketch. However, it does not explicitly state when not to use it or compare to alternatives like extrude_cut or sweep_cut.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
revolve_sketchA
Revolución (saliente por revolución) — revolve a closed sketch around an axis. The standard SolidWorks workflow for turned parts: flechas (shafts), bujes (bushings), bridas (flanges), finiales, insertos torneados — anything spun on a lathe.
Args:
axis_name: Name of the axis to revolve around. Pass the "Eje1"
name returned by create_reference_axis (typically the
intersection of two default planes through the part origin).
The axis must lie in the same plane as — or beside — the
sketch profile. Profiles that cross the axis raise a SW
geometry error.
angle_deg: Sweep angle in degrees, in the open interval (0, 360].
Default 360 (revolución completa) covers the standard turned-
part case. Partial angles (e.g. 180) are useful for sectores,
half-housings, leva-cams.
reverse_direction: Flip rotation sense around the axis. Default
follows SW's natural sense; flip if the resulting body comes
out on the wrong side of the sketch plane.
merge: True (default) merges with existing solid material it
touches. False keeps the revolve as a separate body
(multi-body modeling).
Returns the new Revolución feature (type=boss_revolve,
D1=angle_deg).
Caveat: D1 is the sweep ANGLE, not a distance. modify_dimension
can update D1 to retune the angle, but the sketch profile dimensions
(the turned silhouette itself) are NOT parametric in v1 — same caveat
as extrude_sketch (sketch primitives are draw-once-only; resize
requires a fresh rebuild).
Example — Ø50mm × 10mm thick disc, full revolution around the Z axis: eje = create_reference_axis("front", reference_2="right") create_sketch("top") create_line(0, 0, 25, 0) # half-radius along +X create_line(25, 0, 25, 10) # thickness along +Y create_line(25, 10, 0, 10) # back-radius create_line(0, 10, 0, 0) # close on the axis revolve_sketch(eje["name"])
| Name | Required | Description | Default |
|---|---|---|---|
| merge | No | ||
| angle_deg | No | ||
| axis_name | Yes | ||
| reverse_direction | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description covers merge behavior, reverse direction, D1 meaning (angle not distance), and non-parametric sketch dimensions caveat. Lacks disclosure of additional error conditions or performance implications.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with summary, args list, returns description, caveat, and example. Slightly verbose (e.g., example could be shorter), but every sentence adds value. Front-loaded with purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Complex tool with 4 params and no output schema; description provides parameter details, return info (feature type, D1 mapping), caveats, and a full example. Relates to sibling tools via comparison with extrude_sketch.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has 0% description coverage, but description explains all four parameters: axis_name origin, angle_deg interval and default, reverse_direction effect, merge behavior. Also connects angle_deg to D1 dimension and notes it can be modified via modify_dimension.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states 'revolve a closed sketch around an axis' and lists concrete use cases (shafts, bushings, flanges) that distinguish it from siblings like extrude_sketch or sweep_sketch.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Describes axis placement constraints ('must lie in same plane as or beside sketch profile') and warns against crossing axis. Provides typical use case (turned parts) but does not explicitly list when not to use or suggest alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rollback_to_endA
Restaurar — mueve la barra de retroceso al final, reactivando todas las operaciones que rollback_to_feature haya suspendido.
[en: Roll the feature tree forward to the end, restoring everything a prior rollback_to_feature suspended.]
Returns {rolled_back_to: None, ok}.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It mentions the return value {rolled_back_to: None, ok} and that it reactivates operations. However, it doesn't disclose whether the operation is reversible, if it triggers any side effects, or if there are any authorization requirements. Adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is two sentences plus a return value line, front-loaded with the purpose. Bilingual content adds slight redundancy but does not harm clarity. No unnecessary words, though could drop Spanish for conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no parameters and no output schema, the description explains its function and return value adequately. It does not cover error cases or limitations, but for a simple tool this is sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has zero parameters, and schema coverage is 100%. Description adds no parameter info because none are needed. Per guidelines, baseline 4 for zero parameters is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool rolls the feature tree forward to the end, restoring everything suspended by rollback_to_feature. It uses specific verbs and resources, and distinguishes itself from its sibling rollback_to_feature by indicating it is the inverse operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description implies it should be used after a rollback_to_feature call to restore suspended operations. While it doesn't explicitly state when not to use it, the context makes the usage clear. Could be more explicit about prerequisites, but adequate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rollback_to_featureA
Retroceder — mueve la barra de retroceso a JUSTO ANTES de la operación indicada, suspendiéndola (y todo lo posterior) del cálculo. REVERSIBLE: llama rollback_to_end para restaurar. Es la alternativa SIN-BORRADO a eliminar una operación equivocada — la política del repo difiere el borrado, así que aquí nada se destruye.
[en: Roll the feature tree back to just BEFORE the named feature (suspends it + everything after, reversibly). The no-deletion way to 'undo' a wrong feature — call rollback_to_end to restore.]
Args: feature_name: exact feature name, e.g. "Cortar-Extruir1".
Returns {rolled_back_to, rollback_index, suspended_count, ok}.
Related: rollback_to_end (restore); set_component_suppression (the assembly-level reversible equivalent); undo (coarse, NOT reversible).
| Name | Required | Description | Default |
|---|---|---|---|
| feature_name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description clearly states the tool is reversible, suspends features, and does not delete. It also describes the return value structure. The behavioral traits are well disclosed beyond the minimal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a bit verbose with both Spanish and English translations, but it is structured with sections for description, args, returns, and related tools. Could be more concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given only one parameter and no output schema, the description is quite complete: it explains the action, reversibility, return values, and related tools. It adequately addresses the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the description adds meaning by specifying the parameter is an 'exact feature name' with an example. This compensates for the lack of schema description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool rolls back the feature tree to just before a named feature, suspending it and everything after. It distinguishes itself from siblings like undo, rollback_to_end, and set_component_suppression by specifying it's the reversible, no-deletion alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly mentions when to use (instead of deleting a feature) and provides related tools (rollback_to_end for restore, set_component_suppression as assembly-level equivalent, undo as coarse and not reversible). However, it does not explicitly state when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_assembly_planA
Ejecuta un AssemblyPlan registrado: inserta y matea componente POR componente (nunca insertar-todo-y-matear-al-final), con recibo por paso (conteo de componentes/mates vía get_active_assembly_info).
ESTA llamada (aprobada en el cliente MCP) es la aprobación humana del ensamble completo. Los pasos corren secuenciales EN VIVO — no van en execute_batch: los mates necesitan rebuilds reales y el rollback de lote no puede borrar componentes (el borrado está diferido por diseño).
Compuertas: go_recommendation='partial_or_handback' bloquea salvo override_low_confidence=True; componentes sin mates bloquean salvo override_unmated=True (flags independientes — forzar una NO desactiva la otra); '' se rechaza SIEMPRE. place_and_mate con pose_held=False cuenta como fallo del paso. Fallo a medio plan → se DETIENE y reporta estado parcial (qué se insertó, qué se mateó) — NO se borra nada; mitigación sugerida: set_component_suppression.
Verificación final: mates ≥ componentes-1 y sin componentes flotantes; solo si pasa (y hay save_path) se guarda. Devuelve {ok, steps, verification, saved, warnings}. [en: Execute a recorded AssemblyPlan — sequential live insert+mate per component, per-step receipts, stop-and-report on failure (no deletion), final mate-count gate; save only on verified success.]
| Name | Required | Description | Default |
|---|---|---|---|
| assembly_plan_id | Yes | ||
| override_unmated | No | ||
| override_low_confidence | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations were provided, so the description carries full burden. It thoroughly discloses behavior: sequential per-step execution, real-time receipts via get_active_assembly_info, stop-and-report on failure with no deletion, final mate count verification, save only on verified success, and return structure {ok, steps, verification, saved, warnings}. All critical traits are covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is moderately long but packed with essential information. It front-loads the main action and uses bullet-like structure (Compuertas, Verificación final) for clarity. The English translation at the end aids comprehension. Every sentence contributes value, though some consolidation could improve conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (sequential live assembly with failure handling and verification), no annotations, no output schema, and 3 parameters, the description covers all necessary aspects: purpose, behavior, failure modes, verification criteria, return format, and overrides. It leaves no critical gap for the agent to execute correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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. While it does not explicitly list parameter names, it explains the override flags' purpose and conditions (override_unmated for unmated components, override_low_confidence for confidence gates). The assembly_plan_id is implied by 'AssemblyPlan registrado'. This adds meaningful context beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool executes a recorded AssemblyPlan by inserting and mating components one by one, and explicitly distinguishes it from batch execution (execute_batch). It uses a specific verb ('Ejecuta') and resource ('AssemblyPlan registrado'), making purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage context: when to use (sequential live assembly), when not to (batch execution due to real rebuilds and rollback limitations), and conditions for overrides (go_recommendation, unmated components). It even mentions failure handling and alternative mitigation (set_component_suppression).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_batch_jobA
Ejecuta un BatchJob registrado: aplica el verbo archivo POR archivo, con recibo por archivo (abierto/op/guardado/cerrado) y un MANIFIESTO COMPLETO — cada archivo saltado se reporta (truncar en silencio es el pecado capital).
ESTA llamada (aprobada en el cliente MCP) es la aprobación humana del lote.
Compuertas (tres niveles, como run_assembly_plan):
go_recommendation='partial_or_handback' bloquea salvo override_low_confidence=True;
advertencias 'risky' (irreversible-sin-guardar / ruta de red) bloquean salvo override_warnings=True (flag INDEPENDIENTE — forzar una no desactiva la otra);
fileset vacío o '' sin resolver → se RECHAZA SIEMPRE. No borra archivos (borrado diferido por diseño). Devuelve {ok, changed, skipped, inspected, failed, manifest, failures, log_path} (los verbos de solo-lectura — rebuild/interference/BOM — cuentan como 'inspected', no 'skipped'). [en: Execute a recorded batch job file by file; complete manifest, every skip reported; read-only verbs counted as 'inspected'; no deletion.]
| Name | Required | Description | Default |
|---|---|---|---|
| batch_job_id | Yes | ||
| override_warnings | No | ||
| override_low_confidence | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses no deletion, read-only verbs counted as 'inspected', and details three safety gates. It lacks explicit statement about mutability but implies writing actions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is verbose, bilingual (Spanish and English redundant), and uses bullet-like structure. It could be more concise without repeating information in both languages.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description covers return fields, gates, and verb counting. However, it lacks detail on batch_job_id format and full return types, leaving some gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%. The description explains override_warnings and override_low_confidence in the gates, but batch_job_id is only implicitly identified as the job to run, with no format or source details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it executes a recorded batch job file by file with a complete manifest, and distinguishes from siblings by referencing run_assembly_plan and noting it is the human approval step.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It describes when to use (after recording a batch job, as human approval) and conditions that block execution (go_recommendation, warnings, empty fileset). However, it does not explicitly list alternatives or when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_feature_planA
Construye un FeaturePlan compilado en UNA sola pasada (compila una vez, construye una vez).
Flujo recomendado para dibujos/PDF:
record_drawing_spec → fija la lectura.
compile_feature_plan_from_drawing_spec → obtén el plan y MUÉSTRASELO al diseñador (pasos, dimensiones, advertencias).
run_feature_plan(feature_plan_id) → ESTA llamada (aprobada en el cliente MCP) es la aprobación humana del build completo; ejecuta todos los pasos que mutan el modelo dentro de UN solo lote (redibujo/reconstrucción diferidos a una sola reconstrucción al final).
revisa el verify_build_report devuelto + el render final.
[en: Build a compiled FeaturePlan in ONE pass. Show the plan to the designer after compiling; calling this tool (approved in the MCP client) is the single human-in-the-loop approval of the whole build. Mutating steps run inside one batch scope; verification runs once at the end.]
Compuerta de confianza: un plan marcado para "partial_or_handback" NO se construye solo — pasa override_low_confidence=True para forzarlo tras revisar las advertencias. Un plan con dimensiones sin resolver () se rechaza siempre: nunca se inventa una cota.
Compuerta de features internas: si el spec registró barrenos/ranuras punteadas que el plan NO modela (unmodeled_internal_features), se bloquea — pasa override_unmodeled_internal=True para construir sin ellas (flag independiente de override_low_confidence: forzar una no desactiva la otra).
| Name | Required | Description | Default |
|---|---|---|---|
| feature_plan_id | Yes | ||
| override_low_confidence | No | ||
| override_unmodeled_internal | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, description fully discloses behavior: it runs mutating steps in one batch, verifies once at end, acts as human-in-the-loop approval. Guard conditions (low confidence, unmodeled internal, unresolved dimensions) are explained, as is the return of verify_build_report and final render.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense with information and well-structured with workflow and conditions. However, the English translation duplicates the Spanish content; removing the translation would make it more concise without loss. 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.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, workflow, guard conditions, parameter semantics, and return value (verify_build_report + render). Despite no output schema, the description provides sufficient context for an agent to use the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Despite 0% schema description coverage, the description explains all three parameters: feature_plan_id (implicitly from compilation), override_low_confidence (for forcing partial plans), and override_unmodeled_internal (for missing internal features). States independence of the two boolean overrides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool builds a compiled FeaturePlan in one pass. It distinguishes from sibling compile_feature_plan_from_drawing_spec by being the execution/approval step. The workflow steps explicitly position this tool as the final build step.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides a recommended 4-step workflow with clear context for when to use this tool. Explicitly states when not to use: plans with partial_or_handback or unmodeled internal features require overrides. Unresolved dimensions are blocked entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_macro_jobA
Execute a recorded MacroJob by materializing VBA to a temporary .swb.
Disabled by default. Set MCP_CAD_ENABLE_UNSAFE_MACROS=1 before starting the server to opt in. This is arbitrary code execution; heuristic token scans, source review, warning overrides, audit logging, and temporary-file cleanup do not sandbox the macro or prove that it is safe.
Ejecuta un MacroJob registrado: materializa la fuente en un .swb temporal EN EL HOST, lo corre vía RunMacro2 (UserControl=False), reconstruye y borra el temporal. Ejecuta VBA arbitraria (cruza la restricción #2). ESTA llamada (aprobada en el cliente MCP) es la aprobación humana.
Compuertas (cuatro niveles): 0) señales de EGRESO a la red (HTTP/stream/descarga/UNC) → restricción #1, RECHAZO NO ANULABLE (la geometría no sale del host — #1 no está waived, a diferencia de #2);
go_recommendation='partial_or_handback' bloquea salvo override_low_confidence=True;
advertencias 'risky' (siempre incluyen la nota de #2; más señales de sistema de archivos/shell) bloquean salvo override_warnings=True (flag independiente);
'' sin resolver en el código → se RECHAZA SIEMPRE. La fuente que corre se anexa a un log de auditoría en el host (MCP_CAD_MACRO_AUDIT_LOG). El .swb nunca sale del host (VBA es texto). Devuelve {ok, ran, run_error, rebuilt, audit_log, audit_recorded}. [en: Execute a recorded macro job — temp .swb on-host, RunMacro2, rebuild, delete temp; network-egress is a hard non-overridable block (constraint #1); source appended to the on-host audit log.]
| Name | Required | Description | Default |
|---|---|---|---|
| macro_job_id | Yes | ||
| override_warnings | No | ||
| override_low_confidence | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since no annotations are provided, the description carries the full burden. It discloses arbitrary code execution, network egress block, audit logging, temporary file cleanup, and four levels of gates with clear conditions. Returns are listed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is verbose, mixing English and Spanish, and contains redundant translations. While organized with bullet points, it could be more concise to improve readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity and no output schema, the description fully explains the tool's behavior, safety considerations, return values, and prerequisites. No gaps identified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description explains override_warnings and override_low_confidence in the gates context. macro_job_id is not elaborated, but its purpose is implied. Adds value beyond parameter names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Execute a recorded MacroJob by materializing VBA to a temporary .swb,' specifying the verb and resource. It distinguishes from siblings like run_batch_job and run_assembly_plan by focusing on macros.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states it is disabled by default and requires opt-in (MCP_CAD_ENABLE_UNSAFE_MACROS=1). Details the four gates and when overrides are allowed, providing clear context for usage. Does not explicitly compare to alternatives but implies caution.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_active_documentA
Guardar el documento activo de SolidWorks (pieza, ensamble o dibujo).
Guarda en silencio (sin abrir cuadros de diálogo). Equivalente a Ctrl+S en SW. Solo funciona si el documento ya tiene un nombre de archivo asignado — para guardar una pieza recién creada usa save_as. [en: Save the currently active document silently (no UI dialogs). Equivalent to Ctrl+S. Only works if the document already has a filename — for a fresh, never-saved document use save_as.]
Returns a dict with:
name: document title
path: filesystem path of the saved document
saved: True if save succeeded
errors: bitmask of swFileSaveError_e codes (0 if none)
warnings: bitmask of swFileSaveWarning_e codes (0 if none)
Raises:
SolidWorksError if no document is active.
SolidWorksError if the active document has never been saved (no filename). The user must File → Save As in SW first to set a target filename — we don't pop dialogs from this tool. Or call save_as(path) below to set the filename programmatically.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses key behaviors: silent save (no UI dialogs), only works if document has filename, and raises specific errors. It also details return dict fields including error/warning bitmasks.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections and alternating languages, but the bilingual nature makes it slightly longer than necessary. Each sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations and no output schema, the description covers all necessary context: purpose, usage, behavior, return format, and error handling. It is complete for a tool of this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no parameters, and the baseline for 0 params is 4. The description adds value by explaining behavior and return values, but no parameter semantics needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool saves the active SolidWorks document silently, equivalent to Ctrl+S, and explicitly mentions it works on parts, assemblies, or drawings. It distinguishes itself from save_as for new documents.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says the tool should be used when the document already has a filename, and for new documents it instructs to use save_as. It also notes prerequisites and error conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_asA
Guardar el documento activo a una ruta explícita (Save As).
A diferencia de save_active_document, esta sí funciona con piezas recién creadas que aún no tienen nombre de archivo. Una vez guardadas, los siguientes save_active_document escriben a la misma ruta. [en: Save the active document to an explicit file path. Unlike save_active_document — which only works on docs that already have a filename — save_as handles a fresh, never-saved document and sets its filename in one call. Subsequent save_active_document calls then save back to this same path.]
Args: path: Absolute file path INCLUDING extension. SolidWorks infers the document type from the extension: .SLDPRT parts .SLDASM assemblies .SLDDRW drawings Passing the wrong extension for the active doc type causes SaveAs to fail.
Returns the same dict as save_active_document:
name: document title
path: filesystem path written to
saved: True if save succeeded
errors / warnings: 0 (the simpler SaveAs variant doesn't expose these — use save_active_document on a subsequent save if you need the bitmasks).
Common use: scripted runs that build or update a document, save it to a user-controlled directory, and hand the resulting path to a downstream step.
Caveats:
The parent directory must exist; save_as does NOT mkdir.
Resolve special folders through Windows or an explicit user-provided path. Desktop and Documents locations may be redirected by OneDrive or organization policy; do not guess a hard-coded location.
Example — save a fresh part: save_as(r"C:\CAD\output\bracket_v1.SLDPRT")
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite no annotations, the description thoroughly discloses behavioral traits: it sets the filename, subsequent save_active_document will write to the same path, it describes the return dict, and it warns that passing wrong extension causes failure. It also mentions caveats about directory existence and special folders.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with sections (Spanish/English, args, returns, common use, caveats, example) and is front-loaded with the key distinction. It could be slightly more concise, but it is efficiently organized and every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool complexity and lack of output schema, the description is complete: it explains the return dict shape, error behavior, and caveats. It covers all necessary information for an agent to use the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter 'path' has no schema description (0% coverage), but the description adds significant meaning: absolute file path including extension, lists valid extensions with their document types, and warns about wrong extension causing failure. This fully compensates for the lack of schema description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it saves the active document to an explicit path (Save As), and explicitly differentiates it from the sibling save_active_document by noting that save_as works for fresh documents without a filename, while save_active_document only works for already-named docs. This is a specific verb and resource, distinguishing it from siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use this tool (for fresh, never-saved documents) versus when to use the sibling (already saved documents). It also gives a common use case (scripted runs) and caveats (parent directory must exist, special folder handling). This is comprehensive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_part_catalogA
Busca una pieza ESTÁNDAR en catálogos abiertos y juzga su ajuste (search+judge).
Lane de reúso open-resource (docs/OPEN_RESOURCE_LANE.md). Cuando el diseñador pide una pieza estándar (tornillo, tuerca, balero, brida, perfil, conector…) que NO hace falta modelar de cero, resuelve la intención abstracta en candidatos rankeados de 3D ContentCentral / McMaster-Carr / TraceParts — cada uno con su deep-link, formatos, licencia, veredicto nativo-vs-tonto y recomendación insertar-vs-macro.
Modo v1 = DEEP-LINK: NO descarga geometría. Devuelve una URL de búsqueda por recurso; el diseñador descarga el archivo EN SU MÁQUINA. Luego: insertar+matear (place_and_mate / stack_components); si es NATIVA parametrica → editar cotas (list_dimensions / modify_dimension); si es sólido tonto (lo usual en catálogos) y hay que cambiar medidas → regenerar equivalente parametrico con la lane de macros (record_macro_job / run_macro_job).
Constraint #1: SÓLO texto abstracto (tipo, estándar, medida nominal, material) se vuelve consulta saliente — nunca geometría del cliente. Nada de terceros entra al repo; la geometría descargada se queda en el host.
[en: Search open CAD resources for a STANDARD part from abstracted text intent and judge fit (folds search + judge). v1 DEEP-LINK mode downloads NOTHING — it returns ranked candidates with a per-resource search URL, license, native-vs-dumb verdict, and an insert-vs-macro recommendation. The designer fetches the file onto their own machine; the existing geometry tools take over. Only abstracted text leaves the host.]
Args: spec: Structured ABSTRACTED part spec — generic fields only: type ("tuerca hexagonal"), standard ("DIN 934"), size ("M8x1.25"), material ("acero inoxidable A2"), nominal ({dim: value}, echoed back), query (explicit override). Never put customer geometry here. resources: subset of ["3dcontentcentral","mcmaster","traceparts"] (default all; unknown names ignored). top_n: max candidates (default 3). needs_edit: True if the designer will change dimensions — drives the insert-vs-macro recommendation (a dumb catalog .sldprt → macro lane).
Returns: {"query": str, "needs_edit": bool, "count": int, "note": str, "candidates": [{"resource","title","standard","part_number","nominal", "formats","native_vs_dumb","license_class","deep_link","deep_link_note", "fit_verdict","fit_score","recommendation"}, ...]} # ranked by fit_score
Reúso-primero: si hay una carpeta indexada localmente, llama PRIMERO a query_part_library; usa esta herramienta cuando NO exista local y convenga traer un estándar del catálogo abierto.
| Name | Required | Description | Default |
|---|---|---|---|
| spec | Yes | ||
| top_n | No | ||
| resources | No | ||
| needs_edit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, but description fully discloses: search+judge, no geometry download (v1 deep-link), returns ranked candidates with deep-links, recommendation logic based on needs_edit, and data handling constraints (only abstract text leaves host).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with summary and well-structured with headers (Args, Returns, constraints), but somewhat redundant due to Spanish/English duplication. Still concise enough given complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Provides full output structure, workflow with other tools, constraints, fallback logic, and covers all aspects for a search+judge tool with no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 0% description coverage, but description explains each parameter in detail: spec (type, standard, size, material, nominal, query, warning), resources (allowed values, default all), top_n (max candidates, default 3), needs_edit (boolean driving recommendation). Adds significant meaning beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it searches for standard parts in open catalogs (3D ContentCentral, McMaster-Carr, TraceParts) and judges fit, with specific examples like tornillo, tuerca. It distinguishes from query_part_library by explicitly mentioning reuse-first logic.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use: when designer needs a standard part not found locally, and to first check query_part_library. Provides alternative tool and context about abstracted text only.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_components_suppressionA
Cambiar el estado de varios componentes en una sola llamada.
Uso típico autopartes: preparación de variantes BOM ("suprime los 8
tornillos que el Base trim no incluye"). Más eficiente que un bucle
sobre set_component_suppression — cuando config_scope es "all" o
"specific", la implementación cambia de configuración una sola vez
por config y aplica todos los componentes en ese contexto.
[en: Apply the same suppression state to multiple components in one
call. Typical use: trim-variant BOM prep — suppress N fasteners
a Base trim doesn't include. Faster than looping
set_component_suppression: switches config once per config_scope
target instead of once per (component × config) pair.]
Args: component_names: List of SW component instance names from get_active_assembly_info. Must not be empty. All names are validated up-front; if any are missing the call raises before any change is made. state: "suppressed" | "resolved" | "lightweight". Default "suppressed". config_scope: "this" | "all" | "specific". config_names: Required when config_scope="specific".
Returns:
Dict with count (number applied), state (the applied state),
and components (list of {name, path, suppressed, state}).
| Name | Required | Description | Default |
|---|---|---|---|
| state | No | suppressed | |
| config_names | No | ||
| config_scope | No | this | |
| component_names | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, description covers up-front validation and early failure, config_scope batching behavior, and return structure. Lacks mention of authorization requirements or side effects like rebuilds, but sufficiently transparent for typical use.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Bilingual and somewhat verbose, but front-loaded with purpose and efficiency. Could be trimmed to single language without loss, but still effective.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, usage, parameters, behavior, and return type. No output schema, but return dict is described. Complete for a batch mutation tool with clear sibling differentiation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but description explains all four parameters: component_names source and validation rule, state enum, config_scope behavior, and config_names dependency. Adds value beyond bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it changes suppression state of multiple components in one call, with specific verb 'set' and resource 'components suppression'. Distinguishes from sibling set_component_suppression by noting efficiency gain.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly recommends over set_component_suppression for multiple components and gives typical trim-variant BOM prep example. Does not explicitly state contraindications (e.g., single component) but implied by sibling existence.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_component_suppressionA
Cambiar el estado de carga de un componente en el ensamble activo.
Uso típico autopartes: suprimir/resolver componentes para crear variantes de configuración (con/sin opcionales), o aligerar grandes ensambles con cientos de tornillería usando estado "lightweight". [en: Set a component's load state in the active assembly. Typical use: suppress/resolve to build configuration variants, or use 'lightweight' on big assemblies with hundreds of fasteners.]
Args: component_name: SW component instance name from get_active_assembly_info. state: One of "suppressed" (hidden, excluded from BOM, not loaded), "resolved" (fully loaded, default), or "lightweight" (graphics only — saves memory in large assemblies, common in autoparts sub-assemblies with 100+ fasteners). config_scope: "this" (active config only — fast), "all" (apply to every configuration in the document), "specific" (apply to configs listed in config_names). config_names: List of configuration names; required when config_scope="specific". Example: ["Sport", "Premium"] to suppress in those trim variants only.
Returns the component's updated state for the active configuration.
| Name | Required | Description | Default |
|---|---|---|---|
| state | No | resolved | |
| config_names | No | ||
| config_scope | No | this | |
| component_name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully explains the behavioral effects of each state: 'suppressed' means hidden and excluded from BOM, 'resolved' fully loaded, 'lightweight' graphics only. It also describes the config_scope options and notes the return value. No contradictions exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the purpose and includes a structured 'Args' section. However, it repeats information in both Spanish and English, which adds redundancy. Otherwise, it is well-organized and each sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the 4 parameters and no output schema, the description covers the input semantics and typical usage. It also specifies the return value (updated state). It lacks mention of prerequisites (e.g., active assembly) or error handling, but the CAD context is implied.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Since schema description coverage is 0%, the description adds crucial meaning beyond the schema types. It explains 'component_name' comes from 'get_active_assembly_info', defines each state with its effect, and provides example usage for 'config_names'. Parameters are well-documented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool changes the component load state and provides typical use cases like suppressing/resolving for configuration variants and using lightweight for large assemblies. It distinguishes itself from siblings such as 'set_mate_suppression' and 'set_components_suppression' by targeting a single component's load state.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives concrete examples of when to use each state (e.g., 'suppress/resolve to build configuration variants' and 'lightweight on big assemblies with hundreds of fasteners'). However, it does not explicitly state when not to use this tool or mention alternative tools (e.g., the plural version 'set_components_suppression'), so the guidance is clear but not fully exclusive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_global_variableA
Modificar una variable global existente — actualiza el valor de A, B, C después de haberla creado. Todas las dimensiones ligadas (vía ecuación) se reconstruyen automáticamente.
Uso típico CSWA: tras construir el Tool Block con A=10, B=20, C=30, cambia a A=12, B=22, C=32 antes de leer la masa nueva.
[en: Modify an existing global variable — updates the value of A, B, C after creation. All dimensions bound to it (via equation) rebuild automatically.]
Args: name: The existing variable name (must already exist). new_value: New numeric value in the specified units. units: Optional. If omitted, the previously-set units are preserved. Pass "mm" / "deg" / "raw" to change unit type.
Returns the updated GlobalVariable dict.
Raises ValueError if the variable doesn't exist (call add_global_variable first).
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| units | No | ||
| new_value | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that all bound dimensions rebuild automatically when a variable is updated. It also mentions the error case for non-existent variables. With no annotations, this fully covers behavioral traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections, but it includes both Spanish and English text for the same information, which adds slight redundancy. The key information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 3 parameters, no output schema, and no annotations, the description fully captures purpose, usage, parameters, behavior, and error conditions. It leaves no critical gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although the input schema has no descriptions (0% coverage), the description explains each parameter in detail: `name` must exist, `new_value` is numeric with units, and `units` is optional with specific allowed values and preservation behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it modifies an existing global variable, distinguishing it from `add_global_variable`. The verb 'modificar' and resource 'variable global existente' make the purpose explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides a typical usage example (CSWA workflow) and explicitly warns that the variable must exist, guiding the agent to call `add_global_variable` first. This tells when to use and when not to.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_materialA
Asignar material — set the material on the active part. Required
before get_mass_properties returns a meaningful mass.
Maps to the SolidWorks UI's "Edit Material…" panel. Standard SW
system materials work by name; database_path lets shop-specific
custom .sldmat libraries override the system DB.
Args:
name: Material name as it appears in the chosen library. Common
autoparts examples (in the SW system DB):
- Aceros: "AISI 1020", "AISI 1045 Steel", "AISI 4140",
"Plain Carbon Steel"
- Aluminios: "6061-T6 Aluminum", "7075-T6 Aluminum",
"AlSi10Mg" (cast / fundición a presión)
- Plásticos: "Nylon 6/10", "ABS", "PC High Viscosity"
Names are LOCALE-sensitive — Spanish SW installs may use
translated names (e.g. "Acero AISI 1045"). If the call
raises with "did not apply material", check the SW material
list in the current install.
database_path: Optional absolute path to a .sldmat material
database. None (default) uses the SW system database. Pass
a path to load shop-custom alloys (e.g. specific casting
recipes, supplier-graded steels not in the system DB). The
file must exist and end in .sldmat.
Returns: dict with name, applied (always True on success),
previous (the prior material name or None), database (the
resolved DB path; "" for system).
Caveat: changing material affects mass / volume / inertia from
get_mass_properties (la densidad cambia). It does NOT change
geometry — fillets, dimensions, and bodies are unaffected.
Example — quote a turned shaft: set_material("AISI 1045 Steel") props = get_mass_properties() cost_per_kg_mxn = 65.0 quote_mxn = (props["mass_g"] / 1000) * cost_per_kg_mxn
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| database_path | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses effects: changes mass properties but not geometry. Provides return value details and caveats (locale, database path). Transparent about behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured: summary, explanation, parameter details, caveat, example. Front-loaded with purpose. Slightly verbose but justified by complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema, but description provides return format. Covers prerequisites, locale, custom databases, and relationship to other tools. Complete for a setter tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has minimal parameter info (0% coverage). Description adds extensive meaning: lists common material examples, explains locale sensitivity, details database_path usage. Fully compensates for schema gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'set the material on the active part'. Provides a specific verb and resource, distinguishing it from siblings. Also explains prerequisite for get_mass_properties, reinforcing its unique role.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says required before get_mass_properties for meaningful mass. Gives examples and locale warning. Does not explicitly state when not to use, but the dependency makes it clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_mate_suppressionA
Suprimir o resolver un mate por nombre.
Casos de uso: desactivar un mate de rama incorrecta antes de recrearlo con place_and_mate (la receta pose→mate), y limpiar tras supresión de componentes. Nota (verificado en vivo 2026-06): en esta versión de SW, suprimir un componente NO marcó sus mates como suprimidos en la enumeración — el snapshot-diff de abajo es barato y cubre versiones donde sí cascada. [en: Suppress or resume a mate by name. Uses: park a wrong-branch mate before recreating it via place_and_mate, and post-component-suppression cleanup. Live note: on this SW version component suppression did NOT flip its mates' suppressed flags; the snapshot-diff below is cheap and covers versions where the cascade does happen.]
Workflow for cascade-aware resume:
1. Snapshot mates BEFORE suppressing the component:
before = {m["name"] for m in get_active_assembly_info()["mates"] if m["suppressed"]}
2. Suppress the component, do your work, then resume it.
3. Snapshot mates AFTER:
after = {m["name"] for m in get_active_assembly_info()["mates"] if m["suppressed"]}
4. The orphans are after - before. For each, call
set_mate_suppression(mate_name, suppressed=False) to restore.
Args: mate_name: SW-assigned mate name from get_active_assembly_info, e.g. "Coincidente7". suppressed: True to suppress, False to resume (resolve).
Returns the mate's metadata with the new suppressed state.
| Name | Required | Description | Default |
|---|---|---|---|
| mate_name | Yes | ||
| suppressed | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses behavioral traits such as the live note about component suppression not flipping mates' suppressed flags in this version, and advises a snapshot-diff workflow. It also notes the return value includes metadata. This adds valuable context beyond 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is somewhat long due to bilingual content, but the English portion is clear and front-loaded with purpose and use cases. The workflow is detailed but justified. A minor redundancy between languages prevents a perfect score.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite simple parameters, the description addresses complexity with version-dependent behavior and provides a concrete workflow. It mentions returning metadata (no output schema needed). The description is complete for safe and correct tool usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the description fully explains both parameters: mate_name is an SW-assigned name from get_active_assembly_info (with example), and suppressed is True to suppress, False to resume. This adds complete meaning beyond the raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool suppresses or resumes a mate by name, with specific verb+resource. It further distinguishes from siblings by providing use cases like parking a wrong-branch mate before recreating and post-component-suppression cleanup, which contrasts with component suppression tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly provides when to use the tool, including concrete scenarios: 'desactivar un mate de rama incorrecta antes de recrearlo con place_and_mate' and 'limpiar tras supresión de componentes'. Additionally, it includes a detailed workflow for cascade-aware resume, guiding the agent on proper usage sequence.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
shell_partA
Vaciado de pared (shell) — hollow out the body, optionally removing the listed faces to leave openings.
selector (recommended) — pick the open face(s) by INTENT, e.g. leave
the top face open: selector={"filter": {"geom": "planar",
"normal_axis": "+z"}}. Same face-selector schema as create_sketch_on_face
(filter geom/body/normal_axis/axis/area, sort, pick). May match several
faces (each becomes an opening). Mutually exclusive with face_centroids_mm.
Junior workflow: "haz un vaciado de 2mm dejando la cara superior
abierta" — common for cast housings (carcasas), plastic enclosures
(gabinetes), and any hollow case with an opening. SolidWorks shells
the entire body to the given wall thickness; faces listed in
face_centroids_mm become open holes.
Args:
thickness_mm: Espesor de pared (wall thickness) in mm. Must be
positive and less than half the smallest body dimension —
SW silently rejects thicknesses too large to fit.
face_centroids_mm: Faces to leave open. Pass a list of [x, y, z]
centroids from list_faces(). None or [] = closed shell
(the whole body hollowed, no openings). Each centroid must
match a real face within 0.01 mm.
outward: False (default) puts the shell wall INSIDE the original
surface — the standard "hollow housing" intent. True keeps
the shell outside (offset surface outward) — rare; only for
special cases.
Returns the new Vaciado feature (type=shell, D1=thickness_mm).
Caveat: shell is destructive of subsequent face-anchored sketches —
faces shift to the new offset surfaces. Run shell_part LATE in the
feature tree, after all face-anchored boses/cuts are placed.
Example — 2mm-walled cup, 50×50×40 mm with the top open: create_sketch("front") create_rectangle(0, 0, 50, 50) extrude_sketch(40) faces = list_faces() top = max( (f for f in faces if f["normal"][2] > 0.9), key=lambda f: f["centroid_mm"][2], ) shell_part(2.0, face_centroids_mm=[top["centroid_mm"]])
| Name | Required | Description | Default |
|---|---|---|---|
| outward | No | ||
| selector | No | ||
| thickness_mm | Yes | ||
| face_centroids_mm | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses important behavioral traits: destructiveness to subsequent face-anchored sketches, SolidWorks silent rejection of thickness too large, outward parameter effect, return value format. Since no annotations exist, the description carries full burden and meets it thoroughly.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with purpose, detailed args, caveat, and example. Some redundancy (bilingual title) and verbosity, but information is effectively organized and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers all aspects: purpose, parameters with constraints, behavioral caveats, usage timing, and a concrete example. No output schema exists, but return value is explained. Complete for a complex shell operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema coverage, the description adds complete meaning: thickness_mm (positive, < half smallest dimension), face_centroids_mm (from list_faces, exact match), selector (face-selector schema, mutually exclusive), outward (default inside). Compensates fully for missing schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Vaciado de pared (shell) — hollow out the body, optionally removing the listed faces to leave openings.' It specifies the verb (hollow out) and resource (body), and distinguishes it from siblings by focusing on shell operations with face removal options.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit usage contexts: common for cast housings, plastic enclosures, and hollow cases. Advises to run shell_part late in the feature tree to avoid destructiveness. Does not explicitly state when not to use, but the guidance is clear and sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stack_componentsA
Apila dos componentes con restricción completa (3 mates en una llamada).
Un solo mate cara-contra-cara solo bloquea UN eje — los componentes quedan libres en los otros dos. Esta herramienta hace tres mates en una sola llamada: las dos caras nombradas se tocan Y los componentes comparten posición en los otros dos ejes. Uso típico: apilar piezas para fixture de ensamble, montar bocina sobre placa, alinear placas paralelas. [en: Fully constrain two components in a stacked arrangement (3 mates in one call). A single face mate locks only ONE axis — this tool creates three so the components are fully positioned: the named faces touch AND positions match on the other two axes.]
Args: component1_name, component2_name: SW component instance names from get_active_assembly_info. face1_position, face2_position: One of "top", "bottom", "left", "right", "front", "back". MUST be on opposite ends of the same axis (e.g., "top" + "bottom", "left" + "right", "front" + "back"). Same-direction pairs or different-axis pairs raise ValueError.
Example — stack Pieza1-A on top of Pieza1-B (A's bottom touches B's top, same X and Z position): stack_components("Pieza1-A", "bottom", "Pieza1-B", "top")
Returns:
Dict with mates list of three Mate dicts in creation order:
[touching_faces_mate, perp_axis_1_mate, perp_axis_2_mate].
| Name | Required | Description | Default |
|---|---|---|---|
| face1_position | Yes | ||
| face2_position | Yes | ||
| component1_name | Yes | ||
| component2_name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description discloses that the tool creates three mates, requires opposite face positions on the same axis, and raises ValueError for invalid pairs. It also notes that a single face mate only locks one axis. Missing details like whether previous mates are affected or if the operation can be undone as a group.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with purpose, explanation, parameter descriptions, example, and return value. It is front-loaded with the key purpose. However, the bilingual text (Spanish and English) makes it slightly verbose than necessary.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema, but the description details the return (Dict with mates list in order). It covers all parameters, includes an example, and explains the behavioral constraints. For a 4-parameter tool with no annotations, this is very complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description compensates fully. It specifies that component names come from get_active_assembly_info, and face positions must be from a set of six directions and required to be on opposite ends of the same axis, with an example.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's goal: 'Fully constrain two components in a stacked arrangement (3 mates in one call).' It specifies the resource (components) and action (stack/full constraint), and distinguishes from single face mate tools like add_mate_by_face_position.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use the tool (for full constraint in stacking) and contrasts with a single face mate that only locks one axis. It provides typical use cases and an example. However, it does not explicitly state when NOT to use it, such as when a distance mate is needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sweep_cutA
Cortar por barrido — sweep cut: subtract a swept-profile-along- path volume from existing material.
Standard autoparts use: ranuras curvas (curved grooves), canales de aceite (oil channels along a contour), perfiles de fresado (milling tool paths simulated as cuts), recortes ergonómicos siguiendo un perfil.
Args: profile_sketch_name: Closed profile sketch name (e.g. 'Croquis1' for the cross-section of the cut). path_sketch_name: Path sketch name. Must be a different sketch than the profile.
Returns Feature (name='CortarBarrido{n}', type='cut_sweep', dimensions={}).
Caveat (v1): same constraints as sweep_sketch.
Example — 2mm-wide groove following a curved path on a plate: # Profile: 2x4mm rectangle on Front create_sketch('front') create_rectangle(-1, 0, 1, 4) # Croquis1 # Path: arc on the plate's top face, then sweep_cut create_sketch_on_face([...]) create_arc(...) # Croquis2 sweep_cut('Croquis1', 'Croquis2')
| Name | Required | Description | Default |
|---|---|---|---|
| path_sketch_name | Yes | ||
| profile_sketch_name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description bears full burden. It discloses the subtractive nature, an example return object (Feature with name, type, dimensions), and a caveat about v1 constraints. However, it does not explicitly state permance, prerequisites, or error conditions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured: definition, use cases, arguments, returns, caveat, and an example. It is slightly long but every section adds value. Could be more concise, but clear hierarchy compensates.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and 0% schema coverage, the description covers purpose, parameters, output structure, and provides an example. It references but does not detail sweep_sketch constraints. Missing failure modes and prerequisites, but adequate for a CAD tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds significant meaning beyond the schema: explains profile_sketch_name as 'Closed profile sketch name (e.g., 'Croquis1' for cross-section)' and path_sketch_name as 'Path sketch name. Must be a different sketch than the profile'. With 0% schema coverage, this fully compensates.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action: 'subtract a swept-profile-along-path volume from existing material'. It uses specific verb (sweep cut) and resource, and distinguishes from sibling tools like extrude_cut or revolve_cut by emphasizing the swept path.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description lists standard autoparts uses (curved grooves, oil channels, etc.) but does not explicitly contrast with alternatives like extrude_cut or sweep_sketch. A caveat about 'same constraints as sweep_sketch' is present, but no when-not-to-use guidance is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sweep_sketchA
Barrido (sweep) — sweep a closed profile sketch along a path sketch to make a boss feature.
Standard autoparts use: tubos (tubes / pipes following a curved path), juntas / empaques (gaskets — closed-loop path), guías de cable (cable routes), cordones de soldadura (weld beads along an edge), perfiles extruidos curvos.
Args: profile_sketch_name: Name of the CLOSED profile sketch (e.g. 'Croquis1' for a circle to make a tube). Created via create_sketch + create_circle / create_rectangle / etc. Must be a closed contour. path_sketch_name: Name of the PATH sketch (e.g. 'Croquis2' for the route the profile follows). Open or closed paths both work. Created via create_sketch + create_line / create_arc / etc. on a plane perpendicular (or tangent) to the profile's plane at the path start. merge: True (default) merges with existing solid material it touches. False keeps the swept body separate (multi-body).
Returns Feature (name='Barrido{n}', type='boss_sweep', dimensions={}). Sweeps don't have parametric D1/D2 in v1 — the geometry is fully driven by the two sketches.
Caveat (v1): the two sketches must already exist as separate features in the tree. Profile and path can't be the same sketch. Advanced options (twist, guide curves, thin-feature, circular- profile shortcut) are NOT exposed in v1; defaults are: follow- path orientation, no twist, no guide curves.
Example — Ø6mm tube along an L-shaped path: # Profile: 6mm-radius circle on Front plane at origin create_sketch('front') create_circle(0, 0, 3) # Croquis1 # Path: L-shape on Top plane create_sketch('top') create_line(0, 0, 0, 50) create_line(0, 50, 50, 50) # Croquis2 sweep_sketch('Croquis1', 'Croquis2')
| Name | Required | Description | Default |
|---|---|---|---|
| merge | No | ||
| path_sketch_name | Yes | ||
| profile_sketch_name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses behavioral traits: it creates a boss feature, requires a closed profile, the path can be open/closed, merge behavior, return type (Feature), and v1 limitations (no twist, guide curves, etc.). This is highly transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (purpose, uses, args, returns, caveat, example). It is slightly verbose but each part adds value. Minor redundancy could be trimmed, but overall efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description explains the return value (Feature with specific properties). It covers prerequisites, limitations, and provides a full example. All aspects needed for correct usage are addressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Despite 0% schema coverage, the description provides thorough explanation for each parameter: profile_sketch_name (closed contour), path_sketch_name (open or closed, perpendicular plane), and merge (merge vs. multi-body). An example with concrete values is included.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool sweeps a closed profile sketch along a path to create a boss feature. It lists specific use cases (tubes, gaskets, etc.) and distinguishes from the sibling sweep_cut by focusing on boss creation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use the tool (e.g., for tubes, gaskets) and what prerequisites are needed (sketches must exist separately). It does not explicitly state when not to use it or mention alternatives like sweep_cut, but enough context is provided for appropriate selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
undoA
Deshacer el ÚLTIMO paso de SolidWorks (Ctrl+Z / EditUndo2).
ADVERTENCIA: undo es GRUESO. Deshace el último paso de SolidWorks, que NO necesariamente es tu última llamada de herramienta MCP — una herramienta puede ser varios pasos SW (o ninguno). NO recupera un documento cerrado o perdido (eso se previene guardando pronto). Verifica con capture_views / get_active_part_info después de deshacer; NO encadenes undos a ciegas. [en: WARNING — undo is COARSE. It reverses the LAST SolidWorks step, NOT necessarily your last MCP tool call (one tool can be several SW steps, or none). It CANNOT recover a closed/lost document (save early instead). Verify with capture_views after; do NOT chain blind undos.]
Returns: {"undone": bool, "note": str} — undone=False means there was nothing to undo (reported honestly, not faked).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses coarse behavior, honest reporting of nothing to undo (undone=False), and states it cannot recover closed/lost documents. No annotations provided, so description carries full burden.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with core purpose and includes essential warnings. Slightly lengthy due to bilingual text, but every sentence adds value. Could be slightly more concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-parameter tool, description covers purpose, usage, behavioral constraints, return format, and verification steps. Very complete given simplicity and lack of output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters in schema (0 params), so no additional meaning needed. Baseline 4 is appropriate for zero-parameter tools.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool undoes the last SolidWorks step (Ctrl+Z/EditUndo2). It distinguishes from siblings like rollback_to_end/rollback_to_feature by emphasizing coarseness.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit warnings: undo is coarse, does not necessarily correspond to last MCP call, cannot recover closed docs; advises to capture_views after and not chain blind undos.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_against_specA
Verifica el TAMAÑO de la pieza construida contra el spec del dibujo.
ADVISORY — el ÚNICO chequeo independiente de verdad-de-tierra en el loop: mide el sólido construido (get_bounding_box) y lo compara numéricamente, con tolerancia, contra las dimensiones que transcribiste del dibujo. Convierte el "se ve bien" visual sin dimensiones en una aserción dura de envolvente — atrapa la clase de error más común e invisible: forma correcta, tamaño equivocado.
Args: expected_size_mm: tres extensiones esperadas [a, b, c] en mm, en CUALQUIER orden (con match_by="sorted"). tolerance_mm: banda mínima por eje (default 0.5mm). tolerance_pct: banda relativa por eje; se usa max(mm, pct). Default 1%. expected_volume_mm3: opcional — chequeo de volumen SOLO de orden de magnitud (nunca cambia el veredicto; evita falsos positivos por chaflanes/redondeos legítimos). Útil para detectar errores de unidades. match_by: "sorted" (default, robusto a orientación) o "positional".
Returns dict: {ok, verdict PASS/FAIL, per_axis (deltas), measured_size_mm, volume?, caveats[], message, bbox}. LEE los caveats: la caja NO ve features en ubicación incorrecta del mismo tamaño, topología incorrecta, ni errores que conservan el envolvente. Es un oráculo entre varios, no la corrección total.
[en: Verify built-part SIZE against the drawing spec. Advisory — the first independent ground-truth check in the loop: measures the solid via get_bounding_box and asserts it against transcribed dims within tolerance, turning a dimensionless visual "match" into a hard envelope assertion. Catches the most common, most invisible failure: right shape, wrong size. Optional volume check is order-of-magnitude only (never flips the verdict). Read the caveats — bbox cannot see wrong-location, wrong-topology, or envelope-preserving errors.]
| Name | Required | Description | Default |
|---|---|---|---|
| match_by | No | sorted | |
| tolerance_mm | No | ||
| tolerance_pct | No | ||
| expected_size_mm | Yes | ||
| expected_volume_mm3 | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It details the internals: uses get_bounding_box, numeric comparison with tolerance, optional volume check (order-of-magnitude only, never flips verdict), and the return structure. It also discloses limitations and caveats.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is detailed but well-structured with Spanish and English versions. It is front-loaded with the core purpose and then provides arg explanations. A minor concession for length, but every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (5 params, no output schema), the description covers necessary behavioral details, output structure, and caveats. It also references related tools (get_bounding_box). It is complete for an agent to understand when and how to use the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description thoroughly explains each parameter: expected_size_mm (three extensions in any order), tolerance_mm (minimum band), tolerance_pct (relative, uses max), expected_volume_mm3 (optional, order-of-magnitude), match_by (sorted vs positional). It adds significant meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the tool verifies built-part size against the drawing spec, contrasting with visual checks. It clearly identifies the resource (built part size) and the action (verify). It distinguishes itself from other verification tools by being an independent ground-truth check.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use this tool (as the first independent ground-truth check) and when not to rely solely (caveats: cannot see wrong location, topology, envelope-preserving errors). It provides context on the kind of errors it catches, but does not explicitly name alternative tools for other types of checks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_build_reportC
Create a structured verification report for the active part.
Extends verify_against_spec: bbox remains the hard envelope check, while
mass/volume/feature count/screenshots are advisory evidence in one report.
| Name | Required | Description | Default |
|---|---|---|---|
| notes | No | ||
| drawing_spec_id | No | ||
| expected_mass_g | No | ||
| expected_size_mm | No | ||
| capture_view_names | No | ||
| mass_tolerance_pct | No | ||
| expected_volume_mm3 | No | ||
| expected_feature_count | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description does not disclose side effects, persistence, or output behavior. The term 'Create' suggests a side effect but is not elaborated, leaving ambiguity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, consisting of two sentences with the primary purpose front-loaded and a quick differentiation. It could be slightly more detailed without losing conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the absence of an output schema and the tool's complexity (8 optional parameters), the description fails to explain return values or usage context. More details are needed to compensate for the lack of schema coverage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage and no parameter explanations in the description, the meaning of the eight parameters is entirely unclear. The vague references to bbox, mass, etc., do not adequately map to the parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool creates a structured verification report and distinguishes itself from verify_against_spec by mentioning bbox as a hard check and other fields as advisory. However, it does not fully define what a 'structured verification report' entails.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies a usage scenario by comparing to verify_against_spec but lacks explicit when-to-use and when-not-to-use guidance. No alternatives or exclusions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_setupA
Diagnóstico — comprueba que la instalación de MCP_CAD funcione.
Junior workflow: en la primera instalación o cuando algo se ve raro, pregunta a Claude "verify_setup" para obtener un checklist de:
El servidor MCP responde y la versión de Python.
SolidWorks responde (en modo live) o estamos en modo mock.
Hay un documento activo (pieza/ensamble) accesible.
[en: Diagnostic — verify the MCP_CAD installation. Returns a checklist a non-technical customer can scan to confirm everything's wired correctly. Run after install, or when something seems off.]
Returns: { "ok": bool, # overall pass/fail "summary": str, # one-line Spanglish status "checks": [ {"name": str, "ok": bool, "detail": str}, ... ], }
A red check on "Active document" is normal if no part is open — the customer can still confirm the rest of the setup. A red check on "SolidWorks connection" in live mode requires opening SW first.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, but description fully explains behavior: it runs diagnostics, returns a checklist with ok/summary/checks, and interprets results (e.g., normal scenarios). No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with bulleted checks and JSON example but includes bilingual text and some redundancy. Could be slightly more concise, but all content is relevant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Description covers all necessary context: purpose, when to use, what checks are performed, return format, and interpretation of results. No annotations or output schema needed given completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters, so baseline is 4. Description does not need to add parameter info.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it is a diagnostic tool for verifying MCP_CAD installation. Lists specific checks (server, SolidWorks, active document) and output format. Unambiguously distinct from sibling modeling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells when to use: after install or when something seems off. Provides expected behavior for different check outcomes, e.g., red check on active document is normal, SolidWorks issue requires opening SW first.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
100 tool updates
v0.0.1- First observed
activate_configuration - First observed
add_angle_mate - First observed
add_bolt_circle - First observed
add_coincident_mate - First observed
add_concentric_mate - First observed
add_distance_mate - First observed
add_drill_pattern - First observed
add_end_keyway - First observed
add_global_variable - First observed
add_mate_by_face_position - First observed
add_sketch_chamfer - First observed
add_sketch_dimension - First observed
add_sketch_fillet - First observed
add_sketch_relation - First observed
break_all_edges - First observed
build_closed_profile - First observed
build_extruded_closed_profile - First observed
build_flange_boss - First observed
build_l_bracket - First observed
build_part_dsl - First observed
build_part_index - First observed
build_plate_with_hole_pattern - First observed
build_rectangular_pocket - First observed
build_revolved_profile - First observed
build_stepped_shaft - First observed
build_threaded_boss - First observed
build_variant_family - First observed
capture_views - First observed
chamfer - First observed
circular_pattern - First observed
clarify_autoparts_intent - First observed
close_active_document - First observed
compile_feature_plan_from_drawing_spec - First observed
create_arc - First observed
create_circle - First observed
create_configuration - First observed
create_line - First observed
create_rectangle - First observed
create_reference_axis - First observed
create_reference_plane - First observed
create_sketch - First observed
create_sketch_on_face - First observed
create_slot - First observed
delete_configuration - First observed
describe_feature - First observed
edit_sketch - First observed
execute_batch - First observed
extrude_cut - First observed
extrude_sketch - First observed
fillet - First observed
fillet_all_edges - First observed
get_active_assembly_info - First observed
get_active_part_info - First observed
get_bounding_box - First observed
get_feature_inventory - First observed
get_mass_properties - First observed
hole_wizard - First observed
insert_component - First observed
linear_pattern - First observed
list_capabilities - First observed
list_dimensions - First observed
list_edges - First observed
list_faces - First observed
list_recent_plans - First observed
mirror_feature - First observed
modify_dimension - First observed
move_component - First observed
new_assembly - First observed
new_part - First observed
open_document - First observed
place_and_mate - First observed
query_part_library - First observed
record_assembly_plan - First observed
record_batch_job - First observed
record_drawing_spec - First observed
record_macro_job - First observed
revolve_cut - First observed
revolve_sketch - First observed
rollback_to_end - First observed
rollback_to_feature - First observed
run_assembly_plan - First observed
run_batch_job - First observed
run_feature_plan - First observed
run_macro_job - First observed
save_active_document - First observed
save_as - First observed
search_part_catalog - First observed
set_component_suppression - First observed
set_components_suppression - First observed
set_global_variable - First observed
set_mate_suppression - First observed
set_material - First observed
shell_part - First observed
stack_components - First observed
sweep_cut - First observed
sweep_sketch - First observed
undo - First observed
verify_against_spec - First observed
verify_build_report - First observed
verify_setup
TDQS
Most tools have clearly distinct purposes with detailed descriptions. There are a few overlapping pairs (e.g., verify_against_spec and verify_build_report, break_all_edges and fillet_all_edges), but the descriptions help differentiate them. Overall, an agent can distinguish tools with reasonable accuracy.
Many tools follow a consistent verb_noun pattern (create_, add_, build_, list_, get_, set_, run_, record_, verify_), but there are deviations like 'break_all_edges', 'hole_wizard', 'place_and_mate', and 'stack_components'. The mix of underscores and no underscores creates some inconsistency, but the patterns are still readable.
With 100 tools, the server is extremely large. While each tool serves a specific purpose, the sheer number is excessive for most workflows and may overwhelm users. Many tools are composites or niche functions that could be combined. The count far exceeds the typical well-scoped range of 3-15 tools.
The tool set covers a wide range of CAD operations including part creation, assembly, modification, measurement, verification, batch processing, macros, and catalog search. There are minor gaps (e.g., no direct tool for editing sketch geometry post-creation beyond dimensions), but overall the surface is comprehensive for the domain.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
MCP server for AI access to Swagger by SmartBear.
MCP server for FormBro Canadian immigration application automation.
MCP server for Product Management
The MCP server for Azure DevOps, bringing the power of Azure DevOps directly to your agents.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceMCP bridge server for SolidWorks that enables AI assistants to control SolidWorks programmatically via COM automation.MIT
- AlicenseCqualityAmaintenancePython MCP server for SolidWorks automation with 109 tools covering the full CAD lifecycle. Enables AI-assisted design workflows through COM automation on Windows.10068MIT
- FlicenseNot gradedqualityCmaintenanceAn MCP server that drives SolidWorks 2023+ on Windows, exposing CAD operations like sketching, extrusions, assemblies, and exports through tools for AI assistants like Kimi and Claude.-
- AlicenseNot gradedqualityCmaintenanceMCP server for controlling a live SOLIDWORKS session through the Windows COM API, enabling native CAD operations like sketches, features, bodies, views, and exports, plus transactional plans and vectorization.1MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/danielproxd2/solidworks-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server