MCP_CAD
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_CADacopla la polea al eje"
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
A SolidWorks-resident AI copilot for Mexican autoparts manufacturing PYMEs.
The product gives a junior, Spanish-speaking CAD designer an AI assistant that drives SolidWorks through chat — assembly mating, configurations, sketching, extrusion, edge-break — using a constrained, deterministic toolset that runs on the customer's own machine.
Positioning: Spanish, on-prem, SolidWorks, PYME — the four-word frame that separates this from every other AI/CAD product.
Status
Pre-product, in structured discovery and customer validation. Self-funded.
Direction (June 2026 pivot). From-scratch generation of complex parts — from images (PDF→CAD, retired) and from prompts — hit a hard model-capability ceiling. So the product now invests in task/batch automation + contextual reuse, routing around that ceiling, delivered through a constrained, auditable, on-prem surface (a stronger enterprise story than a cloud + arbitrary-macro approach). See
docs/AUTOMATION_LANE.md. Single-part generation from prompts/images is a legacy path.
The codebase is substantial and running even though no paying customer exists yet:
Live MCP tool surface exposed via FastMCP (
src/mcp_cad/server.py) — assembly orchestration + configurations (skeleton/insert/mate,record_assembly_plan→run_assembly_plan), part-design composites (build_*) as substrate, variant families (build_variant_family+ expression-driven profile coords), library reuse (build_part_index/query_part_library— "¿ya hicimos algo así?"), averify_setupdiagnostic, aclarify_autoparts_intentSpanglish vocabulary, acapture_views+get_bounding_box+verify_build_reportverification loop, and document-lifecycle tools (new_part/new_assembly/undo)Batch/automation lane (
docs/AUTOMATION_LANE.md) — the forward direction: aBatchJobPlan(record_batch_job→run_batch_job) that operates over many files on the metadata/export/drawing-doc/BOM/health surfaces. Proposal — not yet built; mirrors the shippedrecord→review→runorchestratorsSpanglish-autoparts vocabulary (
src/mcp_cad/vocabulary.py) — ~20 curated terms (rin,buje,soporte,brida,cubo,flecha,polea, …) with primary archetype, alternatives, typical dimension ranges, and disambiguation questions. Surfaced viaclarify_autoparts_intent; pulled before plan-mode to ground informal termsCustomer deployment guide at
docs/DEPLOYMENT.md— install, daily workflow, troubleshootingSolidWorks COM driver (
src/mcp_cad/solidworks.py) — Protocol seam, in-memory mock, and livepywin32late-binding client
The architecture is settled (Python + MCP + SolidWorks COM); the product surface continues to evolve.
Related MCP server: Fusion 360 MCP
Why this exists
The problem. Mexican autoparts PYMEs (30–200 employees) supply tier 1's like Schaeffler, DENSO, Aisin, and Toyoda Gosei. Senior CAD talent leaks to the OEMs and tier 1's, where pay is 2–3× higher. The juniors who stay can't reliably handle complex assembly work — mating, configurations, tooling. PYMEs cope with overtime, expensive consultants on retainer, training spend, or by refusing OEM jobs they can't deliver.
The thesis. The AI orchestrates SolidWorks. It does not invent geometry. The MCP server exposes a fixed set of typed, deterministic operations; an LLM (Claude) chooses which to call and with what arguments; every model change requires a designer's explicit approval before commit.
Critical product constraints (DO NOT VIOLATE)
These are the contract with PYME customers whose OEM supplier agreements (e.g. Schaeffler) impose strict NDA and IP terms. If a code change weakens any of these, surface the tradeoff before merging.
Geometry stays on the customer's machine.
.sldprt,.sldasm,.slddrwfiles never leave the host. The MCP server runs locally and uses SolidWorks COM in-process. Only abstracted text intent + structured tool-call arguments are transmitted.Constrained tool surface. The AI orchestrates pre-defined SolidWorks operations. It does NOT call arbitrary SolidWorks API methods. Each tool is deterministic and reviewed.
Human-in-the-loop on every model change. No autonomous design changes. Every AI suggestion requires designer approval.
Customer credentials are sacred. API keys (Anthropic, etc.) are stored in customer-controlled config and never logged, telemetered, or committed.
No telemetry of customer work. No analytics that capture model contents, file names, geometry patterns, or anything derived from customer designs.
Lifted nearly verbatim from CLAUDE.md. Read that file before contributing.
Architecture
Designer chat (Claude Code, Claude Desktop, etc.)
│
▼ MCP over stdio
FastMCP server (server.py)
│
▼ Protocol calls (mm + degrees, Spanglish errors)
SolidWorksClient (Protocol)
┌───────────┴───────────┐
▼ ▼
MockSolidWorksClient WinComSolidWorksClient
(in-memory fake; (pywin32 late binding,
used for non-Windows DISPID + InvokeTypes for
dev) methods that COM marshalling
mishandles)
│
▼ COM (m + radians)
Running SolidWorksSource files sharing a single Protocol seam:
src/mcp_cad/server.py— FastMCP server. Declares the@mcp.tool()functions and binds each to a method on a singleclientinstance. The module catalog (and the MCPinstructionspreamble) is auto-generated at module load by walking the FastMCP registry — see_generate_catalog().src/mcp_cad/solidworks.py— Defines theSolidWorksClientProtocol,MockSolidWorksClient(deterministic fake), andWinComSolidWorksClient(live COM viapywin32). All COM constants and DISPID/typelib metadata live here.src/mcp_cad/vocabulary.py— Curated Mexican-Spanish autoparts glossary surfaced viaclarify_autoparts_intent.
Units convention. Protocol surface uses mm for lengths and degrees for angles. Conversion to SolidWorks-native meters/radians happens inside WinComSolidWorksClient only. Stay mm + deg native everywhere above the COM layer.
Spanish-language is a product requirement, not a translation. Tool descriptions, error messages, and UI text use the Spanglish CAD vocabulary Mexican designers actually use (croquis, vaciado, redondeo, chaflán, barreno, ensamble). Tools that accept plane names take both English ("front"/"top"/"right") and Spanish UI names ("Alzado"/"Planta"/"Vista lateral"). Error messages follow the format:
<Spanish lead>: {dynamic detail}
[en: <English fallback>]Tech stack & platform requirements
Python ≥ 3.10
mcp≥ 1.0.0 (the Anthropic MCP Python SDK)pywin32≥ 306 — Windows-only via theplatform_system=='Windows'markerSolidWorks running locally — required for live operation. Non-Windows boxes can develop against the mock with
MCP_CAD_USE_MOCK=1.AI provider: Anthropic Claude.
Tooling:
uvfor dependency management. No linter or type checker is wired up by design — the minimal-deps default is intentional.
See pyproject.toml.
Quick start (developer)
git clone https://github.com/danielproxd2/MCP_CAD.git
cd MCP_CAD
uv sync --extra devCreate a local .mcp.json at the repo root (this file is gitignored — each developer creates their own):
{
"mcpServers": {
"mcp_cad": {
"command": "uv",
"args": ["run", "mcp_cad"]
}
}
}Reload Claude Code. The mcp_cad__* tools should appear in the session's tool list.
Develop on macOS or Linux:
MCP_CAD_USE_MOCK=1 uv run mcp_cadThe mock keeps in-process state across calls and exercises the full Protocol contract.
Quick start (Claude Code user)
Once the MCP server is connected, an LLM session sees:
list_capabilities()— the authoritative live tool inventory (count + alphabetical names). Names only by design: full tool descriptions already ship with everytools/list, so the catalog confirms the surface without duplicating them.verify_setup()— diagnostic tool. Returns a checklist (MCP server / SolidWorks connection / active document) so a non-technical customer can confirm the install is healthy. Seedocs/DEPLOYMENT.mdfor the full customer onboarding flow.query_part_library(...)/build_part_index(folder)— library reuse. Index a folder of.sldprtinto a local PDM-lite catalog, then ask "¿ya hicimos algo así?" before modeling — a near-match becomes a variant, not a remodel.record_assembly_plan(...)/run_assembly_plan(...)— the assembly orchestrator: pin skeleton + ordered components-with-mates as data, review, then insert+mate under one approval with a mate-count gate.build_variant_family(...)— a configuration family from a base part + a variables table (profile coordinates accept expressions like"A-29", so one solved design replays at any size).clarify_autoparts_intent(term)— Spanglish vocabulary lookup. Returns the curated archetype + typical dimension ranges + disambiguation question for ~20 informal Mexican-Spanish autoparts terms, to ground the interpretation before modeling. SeePART_DESIGN.md§0.5.verify_build_report(...)— closes a build with bbox/mass/feature-count + occluded/internal-feature evidence (advisory; human visual diff still required).MCP
initializepreamble — sent once per session. Carries the Spanish header + the reuse-first / edit-first / automation-first directives so the LLM routes through the right discipline.
Legacy (dormant): a structured generate-from-spec spine —
record_drawing_spec→compile_feature_plan_from_drawing_spec→run_feature_plan— still builds a part from a recorded spec and enforces its internal features, but generating parts this way is no longer the product focus (PDF perception was retired).
For the live, authoritative tool list call list_capabilities() from any MCP session. For per-tool documentation — args, returns, gotchas, examples, and workflow recipes — see docs/TOOLS.md.
Project layout
MCP_CAD/
├── README.md # this file
├── CLAUDE.md # operating rules — read before contributing
├── PART_DESIGN.md # prompt-engineering guide for part-design tasks
├── ASSEMBLY_DESIGN.md # prompt-engineering guide for assembly tasks
├── FIELD_NOTES.md # compact operating cheat-sheet
├── pyproject.toml # name, deps, console script, build backend
├── uv.lock # pinned dependency tree
├── docs/
│ ├── AUTOMATION_LANE.md # product direction — batch lane scope (proposal)
│ ├── TOOLS.md # per-tool reference doc
│ └── DEPLOYMENT.md # customer deployment guide
├── src/mcp_cad/
│ ├── __init__.py
│ ├── server.py # FastMCP entry, auto-catalog
│ ├── solidworks.py # Protocol + Mock + WinCom COM driver
│ ├── verification.py # built-geometry verification toolkit (universal)
│ ├── part_index.py # PDM-lite local part-library index (reuse)
│ ├── assembly_ir.py # AssemblyPlan record→review→run orchestrator
│ ├── dsl.py # fluent build123d-style DSL → execute_batch
│ ├── drawing_ir.py # dormant DrawingSpec / FeaturePlan compiler (legacy)
│ └── vocabulary.py # Spanglish autoparts glossary
└── .claude/
├── agents/ # part-build-executor, build-verifier, autoparts-researcher
└── skills/ # build-part (build/modify a part)prospects/, interviews/, customers/, and any *.sldprt / *.sldasm / *.slddrw / *.STEP files are gitignored.
Contributing
Contributions are welcome. See CONTRIBUTING.md for the dev setup, test workflow, and the conventions below, and CODE_OF_CONDUCT.md for community expectations. This is an early-stage project, so opening an issue to discuss a change before a large PR is appreciated.
Adding a new tool — the pipeline:
Add the method to the
SolidWorksClientProtocol.Implement on
MockSolidWorksClientwith a deterministic fake.Implement on
WinComSolidWorksClient. Verify COM constants against the swconst typelib — many constants insolidworks.pycarry "verified empirically" comments because pywin32 late binding misreports some values. Some methods (AddMate3,SelectByID2) cannot be marshalled by late-binding dispatch and must be invoked via DISPID +_oleobj_.InvokeTypes. Use the existing_DISPID_*/_*_ARGSblocks as prior art.Expose as
@mcp.tool()inserver.py. The module catalog regenerates automatically — no manual catalog updates.
Build discipline. One tool, end-to-end, before the next. No premature abstraction; no batched half-implementations. The forward wedge is task/batch automation (docs/AUTOMATION_LANE.md); assembly orchestration + library reuse are the shipped substrate it builds on.
Behavioral guidelines ("Karpathy guidelines" in CLAUDE.md):
Think before coding — state assumptions explicitly, surface tradeoffs.
Simplicity first — minimum code that solves the problem, nothing speculative.
Surgical changes — every changed line should trace directly to the user's request.
Goal-driven execution — define success criteria, loop until verified.
Spanish-language is a product requirement, not a translation. Tool docstrings and error messages should use the actual Spanglish CAD vocabulary Mexican designers use (ensamble, croquis, redondeo, vaciado, chaflán, etc.). Plane-name args take both English and Spanish UI names — preserve this dual-input pattern when adding new tools.
Customer geometry must never enter the repo. Synthetic fixtures only.
Reference documents
File | Purpose |
Operating rules for any AI-coding session in this repo. | |
Product direction — batch/automation lane scope (proposal). | |
Prompt-engineering guide for part-design tasks (substrate). | |
Prompt-engineering guide for assembly tasks. | |
Compact operating cheat-sheet — environment gotchas, save discipline. | |
Per-tool reference — args, returns, gotchas, examples. | |
Customer deployment guide. |
License
Licensed under the Apache License, Version 2.0. Bundled 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?
With no annotations, the description fully handles transparency. It discloses that the switch triggers a rebuild, applies suppressions and dimensions, and returns the previous configuration name. However, it lacks details on side effects like reversibility or error conditions, so it's good but not 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 bilingual (Spanish and English), making it longer than necessary. It is front-loaded with the main action but the repetition reduces conciseness. The Args section is clear.
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, side effects, use case, and return value. It is mostly complete, though it does not explain error handling or behavior for non-existent configurations.
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 parameter 'name' is described as 'Name of the configuration to activate', which adds some meaning but is minimal. Given 0% schema coverage, this is adequate but not detailed; it essentially restates the parameter's purpose.
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 activates a different configuration of the active document, distinguishes from sibling tools like create_configuration and delete_configuration, and mentions the rebuild effect and relation to build_variant_family.
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 specific use case: verifying a variant built with build_variant_family before saving. It implies context but does not explicitly state when not to use the tool or alternative tools.
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?
No annotations are provided, so the description carries the full burden. It discloses that the mate is fixed, the angle is in degrees with right-hand-rule orientation, and that the solver may reject if entities are coplanar. It describes the return value (metadata including angle_deg). It does not mention authentication, rate limits, or side effects, but for a mate creation tool, the behavioral traits are adequately 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 well-structured with bilingual text, a clear purpose statement, usage context, parameter notes, gotcha, and related tool. It front-loads the key information. While slightly verbose due to bilingual repetition, the structure aids readability and each section 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 6 parameters (5 required), no output schema, and no annotations, the description covers the main behavioral aspects and constraints but lacks full parameter details (e.g., align, entity IDs). It does mention the return value. The gotcha and related tool add context. However, without schema coverage, the description could be more comprehensive for agent decision-making.
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 explains the angle_deg parameter (positive per right-hand-rule) and states 'Other args: same as add_concentric_mate,' which is helpful but vague. It does not describe align, component_name, or entity_id parameters. Thus, it adds partial value but leaves significant 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?
The description clearly states the tool's purpose: 'Mate de ángulo — fuerza un ángulo fijo entre dos entidades' and 'Add an angle mate (fixed angular offset) between two entities.' It specifies the resource (angle mate) and the action (add). It distinguishes from sibling mates (e.g., concentric, distance) by focusing on angular relationships and providing typical use cases like chain-link articulation and hinge angles.
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 typical use cases (e.g., hinge angles, lever positions) and constraints (entities must be planar or axes). It warns against applying between two concentric cylindrical faces and mentions a gotcha about coplanar entities. It references a related tool (add_mate_by_face_position) but does not explicitly contrast with all sibling tools. The guidance is clear and practical, though not exhaustive.
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?
No annotations provided, but description fully discloses behavior: creates a single sketch and extrude_cut for all holes, non-parametric, returns feature info, explains reverse_direction as escape hatch, and scoping with target_bodies.
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 (summary, Args, Returns, Caveat, Example). Slightly redundant phrasing but overall effective and front-loaded. Could trim minor repetition for perfect 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 complexity (11 params, no output schema, no annotations), the description covers all parameters, return value, caveat, and provides an example. It is fully complete for an AI agent to invoke 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 coverage is 0%, but the Args section thoroughly explains each of the 11 parameters with constraints (e.g., circle_diameter_mm must be >0 and > hole_diameter, hole_count >=3, etc.) and defaults. Example demonstrates core 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 bolt circle with N holes using a single sketch and extrude cut. It distinguishes itself from feature-pattern alternatives like circular_pattern by 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?
Explicitly provides when to use (any center position) and when not (non-parametric, suggests create_reference_axis + circular_pattern for parametric counts). Also gives example for common use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_coincident_mateB
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 describes the operation as mating planar entities, implying assembly modification. However, it does not disclose side effects, required permissions, error conditions, or behavior for non-planar entities. Minimal transparency beyond the 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?
Bilingual (Spanish/English) makes the description longer than necessary for an English-speaking AI. While the content is useful, it could be more concise by dropping the Spanish version. Sentences are clear and front-loaded with the core 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?
With 5 parameters, no output schema, and no schema descriptions, the description is incomplete. It lacks details on how to obtain entity IDs, what the 'align' parameter does, and expected return value. References to similar tools partially compensate but own content is insufficient.
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 does not explain individual parameters. It only notes same argument shape as add_concentric_mate, which is indirect. No details on component names, entity IDs, or the 'align' parameter. Fails to compensate for 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 coincident mate between two planar entities (faces or planes). It specifies typical uses like flange-to-plate and sub-assembly base plane. It distinguishes from siblings by referencing add_concentric_mate's argument shape and listing related tools, but does not explicitly differentiate from all mate types (e.g., angle, distance).
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 (flange-to-plate, sub-assembly base plane). Mentions same argument shape as add_concentric_mate, guiding agents familiar with that tool. Lists related alternatives: add_mate_by_face_position (convenience without entity names) and stack_components (batch 3 mates). 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.
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 provided, so description carries full burden. Discloses locale sensitivity for entity names, align parameter, and return of mate metadata. However, lacks details on error handling or side effects (e.g., does it modify assembly state?). Still adds significant behavioral context.
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 points and bilingual content. Could be slightly more concise by omitting Spanish repetition, but front-loads core purpose and uses clear formatting.
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 5 parameters, required fields, typical usage, return value, and related tools. No output schema, but description adequately describes return as mate metadata. Complete for a mate tool with moderate 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 compensates fully. Explains each parameter: component names from get_active_assembly_info, entity ID strings (locale-sensitive), and align values. Provides context beyond schema (e.g., copy verbatim note).
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 aligns axes of cylindrical/conical entities via a concentric mate. Provides specific verb ('alinea ejes' / 'align axes') and resource. Distinguishes 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?
Explicitly describes typical autoparts use cases (bolt+sleeve, sleeve+shaft, two bearings). Mentions related tools for alternative approaches, giving clear when-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_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?
No annotations are provided, so the description carries the full burden. It does not disclose behavioral traits such as whether the mate is destructive, if it can be removed, permission requirements, or behavior when over-constrained. It mentions 'Returns the created mate's metadata' but lacks detail on what that includes.
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 concise but contains redundant Spanish and English text. The key information is front-loaded in the English portion. It is structured with an Args section and a Related line, making it scannable.
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 6 parameters, no output schema, and moderate complexity, the description is incomplete. It does not explain the entity IDs, component names, or align parameter. The reference to add_concentric_mate assumes knowledge of that tool. No return value details beyond 'metadata'.
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 explicitly only defines distance_mm (with unit) and refers to other arguments as 'same as add_concentric_mate,' providing minimal additional meaning. The align parameter with default is not explained, and entity/component parameters are not elaborated.
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 distance mate (fixed offset) between two entities, and provides specific use cases (parallel plate separation, bearing-to-bearing distance). It distinguishes from sibling mates like add_concentric_mate and add_angle_mate by focusing on fixed offsets.
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 typical use cases and explicitly lists related tools (add_mate_by_face_position, stack_components) that offer alternatives or convenience. 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.
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?
With no annotations, the description fully discloses that holes show as 'Cortar-Extruir' features, not Hole Wizard features, and notes no cosmetic threads and limitations like M12 not accepted for counterbore in 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?
Well-structured with sections for args, returns, caveats, and examples, but somewhat lengthy; however, every sentence adds value given 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?
With 8 parameters, no schema descriptions, no annotations, and no output schema, the description provides comprehensive coverage including return format, caveats, and two examples.
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 thoroughly explains all 8 parameters, including enum values, size constraints, mutual exclusivity of plane vs face_centroid_mm, and defaults.
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, and distinguishes it from hole_wizard (single-hole vs multi-hole).
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 (multi-position patterns where hole_wizard is impractical) and when not to (single hole with proper styling), and names hole_wizard as an alternative.
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?
Despite no annotations, the description fully discloses the tool's composition and critical non-obvious behavior: reverse_direction=True for the extrude cut. Also explains orientation assumptions, return values, and warnings.
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 clear sections for workflow, args, returns, and caveats. 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 the tool's complexity (6 params, orientation constraints, non-obvious extrude direction), the description is thorough. It explains all return values, including derived metrics and warnings, which is essential since no output schema exists.
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 six parameters are described in detail with units, defaults, constraints, and context (e.g., standard DIN widths, derivation of keyway_start/end_x_mm). The schema coverage is 0%, so the description 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?
Clearly states the tool adds a DIN 6885-style axial keyway cut into a shaft end. Provides specific verb and resource, distinguishes from sibling tools like build_stepped_shaft and the primitive chain.
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 the tool operates on an active part with a shaft along world X, typically built with build_stepped_shaft. Provides a junior workflow example and explicitly tells when not to use (arbitrary orientation) with alternative.
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?
With no annotations, the description carries full burden and excels: discloses that units control equation suffix and internal conversion, describes return dict fields, explains raw SW string format, and warns about reuse. 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 clear sections (purpose, args, returns, binding example, related). Contains dual-language text (Spanish/English) which adds some redundancy but remains 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 the complexity and no output schema, the description covers all needed context: how to use, what it returns, how to bind dimensions, unit behavior, and concrete example. Complements sibling tools effectively.
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 adds comprehensive meaning: name restrictions (no quotes, =, comma, @) and convention, value numeric, units with allowed values and conversion details. Far exceeds schema minimal 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 adds a global variable (equation) that sketch and feature dimensions can reference. It distinguishes from related tools by explicitly naming set_global_variable and modify_dimension as alternatives, and warns against reusing the same name.
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 context (parametric parts like CSWA Tool Block) and when-not-to-use (do not call again for same variable). Explains how to bind dimensions by adding another equation and lists related tools for modification.
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?
With no annotations, the description fully discloses behavior: resolution of face positions based on normal vectors, coordinate frame details, defaults for Pieza-style parts, and explanation of mate_type, align, distance_mm. No contradictions or hidden behaviors.
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 then English) and well-structured with a clear Args list, example, and explanatory notes. It is slightly verbose but every sentence adds value. Could be trimmed but organization is excellent.
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 0% schema description coverage, this description is highly complete. It explains all parameters, provides default behavior, gives a concrete example, and explains the coordinate system. No missing critical information.
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% schema description coverage, so the description must compensate. It does so thoroughly: each of the 7 parameters is explained in the Args section with defaults, allowed values, and context (e.g., coordinate frame for positions, default align). 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 the tool's purpose: creating a mate between two components using face positions. It specifies the verb (add_mate), resource (components), and distinguishes from sibling tools by using position keywords instead of face indices. The example solidifies 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 explains when to use this tool: as a convenience wrapper to avoid locale-sensitive face-index handling. It provides context about interpreting position keywords in local coordinate frame. However, it does not explicitly mention when not to use or alternatives like add_coincident_mate, though the convenience argument implies it.
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?
No annotations, so description carries full burden. It explains lines must be adjacent, sketch must be in edit mode, chamfer is 45° equal-distance, internal API may fail, and returns metadata. Very 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?
Description is bilingual (Spanish/English), doubling length unnecessarily. Essential info is front-loaded but redundancy reduces 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?
No output schema, but description says returns metadata. Covers prerequisites, gotchas, and parameter usage. Adequate for a simple tool, though output details could be richer.
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 explain parameters. It clearly explains each parameter: line1_x_mm, line1_y_mm as a point on first line, line2 similarly, distance_mm as chamfer distance, and z_mm default. 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?
The description clearly states it cuts a sketch corner with a 45° equal-distance chamfer, replacing a vertex with an inclined line. It distinguishes from sibling tools like add_sketch_fillet (rounds corners) and chamfer (3D edge chamfer).
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 usage for CSWA Tool Block, prerequisites (sketch in edit mode, lines adjacent), and a gotcha with workaround. Distinguishes from 3D chamfer. Lacks explicit when-not-to-use but otherwise strong.
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?
No annotations provided, so description carries full burden. It fully discloses behavior: driving dimension, auto-naming, dimension type inference based on point selection, value override forcing geometry update, text offset defaults, and return of dim name. 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?
Description is well-structured with sections for purpose, arguments, returns, requirements, and gotchas. However, it includes both Spanish and English, making it slightly longer than necessary for an English-only agent.
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, 0% schema coverage, no annotations, and presence of output schema (not shown), the description covers all necessary aspects: function, parameters, usage flow, return value, prerequisites, and a gotcha. It is fully adequate 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% coverage, but description explains each parameter's purpose and usage: entity_x/y/z_mm as a point on the sketch entity, value_mm as desired dimension value that overrides geometry, text_offset_x/y_mm for cosmetic placement with defaults.
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 adds a driving dimension to a sketch entity at a given point with auto-naming. It implicitly distinguishes from siblings like add_sketch_relation and modify_dimension by focusing on dimension 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?
Explicitly states the sketch must be in edit mode and should be called after sketch creation and before closing. Provides a typical CSWA use case and a gotcha about dimension type inference. Does not mention when not to use or alternatives.
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?
No annotations provided, so description carries full burden. It explains destructive behavior (replaces vertex with arc), that SW picks closest segment, and constraints (adjacent lines). Returns metadata. Good coverage for a simple 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?
Description is concise and front-loaded. The English portion is efficient, two sentences followed by a usage note and parameter explanations. No redundant 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?
With 6 parameters and no output schema, the description covers purpose, parameter semantics, prerequisites (edit mode), constraints (adjacent lines), and related tools. Sufficient 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?
Schema has 0% description coverage; description adds meaning for all 5 required params: explains that line1_x_mm/line1_y_mm are points on first line near corner, similarly for line2, radius_mm is fillet radius, z_mm is Z-coordinate default 0. Fully compensates for 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 rounds a sketch corner with a tangent arc between two adjacent lines, replacing the vertex. It includes a typical use case (CSWA Tool Block R3) and distinguishes from siblings add_sketch_chamfer and 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 context: sketch must be in edit mode, lines must be adjacent, and gives a typical use case (R3). Mentions related tools. Lacks explicit when-not-to-use but is informative about requirements.
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?
Describes effect (fully defined, stops drifting), no rebuild until next exit, and which relations take 1 or 2 points. Missing error conditions or behavior if relation already exists. With no annotations, carries burden but not 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?
Well-structured with bilingual intro, Args, Returns, and context. Slightly redundant due to dual languages, but front-loaded with essential info and no wasted sentences.
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, no annotations, and no output schema, description covers purpose, parameters, return value, and usage context. Missing error handling or validation details, but adequate for most uses.
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, description fully explains both parameters: relation values and entity_points_mm format (list of points). Adds meaning beyond schema by specifying number of points per relation type.
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 geometric constraints to sketch segments, lists specific relations, and explains its role in making sketches fully defined. It 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 usage context: typical CSWA workflow, when to use (after drawing, before extrude), and requires sketch in edit mode. Implicitly differentiates from dimensioning and filleting but lacks explicit 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.
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, description fully discloses behavior: not parametric, creates sub-edges, modifies the part, returns a feature object with chamfered edges count, and explains default handling of circular edges. 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 context paragraph, bulleted args, return info, caveat, and examples. Front-loaded with purpose. Slightly verbose but every section adds value; minor trim 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 lack of annotations and output schema, description covers all necessary aspects: when to use, parameter details, return structure, side effects, interaction with other tools, and practical examples. Complete 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 description provides rich detail for all 5 parameters: defaults, typical values, edge cases (e.g., circular edges skip min_edge_length_mm), and the purpose of include_arcs for round parts. 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?
Clearly states it chamfers every edge (linear and circular) in one call, designed for autoparts edge breaks per ISO 13715. Distinguishes from sibling tools like chamfer (requires selection) and fillet_all_edges by combining list_edges + filter + chamfer.
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 when to use (universal deburring for autoparts), gives examples (standard deburr, single body, linear-only), warns about non-parametric nature and interaction with fillet_all_edges, and recommends using only one edge-break tool per part.
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 provided, the description carries full responsibility. It discloses multiple behavioral traits: loop validation before SW calls, leaving the sketch open, exact mode to prevent drift, fallback behavior, and call atomicity. 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 long but well-structured with bilingual sections, bullet points, and clear examples. It could be slightly more concise, but the complexity of the tool justifies the length. Front-loads 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 6 parameters, nested segment objects, and no output schema, the description covers all necessary aspects: input format, behavior, return shape, notes on atomicity, and related tools. It is 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?
The input schema provides only type and title for parameters (0% schema description coverage). The description compensates fully by explaining each parameter: plane (aliases), segments (detailed format with coordinate examples), close (auto-closing behavior), exact (exact mode vs inference, drift trade-off), name_hint (unused), and variables (parametric evaluation). 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 the tool builds a closed profile from an ordered list of segments in one call, contrasting with creating multiple primitives. It specifies validation, leaving sketch open, and targets specific use cases like the CSWA Tool Block. This distinguishes it from siblings like create_line/create_arc.
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 and references related tools (add_sketch_relation, extrude_sketch). However, it does not explicitly state when to avoid using this tool (e.g., when you need individual primitives or open profiles). The guidance is clear 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.
build_extruded_closed_profileC
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?
The description mentions that segment coordinates and depth_mm accept string expressions over variables, which is a key behavioral detail. However, with no annotations, it does not disclose side effects (e.g., whether it requires an active sketch), destructive potential, or error handling.
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 with a concrete example, no redundant text. It is concise but could be slightly more structured (e.g., listing key parameters).
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?
With 8 parameters, no output schema, and no annotations, the description leaves major gaps. It does not explain the purpose of most parameters (exact, merge, plane, end_condition) or the return value. A user would need extensive trial and error.
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 is the sole documentation for 8 parameters. It only explains segments and depth_mm's expression capability, leaving plane, exact, merge, variables, end_condition, and reverse_direction completely undocumented. This is insufficient.
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 exact closed profile and extrudes it as one composite. This differentiates from build_closed_profile (profile only) and build_revolved_profile (revolved), though not explicitly. The purpose is specific and actionable.
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?
No guidance on when to use this tool versus alternatives like build_closed_profile or extrude_sketch. The only usage hint is about size variants using a new variables dict, which is helpful but insufficient for tool selection.
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?
With no annotations, the description fully discloses the composite nature, bore being 'through_all', reverse_extrude behavior, return structure, and caveats, providing comprehensive behavioral 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 clear sections (purpose, workflow, args, returns, caveat, example), front-loaded purpose, and no wasted sentences.
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, no output schema, and no annotations, the description comprehensively covers all aspects: parameter details, behavior, caveats, return info, and an 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?
The Args section adds detailed explanations for all 8 parameters, including constraints (e.g., bore_diameter_mm must be >0 and < outer_diameter_mm), which is absent in the schema (0% coverage). This significantly aids understanding.
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, provides a junior workflow example, and distinguishes from sibling tools by specifying the composite operation for a flange boss.
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 junior workflow example and advises when to use bore_target_bodies to restrict bore scope, and mentions using extrude_cut separately for blind bores. However, it could be more explicit about when to use this tool versus other build siblings.
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 provided, so description carries full burden. It discloses the orientation contract (L-profile in Front plane, extrusion direction, bolt hole drilling direction), that it creates multiple features, returns a dict with feature info, and a caveat about sharp inside corner. 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 somewhat long but highly structured with sections for Args, Returns, Geometry, Caveat, Example. It is front-loaded with a clear one-liner. Every section adds value, so 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?
With 8 parameters and no output schema, the description covers everything: return dict details, geometry orientation, parameter constraints, a caveat, and an example. It is complete for an agent to invoke 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 coverage is 0% (no descriptions in schema). The description adds detailed explanations for each parameter: constraints (e.g., leg lengths must be > 2×thickness), defaults, and meanings (e.g., 0 = no bolts). This compensates fully for the 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 it builds an L-shaped bracket with bolt holes, using specific verbs and resource. It distinguishes from siblings by noting it wraps multiple operations into one call, providing a unique value proposition.
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 extensive usage context: typical use case (autoparts bracket), a junior workflow example, physical dimensions, constraints, and an example. It doesn't explicitly state when not to use it, but the context is rich and clear enough for an agent to decide.
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?
In the absence of annotations, the description thoroughly discloses behavior: it compiles to an op-list and executes as a batch with deferred redraw, all-or-nothing rollback, and single approval. It also describes the return value (execute_batch result plus compiled_ops and summary) and error handling (clear error for invalid DSL).
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 main purpose and examples. However, it is somewhat lengthy due to the list of methods and bilingual content. It could be slightly more concise, but the structure is clear and informative.
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 (DSL with many methods and options), the description is comprehensive: it explains the grammar, supported methods, edges function, scope options, and fallback behavior. It provides enough context for an agent to use the tool correctly without additional clarification.
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 meaningful information for each parameter: script is 'la expresión fluida' with examples, dry_run compiles without affecting SolidWorks, and rebuild triggers a rebuild on batch close. This compensates well for the schema's lack of 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 it builds a part from a fluent build123d-style script in one call. It specifies the closed grammar and compilation to op-list, distinguishing it from individual geometry tools like create_rectangle or extrude_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 explains when to use this tool versus alternatives: explicitly advises against using it for sketch-on-face (use create_sketch_on_face instead), and mentions fallback to execute_batch or loose tools for invalid DSL. It provides examples and lists supported methods.
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?
With no annotations, the description fully discloses behavior: opens parts in series read-only, extracts metadata, no network, incremental, and rebuild option. 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?
Two well-structured paragraphs with front-loaded purpose. 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?
Despite no output schema, the description lists return fields. For a tool with 3 parameters and simple behavior, it is 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 description fully explains each parameter: folder (recursive, ignores temp files), rebuild (re-reads all), max_parts (limit). Adds significant 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 the tool indexes a folder of .SLDPRT parts into a local catalog, distinguishing it from sibling tools that focus on modeling 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?
Provides clear context on incremental vs rebuild mode and advises running when SolidWorks is idle, but does not explicitly list when to avoid using the tool.
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_patternB
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 must disclose behavioral traits. It mentions 'drawing-grounded through holes' but does not explain if the operation is destructive, whether it requires an active document, or other side effects. The description is minimal on behavior beyond the obvious creation 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 description is brief with two sentences. The first sentence states the overall action, and the second sentence provides key usage details. No extraneous words, and the most important 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?
Given the tool has 14 parameters, no output schema, and no annotations, the description is incomplete. It does not explain the return value, prerequisites, or how parameters like thickness or plane affect the result. For a complex tool, more context 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 description coverage is 0%, so the description must explain parameters. It clarifies hole_positions_mm, bolt_circle_diameter_mm, bolt_count, origin coordinates, width, and height. However, many parameters (plane, thickness_mm, angle_offset_deg, reverse_direction, bolt_circle_center_*) are not mentioned, leaving 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?
The description clearly states the tool builds a rectangular plate and drills through holes, specifying two hole placement methods (explicit positions or bolt circle). It distinguishes itself from sibling tools like add_bolt_circle or build_rectangular_pocket by combining plate creation with hole patterning in one 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 mentions two usage modes (explicit positions vs bolt circle) but does not explicitly guide when to use this tool over alternatives like building a plate and holes separately. The context is clear but lacks exclusions or targeted usage advice.
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?
No annotations are provided, so the description carries the full burden. It explains the effect of reverse_direction, end_condition, and target_bodies in detail, including edge cases like cutting into air. It also mentions the return type (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 well-structured with a purpose statement, workflow example, parameter list, and usage example. It is slightly long but each sentence adds value. The front-loading with the Spanish purpose and junior workflow 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 the tool's complexity (9 parameters, 5 required, no output schema, no annotations), the description is highly complete. It covers purpose, parameter semantics, behavioral details, and provides a concrete example. It leaves little ambiguity for an AI agent to select and invoke 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 schema provides no descriptions (0% coverage), so the description must compensate. It provides thorough explanations for all 9 parameters, including constraints (e.g., width_mm > 0), defaults, and coordinate system context for center_x_mm and center_y_mm. The example also illustrates 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's purpose: 'Hacer un vaciado rectangular en una sola operación' (Make a rectangular pocket in a single operation). It distinguishes itself from sibling tools like extrude_cut, create_rectangle, and create_sketch by combining these 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 includes a junior workflow example showing how to use the tool, and implies it is a shortcut for create_sketch + create_rectangle + extrude_cut. However, it does not explicitly state when not to use it or mention alternatives, though 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.
build_revolved_profileB
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?
The description outlines the steps (creates axis, builds closed profile, revolves) and mentions the 'safe chain' concept, but does not clarify potential side effects (e.g., whether existing geometry is modified) or any required permissions. Since no annotations are provided, the description carries the burden, and while it gives some behavioral insight, gaps remain.
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 four sentences, front-loaded with the primary action, and each sentence adds meaningful information (steps, usage context, capability). No unnecessary 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?
Given the tool's complexity (9 parameters, no output schema, no annotations), the description is insufficient. It lacks details on parameter formats, return values, error conditions, and how it integrates with the overall part model. The agent would struggle to invoke this tool reliably without additional knowledge.
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 9 parameters with 0% description coverage, yet the tool description only mentions 'segments' and 'variables' indirectly. It does not explain the format of the required 'segments' array, the meaning of 'plane', 'angle_deg', 'axis_reference_1/2', or other parameters. This is a critical gap for an AI agent to use the tool correctly.
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 via a safe chain, specifying it for turned parts with ordered line/arc segments. It differentiates from siblings like build_closed_profile or revolve_sketch by calling itself the 'preferred path' for this 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 description indicates when to use the tool ('preferred path for turned parts...') and mentions variable expressions for variants, but does not explicitly state when not to use it or provide alternatives. The guidance is implied rather than explicit, which could leave 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.
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 description carries full burden. Describes internal composed workflow, return metadata, and parameter effects (merge, angle). Caveats about orientation and transitions add transparency. Could be more explicit about safety (additive vs destructive), but acceptable.
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, workflow, args, returns, caveats, and example. Front-loaded with purpose. 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?
Given 4 parameters, no output schema, and no annotations, the description covers all necessary aspects: argument constraints, return values, caveats for orientation, transitions, and tapering. Includes an example for clarity. Complete for agent selection and 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 provides no parameter descriptions (0% coverage). Description compensates by explaining each parameter: diameters and lengths constraints (1-20, >0, same length), angle_deg default and use for sectors, merge behavior. Adds meaning 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 creates a stepped multi-diameter shaft in one call, with examples and distinction from primitive sketch tools. The title and description align with the name.
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 guidance via junior workflow example and caveats that tell when alternative tools (revolve_sketch) should be used. Also lists limitations (square shoulders, no taper, fixed orientation).
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?
No annotations are provided, so the description carries full burden for behavioral disclosure. It thoroughly explains that the tool composes extrude_sketch and extrude_cut, that the tap is a 'Cortar-Extruir' feature (not a hole-wizard), and that no cosmetic threads are added. It also describes default behaviors, constraints, and return values. 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 a clear sentence, workflow paragraph, bulleted args, return info, caveat, and examples. However, it is somewhat verbose; some details could be streamlined. Given the lack of schema descriptions, the verbosity is justified, but it could be tightened slightly.
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?
With 10 parameters, no output schema, and no annotations, the description covers all essential aspects: parameter constraints, default behaviors, return structure, caveats, and example invocations. It also mentions the standard autoparts context. The agent has sufficient information 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 compensates fully. Each parameter is explained with units, allowed values (including enumerated thread sizes), defaults, and constraints (e.g., outer_diameter_mm must be > 0 and > tap-drill diameter). It even lists ISO tap-drill diameters. This adds significant meaning beyond the input 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 builds a threaded boss (cylindrical boss with centered tap hole). It distinguishes from sibling tools like build_flange_boss and hole_wizard by mentioning that for cosmetic threads, one should use hole_wizard directly. The verb 'build' and the resource 'threaded boss' 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 provides explicit usage guidance: it references a 'Junior workflow' and gives example calls. It also includes a caveat explaining when not to use this tool (for cosmetic threads, use hole_wizard instead). This clearly differentiates when to use this tool versus alternatives.
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 provided, so description carries full burden. It describes the composition of multiple steps, partial failure caveat, and no auto-rollback. Also explains return values. Slightly lacking details on save behavior 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 with purpose, workflow, args, returns, caveat, and example. Slightly verbose but every sentence adds value. Not overly concise but 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 the complexity (composite tool, 5 parameters, safety concerns), the description covers purpose, parameters, returns, and a caveat. Could mention prerequisites like feature existence, but overall complete enough.
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 explain parameters. It does so thoroughly: feature_name, dimension_name, variants mapping, parent_config (empty for root), activate_at_end (must be a key of variants). 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 the tool creates a family of configurations by changing a single dimension. It includes a concrete example and distinguishes from sibling tools like create_configuration and 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?
Provides a clear workflow example and explains when to use (changing one dimension). However, it does not explicitly state when not to use or mention alternatives, though the context implies batch creation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
capture_viewsA
Capturar vistas — render the active part OR assembly to PNG screenshots so you can SEE the model and verify geometry. Read-only.
ADVERTENCIA (privacidad): las capturas se ENVÍAN a la API de Claude. Un screenshot puede mostrar logos, números de parte OEM o geometría confidencial. Decisión de piloto: el cliente usa su propia API key y firma el flujo de datos. Usa esta herramienta consciente de eso. [en: screenshots are SENT to the Claude API; pixels are NOT redacted.]
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 (Claude sees
them directly), 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?
Discloses key behaviors: read-only, images sent to Claude API, no redaction, temp file persistence, requirement for open document, error on unknown view, and no-op parameter. Comprehensive for a tool with no 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, warning, cadence, args, returns, caveats, example). Slightly verbose with bilingual content but 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?
Comprehensive coverage including purpose, usage patterns, parameter details, return format, privacy/security, file handling, and example. Fully compensates for missing annotations and 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?
Explains all three parameters beyond schema: valid view names, default, error behavior; with_dims as no-op for future compatibility; section parameter with detailed effect and offset sign. Compensates for 0% schema coverage.
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 renders active part or assembly to PNG screenshots for visual verification. Specifies read-only nature and distinguishes from mutation 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 (checkpoints/end of build) vs. not (after every feature), with alternatives like cheap signals and verify_build_report. Includes privacy warning and debugging use case.
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?
With no annotations, the description carries full burden. It discloses failure modes (via fillet reference), batch-all-identical-edges rule, default values, parameter constraints, and return value. Very 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 clear sections and example, but slightly verbose. Could be trimmed without losing meaning.
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 usage, parameters, return value, and industry context. Lacks details on error handling and edge cases, but overall comprehensive given complexity (7 params, 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?
Adds substantial meaning to most parameters (e.g., edge_midpoints_mm from list_edges, distance_mm typical values, angle_deg default). However, 'edge_circles' parameter is not explained, and schema coverage is 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?
Clearly states 'bevel one or more edges (distance + angle)' with specific verb and resource. Distinguishes from sibling 'fillet' via explicit reference.
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 extensive guidelines: references fillet for identical rules, offers example, lists standard autoparts use cases, and mentions deferred types. Explicitly tells when to use and alternative tools.
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?
With no annotations, the description reveals that the tool mutates the part, requires a reference axis, returns a new Feature with a name, and explains how count includes the original. It covers key behaviors like angle defaults and spacing options, though it could mention side effects (e.g., whether it modifies existing features).
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, use cases, prerequisites, detailed parameter list, and examples. It is slightly verbose (e.g., repeated explanation of total_angle_deg in both text and example), but the organization makes it easy to parse.
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 is exceptionally complete. It includes prerequisites, parameter details, return value, and multiple examples covering common scenarios (bolt circle, partial arc). No major gaps are evident.
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 fully compensates by explaining all 6 parameters: feature_names (exact names from get_active_part_info), axis_name (from create_reference_axis), count (>=2, includes original), total_angle_deg (default 360, partial arcs), equal_spacing (True/False meaning), and reverse (direction). Examples clarify 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 'repeat features around an axis' and lists standard autoparts uses (bolt circles, fan blades, etc.). It does not explicitly contrast with sibling tools like linear_pattern or mirror_feature, but the name and examples make the 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 a clear prerequisite ('Always preceded by a create_reference_axis call') and explains when to use equal_spacing=False for 'every 30 degrees' cases. It lacks explicit exclusion of alternatives (e.g., when to use add_bolt_circle instead), but the examples illustrate typical usage patterns.
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 discloses scope (Mexican-Spanish only), caveats (regional differences, ambiguous terms), version constraints (v1 fixed vocabulary, v1.1 extensible), and the exact return structure including a fallback for missing terms.
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 but well-structured with sections for purpose, caveats, and example. The first sentence establishes purpose immediately. Every sentence adds value; however, minor trimming could enhance 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 simplicity (single parameter, no output schema, no annotations), the description adequately covers all necessary aspects: purpose, input, output structure (with fields and example values), and usage context. It is self-contained and 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?
The single parameter 'term' lacks schema description (0% coverage), but the description explains it is case- and accent-insensitive and expects a Spanish/Spanglish autoparts term. An example is provided. Slightly more detail on expected format would push to 5.
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 resolves informal Mexican-Spanish autoparts terms into curated geometric archetypes, alternatives, and disambiguation questions. This distinctively sets it apart from sibling tools that perform CAD modeling 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 explicitly tells the agent to call this tool 'when a user uses an informal autoparts term and before proposing a plan', referencing Phase 2/Layer 2. It gives an example ('rin') and details the disambiguation flow.
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:\Users\danie\OneDrive\Escritorio\flecha.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 fully bears the burden. It discloses default behavior (refuses dirty docs), force behavior (silent discard), underlying API verbs (CloseDoc vs QuitDoc), return dict fields, raised errors, and an example. 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 Args, Returns, Raises, and Examples sections. It is slightly verbose due to bilingual (Spanish/English) content, but every sentence adds value. The English part alone is clear and 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, the description covers return fields, errors, parameter semantics, and examples. It fully explains behavior, prerequisites, and edge cases, making it 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_description_coverage is 0%, so the description must compensate. It explains the single 'force' parameter in detail: default false raises error if dirty, true discards changes. It also warns about using force only when doc is disposable and notes the underlying API distinction.
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 closes the active SolidWorks document, with a specific verb and resource. It distinguishes from siblings by contextualizing its role in iterative build/save/close flows, contrasting with save_as failure when windows pile up.
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: in iterative build/save/close flows. Provides default behavior (refuses if dirty) and force=True usage with a warning. Includes an example flow showing canonical usage and a force-close example, offering clear guidance.
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 are provided, so the description carries the full burden. It clearly states the tool does not mutate SolidWorks and returns tool names and parameters. However, it lacks details on error handling (e.g., missing drawing_spec_id), rate limits, or return format specifics.
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 extremely concise: two sentences that front-load the core purpose, then add behavioral context and supported archetypes. Every sentence adds value with 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?
Given the single parameter, lack of annotations, and no output schema, the description could be more complete. It states supported archetypes but does not mention prerequisites (e.g., a recorded DrawingSpec), behavior for unsupported archetypes, or the format of the returned plan. Some gaps remain.
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 (no parameter descriptions). The tool description does not compensate: it only mentions 'stored DrawingSpec' indirectly, with no explanation of what drawing_spec_id is, how to obtain it, or its format. This is a critical gap given the low schema coverage.
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: 'Compile a stored DrawingSpec into an ordered FeaturePlan.' It uses a specific verb and resource, and distinguishes itself from siblings like run_feature_plan by noting it is 'Advisory only' and does not mutate SolidWorks.
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 this tool ('Advisory only' for planning without execution) and lists supported archetypes. However, it does not explicitly state prerequisites (e.g., requiring a previously recorded DrawingSpec) or when to avoid using it in favor of alternatives.
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?
With no annotations, the description fully explains behavior: angle convention, direction flag's counter-intuitive effect, return value, and caveat. No behavior is left unspecified.
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, though somewhat verbose. Every sentence adds value, but could be slightly trimmed. Still very 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 annotations, no output schema, and complex behavior, the description is fully complete—covers arguments, returns, use cases, examples, and prerequisites.
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 compensates by detailing every parameter, including constraints (radius positive, angles different) and aliases. 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 draws a center-defined arc on the active sketch, distinguishing it from siblings like create_circle and create_slot.
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 explicit when-to-use guidance (slot end-caps, fillets, profiles) and when-not-to (use create_circle for full circles). Also mentions prerequisite (active sketch via create_sketch).
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 behavioral traits: requires an active sketch, the circle geometry is non-parametric (modify_dimension cannot resize), and rebuilding from a fresh part is needed for resizing. It also mentions return values, providing complete 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 well-structured with a clear main sentence, parameter details, example, and caveats. The bilingual caveat adds length but serves multilingual users. Overall efficient and front-loaded with the core 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 annotations, no output schema, and low schema coverage, the description covers purpose, parameters, usage, behavioral traits, and alternatives comprehensively. The return value indication and example complete the 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?
The schema has 0% description coverage, but the description thoroughly explains each parameter: cx_mm/cy_mm as center point, radius_mm as radius with positivity constraint, and long-form aliases. It clarifies that only one name per axis should be passed, adding essential 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 draws a circle on the active sketch with a specific verb and resource. It distinguishes from the sibling tool add_bolt_circle by suggesting the latter for multiple holes, enhancing clarity.
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 context for usage, including an example, parameter constraints, and a recommendation to use add_bolt_circle for bolt patterns. However, it does not explicitly state when not to use the tool, but the context is sufficient.
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, but description adds crucial behavioral context: creating a configuration activates it (changes active config), and it is idempotent. The 'Gotcha' section highlights a live-verified side 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 sections (description, args, gotcha, related tool), front-loaded with purpose. Slightly long but not verbose.
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, the description covers the tool's purpose, side effects, parameter semantics, and alternatives. Fully adequate for agent to select and 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%, so description compensates by explaining each parameter: name is unique and idempotent, parent is for derived configs, description is optional. Adds meaningful context 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 'Crear una configuración nueva en la pieza o ensamble activo' with specific verb and resource. It distinguishes from sibling tool build_variant_family by explaining when to use that 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 provides when to use build_variant_family instead of create_configuration, and mentions idempotency for name. Gives clear context for 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?
Discloses return value (geometry endpoints+length), non-parametric nature of sketch, and that modify_dimension only affects extrusion depth. No annotations provided so description carries full burden; could mention if line can be edited by other means.
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, args, return, usage, caveats. However, includes redundant bilingual text (Spanish and English) for the same caveat, making it longer 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?
Covers prerequisites (active sketch), return value (geometry), param semantics, and key limitation (non-parametric). No output schema but return described. Sufficient for a simple line 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?
0% schema coverage, so description compensates by explaining x1_mm/y1_mm as start point, x2_mm/y2_mm as end point, units in mm, and sketch-local frame. Adds meaningful context 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?
Clear verb 'Draw' and resource 'line on active sketch'. Distinguishes from sibling tools like create_rectangle, create_arc by specifying it's for lines.
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 prerequisite (active sketch via create_sketch), use case (building block for non-rectangular profiles before extrusion), and limitation (not parametric, must rebuild for resizing). Provides alternative action.
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?
No annotations provided, so description carries full burden. Describes that rectangle is added to most recent sketch, returns geometric properties, and includes caveats about non-parametric dimensions (modify_dimension cannot resize). Could be slightly more explicit about error behavior if no active sketch.
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, Example, Caveats, Related). Concise but includes necessary details. Slightly verbose due to bilingual caveat, but still 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?
With no output schema, description mentions return of geometric properties (width and height). Covers prerequisites, usage, and limitations. Lacks exact return format but sufficient for agent understanding.
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 parameters: two corner coordinates (x1_mm, y1_mm and x2_mm, y2_mm). Provides an example tying parameters to real-world usage, adding 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 draws a corner-defined rectangle on the active sketch, specifying the resource (rectangle) and action (create). It distinguishes from sibling tool 'build_rectangular_pocket' which combines sketch and 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 mentions requirement for an active sketch via 'create_sketch first'. Provides related tool 'build_rectangular_pocket' as an alternative for rectangular pockets. Gives clear context for when 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_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?
No annotations provided, so description carries full burden. Discloses behavior: two modes, world-axis mapping, and limitations of single-reference. Lacks error handling details but is otherwise 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 headings, table, and example. Somewhat long but every sentence adds value. Slight room for trimming.
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?
Complete for a tool with 2 params, no output schema, and no annotations. Covers all aspects: modes, usage, output format, example, and internal 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?
Compensates for 0% schema coverage with detailed parameter explanations, including naming conventions and examples. Clearly explains reference_name and reference_2 semantics.
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 reference axis from two planes or a single feature. It distinguishes the two modes and provides a use case, differentiating it from sibling tools like create_reference_plane.
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 explains when to use each mode: two-plane recommended for v1, single-reference limited. Provides a use case for circular_pattern and warns about limitations of single-reference mode.
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?
With no annotations, the description fully bears the behavioral disclosure burden. It explains that the plane is parallel to a source, offset is signed (zero rejected), positive/negative direction meanings, and return value (name, parent, offset). It also mentions testing for negative offsets, providing confidence in 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 headings and bullet points, front-loading the purpose. However, it is somewhat verbose (e.g., Spanish UI names and a cryptic testing note). For a complex tool, it's acceptable, but minor trimming 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 3 parameters, no output schema, and no annotations, the description is exceptionally complete. It covers all modes, parameter details, return value, use cases, and even provides code examples with list_faces integration. An agent has everything needed 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 coverage is 0%, so the description must fully explain parameters. It does so thoroughly: offset_from lists allowed plane names (English and Spanish), offset_mm explains sign and zero rejection, face_centroid_mm is described as a 3-element array from list_faces. Examples illustrate usage, meeting the high burden.
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 plane parallel to a default plane or face, distinguishing two modes (default-plane and face mode). It explicitly contrasts with sibling tools like create_reference_axis and mentions deferred methods, making the purpose 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 when-to-use guidance for each mode: default-plane for rib offsets and fixture-clearance planes; face mode for counterbore-on-flange-top and hole patterns. It also specifies when not to use (angled/through-3-points are deferred) and includes a caveat, leaving no ambiguity for selection.
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?
No annotations are provided, so the description bears full responsibility. It discloses that the sketch is left in 'EDIT mode', returns the sketch name and resolved plane name, and includes important caveats about document 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 efficiently structured: purpose first, then argument details, then return value, then caveat. Every sentence adds value; no redundant 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 single-parameter tool with no output schema, the description fully explains the return values, post-conditions (EDIT mode), and necessary context (part document). It also mentions subsequent steps, making the tool's role in a workflow clear.
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 for plane_name. The description adds extensive detail: lists the allowed values (front/top/right, plus Spanish equivalents), notes case sensitivity, and specifies lowercase English. This fully compensates for the 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 'Start a new sketch on a named reference plane.' It uses a specific verb ('Start') and resource ('sketch on named reference plane'), distinguishing it from similar tools like create_sketch_on_face which creates on 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 the prerequisite: 'requires a part document (not assembly). Open a fresh part via SW UI before calling.' It also provides a sequence of use: create_sketch -> create_rectangle -> extrude_sketch, giving clear when-to-use guidance.
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. It discloses behavior like default extrude direction (into body), axis mapping non-intuitive behavior, failure modes, and requirement for face visibility.
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, front-loaded with a clear summary, then detailed sections for arguments, returns, gotchas, failure modes, and example. Every sentence adds value; 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?
Complete for a complex tool with no output schema: describes return values (name, face_centroid_mm, body_name, sketch_axis_mapping with schema), common uses, gotchas, failure modes. 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?
Despite 0% schema description coverage, the description extensively elaborates on both parameters (selector and face_centroid_mm) with syntax, closed schema, and mutual exclusivity, fully compensating.
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 starts a new sketch on a body face, distinguishing from create_sketch (default planes only). It specifies the verb 'start' and resource 'sketch on a body face', and contrasts with sibling 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?
Provides explicit when-to-use (face on existing body) vs create_sketch (default planes). Includes guidance on selector vs face_centroid_mm, gotchas about extrude direction and axis mapping, and failure modes.
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?
No annotations provided, so description carries full burden. It discloses the slot geometry, the parametric constraint (non-driving dimensions), and the active sketch requirement. It does not mention return value or side effects like sketch closure, but the major behavioral trait (non-parametric) is well 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 verbose, including bilingual text (Spanish and English) which adds redundancy. While the content is valuable, it could be more concise. The key information is front-loaded, but the Spanish repetition detracts from 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 5 required parameters, no output schema, and no annotations, the description covers geometry, parameter semantics, usage context, and a critical behavioral caveat (non-parametric dimensions). It lacks error conditions or return value, but these are partially expected without output schema. Overall 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?
Schema coverage is 0%, so description must explain parameters. It does so with a docstring-like list: x1_mm, y1_mm, x2_mm, y2_mm as center-line endpoints and width_mm as slot width. This adds meaning beyond the bare schema titles and compensates for 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 'Draw a straight slot on the active sketch' and explains the geometry (rounded-rectangle with semicircular end-caps). It distinguishes this tool from sibling sketch tools like create_rectangle or create_circle by specifying the slot shape and common autoparts 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 a concrete usage example (adjustable bolt slots) and explicit caveats: requires active sketch and the parametric limitation that modify_dimension cannot resize width/endpoints. It doesn't explicitly contrast with alternatives but implies specialized slot creation.
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, but the description fully discloses the safe nature of configuration deletion (pure metadata, no cascade), preconditions, and return value, ensuring the agent understands the 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 with front-loaded purpose, constraints, and use case. Slightly lengthy due to bilingual text, but 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 output schema, the description explains the return value ('deleted configuration name') and covers all relevant aspects: purpose, preconditions, safety, and example use cases. Completeness is high for a simple deletion 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?
Only one parameter 'name' with schema coverage 0%, but the description clarifies 'The configuration to delete', which adds meaning beyond the schema title. Slightly lacking format details but sufficient for a single parameter.
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 'Delete a configuration from the active document' and explicitly distinguishes itself as the ONLY deletion tool in v1 MCP, unlike sibling tools that include 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?
Provides explicit use case (cleanup of obsolete trim variants) and prerequisites (configuration exists, not active, not only one), along with an alternative action (activate a different configuration first).
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?
No annotations are provided, so the description carries the full burden. It discloses that the COM driver degrades to feature-tree dims and through/depth may be None. It also warns about locale sensitivity for the feature_name parameter, providing essential behavioral context beyond a simple read 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 brief intro, return fields, usage context, and parameter details. It is fairly long but each sentence adds value. Slightly more concise formatting could improve readability, but it is not verbose.
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, no output schema, and no annotations, the description is highly complete. It explains return values, differences in execution contexts (add-in vs COM), and parameter specifics, fully covering what the agent needs 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 input schema has 0% coverage (no description for the parameter). The description compensates fully by explaining that 'feature_name' must be the exact name from get_active_part_info, verbatim, locale-sensitive, and never translated. This adds critical 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 'read a built feature's definition' and lists specific return fields (name, type, found, through, depth_mm, internal, source). It is specific and distinguishes from siblings like get_feature_inventory or get_active_part_info by focusing on describing a single feature's definition.
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 context by stating it is 'used by verify_build_report to tell a through-hole from a blind one and read its depth'. It also explains the rich path vs COM driver degradation. However, it does not explicitly state when not to use this tool or mention alternatives, though 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.
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 provided, so description covers all behavioral aspects: no rebuild, effect on other tools, return value (editing=True), and caution about sketch staying open. Also mentions specific future behavior (SW 2026 ES). 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 text adds length, but each sentence adds value. Front-loaded with purpose, then usage, argument, return, warnings, and related tools. Minor redundancy due to translation 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?
Despite no annotations or output schema, the description covers all essential information: purpose, usage, parameter, return, behavior, warnings, and related tools. Nothing significant 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?
The schema has 0% description coverage, but the description adds the parameter's meaning: exact sketch name with an example ('Croquis1'). 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 the verb (reopen/edit), resource (sketch), and scope (without rebuilding). It distinguishes from siblings like create_sketch and modify_dimension, making the tool's 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?
Explicit when-to-use (editing existing sketch) and when-not-to-use (alternatives like modify_dimension for dimensions). Includes a typical CSWA use case and warns that the sketch remains open until a consuming operation closes it.
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?
With no annotations provided, the description fully discloses behavioral traits: it suppresses redraw, feature tree, and rebuild during processing, performs one rebuild at the end, and enforces all-or-nothing semantics with rollback on failure. It also details the verify parameter options and advises against per-feature rendering. The return structure for both success and failure is described, providing complete 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 structured with a main explanation, an English summary, an Args section, and additional notes on semantics and return values. It is comprehensive but not overly verbose, though it could be slightly more concise. The key concept is front-loaded, and the organization 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 no output schema, the description thoroughly covers return values, error handling, and behavioral aspects. It provides all necessary information for correct usage, including restrictions on operations and the all-or-nothing rollback mechanism. The sibling tools list includes many individual low-level operations and composite builders, and this tool's description clearly positions it as the batch primitive complementing those.
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, so the description carries full burden. It adds crucial semantics: ops must be an array of objects with 'tool' (protocol operation name) and 'args' (matching exact parameter names), and clarifies which operations are allowed. verify is explained with its 'summary' vs 'none' options, and rebuild is described regarding rebuild suppression. This far exceeds the schema's minimal information.
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 a single pass, following a 'compile once, build once' approach like build123d. It distinguishes from separate calls by emphasizing efficiency gains, and explicitly states that it cannot invoke arbitrary API or composite build_* operations, making its purpose very specific and distinct from sibling 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 provides explicit guidance: use this tool instead of N separate calls for efficiency, ensure each operation is a protocol operation (not composite or perception/IO), and avoid nesting batch calls. It explains the parameters rebuild and verify with appropriate defaults and recommendations. However, it does not explicitly state when not to use it beyond the restrictions, which is sufficient for an advanced tool.
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. It clearly states prerequisites (active sketch, intersecting material), failure behavior (sketch reopened), and caveats (bug with reference planes in up_to_surface). Returns a Feature with name, type, dimensions.
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 (Args, Returns, Caveat, Failure recovery, Example, Related composites) and front-loaded with the core action. It is somewhat verbose given the complexity but remains organized and 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 the tool has 9 parameters, no output schema, and complex interactions, the description covers all necessary context: failure modes, edge cases, parameter dependencies, return value, and even a known bug workaround. It is thoroughly 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 provides detailed explanations for all 9 parameters, including meaning, defaults, interactions (e.g., depth_mm ignored for certain end_conditions), and workarounds. This far exceeds the baseline expectation.
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 cuts material from a part, exiting the active sketch. It provides specific verb+resource ('cut material from the part') and distinguishes from siblings like extrude_sketch (adds material) by contrast in examples.
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 extensive guidance on when to use each end_condition with examples (bolt holes, slots, etc.) and mentions related composites (build_rectangular_pocket, add_bolt_circle). It does not explicitly state when not to use this tool vs alternatives but covers usage context well.
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?
With no annotations, the description fully carries the burden. It discloses the sketch is closed after extrusion, the feature is a new solid, the effect of reverse_direction on face-anchored sketches, merge behavior, and the return type (Feature with name, type, dimensions). It also warns about open/self-intersecting profiles and automatic re-opening on failure.
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 headings (Args, Returns, Caveat, Failure recovery, Example) and is front-loaded with the main action. While every sentence adds value, it is somewhat lengthy; minor trimming could improve conciseness 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 details the return value (Feature with name, type, dimensions). It covers prerequisites (closed profile), failure modes (reopening), and provides two examples showing typical usage and advanced multi-body case. Complete for a mutating 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%, so the description must compensate. It thoroughly explains each parameter: depth_mm (positive), end_condition (blind vs. through_all with note that depth_mm ignored), reverse_direction (default direction and gotcha for face-anchored sketches), and merge (default True, when to use False for multi-body). Examples illustrate usage, 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 exits the active sketch and extrudes it as a boss (solid) feature. It distinguishes itself from siblings like build_flange_boss (which combines sketch and extrude) and explicitly mentions other related tools (revolve_sketch, sweep_sketch, shell_part) and a missing feature (loft).
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 the tool: after creating a sketch with at least one closed profile. It details failure recovery (sketch reopens on failure) and offers alternatives (e.g., use build_flange_boss for combined sketch+extrude, not for loft). It also explains parameter nuances like merge=False for multi-body workflows.
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?
With no annotations, the description carries full burden. It discloses failure modes (midpoint mismatch, radius too large), non-parametric nature, batching advice to avoid body name shifts, and propagation behavior (tangent_propagation). 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 front-loaded with purpose and key usage, followed by structured sections: selector explanation, args, returns, failure modes, caveats. Every sentence adds value, and the length is justified by 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 covers inputs, failure modes, and caveats adequately. It lacks details on the return object beyond name and type, and omits the 'edge_circles' parameter. Slight incompleteness for a complex 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 the description adds extensive semantics for most parameters: typical radius values, selector schema, edge_midpoints usage, edge_indices format, tangent_propagation effect. However, the parameter 'edge_circles' (present in schema) is not mentioned in the description, leaving a 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 'fillet (round) one or more edges, constant radius' with specific verb and resource. It distinguishes from sibling 'fillet_all_edges' by focusing on specific edges and explains alternative edge addressing methods (selector, edge_midpoints, edge_indices).
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 selector vs edge_midpoints vs edge_indices, including recommendations (e.g., 'selector recommended') and exclusions (e.g., variable-radius deferred). It also explains mutual exclusivity of selector and edge_* args.
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?
Despite no annotations, the description discloses critical behavioral traits: non-parametric nature (re-radiusing requires deleting the feature), tangent propagation collapsing edges, and the return format. It also explains edge filtering behavior for circular edges. These details exceed what annotations typically provide.
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: a brief summary, usage context, detailed parameter explanations with defaults and recommendations, return format, caveats, and examples. Every sentence adds necessary value without redundancy, and the structure is front-loaded with the core 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 output schema, and no annotations, the description is highly complete. It covers all parameters, return value explicitly with field names and types, caveats about non-parametric behavior and feature collapse, and three practical examples. It also incorporates domain-specific context (ISO 8062, autoparts).
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 explaining every parameter: radius_mm default and recommended ranges for different contexts, tangent_propagation behavior, min_edge_length_mm skip logic, body_name scoping, and include_arcs rationale. This provides actionable 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's purpose: 'fillet every edge (linear and circular by default)' and frames it as a composite for 'redondea todo' in one call. This specific verb+resource differentiates it from the sibling 'fillet' tool, which likely handles selective 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 when-to-use guidance with domain-specific examples like cast/forged parts, structural brackets, and plastic injection-molded parts, including suggested radius ranges. However, it does not directly contrast with the sibling 'fillet' tool or specify when not to use this tool, slightly limiting guidance.
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?
Discloses that components are top-level only (no recursion) and lists all included metadata. Being a read-only query, no side effects are expected, but the description could note it's safe. Still, transparent given no 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?
Two succinct sentences: first states purpose and contents, second provides usage guidance. No fluff; 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?
Without an output schema, the description lists key return fields (name, flag, configurations, components, mates). Lacks format details but sufficient for an agent to understand what entities exist. Could be more precise about return structure.
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% with zero params. The description adds meaning by explaining what the tool returns, but parameter semantics are trivially satisfied due to absence.
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 metadata about the active SolidWorks assembly, listing specific items like assembly name, modified flag, and configurations. It distinguishes from siblings like get_active_part_info by focusing on assemblies.
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 advises calling before mate/suppression/configuration operations so the LLM knows existing entities. No alternative tools mentioned, but the guidance is direct and actionable.
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?
With no annotations, the description carries full burden. It explains it returns metadata without side effects. While it doesn't explicitly state 'read-only', the context of returning information implies no modifications.
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 sentences: first states purpose, second details content, third gives usage guidance. Front-loaded, no redundant 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 parameters, no output schema, and no annotations, the description fully covers what the tool returns and its intended use case, including a specific reference to extrude_cut. Complete for a read-only query 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, so schema coverage is 100%. Baseline for 0 parameters is 4, and description adds no additional parameter details as none are 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 it returns metadata about the active SolidWorks part, listing specific data (part name, modified status, features with dimensions, solid bodies). It distinguishes itself from siblings like get_active_assembly_info and other inspection 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 says when to use it: 'Use this to inspect what's in the current part before suggesting modifications' and to discover body names for extrude_cut. It implies not to use for assemblies, referencing a sibling tool.
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?
With no annotations provided, the description fully carries the burden. It states read-only behavior, lists all return fields with types and units, explains multi-body union behavior, and includes an example with assertions. This is 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 yet complete, front-loading the purpose and read-only nature, followed by a structured list of return values, behavioral notes, use cases, and an example. 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?
Given no output schema, the description thoroughly explains the return format, units, multi-body handling, and coordinate frame. The example demonstrates practical usage, making the tool easy 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?
The tool has zero parameters and the schema is empty. Per guidelines, this earns a baseline of 4. The description does not need to add parameter information since none exist.
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 retrieves the overall axis-aligned bounding box of the active part or assembly in mm, and explicitly declares it as read-only. This distinguishes it from sibling tools like get_mass_properties or 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 provides three common use cases (stock selection, sanity check, nesting) that indicate when to use the tool, but does not explicitly mention when not to use it or compare it to alternative tools. However, no direct alternative exists 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 covers behavioral traits: read-only nature, handling of unknowns ('through=None over COM'), occluded cuts needing verification via other tools, and the bores inventory derived from face geometry. 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 detailed and well-structured but slightly verbose. It front-loads the purpose and then elaborates on specifics. Every sentence adds value, though minor trimming 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 complexity of the tool and absence of output schema, the description thoroughly explains the return structure: per-feature fields, bores fields, and edge cases (unverified, occluded). It covers all necessary 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?
No parameters are defined, so schema coverage is 100%. The description adds no parameter info since none exist, meeting the baseline of 4.
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 'Inventario completo de operaciones — one read of EVERY feature in the tree' with detailed per-feature info and a separate bores inventory. It distinguishes from siblings like describe_feature or list_faces by its comprehensive scope.
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 advises to 'USE BEFORE modifying any multi-feature part' and provides a workflow: enumerate, modify, re-call, confirm. This gives clear context for when to use, though it doesn't explicitly mention alternatives.
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?
No annotations provided, so description carries full burden. It states read-only behavior, caveat about default material, and details the return fields with units. It could mention performance or side effects, but for a read-only tool this is 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 well-structured with a summary line, detailed return fields, caveat, common use cases, and an example. Every sentence adds value and it is 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?
Despite having no output schema, the description thoroughly explains the return dictionary with units, field names, and interpretation. It also provides common use cases and prerequisites, making it complete for a zero-parameter 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?
There are no parameters, so description does not need to add param info. Baseline for 0 parameters is 4.
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 reads mass properties for the active part or assembly. The verb 'get' and resource 'mass properties' are specific, and it distinguishes from sibling tools by being a read-only query 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?
It explicitly mentions it is read-only, works on both part and assembly, requires a material to be set, and provides a common usage example with set_material. It does not explicitly list alternatives, but context is clear enough.
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?
No annotations provided, but description fully covers behavioral traits: requires Toolbox, errors on missing add-in, auto-undo on depth overconsumption, face-centroid validation, and return value 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?
Well-structured with overview, args, returns, caveats, examples. Slightly verbose with bilingual content but earns its place with 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 complexity (6 params, no output schema), description covers all aspects: parameters, return format, prerequisites, limitations, alternatives, and examples, thus 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 has 0% description coverage; description compensates fully by explaining each parameter in detail (valid values, dependencies like depth_mm for blind, thread_class default/ignored), including examples.
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 it drills ONE standard ISO Metric hole (tapped or counterbore) on a face, distinguishing it from siblings like add_bolt_circle and extrude_cut for multi-hole or clearance scenarios.
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 (single hole at face centroid) and when-not (multi-hole patterns, clearance holes), with explicit alternatives (add_bolt_circle, extrude_cut). Also mentions prerequisite (Toolbox add-in) and gives examples.
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 ASSEMBLY_DESIGN.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 carries full burden. It discloses that the first component is auto-fixed, subsequent components require mates, and floating components are invalid. It also states the return type (instance metadata). It lacks details on error handling or permissions but provides essential behavioral context.
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 primary purpose and important caveat. The parameter list is clear but slightly verbose. Overall, every sentence adds value, but the parameter descriptions could be more compact.
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 role in a complex CAD workflow, the description covers the insertion action, critical mating requirement, parameter details, return value, related tools, and a reference to full workflow documentation. It provides sufficient 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?
Schema coverage is 0%, so the description fully explains each parameter: file_path, x_mm/y_mm/z_mm (insertion point), and config_name. It adds meaning beyond the schema by specifying file type (.sldprt or .sldasm), coordinate frame (assembly frame), and default behavior for config_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 inserts a part or sub-assembly into the active assembly at given XYZ coordinates. It distinguishes from sibling tools like place_and_mate and the various mate tools by emphasizing that this tool only inserts and does not mate.
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 when to use this tool and what additional steps are needed. It warns that insert_component alone does not finish the job, explains the auto-fix for the first component and the need for mates thereafter, and suggests calling get_active_assembly_info or asking the user if mating entities are unclear.
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?
No annotations are provided, so the description carries the full burden. It thoroughly discloses behavioral traits: constraints on spacing (positive), count (≥2, includes original), reverse parameter, direction reference sources (e.g., Eje1, linear edge, sketch line), and locale sensitivity. It also describes the return value (new pattern Feature with name, type, dimensions). 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: one-line summary, use-case context, detailed parameter descriptions with bullet points, and a concrete example. Every sentence adds value without redundancy. It is appropriately sized 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 the complexity (5 parameters, no output schema, no annotations), the description is highly complete. It covers all parameter constraints, return value details, and even locale sensitivity. The example demonstrates usage with a related tool. No additional information is needed 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 the description must fully explain parameters. It does so in detail: feature_names (exact names from get_active_part_info with example), direction_reference (preferred source create_reference_axis, alternatives), spacing_mm (must be positive), count (including original, ≥2), reverse (default false). The example ties it all 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 linear pattern of features in a single straight line. It specifies typical use cases (hole rows, fin arrays, bolt grids) and distinguishes from potential siblings like circular_pattern by noting 'single-direction only in v1'. The verb 'pattern' and resource 'features' 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 explains when to use this tool (single-direction linear patterns, defaults for certain part types) and notes that the second-direction variant is deferred. It does not explicitly list alternatives or when not to use, but provides enough context with the example and mention of deferred feature. Sibling tools like circular_pattern are listed elsewhere, but not referenced in the description.
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?
No annotations are provided, so the description bears the full burden. It reveals that the tool returns a JSON with tool_count and tools array, and emphasizes it is authoritative and live. While it does not detail edge cases or failure modes, it gives sufficient behavioral context for a simple inventory 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 compact, using a bilingual format (Spanish and English). Every sentence adds purpose or usage guidance. Slight redundancy due to bilingual repetition, but still 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 tool's simplicity (zero params, no output schema), the description completely explains its purpose, return structure, and usage context. No gaps remain for the intended use case.
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 zero parameters with 100% coverage (empty). The description adds value by specifying the return format, compensating for the lack of output schema. It explains what the caller gets, which is 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 an authoritative live tool inventory listing only names. It distinguishes itself from siblings by noting that full descriptions already ship with tools/list, so this call confirms the surface without duplicating 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: call this to confirm the live surface or an exact tool name without re-paying for docstrings. Implicitly suggests not using it when full descriptions are needed, but no explicit 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.
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 behavior: lists all dimensions from operations and sketches, includes assembly mate dimensions in active assembly, notes internal component dimensions require opening the part, and highlights caveats about renamed dimensions and angular sketch dimension reporting.
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 paragraphs, front-loaded purpose, and no redundant sentences. Could be slightly more concise, but overall efficient for the amount of information conveyed.
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 describes return format with structured details, explains behavior in different contexts (assembly vs part), and covers edge cases. No output schema, but description compensates completely.
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 schema coverage is 100% vacuously. Baseline is 4 per guidelines. The description does not need to add parameter info but provides context about the tool's function.
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 lists all dimensions from the active document, specifying it includes operations and sketches with exact path, value, and units. It differentiates from siblings like modify_dimension and add_sketch_dimension by framing it as a discovery step for conversational editing.
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 (discovery step before modification), provides precise instructions for mapping spoken values to dimensions, and mentions to pass results verbatim to modify_dimension. Also notes it is read-only, giving clear context for usage.
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 provided, the description fully discloses behavioral traits: return structure, durability of indices, midpoint behavior (None for closed loops), and the caveat about coordinate matching. This exceeds what annotations would typically cover.
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 clear sections for return fields, args, use case, caveat, and example. It is front-loaded with the purpose, and each sentence adds value, though some fat could be trimmed.
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, output schema exists), the description fully covers the return structure, durability, usage context, and example. It is complete for an agent to use effectively.
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 single optional parameter 'body_name' is well explained: if given, return edges of only that body; otherwise, return edges of all solid bodies. This adds meaning beyond the schema's type 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 the tool enumerates edges of solid bodies, with a specific verb ('Listar' and 'enumerate') and resource ('edges of one or all solid bodies'). It distinguishes itself from sibling tools like list_faces or list_dimensions by focusing exclusively on 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 explicitly describes the use case as a pre-fillet/pre-chamfer LLM workflow, providing clear context. It does not explicitly state when not to use it or compare to alternatives, but the context is sufficient for the agent to infer appropriate usage.
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 the description fully handles transparency. It details non-durability of indices, field omissions based on face type, and explains when fields may be None. The example demonstrates expected output 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-organized into sections (summary, fields, args, use case, caveat, example). Every sentence adds value with no redundancy. It is detailed yet not overly verbose.
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 face geometry enumeration and the presence of an output schema, the description covers all needed aspects: return fields, parameter usage, durability, examples, and integration with other tools. It is 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?
The single parameter 'body_name' is clearly explained: optional, filters to a specific body if given, otherwise returns faces from all bodies. This adds essential context beyond the schema's default value.
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 enumerates faces of solid bodies. It explicitly differentiates itself as a mirror of list_edges, and the verb 'list' accurately describes the action.
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 use case is provided (chained-feature LLM workflow) with an example. It also includes a caveat about non-durable indexes and advises against caching centroids across edits, guiding proper usage.
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?
Discloses that the data is in-memory and clears on server restart (transient nature). Does not claim side effects, and the return format is fully specified. No annotations exist to carry 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?
Bilingual but still concise with only three sentences plus return format. One redundant translation can be excused for inclusivity.
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 fully specifies return structure and behavioral traits (in-memory, clears on restart). Complete for its 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 in schema, so no additional info needed. The description is complete for zero-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 it returns plans recorded in the current session for debugging. It specifies the four types of plans (assembly plans, feature plans, batch jobs, macro jobs) and distinguishes itself from sibling record/run tools as a retrieval 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 says 'useful when LLM forgets a plan ID' providing clear usage context. While it doesn't explicitly list when not to use, the debug-aid framing and sibling tool set provide sufficient guidance.
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?
Since no annotations are provided, the description fully discloses behavior: it explains the geometry_pattern parameter (exact copy vs recompute), lists acceptable plane aliases including bilingual support, and describes the return value with an example.
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, front-loaded with purpose, and structured with clear Args and Returns sections. 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?
Despite no annotations and no output schema, the description fully covers all aspects: parameter types, allowed values, behavioral nuances, return value, and a practical example. It is sufficient for an agent to invoke 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 has 0% parameter description coverage, but the description provides detailed semantics for all three parameters: feature_names requires exact names from get_active_part_info with examples, mirror_plane lists all acceptable forms (default plane aliases, user planes, planar face names), and geometry_pattern explains its behavioral impact.
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 mirrors features about a plane or planar face, with specific use cases for symmetric geometry. It distinguishes from sibling tools like linear_pattern or circular_pattern which create pattern copies, not mirrors.
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 use cases (symmetric brackets, mirrored mounting bosses) and states it's for parts where half is modeled. It does not explicitly mention when not to use or list alternatives, 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.
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?
No annotations are provided, so the description carries the full burden. It indicates the tool modifies a dimension and returns updated state, but does not disclose error handling, side effects, or requirements (e.g., feature must exist). Some unit context is given but behavioral details are lacking.
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, front-loads the purpose, and uses a clear argument list. It is slightly verbose with examples but overall efficient and 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?
Given the complexity (3 required params, no output schema, no annotations), the description covers basics but lacks depth. It does not explain what happens if the dimension is invalid, locked, or suppressed. Adequate but leaves 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 explains all three parameters with examples and unit guidance (mm for linear, degrees for angles). It adds significant value beyond the schema's bare titles, though ranges or exact format are absent.
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: 'Change a single dimension on a feature.' It specifies the resource (dimension) and the action (change), and distinguishes from sibling tools as the only one modifying 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 in active part or assembly with examples, but does not explicitly state when to use this tool versus alternatives, nor provides exclusions or prerequisites. Guidance is minimal.
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?
Despite no annotations, the description fully discloses behavior: it uses IComponent2.Transform2, rebuilds, and returns requested vs post-rebuild pose plus a 'moved' boolean. It warns that 'moved=False' indicates the component is fixed or mate-driven, revealing a critical edge case.
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 a brief purpose, detailed args, and return info. However, includes Spanish phrase 'Mover componente' which is redundant given the English title. Otherwise concise 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?
The description is complete for a 3-parameter tool with no output schema and no annotations. It explains the return value, edge case of failed movement, and prerequisites (component name from get_active_assembly_info). No gaps remain.
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 adds complete meaning for each parameter: component_name is an instance name from get_active_assembly_info, origin_mm is [x,y,z] in mm, rotation_rows is optional 9-element row-major 3x3 entries with None defaulting to current rotation.
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 sets a component's pose (position and optional rotation) via IComponent2.Transform2, followed by a rebuild. It distinguishes from siblings by mentioning the mirror-flip failure mode elimination when posing before mating, which is unique to this 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 advises using this tool to stage a component at its exact pose before creating mates, explaining that angle and distance mates have two solutions and posing first eliminates the mirror-flip failure. It also references the alternative tool 'place_and_mate' for the combined operation.
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, the description carries full burden. It discloses that it creates and activates a new empty assembly using a default template, returns a dictionary with specific fields, and notes that it does not launch SolidWorks. It does not mention potential side effects like unsaved changes, but for a 'new' operation this is acceptable.
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 three sentences in Spanish and English, front-loaded with the main purpose, includes return value specification and a caveat. No wasteful 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?
Given no parameters, no output schema, and no annotations, the description is complete: it explains what the tool does, what it returns, and a prerequisite. It covers all needed information for an agent to decide and 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?
The input schema has zero parameters, so the description does not need to explain parameters. Baseline for 0 parameters is 4. The description adds no parameter information since none exist.
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 uses a specific verb 'Crear' (Create) and resource 'ensamble nuevo y vacío (documento .SLDASM)' and explicitly distinguishes it from siblings like new_part by specifying it's an assembly. It clearly states the purpose as the starting point for inserting components and mates.
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 context: it is the starting point for assembly creation. It includes a caveat that SolidWorks must already be running, which is a usage prerequisite. However, it does not explicitly state when not to use it or mention alternatives among siblings.
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 present, so description carries full burden. Discloses creation and activation, default template usage, return values, and caveats about legacy creation and need for running SolidWorks. Lacks details on error handling but covers key behaviors.
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 well-structured: summary, usage guidance, return type, caveat. Each sentence adds value. Slightly longer due to translation but still 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 zero-parameter tool with no output schema, description covers purpose, usage, prerequisites, and return format completely. 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?
No parameters, so baseline is 4. Description adds context about template usage but no parameter info needed. Schema coverage is 100%.
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 action ('Crear una pieza nueva y vacía') and the resource (SolidWorks .SLDPRT document). It distinguishes from siblings like 'new_assembly' and geometry tools that require an active part.
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 no part is open or starting fresh, and that geometry tools need an active part. Also notes that SolidWorks must already be running, providing clear context.
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 (mensaje incluye la pista del Escritorio de Spanish-Windows + OneDrive). - 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.
En Windows en español con OneDrive, el escritorio del cliente es
C:\Users\<user>\OneDrive\Escritorio, NOC:\Users\<user>\Desktop. Si el usuario dice "abre la pieza del escritorio" sin path, usa la ruta de OneDrive\Escritorio.
Example — abrir una pieza guardada y verificar: open_document(r"C:\Users<user>\OneDrive\Escritorio\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, the description fully discloses behavior: auto-activation, type inference from extension, returns a structured object, raises specific errors (ValueError, SolidWorksError for various conditions), and caveats about using OpenDoc (not OpenDoc6) and duplicate name behavior. It also provides a warning about OneDrive path discrepancy. 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 sections (main description, args, returns, raises, caveat, example) and uses both Spanish and English. It is somewhat verbose (e.g., repeating type info in args and returns) but every sentence serves a purpose. It is front-loaded with the primary function. A slightly tighter rewrite 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 (SolidWorks document handling), no output schema, and no annotations, the description is complete. It covers return values, error conditions, behavioral caveats, and integration with active document tools. The example demonstrates typical usage. The agent has enough information to invoke 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 single parameter 'path' has 0% schema description coverage, so the description must add meaning. It does so extensively: path must be absolute including extension; extension determines document type; lists valid extensions and their types; warns about invalid extensions; provides example path; and explains OneDrive path handling. This goes far 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: opening an existing SolidWorks document by absolute path. It specifies supported file types (.SLDPRT, .SLDASM, .SLDDRW) and mentions that the document becomes active, directly relating to sibling tools like get_active_part_info. The verb 'Abrir' (Open) and resource 'documento de SolidWorks existente' are specific and not tautological.
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: it is for modifying saved parts without rebuilding from scratch. It also includes a caveat about OneDrive paths for Spanish Windows. However, it does not explicitly contrast with sibling tools like new_part or close_active_document, though the active document effect implies its role in a workflow. A clear when-to-use vs alternatives is missing, but the guidance is still strong.
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?
With no annotations, the description fully discloses critical behaviors: bistable nature of angle/distance mates, rebuild flipping risk, and the purpose of the pose_held check. This provides deep insight into the tool's 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 summary, then detailed explanation, then an Args list. It is slightly verbose but every sentence contributes value. Could be tightened slightly without losing 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 complexity (combined position + mate) and lack of output schema, the description covers the purpose, parameters, and behavioral output (pose_held check). It could detail the return structure more but is largely 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% description coverage, but the description adds detailed meaning for each parameter, including the structured format for mates with fields like type, entity1_id, align, etc. This compensates fully for the 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 the dual action: 'pose a component exactly, THEN create its mates.' This distinguishes it from sibling tools like add_*_mate and move_component, which only handle one aspect.
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 'branch-safe mating recipe' explains when to use this tool (for precise positioning before mating) and what to look for after (pose_held flag). It lacks explicit 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.
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?
No annotations are provided, so the description carries the full burden. It discloses read-only behavior, search mechanism (token-based, accent-insensitive, etc.), and combinable filters. It also describes the return structure. This is adequate for a query tool, though no rate limits or side effects are mentioned.
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 concise but contains bilingual text (Spanish summary and English Args). The structure is logical, front-loading the purpose and then detailing parameters. Some sentences could be trimmed 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 the complexity (8 parameters, no output schema), the description covers the necessary context: search functionality, filter combinations, prerequisite, and return fields. It is sufficiently complete for an agent to understand the tool's capabilities and limitations.
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. It provides detailed explanations for each parameter in the Args section, including examples ('p.ej. 'buje balero'') and constraints ('la pieza debe tener un barreno de este Ø'). 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 searches for similar parts in the local catalog, using a specific verb and resource. It distinguishes the tool's purpose from siblings like 'search_part_catalog' by focusing on local indexed parts, but does not explicitly differentiate. The Spanish summary adds 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 mentions a prerequisite ('run build_part_index first') and that it is read-only. However, it lacks explicit guidance on when to use this tool versus alternatives like 'search_part_catalog' or when not to use it. The usage context is implied but not fully explicit.
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?
The description explicitly declares it is read-only ('asesoría: no muta nada') and provides detailed behavioral constraints: skeleton must be the fixed component, each component must have at least one mate, confidence scale, etc. Since no annotations are provided, the description fully bears the burden and does so excellently.
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 bullet points for parameters and clear separation of Spanish and English sections. It efficiently uses sentences to convey necessary detail, though slight trimming could improve brevity.
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 parameters, nested objects, no output schema), the description is highly complete. It covers parameter details, behavioral constraints (e.g., no mates block run), and even describes the return value structure, exceeding what is minimally required.
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 thorough explanations for most parameters: intent, skeleton (with structure), components (with nested fields), save_path, confidence scale, and use_active_assembly. However, the 'assumptions' parameter is not described, 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 a structured assembly plan (SKELETON → list of parts → plan of mates) and is advisory only, distinguishing it from sibling tools like run_assembly_plan. It uses specific verbs and resources, making the 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?
Explicitly states when to use ('before touching SolidWorks'), that it's only advisory, and directs to show plan to designer then execute with run_assembly_plan. Also notes that components with no mates or required params block run_assembly_plan.
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 clarifies that the tool is non-mutating (dry-run), returns preview and warnings, and notes constraints like geometry not being transmitted and network path warnings. It could add more about permissions or side effects, but overall is 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 detailed but well-structured with bullet points and clear sections for arguments and return value. It is informative without being excessively verbose, though some minor redundancy exists (e.g., repeating the preview cap in args and return). Still, 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 (8 parameters, no output schema), the description covers inputs, behavior, and output structure thoroughly. It lists return fields (batch_job_id, matched_files, preview, etc.) and explains the advisory nature. An agent can fully understand how to invoke and interpret 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%, so the description must compensate. It does so by explaining all 8 parameters in detail, including examples for 'intent', 'fileset', 'operation', and describing defaults and behaviors for 'save_after', 'continue_on_error', 'out_dir', 'confidence', and 'preview_cap'. 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 the tool's purpose: to register a batch job and return a dry-run preview without mutating data. It uses specific terms like 'Registra un BatchJob' and 'VISTA PREVIA EN SECO' and distinguishes from the sibling tool 'run_batch_job' which executes the batch.
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 this tool: to get a preview for human approval before executing with run_batch_job. It says 'Revísala; luego ejecútalo con run_batch_job', providing clear guidance on workflow and alternatives.
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?
No annotations are provided, so description carries full burden. It explicitly states 'Advisory only: does NOT mutate SolidWorks', clearly disclosing the non-mutating behavior. It also describes return values and the role in the pipeline, offering 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?
Description is fairly long but well-structured, starting with purpose and key note, then listing args, then returns. It is front-loaded with the most important information. A bit verbose but justified by the number of parameters.
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 purpose, behavior, usage, all parameters, and return values. It references a document for more info. For a complex tool with 11 parameters, this is complete and provides all necessary 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?
With 0% schema coverage, description compensates fully by providing detailed parameter descriptions, including structure, allowed values, and notes. Each parameter is explained with examples and constraints (e.g., archetype options, internal_features types). 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?
Description clearly states the tool records a structured drawing spec and distinguishes it from sibling tools by noting it is advisory-only, non-mutating, and part of a pipeline (compile_feature_plan_from_drawing_spec -> run_feature_plan). It also mentions the legacy path, providing specificity.
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 explains when to use the tool (to record a parsed spec for deterministic build) and what it does not do (does not mutate SolidWorks). It references a pipeline flow but does not explicitly list alternatives or when not to use it. Still, the context and explicit mention of legacy path provide good guidance.
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 carries full burden. It discloses key behaviors: the tool is advisory-only, does not execute, intentionally crosses constraint #2, and blocks execution if '<required>' is in the source. It also describes the return object shape. Minor deduction for not stating idempotency or side effects, 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?
The description is somewhat verbose and includes bilingual repetition (Spanish and English). It is structured with an 'Args' section and front-loaded key points, but overall length could be reduced without losing essential information. The structure is clear but not highly 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 provides purpose, parameter details, behavioral notes, and return object shape. However, it omits documentation for the 'assumptions' parameter, does not describe error handling, and lacks explicit guidance on handling the '<required>' blocking. It is adequate but not fully 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?
Schema coverage is 0%, so description compensates. It documents 5 of 6 parameters with specific semantics: intent (sentence describing macro), generated_source (full VBA body, .swb format), proc_name (default 'main'), provenance (structure for audit), confidence (0-10 affects recommendation). The missing 'assumptions' parameter is a gap, but the described parameters are rich and helpful.
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's purpose: registering a VBA macro job for advisory purposes only. It distinguishes itself from sibling 'run_macro_job' by emphasizing it does not execute and that human review of 'generated_source' is required. It also explains the design rationale of crossing constraint #2, providing unique 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 clearly indicates this tool is for recording/advisory only ('Solo asesoría: NO ejecuta nada') and directs the agent to use 'run_macro_job' for execution. It implies use cases outside the verb catalog but does not explicitly state when not to use it or provide alternatives beyond the execution sibling.
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?
Despite no annotations, description discloses that it removes material (subtractive), gives parameter constraints (axis_name same as revolve_sketch, angle_deg range, reverse_direction), return type, and an example. Does not cover error conditions or prerequisites in depth, but adequate for a straightforward cutting 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?
Description is concise (~120 words), well-structured with title, explanation, use cases, parameter list, return type, and 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?
Covers input constraints, use cases, example, and return type. References sibling revolve_sketch for axis constraints. Does not explicitly require an active closed sketch, but example implies it. Adequate for the tool's simplicity.
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, description adds significant meaning: axis_name must come from create_reference_axis, angle_deg range (0,360] with default 360 and typical full-circle use, and reverse_direction flips sense. Example further clarifies 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?
Description clearly states the tool removes material by sweeping a closed sketch profile around an axis, using specific verbs and resource. It distinguishes from revolve_sketch by noting it is subtractive.
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 specific autoparts use cases (O-ring grooves, retaining-ring grooves, etc.) and notes it is a mirror of revolve_sketch but subtractive. Could be improved by stating when not to use or comparing to alternatives like extrude_cut, but sufficient for domain context.
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?
With no annotations, the description fully discloses behavior: axis constraints, error conditions, merge behavior, return type (boss_revolve), D1 meaning, and a caveat about sketch parametric 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 front-loaded with purpose and includes a useful example. It is slightly verbose with bilingual repetition and parameter explanations that could be more terse, 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 no output schema, the description covers return type (boss_revolve), key dimension D1, and a critical caveat about non-parametric sketch dimensions. The example and parameter details make it fully complete for a 4-parameter 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%, but the description explains all four parameters in detail: axis_name with acquisition and constraints, angle_deg with range and examples, reverse_direction with impact, and merge with multi-body implications.
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 revolves a closed sketch around an axis, and provides a list of typical turned parts (shafts, bushings, flanges, etc.), distinguishing it from sibling tools like extrude_sketch or revolve_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 explains when to use (turned parts, full vs partial revolutions) and includes a caveat about axis placement and profile crossing. It does not explicitly exclude alternatives, 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.
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?
With no annotations, the description must fully disclose behavior. It states the tool restores all suspended operations and returns a specific value. This is transparent for a simple tool, though it does not discuss error cases or what happens if no rollback is active.
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 short sentences plus a return value example. It is front-loaded with the Spanish and English explanations, no filler. Every sentence is necessary and informative.
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 parameterless tool with no output schema, the description explains the purpose, the effect, and the return format. It is fully 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?
The tool has no parameters, so the description naturally cannot add parameter info beyond the schema. As per guidelines, zero parameters baseline is 4, and the description adds no extraneous information.
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 the feature tree forward to the end, undoing a prior rollback_to_feature. It uses a specific verb ('restaurar'/'roll forward') and explicitly references the sibling tool rollback_to_feature, making the purpose unmistakable.
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 use after a rollback_to_feature has been executed, but it does not explicitly exclude cases where no such rollback was done or compare with alternatives like undo. The context is clear but lacks explicit 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.
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?
No annotations provided, so description carries full burden. It states reversibility, that nothing is destroyed (nada se destruye), and that it suspends the feature and everything after. Provides clear behavioral context beyond basic read/write.
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 structured with separate sections for what it does, reversibility, args, returns, and related. However, it is bilingual (Spanish and English) adding some redundancy; 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 1 parameter and no output schema, description covers the return shape, mentions exact naming, and lists related tools. All necessary context for correct usage 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, but description adds example value 'Cortar-Extruir1' and specifies 'exact feature name'. This adds meaning beyond the schema's type 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?
Clearly states verb 'roll back' and resource 'feature tree to just BEFORE the named feature'. Distinguishes from deletion-based undo by calling it the 'no-deletion way', and names alternative rollback_to_end for restoration.
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 when to use: 'no-deletion way to undo a wrong feature'. Tells when not to use by mentioning alternatives: rollback_to_end for restore, set_component_suppression for assembly-level, undo as coarse not reversible.
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?
Despite no annotations, the description discloses extensive behavioral traits: sequential per-component execution, live per-step receipts, stop-and-report on failure with no deletion, final mate-count gate, and specific override behaviors. This fully compensates for 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?
The description is detailed but well-structured: main action, approval context, batch comparison, gate explanations, failure behavior, verification. Each section adds value without waste. Slightly longer than necessary but concise 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?
Given no annotations, no output schema, and moderate parameter count, the description is remarkably complete. It covers purpose, behavior, failure handling, verification, return value, and even provides an English translation. All essential aspects are addressed for correct 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?
With 0% schema description coverage, the description explains the two override parameters (override_unmated, override_low_confidence) in detail, including their interdependence and effects. assembly_plan_id is self-explanatory. The description 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 the tool runs/executes an AssemblyPlan with specific behavioral details: inserting and mating components one by one, per-step receipts, and distinguishing from batch execution. The verb 'Ejecuta' and resource 'AssemblyPlan registrado' are explicitly mentioned.
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 this tool (human approval of assembly) and contrasts with sibling execute_batch, explaining why batch is unsuitable. Also explains gates for overriding recommendations and unmated components, providing clear context.
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?
No annotations provided, but description thoroughly discloses file-by-file execution, reporting of skipped files, return object keys (ok, changed, skipped, inspected, failed, manifest, failures, log_path), read-only verbs counted as 'inspected', and no deletion (deferred deletion). All behavioral traits are 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?
Description is somewhat lengthy due to bilingual content and detailed gate explanation, but it is well-structured with numbered gates and front-loads the main action. Could be tighter 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?
Covers overall behavior, return value keys, and gates adequately. Given no output schema, description provides necessary details but could elaborate on error cases (e.g., missing batch_job_id) or edge cases.
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 all three parameters: batch_job_id (implied the recorded batch job), override_warnings (gate 2 override for risky warnings), and override_low_confidence (gate 1 override). Adds essential 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?
Description clearly states 'Ejecuta un BatchJob registrado' (execute a recorded batch job) with specific verb and resource. It distinguishes from siblings like run_assembly_plan, run_feature_plan, and run_macro_job by emphasizing file-by-file application, complete manifest, and 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?
Description explicitly positions this as the human approval step and outlines three gate levels with conditions for override. It lacks explicit 'when not to use' but provides sufficient context via gates and references similar tool run_assembly_plan.
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?
Despite no annotations, the description reveals key behaviors: it is the human-in-the-loop approval, executes all mutating steps in one batch with deferred rebuild, runs verification once at end, and enforces gates for low confidence and unmodeled internal features with separate overrides. 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?
Description is dense but well-structured: purpose, workflow (both in Spanish and English), then two gate paragraphs. Every sentence adds value, no fluff. Could be slightly more streamlined, but 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 3 parameters, no schema description, no output schema, the description covers usage, gates, and return (verify_build_report). Missing a bit of detail on the exact return structure, but mentions it briefly. Complex tool with good 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?
Schema description coverage is 0%, but the description explains all three parameters in context: feature_plan_id (implied), override_low_confidence (force partial/handback plans), override_unmodeled_internal (build without unmodeled internal features). It also clarifies they are independent flags. However, no dedicated parameter descriptions, so slightly below perfect.
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 'Build a compiled FeaturePlan in ONE pass' and specifies it is the approval step for the whole build. It distinguishes from siblings like compile_feature_plan_from_drawing_spec and verify_build_report by providing a workflow (step 3).
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 a 4-step workflow with context for when to call this tool (after plan approval). Also explains when not to use: unresolved dimensions, partial_or_handback without override, unmodeled internal features without override. Provides clear alternatives for those cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_macro_jobA
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?
Given no annotations, description fully discloses creation of temp .swb, RunMacro2 execution, network egress block, audit logging, and return fields. Also explains four levels of gating with override 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?
Description is long and mixes bilingual text, purpose, process, and restrictions in a dense block. While front-loaded with purpose, it could be more concise and better 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?
Covers the full workflow, restrictions, audit log, and return format. Missing explicit parameter details and potential error handling, but sufficient for understanding execution and outcomes.
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 indirectly explains override_warnings and override_low_confidence via gate rules. macro_job_id is not explicitly described, though its purpose is clear from 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?
Clearly states 'Ejecuta un MacroJob registrado' and describes the process of materializing, running, and cleaning up. Distinguishes from sibling run tools by focusing on macro jobs with VBA execution.
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?
Mentions that this call represents human approval and details gate conditions, but does not explicitly compare to alternatives like run_assembly_plan or run_batch_job. Usage context is implied rather than explicit.
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?
Since no annotations are provided, the description fully discloses behavior: silent save (no UI dialogs), equivalent to Ctrl+S, required precondition (filename exists), return dict structure with specific fields, and exception types. No hidden behaviors.
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 and concise, using bullet points for the return dict and clear sections. Every sentence adds value. The bilingual content does not hinder 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 the simple save operation, no output schema, and no annotations, the description covers all necessary context: purpose, behavior, return values, error conditions, and alternative tool. It is 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?
The tool has zero parameters, so the input schema provides no semantic information. The description adds no parameter descriptions because none exist. With 0 parameters, baseline 4 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?
Describes exactly what the tool does: save the active SolidWorks document silently. Clearly distinguishes from the sibling tool 'save_as' by specifying that this tool only works if the document already has a filename, while 'save_as' is 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?
Explicitly states when to use (document must have a filename) and when not to use (fresh document), and provides a direct alternative: 'save_as'. Also explains error conditions when no document is active or unsaved.
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 autoparts use: scripted runs that build a part from scratch, save it to a customer-controlled directory, and hand off the path to a downstream step.
Caveats:
The parent directory must exist; save_as does NOT mkdir.
En Windows en español con OneDrive (la configuración típica del cliente PYME), el escritorio del usuario es
C:\Users\<user>\OneDrive\Escritorio, NOC:\Users\<user>\Desktop(esa ruta no existe). Si el usuario dice "guárdalo en el escritorio" sin path explícito, prueba primero la ruta de OneDrive\Escritorio. [en: On Spanish-Windows + OneDrive — the typical PYME setup — the user's Desktop isC:\Users\<user>\OneDrive\Escritorio, notC:\Users\<user>\Desktop(which doesn't exist). When the user says "save it to the Desktop" without an explicit path, try the OneDrive\Escritorio path first.]
Example — save a fresh part: save_as(r"C:\Users\danie\OneDrive\Escritorio\bracket_v1.SLDPRT")
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses: behavior for fresh vs. already-saved documents, sets filename for future saves, does not create directories, failure cases (wrong extension), and region-specific desktop path handling. Also describes return dict differences.
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 well-structured with bilingual sections, bullet points for args/returns/caveats/example. Some repetition between Spanish and English but acceptable for clarity. Not overly verbose given the content.
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 specifies return dict and its keys. Parameter is fully explained. Given the tool's simplicity (1 param, no enums), the description covers all necessary behavioral and contextual information.
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?
Single 'path' parameter is described in detail: must include extension, SolidWorks infers document type from extension, lists valid extensions and their types, and warns that wrong extension causes failure. Schema coverage is 0%, but description 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 that save_as saves the active document to an explicit path, contrasting with save_active_document which only works on already-named documents. It explicitly handles fresh, unsaved documents and sets the filename.
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 compares with save_active_document, stating when to use save_as (for fresh documents) and when to use save_active_document (for subsequent saves). Also includes caveats about directory existence and OneDrive path for Spanish Windows.
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?
With no annotations, the description fully discloses behavior: it does not download geometry, returns URLs and rankings, and provides fit verdicts and recommendations. It also explains follow-up actions (insert, edit, macro) and privacy constraints.
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 includes both Spanish and English versions, making it longer than necessary. Each sentence adds value, but the duplication reduces conciseness slightly.
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 covers purpose, parameters, return structure, usage guidelines, constraints, and alternative tools. It also explains post-search actions, making it 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?
Despite 0% schema coverage, the description provides detailed parameter documentation: spec includes type, standard, size, material, nominal, query; resources lists allowed values; top_n and needs_edit have defaults and explanations. This adds value beyond the plain 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 searches for standard parts in open catalogs and judges fit, distinguishing it from the sibling query_part_library. It provides specific examples of parts (tornillo, tuerca, etc.) and the mode of operation (deep-link).
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 clear when-to-use guidance: only when local library lacks the part and it's a standard. It names the alternative query_part_library and states constraints like abstracted text only, no customer geometry.
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?
Discloses key behaviors: validation up-front (raises if any missing), config switching optimization per scope, and return dict structure. No annotations provided, so description carries full burden; covers mutation but could mention reversibility 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 purpose, usage, params, returns. Bilingual (Spanish/English) adds redundancy; could be more concise by using one language. 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?
For a tool with 4 params, no output schema, and no annotations, description covers all necessary aspects: purpose, typical use, efficiency, parameter details, return value. 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 coverage is 0%, but description fully explains each parameter: component_names (source, validation), state (enum values with default), config_scope (enum values), config_names (conditional requirement). Adds 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 the tool changes suppression state of multiple components in one call, with a typical use case (trim-variant BOM prep). It distinguishes from sibling set_component_suppression by noting efficiency (switches config once per config_scope target instead of per pair).
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 guidance (suppress multiple components, more efficient than looping set_component_suppression), prerequisites (component_names from get_active_assembly_info, not empty), and conditional requirements (config_names needed with config_scope='specific').
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?
The description explains the effects of each state (suppressed: hidden, excluded from BOM; resolved: fully loaded; lightweight: graphics only) and config_scope options. With no annotations provided, this adds essential behavioral context. It does not mention prerequisites (e.g., active assembly) or side effects (e.g., performance implications), but overall it is transparent enough for an AI 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?
The description is somewhat verbose due to bilingual content (Spanish followed by English), but the English portion is well-structured with a clear purpose, usage, and parameter list. It is front-loaded with the core action. The bilingual redundancy could be trimmed for conciseness, but it remains functional.
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 4 parameters, no annotations, and no output schema, the description covers the states, scopes, and return value adequately. It lacks error handling or edge-case details, but the provided information is sufficient for typical use cases. The description is complete enough for an AI agent to invoke 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 input schema has 0% description coverage, so the description must compensate. It does so excellently by detailing each parameter: component_name source, state options with definitions, config_scope options, and config_names requirement with examples. This provides far more value than the schema alone.
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 with specific verb and resource: 'Cambiar el estado de carga de un componente' / 'Set a component's load state'. It provides concrete use cases (configuration variants, lightweight for large assemblies), making the tool's intent unambiguous and distinguishing it from siblings like set_components_suppression and set_mate_suppression.
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 typical usage scenarios: suppress/resolve for variants and lightweight for performance. This gives clear guidance on when to use the tool. However, it does not explicitly exclude cases where it should not be used or mention alternatives (e.g., set_components_suppression for batch operations), leaving some ambiguity.
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?
Discloses that all bound dimensions rebuild automatically, and explains units behavior. No annotations provided, so description covers key traits, though could mention additional side effects like write 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?
Concise and well-structured: purpose, typical usage, args, returns, raises. Every sentence adds value; 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?
Complete for a tool with 3 parameters, no output schema, and no annotations. Covers all necessary aspects for agent selection and 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 thoroughly explains each parameter: name must exist, new_value is numeric with units, and units is optional with preservation. 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 the tool modifies an existing global variable, distinguishing it from add_global_variable. The verb 'modificar/updates' and resource 'global variable' 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?
Provides a typical CSWA usage example and specifies prerequisites: variable must already exist. Implicitly tells when not to use (call add_global_variable first) and raises ValueError if not found.
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?
No annotations are provided, so the description carries the full burden. It discloses locale sensitivity, effects on mass but not geometry, and the return value. The caveat about changing material affecting mass/inertia is well-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 longer than average but well-structured with sections and bullet points. It is front-loaded with the main purpose and includes an example. Every sentence adds value, though some redundancy could be trimmed.
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 tool complexity (material assignment affecting downstream calculations) and absence of output schema, the description covers prerequisites, effects, return format, caveats, and usage examples. It is fully 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?
Despite 0% schema description coverage, the description provides extensive parameter semantics: examples for name (including locale sensitivity), usage explanation for database_path, and the format/requirements. This far exceeds the baseline of 3.
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 'set the material on the active part' and distinguishes it from sibling tools. It also notes the prerequisite for get_mass_properties, providing specific verb+resource clarity.
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 'Required before get_mass_properties returns a meaningful mass,' and provides an example usage. It could be improved by mentioning when not to use or alternatives, but it gives 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.
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 that the tool suppresses/resumes a mate, returns metadata, and includes a live note about a version-specific lack of cascade, plus a cheap snapshot-diff workaround. This is excellent 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 moderately long but well-structured: purpose, use cases, workflow, parameter explanations. Each part earns its place, though could be slightly more concise. Still highly 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?
Tool has 2 required params, both fully explained. No output schema but description states return value. Workflow adds depth for complex use cases. No gaps for a CAD suppression 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% and no param descriptions in schema. The description's 'Args' section explains mate_name (source and example) and suppressed (meaning of boolean). This adds significant 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 'Suppress or resume a mate by name', using a specific verb and resource. It distinguishes from sibling tools like add_coincident_mate (which add mates) and set_components_suppression (which suppresses 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 explicit use cases: disabling a wrong-branch mate before recreating via place_and_mate, and post-component-suppression cleanup. Includes a detailed workflow for cascade-aware resume, giving 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.
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?
With no annotations, the description fully discloses behavior: destructive of face-anchored sketches, thickness constraints, centroid matching tolerance, and outward parameter effect. This is 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 lengthy but well-structured with overview, details, caveats, and example. Every sentence adds value, though slightly verbose; still appropriate 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?
Despite no output schema or annotations, the description covers all necessary aspects: purpose, parameters, constraints, behavior, caveats, and a concrete example. It is fully sufficient 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?
All four parameters are explained in detail: thickness constraint, face_centroids source from list_faces, outward meaning, and selector vs face_centroids mutual exclusivity. The description 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 hollows out a body (shell) with optional openings. It uses specific verbs and resources, and distinguishes from sibling operations like extrude or revolve.
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 context on when to use shell (common for cast housings, plastic enclosures) and warns to run late in feature tree. It could explicitly name alternatives but gives sufficient guidance.
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?
The description explains that the tool creates three mates to fully constrain components, and includes return format (Dict with mates list). It does not mention destructive behavior or auth, but the behavior is 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 well-structured with summary, context, args, example, and returns. It is front-loaded and clear, though slightly lengthy.
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 type and structure. It covers behavior, parameters, constraints, and example. The context is 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?
Each parameter is explained: component names must be from get_active_assembly_info, and face positions must be opposite ends of same axis. An example is provided. Schema coverage is 0%, but the description 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 it stacks two components with full constraint (3 mates in one call) and explains the difference from a single face mate. It distinguishes from sibling 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 provides typical use cases (stacking parts for assembly fixtures, mounting speaker on plate) and implies when to use this over single mates. However, it does not explicitly state when not to use it or list alternatives.
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?
No annotations are provided, so the description carries the full burden. It notes the operation is subtractive (destructive) and returns a feature. The caveat mentions constraints similar to sweep_sketch but does not elaborate on permissions, reversibility, or specific limitations. This is adequate but not highly detailed.
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, followed by use cases, arguments, return, caveat, and an example. While slightly verbose due to bilingual text and example, each section adds value and the structure is logical. Minor redundancy could be trimmed.
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 two parameters, no output schema, and no annotations, the description covers the essentials: purpose, parameters, return type, and a worked example. It lacks explicit prerequisites (e.g., active document) but these may be implicit. The caveat provides additional context. Overall sufficient 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 description explains both parameters: profile_sketch_name is a closed profile sketch name (e.g., 'Croquis1'), and path_sketch_name must be a different sketch. This adds significant meaning beyond the schema titles alone, especially since schema description coverage is 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 subtracts a swept-profile-along-path volume from existing material. It uses specific verbs (subtract/cut) and resource (existing material), and distinguishes it from sibling tools like sweep_sketch which creates a sweep sketch rather than performing a 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 typical use cases (curved grooves, oil channels, milling tool paths, ergonomic cutouts) and an example. It mentions constraints via the caveat linking to sweep_sketch. However, it does not explicitly state when not to use the tool or recommend alternatives, leaving some ambiguity.
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?
Despite no annotations, the description fully discloses behavioral traits: merge parameter behavior, non-parametric nature (no D1/D2), orientation defaults (follow-path, no twist/guide curves), and v1 limitations. 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 summary, args, returns, caveats, and example. Front-loaded purpose. Slightly verbose (example code is redundant with text) but still efficient. Minor deduction for unnecessary 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 no output schema and missing annotations, the description covers return value (Feature object), v1 limitations, and complete usage context. No gaps remain 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?
With 0% schema description coverage, the description fully explains all three parameters: profile_sketch_name must be closed, path_sketch_name can be open/closed and perpendicular plane, merge merges or keeps separate. Adds critical context 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?
Clearly states it sweeps a closed profile sketch along a path to create a boss feature. Distinguishes from sibling tools like extrude_sketch and revolve_sketch by specifying the sweep operation, and mentions sweep_cut for cutting vs. boss.
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 prerequisites (sketches must exist, cannot be same sketch), limitations (no advanced options), and concrete examples of standard autoparts use cases. Also includes a code example and default behavior.
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?
No annotations exist, so description carries full burden. It discloses coarse granularity, limitation regarding MCP steps, inability to recover lost documents, and truthful return values. This is exceptionally 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?
Bilingual repetition adds length, but each sentence adds value. Core purpose is front-loaded. Warnings and return info are clearly separated.
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 fully explains return format and meaning. Sibling tools are all different, so no missing context. Complete for a parameterless undo 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, so schema coverage is 100% (vacuous). Baseline is 4. Description adds no parameter info 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 states 'Deshacer el ÚLTIMO paso de SolidWorks (Ctrl+Z / EditUndo2)', clearly specifying the verb (undo), resource (SolidWorks last step), and scope. It distinguishes from siblings as it is a generic undo, not a specific feature 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 warns that undo is coarse, may not correspond to last MCP call, and advises to verify after using. It also states what it cannot do (recover closed/lost documents). Provides 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.
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?
Discloses all key behaviors: uses get_bounding_box, applies max tolerance, volume check is order-of-magnitude only, never flips verdict, and lists caveats (cannot see wrong-location, wrong-topology, envelope-preserving errors). 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?
The description is well-structured with a Spanish/English bilingual format and a separate Args section. While fairly long, every sentence adds necessary detail, though some redundancy could be trimmed.
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 annotations and output schema, the description covers input semantics, behavioral details, output structure (dict fields), and caveats. It is fully self-contained for an agent to understand and invoke 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 description thoroughly documents all five parameters with default values, meanings, and usage notes (e.g., match_by='sorted' vs 'positional', tolerance interplay). This adds significant value beyond the schema which only has 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's purpose: verifying built-part size against the drawing spec via bounding box measurement. It distinguishes itself as the 'first independent ground-truth check' among sibling verification tools like verify_build_report.
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 guidance on when to use (after building, as a ground-truth check) and caveats about what it cannot detect (wrong location, topology). However, it does not explicitly mention alternatives among sibling tools.
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?
With no annotations, the description carries full burden for behavioral disclosure. It mentions creating a report and distinguishes check types, but omits side effects, output format, or consequences of missing parameters. This is insufficient for an 8-parameter 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 short and front-loaded with the purpose, but it is under-specified given the tool's complexity (8 parameters, no annotations). It could include parameter explanations without significant bloat.
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 partially explains the tool's role relative to a sibling, but it lacks details about return values, behavior when parameters are omitted, and does not compensate for the missing output schema and parameter descriptions. Overall, it leaves significant gaps 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?
The input schema has 0% description coverage, meaning no parameter descriptions are provided. The tool description does not explain any of the 8 parameters (e.g., notes, drawing_spec_id, expected mass). This leaves agents with no semantic guidance for parameter values.
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 for the active part. It distinguishes from the sibling verify_against_spec by explaining that bbox is the hard envelope check while other metrics are advisory, making the purpose 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 implies when to use this tool versus verify_against_spec by differentiating hard vs. advisory checks, but it does not explicitly state use cases or when not to use it. There is no mention of alternatives or prerequisites.
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, so description carries full burden. It discloses the tool returns a checklist with three checks, explains that a red check on 'Active document' is normal if no part is open, and that a red check on 'SolidWorks connection' in live mode requires opening SW. Also mentions mock mode. 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 bilingual (Spanish then English) and includes a junior workflow, which adds context but makes it longer than necessary. It is front-loaded with purpose, but some redundancy exists (e.g., both Spanish and English versions of purpose). Adequate but not maximally 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 zero parameters and no output schema, the description includes a sample return object covering the checklist structure and behavioral notes. It explains edge cases and mock mode. Could mention idempotency, but overall sufficiently complete for a diagnostic 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 zero parameters with 100% schema coverage, so baseline is 4. No parameter information needed in description beyond what schema provides, and description does not add any.
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 is a diagnostic to verify MCP_CAD installation. It explicitly mentions checking server response, SolidWorks connection, and active document, distinguishing it from sibling tools that perform modeling or manipulation tasks.
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 specifies when to use the tool: after installation or when something seems off. It provides a junior workflow example. No explicit when-not-to-use but given the tool's unique diagnostic purpose, the guidance is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Many tools have overlapping purposes, e.g., multiple ways to create holes (add_bolt_circle, add_drill_pattern, hole_wizard, build_flange_boss, build_threaded_boss) and to build profiles. Descriptions help but an agent would still struggle to reliably pick the right tool.
Tool names follow a mix of patterns (verb_noun, build_*, add_*, etc.). Some are descriptive but inconsistent (e.g., add_mate_by_face_position vs stack_components). No dominant pattern, leading to moderate confusion.
With 100 tools, the server is over-scoped for a typical CAD automation use case. The recommended range is 3-15; 100 is far beyond that, making it hard for agents to navigate efficiently.
The tool set covers most common CAD operations: sketching, extruding, revolving, sweeping, mating, configurations, and materials. Minor gaps exist (e.g., no loft or advanced surfacing), but core autoparts workflows are well-supported.
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
DXF and PDF/X-4 for AI agents: structured facts, PNG renders, an interactive in-chat viewer.
Agent-first CAD: editable .kcad.ts source, deterministic review, OpenCASCADE kernel.
AI colleagues that keep your standards, your project and their reasoning between sessions
AI-native Day 0 modernization platform for PRDs, architecture, work orders, and code transformation.
Related MCP Servers
- AlicenseAqualityFmaintenanceEnables natural language control of AutoCAD LT through AutoLISP code generation and execution, allowing users to create engineering drawings with conversational prompts.8476MIT
- AlicenseNot gradedqualityFmaintenanceEnables AI-powered parametric CAD design in Autodesk Fusion 360 through natural language commands. Supports multiple AI backends (Ollama, OpenAI, Gemini, Claude) with intelligent routing and safety validation for geometric operations.14MIT
- -licenseNot gradedqualityNot gradedmaintenanceEnables AI-powered CAD automation in Autodesk Fusion 360 through natural language prompts. Features a modern web chat interface with multiple LLM backends for creating 3D models, sketches, and parametric designs.
- AlicenseBqualityDmaintenanceConnects AI coding agents to Autodesk Fusion 360 for CAD automation, enabling natural language control over sketching, 3D modeling, and CAM operations. It uses a Python-based bridge and a custom add-in to execute over 80 tools ranging from simple geometry creation to complex assembly and parameter management.8077MIT
Appeared in Searches
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/MCP_CAD'
If you have feedback or need assistance with the MCP directory API, please join our Discord server