neka-nat/freecad-mcp
If you are the rightful owner of freecad-mcp and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to henry@mcphub.com.
FreeCAD MCP is a Model Context Protocol server that allows users to control FreeCAD from Claude Desktop, enabling automation and integration of design tasks.
Tools
Functions exposed to the LLM to take actions
create_document
Create a new document in FreeCAD.
Args: name: The name of the document to create.
Returns: A message indicating the success or failure of the document creation.
Examples:
If you want to create a document named "MyDocument", you can use the following data.
json { "name": "MyDocument" }
create_object
Create a new object in FreeCAD. Object type is starts with "Part::" or "Draft::" or "PartDesign::" or "Fem::".
Args: doc_name: The name of the document to create the object in. obj_type: The type of the object to create (e.g. 'Part::Box', 'Part::Cylinder', 'Draft::Circle', 'PartDesign::Body', etc.). obj_name: The name of the object to create. obj_properties: The properties of the object to create.
Returns: A message indicating the success or failure of the object creation and a screenshot of the object.
Examples:
If you want to create a cylinder with a height of 30 and a radius of 10, you can use the following data.
json { "doc_name": "MyCylinder", "obj_name": "Cylinder", "obj_type": "Part::Cylinder", "obj_properties": { "Height": 30, "Radius": 10, "Placement": { "Base": { "x": 10, "y": 10, "z": 0 }, "Rotation": { "Axis": { "x": 0, "y": 0, "z": 1 }, "Angle": 45 } }, "ViewObject": { "ShapeColor": [0.5, 0.5, 0.5, 1.0] } } }
If you want to create a circle with a radius of 10, you can use the following data.
```json
{
"doc_name": "MyCircle",
"obj_name": "Circle",
"obj_type": "Draft::Circle",
}
```
If you want to create a FEM analysis, you can use the following data.
```json
{
"doc_name": "MyFEMAnalysis",
"obj_name": "FemAnalysis",
"obj_type": "Fem::AnalysisPython",
}
```
If you want to create a FEM constraint, you can use the following data.
```json
{
"doc_name": "MyFEMConstraint",
"obj_name": "FemConstraint",
"obj_type": "Fem::ConstraintFixed",
"analysis_name": "MyFEMAnalysis",
"obj_properties": {
"References": [
{
"object_name": "MyObject",
"face": "Face1"
}
]
}
}
```
If you want to create a FEM mechanical material, you can use the following data.
```json
{
"doc_name": "MyFEMAnalysis",
"obj_name": "FemMechanicalMaterial",
"obj_type": "Fem::MaterialCommon",
"analysis_name": "MyFEMAnalysis",
"obj_properties": {
"Material": {
"Name": "MyMaterial",
"Density": "7900 kg/m^3",
"YoungModulus": "210 GPa",
"PoissonRatio": 0.3
}
}
}
```
If you want to create a FEM mesh, you can use the following data.
The `Part` property is required.
```json
{
"doc_name": "MyFEMMesh",
"obj_name": "FemMesh",
"obj_type": "Fem::FemMeshGmsh",
"analysis_name": "MyFEMAnalysis",
"obj_properties": {
"Part": "MyObject",
"ElementSizeMax": 10,
"ElementSizeMin": 0.1,
"MeshAlgorithm": 2
}
}
```
edit_object
Edit an object in FreeCAD.
This tool is used when the create_object
tool cannot handle the object creation.
Args: doc_name: The name of the document to edit the object in. obj_name: The name of the object to edit. obj_properties: The properties of the object to edit.
Returns: A message indicating the success or failure of the object editing and a screenshot of the object.
delete_object
Delete an object in FreeCAD.
Args: doc_name: The name of the document to delete the object from. obj_name: The name of the object to delete.
Returns: A message indicating the success or failure of the object deletion and a screenshot of the object.
execute_code
Execute arbitrary Python code in FreeCAD.
Args: code: The Python code to execute.
Returns: A message indicating the success or failure of the code execution, the output of the code execution, and a screenshot of the object.
get_view
Get a screenshot of the active view.
Args: view_name: The name of the view to get the screenshot of. The following views are available: - "Isometric" - "Front" - "Top" - "Right" - "Back" - "Left" - "Bottom" - "Dimetric" - "Trimetric"
Returns: A screenshot of the active view.
insert_part_from_library
Insert a part from the parts library addon.
Args: relative_path: The relative path of the part to insert.
Returns: A message indicating the success or failure of the part insertion and a screenshot of the object.
get_objects
Get all objects in a document. You can use this tool to get the objects in a document to see what you can check or edit.
Args: doc_name: The name of the document to get the objects from.
Returns: A list of objects in the document and a screenshot of the document.
get_object
Get an object from a document. You can use this tool to get the properties of an object to see what you can check or edit.
Args: doc_name: The name of the document to get the object from. obj_name: The name of the object to get.
Returns: The object and a screenshot of the object.
get_parts_list
Get the list of parts in the parts library addon.
Prompts
Interactive templates invoked by user choice
No prompts
Resources
Contextual data attached and managed by the client