Skip to main content
Glama
neka-nat
by neka-nat

insert_part_from_library

Add pre-designed parts to your FreeCAD project using a library addon. Specify the part's relative path to integrate it directly into your design.

Instructions

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.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
relative_pathYes

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
resultYes

Implementation Reference

  • MCP handler for 'insert_part_from_library' tool. Proxies to FreeCADConnection RPC and adds response with optional screenshot.
    @mcp.tool()
    def insert_part_from_library(ctx: Context, relative_path: str) -> list[TextContent | ImageContent]:
        """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.
        """
        freecad = get_freecad_connection()
        try:
            res = freecad.insert_part_from_library(relative_path)
            screenshot = freecad.get_active_screenshot()
            
            if res["success"]:
                response = [
                    TextContent(type="text", text=f"Part inserted from library: {res['message']}"),
                ]
                return add_screenshot_if_available(response, screenshot)
            else:
                response = [
                    TextContent(type="text", text=f"Failed to insert part from library: {res['error']}"),
                ]
                return add_screenshot_if_available(response, screenshot)
        except Exception as e:
            logger.error(f"Failed to insert part from library: {str(e)}")
            return [
                TextContent(type="text", text=f"Failed to insert part from library: {str(e)}")
            ]
  • Core implementation: merges the specified FCStd part file from the user's parts library into the active FreeCAD document.
    def insert_part_from_library(relative_path):
        parts_lib_path = os.path.join(FreeCAD.getUserAppDataDir(), "Mod", "parts_library")
        part_path = os.path.join(parts_lib_path, relative_path)
    
        if not os.path.exists(part_path):
            raise FileNotFoundError(f"Not found: {part_path}")
    
        FreeCADGui.ActiveDocument.mergeProject(part_path)
  • Proxy method in FreeCADConnection class that forwards the call to the XML-RPC server.
    def insert_part_from_library(self, relative_path: str) -> dict[str, Any]:
        return self.server.insert_part_from_library(relative_path)
  • RPC server registration of FreeCADRPC instance, which exposes the insert_part_from_library method.
    rpc_server_instance = SimpleXMLRPCServer(
        (host, port), allow_none=True, logRequests=False
    )
    rpc_server_instance.register_instance(FreeCADRPC())
  • RPC method dispatcher: queues the insertion task for GUI thread safety and returns success/error response.
    def insert_part_from_library(self, relative_path):
        rpc_request_queue.put(lambda: self._insert_part_from_library(relative_path))
        res = rpc_response_queue.get()
        if res is True:
            return {"success": True, "message": "Part inserted from library."}
        else:
            return {"success": False, "error": res}

Tool Definition Quality

Score is being calculated. Check back soon.

Install Server

Other Tools

Related Tools

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/neka-nat/freecad-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server