Skip to main content
Glama
catia-v5-mcp

catia-v5-mcp

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

catia_batch validates every step against the tool schemas before touching CATIA, then runs them with stop-on-error and a compact timed report. dry_run validates only.

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 catia_add_lesson; they are merged at the next start. The server gets smarter with use.

"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); catia_get_tree audits names; sketches can be overlaid on the source drawing.

Default names (Pad.1, Extrusion.3) make a tree unreadable

Every creation tool takes name; the server renames the new object, reads the name back, hides consumed sketches, and warns when a default is left.

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 (CATIA_MCP_TOOLSETS=part, assembly, ...) advertise only what the task needs; hidden tools still work. Prompts carry the proven workflow so a model that is weak at 3D follows the right sequence.

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)

catia_prepare_geometry opens each part once and resolves all its designations together, a designation cache, and deferred solving: a 58-constraint wheel went from 293 s to 47 s (details below).

A failed call leaves a broken feature in the tree

The server removes what a failed creation call left behind and tells you ([cleanup]).

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 tools

Claude Code:

claude mcp add catia-v5 -- python -m catia_mcp

Claude 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 failure

templates/ 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

CATIA_MCP_TOOLSETS

full

Advertised groups or presets: part, assembly, surface, review, or a list of groups

CATIA_MCP_WATCHDOG

1

Popup watchdog

CATIA_MCP_LOCK

0

Cross-process lock so several agents queue instead of interleaving

CATIA_MCP_HANG_SECONDS

0

Log a call that blocks longer than this; CATIA_MCP_HANG_KILL=1 also kills CATIA

CATIA_MCP_AUTOTRACE

0

CSV line + screenshot after every feature tool

CATIA_MCP_HOME

%APPDATA%\catia-mcp

State: log, lessons, lock, trace

CATIA_MCP_OFFLINE

unset

Never attach to or start CATIA (tests, CI, unlicensed machines)

CATIA_MCP_PROFILE

0

Append to every call the split of its time (snapshot, execute, checks, naming)

CATIA_MCP_DESIGNATION_CACHE

1

Cache face/axis/edge designations per (file, modification time, point)

CATIA_MCP_DESIGNATION_CACHE_DISK

1

Keep that cache on disk between sessions (a rebuild of a 70-component assembly went from 780 s to 164 s)

CATIA_MCP_SAFETY

dangerous

Safety tier: read, write or dangerous (see above)

CATIA_MCP_CLEANUP_ON_FAILURE

1

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-LIVE in 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 tools
catia_activate_bodyA
Idempotent

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_modelA
Read-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_operationA
Destructive

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_analysisA
Read-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_displayA
Idempotent

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_allA
Destructive

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_documentC
Destructive

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_connectA
Idempotent

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_featureA
Destructive

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_modelA
Read-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_disconnectA
Idempotent

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_checkA
Read-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_infoA
Read-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_allA
Idempotent

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_infoB
Read-only

Get detailed info about the active CATIA document: name, type, path, part bodies, features, etc.

Inputs: no named parameters.

catia_get_bounding_boxA
Read-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_inertiaA
Read-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_parametersB
Read-only

List all user-defined and computed parameters of the active part. Includes dimensions, formulas, and design tables.

Inputs: filter.

catia_get_safety_stateA
Read-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_treeA
Read-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_geosetA
Idempotent

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_bodyB
Idempotent

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_lessonsA
Read-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_bodiesA
Read-only

List all Bodies in the active Part, their feature counts, and which one is currently active (InWorkObject).

Inputs: no named parameters.

catia_list_componentsA
Read-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_constraintsA
Read-only

Every constraint of the root assembly with its type and status (OK / broken...), plus a naming audit.

Inputs: no named parameters.

catia_list_documentsA
Read-only

List all open documents in CATIA V5 with their types and paths.

Inputs: no named parameters.

catia_list_edgesA
Read-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_facesA
Read-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_featuresA
Read-only

List all features in the active Part Body with their names and types.

Inputs: no named parameters.

catia_measure_distanceB
Read-only

Measure the minimum distance between two geometry elements. Returns distance in mm.

Inputs: element1 (required), element2 (required).

catia_measure_modelA
Read-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_allA
Idempotent

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_documentA
Idempotent

Save the active CATIA document. Optionally save to a new path (Save As).

Inputs: file_path.

catia_screenshotA
Read-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_viewA
Idempotent

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_geometryA
Read-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_assemblyB
Idempotent

Update the assembly (Mise à jour): solves the constraints and moves the components.

Inputs: no named parameters.

catia_update_partA
Idempotent

Force update/rebuild of the active part. Recalculates all features.

Inputs: no named parameters.

drawing_extract_geometryA
Read-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_overlayA
Read-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_renderA
Read-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

    B3.4/5.0

    Scored across 121 tools

    Disambiguation4/5

    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.

    Naming Consistency4/5

    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.

    Tool Count1/5

    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.

    Completeness5/5

    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

    ActivitySlowing
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      C
      maintenance
      Enables 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.
      1
      Apache 2.0
    • F
      license
      Not graded
      quality
      A
      maintenance
      Enables 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.
      -
    • F
      license
      Not graded
      quality
      A
      maintenance
      Enables 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.
      -
    • A
      license
      Not graded
      quality
      C
      maintenance
      Enables 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