CATIA V5 MCP Server
Connect AI agents to Dassault Systemes CATIA V5 via the Model Context Protocol (MCP) — works with Claude, Cursor, Windsurf, Cline, VS Code, Codex and any MCP-compatible client.

The first open-source MCP server for CATIA V5. Drive parametric CAD modeling, measurement, drawing export and COM automation in natural language, from any AI agent that speaks MCP.

What it does
This MCP server exposes 85 tools that let an AI agent:
- Create and manage documents — new Part, Product (assembly), open, save, close
- 2D Sketching — lines, rectangles, circles, arcs, splines, points, constraints
- Part Design — Pad, Pocket, Shaft, Groove, Fillet, Chamfer, Hole, Shell, Draft, Thickness, Patterns (rectangular/circular/user), Mirror
- Generative Shape Design (GSD) — 3D wireframe (points, lines, planes, splines, circles), Multi-sections Surface (loft), Sweep, Extrude, Revolve, Fill, Blend, Offset, Join, Split, Trim, Symmetry, ThickSurface/CloseSurface to solids
- Assembly — add components, Fix/Coincidence/Offset/Angle constraints, move/rotate
- Measurement — distance, inertia, bounding box, parameters
- Export — STEP, IGES, STL, 3DXML, VRML, screenshots
- View control — set standard views, fit all, capture screenshots
- Drafting — create Drawing documents, generative views and associative dimensions (experimental, field-contributed)
- Diagnostics — report the CATIA release and probe which automation APIs the installation exposes
Requirements
- Windows (COM automation is Windows-only)
- CATIA V5 installed and licensed (R2016+)
- Python 3.10+
- Any MCP client: Claude Desktop, Claude Code, Cursor, Windsurf, Cline, VS Code (Copilot/MCP), Codex CLI, ChatGPT via an HTTP bridge, and others
Compatibility notes (field reports)
- V5R20 (2010): core workflow confirmed working end to end (document
management, sketcher, Part Design pad creation, GSD geometrical sets,
views, screenshots). An initial report of
ShapeFactory.AddNewPad being
missing turned out to be a stale pywin32 gen_py cache, not the
release: clearing the cache restored the methods (see Troubleshooting).
Measurement notes for R20: volume, area and parameters work directly;
center of gravity, the inertia matrix and the bounding box now go
through documented routes (SystemService.Evaluate detour, Inertia
object, vertex sweep) that await live confirmation there.
- V5-6 2020: full tool surface in active use by contributors.
catia_measure_distance accepts tree names (Pad.1, Sketch.2) and indexed
topology (Face.N / Edge.N from catia_list_faces / catia_list_edges).
The topology path follows a V5R20 field diagnosis (selection Reference
property instead of CreateReferenceFromObject, which rejects HSO topology)
and awaits live confirmation on real CATIA; reports welcome.
Reports from other releases are welcome, open an issue with your CATIA version
and the tool results (the catia_diagnose tool output is the ideal payload).
Quick Install (Recommended)
git clone https://github.com/daiemon12/catia-v5-mcp-server.git
cd catia-v5-mcp-server
bash setup.sh
The script handles everything: dependencies, Claude Desktop configuration, and verification. Using another MCP client? See the per-client setup below.
Manual Installation
1. Clone the repository
git clone https://github.com/daiemon12/catia-v5-mcp-server.git
cd catia-v5-mcp-server
2. Install dependencies
pip install -e .
Or manually:
pip install mcp pywin32
3. Connect your MCP client
The server speaks standard MCP over stdio, so it works with every
MCP-compatible client. The command is always the same:
python -m catia_mcp (or an absolute path to catia_mcp/server.py).
Claude Desktop
Edit the config file:
- Windows:
%APPDATA%\Claude\claude_desktop_config.json
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json
{
"mcpServers": {
"catia-v5": {
"command": "python",
"args": ["-m", "catia_mcp"]
}
}
}
Claude Code
claude mcp add catia-v5 python -- -m catia_mcp
Cursor
Add to ~/.cursor/mcp.json (or .cursor/mcp.json in your project):
{
"mcpServers": {
"catia-v5": {
"command": "python",
"args": ["-m", "catia_mcp"]
}
}
}
Windsurf
Add to ~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"catia-v5": {
"command": "python",
"args": ["-m", "catia_mcp"]
}
}
}
Cline
In VS Code: Cline icon > MCP Servers > Configure, then add:
{
"mcpServers": {
"catia-v5": {
"command": "python",
"args": ["-m", "catia_mcp"]
}
}
}
VS Code (GitHub Copilot / native MCP)
Add to .vscode/mcp.json:
{
"servers": {
"catia-v5": {
"type": "stdio",
"command": "python",
"args": ["-m", "catia_mcp"]
}
}
}
Codex CLI (OpenAI)
Add to ~/.codex/config.toml:
[mcp_servers.catia-v5]
command = "python"
args = ["-m", "catia_mcp"]
ChatGPT (desktop / web)
ChatGPT only connects to remote MCP servers over HTTP, not to local
stdio processes. Expose this server through a stdio-to-HTTP bridge such
as mcp-proxy or supergateway on the CATIA machine, then add the
resulting URL as a connector in ChatGPT's developer mode. A native HTTP
transport is on the roadmap.
Other MCP hosts
Any client that launches stdio MCP servers works: configure a server
named catia-v5 with command python and args ["-m", "catia_mcp"],
run from a machine where CATIA V5 is installed.
4. Start CATIA V5
Make sure CATIA V5 is running before asking your agent to interact with it. The server will automatically connect to the running instance.
If CATIA V5 is not running, the server will attempt to launch it (requires CATIA to be registered as COM server: cnext.exe /regserver).
Usage Examples
Once configured, just talk to your AI agent:
Create a simple part
"Create a new CATIA part. Draw a 100x60mm rectangle centered at the origin on the XY plane, then extrude it 40mm."
Design a bracket
"Design a mounting bracket: start with a 120x80mm base plate, 5mm thick. Add 4 M6 mounting holes at the corners with 10mm edge distance. Then add two vertical ribs 30mm tall."
Parametric modification
"Show me all parameters of the active part. Then change the pad height to 60mm."
Export for manufacturing
"Export the current part to STEP format at C:/export/bracket.stp and take a screenshot of the isometric view."
Assembly
"Create a new assembly. Add the bracket from C:/parts/bracket.CATPart and the base from C:/parts/base.CATPart. Fix the base, then create a coincidence constraint between the two."
Architecture
catia-v5-mcp-server/
├── catia_mcp/
│ ├── __init__.py
│ ├── __main__.py # python -m catia_mcp entry point
│ ├── server.py # MCP Server — tool registration & routing
│ ├── connection.py # COM connection manager (win32com)
│ └── tools/
│ ├── __init__.py
│ ├── document.py # Document management (9 tools)
│ ├── sketcher.py # 2D Sketch tools (11 tools)
│ ├── part_design.py # 3D Part Design features (17 tools)
│ ├── gsd.py # Generative Shape Design — wireframe & surfaces (24 tools)
│ ├── assembly.py # Assembly/Product tools (9 tools)
│ ├── measurement.py # Measurement & analysis (6 tools)
│ ├── drawing.py # Drafting: drawings, views & dimensions (4 tools)
│ ├── diagnostics.py # Installation diagnostics (1 tool)
│ └── export.py # Export & view control (4 tools)
├── pyproject.toml
├── requirements.txt
└── README.md
How it works
AI agent (Claude, Cursor, Windsurf, Cline, ...)
│
│ stdio (MCP JSON-RPC)
▼
catia_mcp/server.py (MCP Server)
│
│ Tool routing
▼
catia_mcp/tools/*.py (Tool modules)
│
│ win32com.client (COM Automation)
▼
CATIA V5 Application
- The MCP client sends tool calls over stdio
- The server routes each call to the appropriate tool module
- Each tool module uses
win32com.client to drive CATIA V5 via COM
- Results (JSON, text) are returned to the agent
Diagnostics (1)
Troubleshooting
"AttributeError" on methods that should exist (AddNewPad, etc.)
A stale pywin32 COM cache is the most common cause, confirmed in the field:
methods that genuinely exist stop resolving. Delete the generated bindings
cache and restart the server:
%LOCALAPPDATA%\Temp\gen_py\ (or %TEMP%\gen_py\)
Close CATIA and the MCP server first, delete the whole gen_py folder, then
restart. Run catia_diagnose to verify which APIs resolve afterwards.
"pywin32 is not installed"
pip install pywin32
This server requires Windows. It will not work on macOS or Linux.
"Failed to connect to CATIA V5"
- Make sure CATIA V5 is running
- Register CATIA as COM server: navigate to
C:\Program Files\Dassault Systemes\B<version>\<os>\code\bin\ and run cnext.exe /regserver
- Check that no modal dialog is blocking CATIA
"No active document"
Create or open a document first using catia_new_part or catia_open_document.
Some measurement methods may not work with late binding. If you encounter issues, try using pycatia as an alternative backend (contribution welcome).
Contributing
This project is open-source. See CONTRIBUTING.md for guidelines. Contributions welcome:
- Drawing tools (2D drafting)
- Knowledgeware (formulas, rules, check)
- pycatia backend as alternative to raw win32com
- Tests with COM mocking
- 3DEXPERIENCE CATIA support
License
MIT
Credits
Inspired by: