MCP server for controlling CATIA V5 through pyCATIA. Provides tools for part design, sketching, feature creation, analysis, and export with natural-language design capabilities.
Server has 26 tools with consistent naming (verb_noun pattern) and descriptions present for all. However, input schemas are largely absent or minimal, most tools lack explicit parameter type definitions in the visible code. Parameter descriptions exist but are often generic. Output schemas are undocumented. Error handling uses a wrapper pattern (ok/fail) but lacks actionable recovery guidance. Tool composition is reasonable (single responsibility), but schema completeness and LLM-optimized descriptions are weak.
Add a closed circle to the currently open sketch.
Add a straight line segment to the currently open sketch.
Add a closed rectangle to the currently open sketch.
Apply a chamfer to an edge. Use get_edges() to discover edge_id values.
Close the active CATIA document and clear session state.
Close the currently open sketch. Required before pad/pocket.
Create a new CATIA Part document (.CATPart) and make it the active part.
Input schemas incomplete or missing for 12+ tools (get_tree, get_edges, get_mass_properties, validate_geometry, close_document, list_parameters, etc.). Tools with no visible schema definition cannot be reliably invoked by LLMs.
Output schemas are not documented anywhere in the visible code. LLMs cannot plan downstream tool calls or extract required fields without knowing what each tool returns.
Error responses use generic ok/fail wrappers without actionable recovery guidance. Errors like 'Unexpected error: {exc}' do not tell the LLM what to do next or whether to retry.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) present. LLMs cannot distinguish safe read-only tools from destructive ones without explicit hints.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 56 | <=2025-11-25 | v2 |
Create a new sketch on a named plane ('xy', 'yz', or 'zx') and open it for editing.
Design a part directly from a natural-language description (bracket, plate, shaft, or housing). Parses intent, builds a CAD plan with explicit engineering assumptions, validates it, and (unless execute=False) runs it end-to-end in CATIA V5.
Export the active document to an IGES (.igs) file.
Export the active document to a STEP (.stp) file.
Export the active document to an STL (.stl) file.
Apply a constant-radius fillet to an edge. Use get_edges() to discover edge_id values.
Enumerate solid edges and register short edge_id values for use with fillet()/chamfer().
Compute mass, volume, and center of gravity for the active part's main body.
Read the current value of a named CATIA Part parameter.
Return the active part's feature tree (bodies, sketches, features).
Create a circular hole at (x, y) with the given diameter and depth.
List all parameter names defined on the active part.
Measure the minimum distance between two named CATIA objects.
Open an existing CATIA document (.CATPart/.CATProduct) from disk.
Extrude (pad) a closed sketch into a solid by `length` millimeters.
Cut a pocket into the solid from a closed sketch to `depth` millimeters.
Save the active CATIA document, optionally to a new path.
Create or update a named CATIA Part parameter (a driving dimension).
Validate that the active part updates cleanly and has a valid solid shape.
Parameter descriptions are generic and lack constraints. E.g., 'plane' param in create_sketch says 'One of xy, yz, zx' but no enum constraint visible; 'length' in pad lacks min/max bounds.