catia-v5-mcp
Drives CATIA V5 through COM, enabling AI agents to create and modify parts, assemblies, sketches, surfaces, and drawings; run measurements; export to STEP/IGES/STL; manage documents and constraints; and perform validated batch operations for CAD modeling and reverse engineering.
Click on "Deploy 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., "@catia-v5-mcp Model a 100x60x10 mm mounting plate with four M6 holes and 5 mm fillets."
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.
catia-v5-mcp
An MCP server that lets AI agents drive CATIA V5 through COM, and get it right the first time.
Most CAD automation gives a model a bag of tools and hopes. This one is built around what actually goes wrong when an agent models real parts for hours: silent no-ops, default feature names, a constraint that says OK while the part flipped, a dialog that freezes every call, the same mistake made again in the next session. Each of those has a mechanism here.
CATIA is a registered trademark of Dassault Systèmes. This project is independent and is not affiliated with, endorsed by or sponsored by Dassault Systèmes. You need your own licensed CATIA V5; nothing here bypasses or emulates licensing. Validated on CATIA V5 R19 (French UI) on Windows 11.
What makes it different
Problem | Mechanism |
40 tool calls = 40 model round trips, and a typo in call 31 is found after 30 modifications |
|
The same COM pitfall bites every new session | Lessons ledger: 152 verified pitfalls (docs/LESSONS.md). The critical ones ship as server instructions, the matching lesson is appended to the error that triggered it, and agents record new discoveries with |
"It ran" does not mean "it is right" | Every solid feature reports its volume change; geometry is designated by 3D points on it (never guessed names); |
Default names ( | Every creation tool takes |
A modal dialog silently freezes CATIA and every queued call | Popup watchdog closes single-OK information boxes, logs them, and never answers a question. Optional cross-process lock and hang guard. |
100+ tool schemas overwhelm a smaller model | Tool sets ( |
Assemblies that read "all constraints OK" while a part flipped | Pose-tracking assembly kit: pre-position, constrain on real faces, verify final poses, explain every clash. |
Assemblies that take minutes and flicker the screen (every constraint re-opens a part window) |
|
A failed call leaves a broken feature in the tree | The server removes what a failed creation call left behind and tells you ( |
Turning a drawing into a model by eye | Drawing tools (optional) extract exact circles, arcs and lines from vector PDFs (radii to a few hundredths of a mm) and overlay a sketch on the drawing to prove it matches. |
Related MCP server: AutoCAD MCP Pro
Install
Windows with a licensed CATIA V5, Python 3.10+.
git clone https://github.com/AstroQuestStudio/catia-v5-mcp.git
cd catia-v5-mcp
pip install -e . # add ".[drawing]" for the PDF drawing toolsClaude Code:
claude mcp add catia-v5 -- python -m catia_mcpClaude Desktop (claude_desktop_config.json):
{ "mcpServers": { "catia-v5": { "command": "python", "args": ["-m", "catia_mcp"] } } }CATIA must be registered as a COM server once (cnext.exe /regserver, as administrator). The
server attaches to a running CATIA or starts one.
Use
Ask for what you want; the server's instructions and prompts carry the method. For repeatable work, write a scenario instead of improvising:
catia-mcp-run scenario.json --dry-run # validate every step against the schemas, touch nothing
catia-mcp-run scenario.json # run, log, non-zero exit code on failuretemplates/ holds fill-in-the-blank part and assembly scripts (# FILL: markers) built on
catia_mcp.scripting, which emits validated steps and tracks component poses.
Prompts (one-click workflows): model_part_from_drawing, assemble_product, large_assembly,
audit_model, reverse_engineer_part.
Safety tiers (CATIA_MCP_SAFETY=read|write|dangerous, default dangerous): a review agent runs with
read, an unattended modeller with write. The tier can be lowered from a tool call
(catia_set_safety) but only a human can raise it, by restarting the server. catia_batch checks
every step against the tier before running anything.
Tools
Over 100 tools in groups (catia_*, plus drawing_*):
Documents: new part / product, open, save, close, list.
Sketcher: lines, arcs, circles, rectangles, profiles, splines, constraints, geometry read-back.
Part Design: pad, pocket, shaft, groove, hole, fillet, chamfer, thread, shell, draft, thickness, patterns, mirror; bodies and boolean operations for the multi-body method.
Generative Shape Design: wireframe, surfaces (sweep, loft, fill, blend...), solids from surfaces.
Assembly: components, sub-assemblies, fix / coincidence / contact / offset / angle constraints, move, clash analysis, clean display, save all.
Measure: distance, inertia, bounding box, parameters.
Export and view: STEP, IGES, STL, screenshots, standard views.
Server:
catia_batch,catia_lessons,catia_add_lesson.
Tools carry read-only / destructive / idempotent annotations so clients can auto-approve harmless calls.
Configuration (environment variables)
Variable | Default | Effect |
|
| Advertised groups or presets: |
|
| Popup watchdog |
|
| Cross-process lock so several agents queue instead of interleaving |
|
| Log a call that blocks longer than this; |
|
| CSV line + screenshot after every feature tool |
|
| State: log, lessons, lock, trace |
| unset | Never attach to or start CATIA (tests, CI, unlicensed machines) |
|
| Append to every call the split of its time (snapshot, execute, checks, naming) |
|
| Cache face/axis/edge designations per (file, modification time, point) |
|
| Keep that cache on disk between sessions (a rebuild of a 70-component assembly went from 780 s to 164 s) |
|
| Safety tier: |
|
| Remove the objects a failed creation tool left in the tree |
Performance, measured
Live on CATIA V5 R19 (French UI, 8-core laptop). Timings vary by up to 3x between identical runs, so the figures below are medians of repeated runs; the speed-ups are 10x or more, far above that noise.
Before | After | |
Contact constraint (mean, 40 to 300 instances) | 2.48 s | 0.16 s |
Adding one component at 150 parts | 1.5 s (grew with the assembly) | 0.01 s (flat) |
30-component, 58-constraint wheel assembly | 293 s | 47 s |
150 constraints | 249 s | 36 s |
300 instances, 301 constraints (906 steps) | n/a | 81 s, 0 errors |
What did the work: one part opening for all the designations of a part (catia_prepare_geometry,
added automatically by the kit and the runner), a bounded designation cache, deferred solving, and O(1)
component lookup. The server's own bookkeeping (tree snapshot, volume check, renaming) costs 0.1 to 0.3 s per
feature. What stays slow is intrinsic to CATIA: designating two edges on a dense part takes 20-30 s, so
prefer faces and axes. Use CATIA_MCP_PROFILE=1 to see where your own scenario spends its time.
Working at scale
Aircraft and vehicles are thousands of parts. The MCP layer is linear (100 000 steps validate in about 4 s,
listings are paginated, the cache is bounded); what limits a huge model is CATIA's own memory and load time,
so structure the work: one sub-product per system, build and check each alone, save after each, batch in
chunks with stop-on-error, query one sub-product at a time (catia_list_components takes path, depth,
limit, offset). See the large_assembly prompt and docs/GUIDE_ASSEMBLY.md
(section 9). The live checklist is docs/LIVE_VALIDATION.md.
Status and honesty
Live-validated on CATIA V5 R19. Later releases should work, but the COM surface varies: report what you see.
Parts marked
UNVERIFIED-LIVEin the source are not yet proven against a real session.Drafting (
catia_drawing_*, see docs/DRAFTING.md) and reverse engineering (catia_describe_model,catia_audit_model,catia_measure_model, see docs/REVERSE_ENGINEERING.md) were run live; whatever could not be proven is listed in those documents and not exposed. A model described and replayed comes back with the same volume, box, centre of gravity and inertia (checked on brackets, flanges, stepped pins, plates and a 6-feature link); patterns, shells, drafts and threads are reported as opaque features, never guessed.Known gaps: formulas and design tables, materials, rib / slot, undo, sketch constraint replay. See docs/ROADMAP.md.
The optional drawing tools use PyMuPDF, which is AGPL-3.0. It is a separate, lazily imported dependency and is never required by the server.
Contributing
Read CONTRIBUTING.md; the rule is prove it. Found a pitfall? Add a lesson. Security: SECURITY.md.
Licence
MIT, see LICENSE.
Available Tools
121 toolscatia_activate_bodyAIdempotent
Set a Body as the active 'in work object' (Part.InWorkObject) — the 'Define In Work Object' right-click action from the CATIA GUI. After calling this, catia_create_sketch/catia_pad/catia_pocket/etc. create their features inside this body instead of MainBody. Call this right after catia_new_body to start working in it.
Inputs: body_name (required).
catia_add_componentA
Insert existing CATPart/CATProduct file(s) into the active assembly (Insérer un composant existant), optionally inside a sub-assembly. Returns the new instance name(s), to use in constraints.
Inputs: file_path (required), parent.
catia_add_lessonA
Record a NEW pitfall or rule you discovered so that every future session (yours and other agents') is warned automatically. Use it as soon as you find something that failed, surprised you, or needed a workaround. Give the exact observed error text in error_patterns (regex) so the hint is attached to that error next time, and state how it was proven. Stored in the user's lessons file (not in the package); duplicates are refused.
Inputs: rule (required), title (required), area, cause, +5 more.
catia_add_new_partA
Create a new empty Part inside the assembly (or a sub-assembly), with its part number. It must be modelled and then saved (catia_save_all) before faces can be designated for constraints.
Inputs: part_number (required), parent.
catia_add_sub_assemblyA
Create a new sub-assembly (Product) inside the assembly: the way to structure a big assembly (e.g. Wheel / Shaft sub-assemblies).
Inputs: part_number (required), parent.
catia_angle_constraintC
Angle between two planes/faces/axes of two components, in degrees.
Inputs: angle (required), element1 (required), element2 (required), component1 (required), +3 more.
catia_audit_modelARead-only
Audit the ACTIVE document's tree WITHOUT modifying it. Returns issues ranked error > warning > info, each with a code, where, message and the exact tool calls that fix it ('fix', a list of {tool, args}) or a 'manual' instruction when no tool can. Part: default names, bodies without result or empty, hidden or unmerged bodies, features not up to date or deactivated, sketches unused, open profiles, unsatisfied constraints, order (dress-up before material). Assembly: constraints not OK, default names, components not constrained outside the fixed one, broken links. 'not_checked' says what the API cannot tell (degrees of freedom of a sketch).
Inputs: min_severity.
catia_batchA
Run MANY catia_* tool calls in ONE round trip (10-100x fewer LLM turns). Every step is validated against the tool schemas BEFORE anything runs (unknown tool, misspelt/missing argument, wrong type, bad enum value): a typo in step 31 is reported up front and CATIA is left untouched. Steps then run in order and stop at the first failure (stop_on_error). Use dry_run=true to only validate. Compact per-step report with timings. Not nestable. Prefer it for any sequence you already know (sketch -> pad -> rename -> check), and keep separate calls for steps that depend on a value you must read first (e.g. face points from catia_list_faces).
Inputs: steps (required), dry_run, stop_on_error.
catia_boolean_operationADestructive
Combine two Bodies with a boolean operation (right-click a body > x.Objet > ... in the GUI). This is how the multi-corps method produces the final solid: model each functional zone in its own Body, then combine them here.
assemble: union that respects each body's feature nature (a Pocket in the tool body removes material — most common case).
add: union that always adds material, even if the tool body's first feature is a Pocket (it's reinterpreted as a Boss).
remove: target_body minus tool_body.
intersect: keeps only material common to both bodies.
union_trim: union with control over which side to keep/remove (faces_to_remove_points / faces_to_keep_points: one [x, y, z] inside each face of the tool body; see catia_list_faces).
Inputs: operation (required), tool_body (required), name, target_body, +2 more.
catia_chamferA
Chamfer one or more edges as ONE feature. Edges designated by a 3D point on each (same as catia_fillet). Mode length+angle (default 45°) or two lengths.
Inputs: length (required), edge_points (required), name, angle, +1 more.
catia_circ_patternA
Circular Pattern (Répétition circulaire) of a feature around an axis: the normal of an origin plane through the origin (axis_plane, e.g. 'zx' = around Y), or the axis of the cylindrical face through axis_face_point. count instances including the original; default spacing 360/count = complete crown.
Inputs: count (required), name, reverse, axis_plane, +3 more.
catia_clash_analysisARead-only
Interference check of the whole assembly (Analyse > Interférence, DMU Space Analysis): lists every CLASH (two components interpenetrate; 'at' = a point of the interference, assembly coordinates) and counts the CONTACTS. A correct assembly has 0 clash (except intended press fits / cosmetic threads). The analysis object is removed afterwards so the product tree stays clean.
Inputs: max_list.
catia_clean_displayAIdempotent
Presentation view before screenshots: hide every origin/offset plane, sketch and axis system of every part, and the assembly constraint symbols (green markers). Display only: nothing is saved (call it AFTER saving).
Inputs: hide_tree.
catia_close_allADestructive
Close EVERY open document without saving (fresh session). Use it before starting a new piece/assembly: stale documents from earlier work (duplicate parts, old copies) make Save As fail and confuse which file a product uses. Unsaved work is lost — save first.
Inputs: no named parameters.
catia_close_documentCDestructive
Close the active CATIA document.
Inputs: save.
catia_close_sketchA
Close the active sketch and return to Part Design. Must be called after finishing sketch geometry before applying 3D features.
Inputs: no named parameters.
catia_coincidence_constraintB
Coincidence (Coïncidence) between two elements of two components: axis/axis (use axis_point on both), plane/plane, face/face, point/axis...
Inputs: element1 (required), element2 (required), component1 (required), component2 (required), +2 more.
catia_connectAIdempotent
Connect to CATIA V5. Attaches to a running instance or launches a new one. Must be called before any other CATIA tool.
Inputs: no named parameters.
catia_contact_constraintC
Surface contact (Contact) between two faces of two components (type verified: catCstTypeSurfContact = 20).
Inputs: element1 (required), element2 (required), component1 (required), component2 (required), +2 more.
catia_create_sketchA
Create a new 2D sketch (in the active body) and open it for editing. Support, in priority order: face_point (the planar face of the solid that passes through this 3D point, e.g. 'the top face of the boss'), else plane + offset (a named offset plane is inserted in the tree), else the origin plane. The sketch axes are aligned on the origin plane parallel to the support (xy: H=X,V=Y; yz: H=Y,V=Z; zx: H=Z,V=X) with its origin on the projection of (0,0,0), so 2D coordinates stay the ones read on the drawing's view. Close with catia_close_sketch.
Inputs: name, plane, offset, face_point.
catia_delete_featureADestructive
Delete a feature or sketch from the active Body (right-click > Delete in the GUI). Use this to clean up after a failed/wrong operation instead of closing and recreating the whole document — e.g. a Shaft/Groove that raised an UpdateObject error can still leave a broken feature behind in the tree; delete it, fix the sketch, and retry.
Inputs: name (required), kind.
catia_describe_modelARead-only
Reverse-engineer the ACTIVE document without modifying it. CATPart: bodies, features in tree order, sketches with exact geometry (mm, sketch axes) and constraints, parameters, plane frames, volume, bounding box, inertia, plus the source of a replayable PartScript that rebuilds the part in a NEW document. A feature the reader does not understand is listed under 'opaque' (name, type, what is known, why) and the spec says replay.complete=false: nothing is guessed. CATProduct: components, poses, constraints and statuses. Limits: sketch constraints are described, not replayed; patterns, shell, draft, thickness and surfaces are opaque; edges are reproduced by a point on them. Units mm and degrees. Set output_dir to write _spec.json and _replay.py.
Inputs: measure, validate, output_dir, replay_name, +2 more.
catia_disconnectAIdempotent
Disconnect from CATIA V5 (does not close CATIA).
Inputs: no named parameters.
catia_draftC
Draft (Dépouille) of the faces through face_points by 'angle' degrees, about the neutral face through neutral_face_point (or an origin plane neutral_plane), pulling along 'direction'. Verified live.
Inputs: angle (required), direction (required), face_points (required), name, +2 more.
catia_drawing_add_centerlinesA
Draw centre lines (thin chain lines, ISO 128-2 type 04.1) crossing at each given circle centre of a view, extending extension_mm (paper) beyond the circle. centres: [{u, w, radius}] in view coordinates. Returns the number of lines created.
Inputs: view (required), centres (required), drawing, extension_mm.
catia_drawing_add_dimensionA
Add ONE dimension to a view, in view coordinates (u, w) (mm, model scale, see catia_drawing_add_view). type='linear': from and to points, orientation horizontal | vertical | aligned, the dimension line is placed offset_mm (paper) away on side (below/above for horizontal, right/left for vertical, left/right of the from->to direction for aligned). type='diameter' or 'radius': centre and diameter/radius of the circle, leader at leader_angle_deg. Take the values from the model (catia_list_faces gives cylinder radii and axes), never from memory: the dimension shows the value you give, the tool cannot attach it to the generated edge; catia_drawing_check compares it with the PDF.
ISO 129-1: one dimension per feature, keep dimension lines >= 10 mm from the outline (offset_mm default 10), each following line 7 mm further. prefix e.g. '4x ' for identical holes. Returns JSON {dimension, type, value_mm, expected_mm, line}; a value that differs from the request by more than 0.005 mm removes the dimension and fails.
Inputs: type (required), view (required), to, from, +10 more.
catia_drawing_add_viewA
Add one view of the 3D source to the drawing and place it. kind: front (the base view, create it first), top/bottom/left/right/rear (orthographic projections of the front view: 'right' = seen from the right of the front view), isometric, section, detail. Placement (position='auto', default): ISO 5456-2 arrangement from the plan of catia_drawing_create (first angle: top view BELOW the front, right view on its LEFT; third angle mirrored), else beside the parent in a free spot. Give position [x, y] (sheet mm, origin bottom-left, view CENTRE) to override. A view that would overlap another one or leave the frame is refused and removed. View coordinates (u, w), used by section/detail/dimensions, are millimetres at MODEL scale with the origin on the projection of the model origin; u to the right, w up. With view_from='-Y': front u=X, w=Z; top u=X, w=Y; right u=Y, w=Z; left u=-Y, w=Z; bottom u=X, w=-Y; rear u=-X, w=Z. section: give parent, cut_direction ('vertical' = cutting line x=cut_at, 'horizontal' = line y=cut_at, in the parent's (u,w)) or cutting_line [[u1,w1],[u2,w2]]; the tool draws the cutting-plane arrows, labels (A-A) and hatching; flip with side=1 if the wrong half is shown. detail: parent, centre [u,w], radius (mm, model scale), scale (default '5:1'). Returns JSON: view name, kind, scale, centre, paper box, origin, and the axes needed by catia_drawing_check.
Inputs: kind (required), side, label, scale, +12 more.
catia_drawing_checkARead-only
CLOSED-LOOP CHECK: export the drawing to PDF, read it back and compare it with the 3D model. For every orthographic view created by add_view: circles (diameters within 0.02 mm, centres within 0.05 mm, hole pitches), the four sides of the projected outline, the view size on paper vs the 3D bounding box x scale. The 3D side is read from source (catia_list_faces cylinders + catia_get_bounding_box of the active body) unless expected is given. Diameter/radius dimensions are cross-checked against the circles found in the PDF. Limits: a blind hole is only visible from its open side (list the views that show it in views); circles under 2 mm are text-sized and ignored. Returns JSON with ok and per-view details.
Inputs: pdf, views, source, drawing, +5 more.
catia_drawing_closeA
Close ONE drawing (the named one, else the drawing this session last used) without touching any other document; the 3D source stays open. save=false (default) discards changes, save=true saves it first (the drawing must already have a file name: use catia_save_document with a path beforehand).
Inputs: save, drawing.
catia_drawing_createA
Create a new CATDrawing with an ISO 5457 sheet (A0-A4), a main scale (ISO 5455), the projection method (first_angle = Europe/ISO default, third_angle = USA) and the 0.7 mm drawing frame (20 mm left margin, 10 mm elsewhere). Then call catia_drawing_add_view for each view, catia_drawing_title_block, catia_drawing_export_pdf and catia_drawing_check.
sheet='auto' and/or scale='auto' need source (an OPEN CATPart/CATProduct): the tool measures the views listed in views and picks the smallest sheet and the largest recommended scale (>= min_scale) that hold them with room for dimensions and the title block; the plan (sheet, scale, view centres) is returned and used by add_view when position='auto'. Units: mm. Returns JSON {drawing, sheet, scale, projection, frame, plan, warnings}. The drawing is left open and active; nothing is saved.
Inputs: frame, scale, sheet, views, +6 more.
catia_drawing_export_pdfB
Export the drawing to a vector PDF (DrawingDocument.ExportData). Checks the file exists and, when PyMuPDF is installed, that the PDF page equals the sheet (mm). Returns JSON {path, bytes, page_mm, sheet_mm, page_matches_sheet}. Overwrites an existing file.
Inputs: path (required), drawing.
catia_drawing_generate_dimensionsA
Run CATIA's 'Generate Dimensions' on the active sheet: creates the dimensions driven by the 3D constraints of the model (pad lengths, hole diameters...). It does NOT dimension everything (overall sizes and hole positions are usually missing) and CATIA draws them green: complete the drawing with catia_drawing_add_dimension. Returns JSON with every dimension per view (type, value, mm).
Inputs: drawing.
catia_drawing_infoARead-only
Read the drawing back: sheet format, scale, projection, every view (kind, scale, centre, paper box, origin) and every dimension (type, value). Read-only.
Inputs: drawing.
catia_drawing_title_blockA
Draw the ISO 7200:2004 title block (180 mm wide table in the bottom right corner of the frame), the scale, the general tolerance note (ISO 2768) and the projection symbol of ISO 5456-2. fields: legal_owner, identification_number, date_of_issue, sheet_number, title, approval_person, creator, document_type are MANDATORY (missing ones are refused); optional: supplementary_title, revision_index, number_of_sheets, responsible_department, technical_reference, document_status, classification, paper_size. general_tolerance: f, m (default), c or v. Nothing is invented: only what you pass is written. Returns JSON with the block rectangle, rows written and ISO warnings (e.g. too long a title).
Inputs: fields (required), drawing, general_tolerance.
catia_duplicate_componentA
Insert N more instances of an existing component (same reference, like 'Définir une multi-instance'), each shifted by 'step' mm from the previous one. Constrain them afterwards.
Inputs: count (required), component (required), step.
catia_exportA
Export the active document to a file. Supported formats: STEP (.stp), IGES (.igs), STL (.stl), 3DXML (.3dxml), VRML (.wrl), PDF (2D drawings).
Inputs: file_path (required), format.
catia_filletA
Constant-radius edge fillet on one or more edges, as ONE fillet feature (like selecting several edges in the Congé d'arête dialog). Edges are designated by a 3D point lying on each of them (e.g. the midpoint of the edge read on the drawing); searched in the active body. Tangent edges are propagated automatically. Use catia_list_edges to see edge endpoints if unsure.
Inputs: radius (required), edge_points (required), name.
catia_fit_allAIdempotent
Fit all geometry in the current 3D view (zoom to fit).
Inputs: no named parameters.
catia_fix_constraintB
Fix a component in space (Fixer). The first/reference component of an assembly must be fixed.
Inputs: component (required), name, defer_update.
catia_get_active_document_infoBRead-only
Get detailed info about the active CATIA document: name, type, path, part bodies, features, etc.
Inputs: no named parameters.
catia_get_bounding_boxARead-only
Exact bounding box (mm) of a body's solid, curved shapes included: x/y/z [min, max] and size. Use it to check a piece against its drawing.
Inputs: body_name.
catia_get_inertiaARead-only
Get inertia properties of the active part: volume, surface area, center of gravity, mass (if density is defined), moments of inertia.
Inputs: density, body_name.
catia_get_parametersBRead-only
List all user-defined and computed parameters of the active part. Includes dimensions, formulas, and design tables.
Inputs: filter.
catia_get_safety_stateARead-only
Current safety tier of this session: read (inspect only), write (model and save) or dangerous (may also delete features and close documents), and what each tier allows.
Inputs: no named parameters.
catia_get_treeARead-only
Specification tree of the active Part, as a reviewer sees it: every body (including those absorbed by Assemble/Add/Remove...), its sketches, features and planes, plus geometrical sets. Includes a naming AUDIT listing every element still carrying a default name (anything ending in '.N' like 'Extrusion.3'/'Pad.1'/'Esquisse.2', or 'Corps principal'/'PartBody'). Run it after each piece and fix every flagged name before saving.
Inputs: no named parameters.
catia_grooveA
Create a Groove (revolution cut). Same axis rules as catia_shaft. Works as the FIRST feature of an empty body (it then holds the removed volume; assemble that body into the main one to cut it — the 'Machined' body pattern).
Inputs: axis, name, angle, sketch_name.
catia_gsd_blendC
Create a Blend surface connecting two curves.
Inputs: curve1 (required), curve2 (required), name.
catia_gsd_circleB
Create a full 3D circle from a center point, a support plane, and a radius. Useful as a section for multi-sections surfaces.
Inputs: center (required), radius (required), support_plane (required), name.
catia_gsd_close_surfaceA
Turn a closed (watertight) surface into a SOLID (Part Design CloseSurface). The solid is created in the active body.
Inputs: surface (required), name.
catia_gsd_create_geosetA
Create a new Geometrical Set (HybridBody) in the active Part and make it the active target for subsequent GSD elements.
Inputs: name.
catia_gsd_extrudeA
Extrude a profile (curve/sketch) into a surface along a direction vector. limit1/limit2 are the extents on each side (mm).
Inputs: limit1 (required), profile (required), direction (required), name, +1 more.
catia_gsd_fillB
Create a Fill surface bounded by a closed contour of curves (one closed curve or several connected curves).
Inputs: boundaries (required), name.
catia_gsd_intersectionB
Create the intersection of two elements (e.g. surface ∩ plane).
Inputs: element1 (required), element2 (required), name.
catia_gsd_joinC
Join (assemble) two or more curves or surfaces into one element.
Inputs: elements (required), name.
catia_gsd_lineA
Create a 3D line between two points. Each point is an existing element name or [x, y, z] coordinates.
Inputs: point1 (required), point2 (required), name.
catia_gsd_list_elementsB
List all geometrical sets with their wireframe/surface elements and sketches, plus sketches in solid bodies. Use this to find element names for other GSD tools.
Inputs: no named parameters.
catia_gsd_multi_section_surfaceA
Create a Multi-sections Surface (loft) through 2+ section curves (sketches, circles, splines...), optionally following guide curves. Sections should be listed in order along the lofting direction.
Inputs: sections (required), name, guides, orientations.
catia_gsd_offset_surfaceB
Create a surface offset from an existing surface.
Inputs: offset (required), surface (required), name, reverse.
catia_gsd_plane_3pointsB
Create a plane through three points (element names or [x,y,z]).
Inputs: point1 (required), point2 (required), point3 (required), name.
catia_gsd_plane_offsetB
Create a plane offset from a reference plane. Reference is 'xy', 'yz', 'zx', or the name of an existing plane element.
Inputs: offset (required), base_plane (required), name, reverse.
catia_gsd_pointB
Create a 3D point at (x, y, z). Coordinates in mm.
Inputs: x (required), y (required), z (required), name.
catia_gsd_projectB
Project a curve/point onto a support surface or plane.
Inputs: element (required), support (required), name.
catia_gsd_revolveB
Revolve a profile curve around an axis line to create a surface of revolution. Angles in degrees.
Inputs: axis (required), profile (required), name, angle1, +1 more.
catia_gsd_set_active_geosetAIdempotent
Select which Geometrical Set receives subsequently created GSD elements.
Inputs: name (required).
catia_gsd_splineB
Create a 3D spline through a list of points. Each point is an existing element name or [x, y, z] coordinates in mm.
Inputs: points (required), name, closed.
catia_gsd_splitB
Split an element by a cutting element, keeping one side. Use orientation to flip which side is kept.
Inputs: cutter (required), element (required), name, reverse.
catia_gsd_sweepC
Create a swept surface by sweeping a profile curve along a guide curve (explicit sweep).
Inputs: guide (required), profile (required), name.
catia_gsd_symmetryC
Mirror an element about a plane ('xy', 'yz', 'zx', or plane name).
Inputs: plane (required), element (required), name.
catia_gsd_thick_surfaceA
Turn a surface into a SOLID by adding thickness (Part Design ThickSurface). The solid is created in the active body.
Inputs: surface (required), thickness1 (required), name, thickness2.
catia_gsd_trimB
Mutually trim two elements, keeping one side of each. Use reverse flags to flip which sides are kept.
Inputs: element1 (required), element2 (required), name, reverse1, +1 more.
catia_hide_show_bodyBIdempotent
Show or hide a Body in the 3D view (does not delete it).
Inputs: visible (required), body_name (required).
catia_holeA
Create a Hole (Trou) at a 3D point on a planar face, drilled along the face normal into the material. The face is the one through 'point' (active body first, then other bodies — a hole in a 'Machined' body on a face of the 'Rough' body works). Types: simple, tapered (conique, taper_angle), counterbored (lamé, head_diameter + head_depth), countersunk (fraisé, head_diameter + head_angle). Limit: fixed 'depth', or 'up_to_point' = a point inside the plane/face where the hole must stop (Jusqu'au plan).
Inputs: point (required), diameter (required), name, type, +7 more.
catia_lessonsARead-only
Search the knowledge base of proven CATIA V5 automation pitfalls and rules (each one verified live). Call it BEFORE a risky operation (topology selection, boolean ops, assembly constraints, measurements) or right after an unexplained COM error. With no query it returns the critical rules.
Inputs: area, tool, limit, query.
catia_list_bodiesARead-only
List all Bodies in the active Part, their feature counts, and which one is currently active (InWorkObject).
Inputs: no named parameters.
catia_list_componentsARead-only
Product tree: every component (recursively), its part number, file and position (origin + axes). With no argument: the whole tree as a JSON list (unchanged). On a big assembly do NOT list everything: pass path (one sub-assembly, e.g. 'Gearbox.1/Housing.1'), depth (levels to descend, 1 = direct children only) and limit/offset (pages of direct children). Then the answer is an object {total, offset, returned, components}. A listing of more than 5000 components is cut and flagged truncated.
Inputs: path, depth, limit, offset.
catia_list_constraintsARead-only
Every constraint of the root assembly with its type and status (OK / broken...), plus a naming audit.
Inputs: no named parameters.
catia_list_documentsARead-only
List all open documents in CATIA V5 with their types and paths.
Inputs: no named parameters.
catia_list_edgesARead-only
List the edges of a body's current solid with length and start/middle/end points (mm) — pick an edge's middle point to pass to catia_fillet / catia_chamfer edge_points.
Inputs: body_name.
catia_list_facesARead-only
List the faces of a body's current solid: type, area, centre of gravity; planar faces: plane, parallel origin plane (xy/yz/zx + offset) and an inside_point guaranteed ON the face (the COG of a holed face is in the hole) — use it as face_point; cylinders/cones: radius and axis — any point on them works as axis_point.
Inputs: body_name.
catia_list_featuresARead-only
List all features in the active Part Body with their names and types.
Inputs: no named parameters.
catia_measure_distanceBRead-only
Measure the minimum distance between two geometry elements. Returns distance in mm.
Inputs: element1 (required), element2 (required).
catia_measure_modelARead-only
Measure each body of the ACTIVE part: volume (mm3), area, centre of gravity, exact bounding box (mm) and inertia (principal moments and matrix at the COG, kg.mm2, and mass at the part density). Read-only. Use it to compare an original with its replay.
Inputs: with_bbox.
catia_mirrorB
Symmetry of the whole active body's current solid about a plane (Symétrie): the result is the body plus its mirror image. Plane = an origin plane, or the planar face through plane_face_point.
Inputs: name, plane, plane_face_point.
catia_move_componentB
Translate/rotate a component (before constraining it, to pre-place it).
Inputs: component (required), rx, ry, rz, +3 more.
catia_new_bodyA
Insert a new Body in the active Part (Insertion > Corps in the French UI). This is the entry point of the multi-corps method: create one Body per functional zone of the piece, then combine them later with catia_boolean_operation. The new body is NOT made active automatically; call catia_activate_body next.
Inputs: name.
catia_new_partA
Create a new empty Part document in CATIA V5. A Part is used for single-body 3D modeling (sketches + features).
Inputs: name.
catia_new_productA
Create a new empty Product (assembly) document in CATIA V5. A Product is used to assemble multiple Parts together.
Inputs: name.
catia_offset_constraintB
Offset (Décalage) between two planar faces/planes: signed distance in mm (0 = touching).
Inputs: offset (required), element1 (required), element2 (required), component1 (required), +4 more.
catia_open_documentB
Open an existing CATIA document from a file path (.CATPart, .CATProduct, .CATDrawing).
Inputs: file_path (required).
catia_padB
Create a Pad (extrusion) from the last sketch. Extrudes a 2D profile into a 3D solid along the normal to the sketch plane.
Inputs: height (required), name, direction, symmetric, +2 more.
catia_pocketA
Create a Pocket (cut extrusion) from the last sketch. With direction='auto' (default) the tool checks that material was really removed and flips the direction if not (CATIA's default side is unreliable — proven live). Limits: fixed depth, 'up_to_next' (Jusqu'à la suivante) or 'up_to_last' (through).
Inputs: name, depth, limit, direction, +1 more.
catia_prepare_geometryA
Resolve ALL the geometry designations an assembly will need in ONE pass, before adding constraints. Designating a face/axis/edge inside a part re-opens that part in CATIA (a window opens, is searched and closes again, the screen reloads), which is the slowest thing an assembly does; done per constraint it costs ~1 s each and flickers the screen. Here every part is opened ONCE and all its points are searched together; the results are cached, so the constraints that follow are instant. Give one item per (component, element) you will use in constraints. Already-cached items are skipped. A wrong point is reported here, with the distance of the closest element, before any constraint exists. Safe to call repeatedly (idempotent).
Inputs: items (required).
catia_rect_patternB
Rectangular Pattern (Répétition rectangulaire) of a feature along two global axes.
Inputs: dir1_count (required), dir1_spacing (required), dir1, dir2, +4 more.
catia_rename_bodyB
Rename a Body (in Part.Bodies) via the .Name COM property.
Inputs: new_name (required), old_name.
catia_rename_featureA
Rename a feature or sketch in the active Part Body. Sets the .Name COM property directly (CATIA V5 exposes Feature.Name and Sketch.Name as read/write) — no macro/VBA bridge required. Use this right after creating a feature (catia_pad, catia_pocket, ...) instead of asking the user to rename it by hand in the GUI.
Inputs: new_name (required), kind, old_name.
catia_save_allAIdempotent
Save the whole assembly (Gestion des enregistrements): every new or modified part/sub-product is saved into 'folder' as .CATPart/.CATProduct, then the root product as <file_name>. Documents that already have a file and are unmodified are left untouched.
Inputs: folder (required), file_name.
catia_save_documentAIdempotent
Save the active CATIA document. Optionally save to a new path (Save As).
Inputs: file_path.
catia_screenshotARead-only
Capture CATIA. mode='window' (default): the whole CATIA window, specification tree included, as PNG — rendered by CATIA itself, so it is correct even when CATIA is behind other windows (what report screenshots need). mode='viewer': only the 3D view through CATIA's CaptureToFile (JPG/BMP/TIFF; a .png path becomes .jpg).
Inputs: file_path (required), mode.
catia_set_parameterB
Set the value of a named parameter in the active part. Useful for parametric design modifications.
Inputs: name (required), value (required).
catia_set_safetyA
LOWER the safety tier of this session (dangerous -> write -> read), for instance before a review or when handing the session to a less trusted step. It can never be raised from a tool call: raising it needs a human to restart the server with CATIA_MCP_SAFETY.
Inputs: tier (required).
catia_set_viewAIdempotent
Set the 3D view orientation (Z up, as CATIA's standard views) and reframe. front = looking along +Y; isometric = from (+X+Y+Z) corner; isometric_back/left/right = the three other upper corners.
Inputs: view (required).
catia_shaftA
Create a Shaft (revolution) from the last sketch. The revolution axis is the sketch axis: either a line drawn with catia_sketch_line(is_axis=true) (axis='sketch_line', default), or the sketch's own H or V axis (axis='h'/'v', e.g. 'the X axis available in the sketch' on an XY sketch). The closed profile must lie entirely on one side of the axis.
Inputs: axis, name, angle, sketch_name.
catia_shellB
Shell (Coque): hollow the solid, keeping walls of 'thickness' mm inside (outer_thickness adds material outside). The faces through open_face_points are removed (openings). Verified live.
Inputs: thickness (required), open_face_points (required), name, outer_thickness.
catia_sketch_arcA
Draw a circular arc defined by center, radius, and start/end angles (degrees). Angles are measured counter-clockwise from the positive X axis.
Inputs: cx (required), cy (required), radius (required), end_angle (required), +1 more.
catia_sketch_centered_rectangleB
Draw a rectangle centered at (cx, cy) with given width and height. Coordinates and dimensions in mm.
Inputs: width (required), height (required), cx, cy.
catia_sketch_circleB
Draw a circle in the active sketch. Coordinates and radius in mm.
Inputs: radius (required), cx, cy, construction.
catia_sketch_constraintB
Add a dimensional constraint to the active sketch. Supported types: distance, radius, angle, coincidence, tangent, perpendicular, parallel, horizontal, vertical, fix.
Inputs: type (required), value, geometry_index_1, geometry_index_2.
catia_sketch_get_geometryARead-only
List all geometry elements in the active sketch with their indices and types.
Inputs: no named parameters.
catia_sketch_lineA
Draw a line in the active sketch from (x1, y1) to (x2, y2). Coordinates in mm. Set is_axis=true to make it the sketch's axis (Sketch.CenterLine), REQUIRED before catia_shaft/catia_groove: without it CATIA has no revolution axis and the feature fails at update (confirmed live 2026-09-28). The axis is excluded from the profile, so draw the closed profile entirely on one side of it.
Inputs: x1 (required), x2 (required), y1 (required), y2 (required), +1 more.
catia_sketch_pointA
Create a point in the active sketch. Coordinates in mm.
Inputs: x (required), y (required).
catia_sketch_profileA
Draw a connected chain of lines and arcs whose ends are SHARED sketch points (a real closed contour, unlike separate lines/arcs whose ends only nearly meet). The tool of choice for any non-trivial Pad/Pocket profile and for half-profiles of revolution (Shaft/Groove: add the axis with catia_sketch_line(is_axis=true) or use axis='h'/'v'). Arcs are given by center + end point (radius = distance center-start; the end must be at the same distance).
Inputs: start (required), segments (required), closed.
catia_sketch_rectangleA
Draw a rectangle in the active sketch defined by two opposite corners. Creates 4 lines forming a closed profile. Coordinates in mm.
Inputs: x1 (required), x2 (required), y1 (required), y2 (required).
catia_sketch_splineB
Draw a spline through a list of control points. Each point is [x, y] in mm.
Inputs: points (required), closed.
catia_sketch_two_circle_contourC
Closed outer contour of two circles joined by their external tangent lines (connecting rod, lever, tow bar, arm). Tangent points are computed exactly and all ends are shared points.
Inputs: c1 (required), c2 (required), r1 (required), r2 (required).
catia_thicknessC
Thickness (Épaisseur): offset the faces through face_points by 'offset' mm (negative removes). Verified live.
Inputs: offset (required), face_points (required), name.
catia_threadA
Thread / tap (Filetage / Taraudage, cosmetic as in the GUI) on a cylindrical face, starting from a planar limit face. Faces designated by a 3D point on each (lateral_face_point on the cylinder, limit_face_point on the end face where the thread starts). E.g. M100x4 over 47 mm: diameter=100, pitch=4, depth=47. Verified live.
Inputs: depth (required), pitch (required), diameter (required), limit_face_point (required), +4 more.
catia_update_assemblyBIdempotent
Update the assembly (Mise à jour): solves the constraints and moves the components.
Inputs: no named parameters.
catia_update_partAIdempotent
Force update/rebuild of the active part. Recalculates all features.
Inputs: no named parameters.
drawing_extract_geometryARead-only
Extract EXACT geometry from a vector PDF drawing: numbered circles, arcs and line segments with centre, radius R and diameter D in part mm. Dimension values are drawn as vector strokes, not text: read them by eye on drawing_render, then CONFIRM with this measured geometry (they must agree; when they do not, the measurement wins). Workflow: (1) drawing_render the whole page to find the views and title block scale; (2) call this on one view's region WITHOUT origin to find the centre/axis (each entity lists its paper position); (3) call again with origin and scale to get part coordinates to feed the sketch tools. Beware: R vs D, rounded dimensions (a drawn tangent may differ from the written value by a few hundredths), wrong title block scale.
Inputs: pdf_path (required), page, scale, origin, +4 more.
drawing_overlayARead-only
Draw a CATIA sketch (in part mm) on top of the PDF drawing and return the PNG path: the coloured sketch must follow the black drawing lines everywhere. Do this for every non-trivial profile BEFORE pad/shaft, then LOOK at the image. sketch takes the same arguments as the sketch tools: a catia_sketch_profile object {start, segments}, an entity {type: line|circle|arc|rectangle, ...}, or a list of them. hv maps the sketch (h, v) axes to the view (X right, Y up): 'h,v', '-h,v', 'v,h', ...
Inputs: pdf_path (required), hv, dpi, page, +6 more.
drawing_renderARead-only
Render a page or region of a PDF drawing to a PNG and return its path (view it with an image reader). Use it to locate views and to READ the dimension values by eye: they are vectorised, so text search cannot find them. Zoom with region + higher dpi (300-400) for small annotations. With grid (part mm) and origin, a graduated grid in PART millimetres is drawn to help read positions.
Inputs: pdf_path (required), dpi, grid, page, +4 more.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 121 tools
Most tools target clearly distinct CAD operations (sketching vs pad vs fillet vs assembly constraint), and descriptions provide strong context. However, with 121 tools there are some overlaps, such as multiple measurement and document-close/save variants, that could cause confusion.
The overwhelming majority of tools use a consistent snake_case verb_noun pattern with a catia_ prefix. The only deviation is the drawing helper tools (drawing_render, drawing_extract_geometry, drawing_overlay) which lack the catia_ prefix used by the rest of the drawing family.
121 tools far exceeds the 50+ threshold for an extreme mismatch, making the set difficult to navigate even for a complex CAD automation domain. Each tool may earn its place individually, but the sheer count creates a heavy cognitive load.
The surface covers the full CATIA V5 lifecycle: connection, document management, sketching, part design features, generative surface design, assembly, drawing, analysis, export, safety, and a lessons knowledge base. No obvious operations are missing for the stated purpose.
Maintenance
Related MCP Connectors
Parametric 3D CAD for AI agents: build print-ready parts, check them, export STL, 3MF or STEP.
CAD in ChatGPT and Claude: editable parts, STEP/STL/drawings, in-chat 3D, automatic checks.
Design, build and run teams of AI agents with checked handoffs between them.
1Preflight QA for AI-agent deliverables with structured verdicts and repair guidance.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables safe, AI-driven CATIA V5 modeling through 36 guarded tools for creating and inspecting parametric CATParts, including sketch, part design, GSD/surface, and transaction operations, while preventing mutation of existing documents.1Apache 2.0
- FlicenseNot gradedqualityAmaintenanceEnables AI agents to draft, read back, validate and take off real CAD drawings — mechanical parts and sheets, architectural plans with measured room areas, and P&IDs — through a typed tool contract covering ISO GD&T, dimension tolerances, ISO/ANSI standards and schedules. It drives either a live desktop drafting seat over COM on Windows or a headless DXF engine on any platform, with tool packs and discovery mode to keep the advertised surface cheap.-
- FlicenseNot gradedqualityAmaintenanceEnables AI agents to draft, inspect, and validate CAD drawings through a large typed tool catalog, driving either a live desktop CAD seat over COM or a headless ezdxf engine on any platform. It covers ISO GD&T and dimension-tolerance checks plus P&ID, mechanical, and architectural sheet generation, with selectable tool packs and a low-token discovery mode.-
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to drive desktop CAD software through natural language with verified execution, failure recovery, and traceable results across modeling, assemblies, drawings, exports, motion, FEA, and related engineering workflows.MIT