get_view
Capture screenshots of 3D CAD designs from specific viewpoints like Isometric, Front, Top, and other orientations for documentation and review purposes.
Instructions
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.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| view_name | Yes |
Implementation Reference
- src/freecad_mcp/server.py:438-465 (handler)The primary handler for the 'get_view' tool. It is registered via the @mcp.tool() decorator and implements the logic to retrieve a screenshot from the specified FreeCAD view by calling the helper method.@mcp.tool() def get_view(ctx: Context, view_name: Literal["Isometric", "Front", "Top", "Right", "Back", "Left", "Bottom", "Dimetric", "Trimetric"]) -> list[ImageContent | TextContent]: """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. """ freecad = get_freecad_connection() screenshot = freecad.get_active_screenshot(view_name) if screenshot is not None: return [ImageContent(type="image", data=screenshot, mimeType="image/png")] else: return [TextContent(type="text", text="Cannot get screenshot in the current view type (such as TechDraw or Spreadsheet)")]
- src/freecad_mcp/server.py:45-79 (helper)Supporting helper method in the FreeCADConnection class used by get_view to safely obtain a screenshot, including view compatibility checks.def get_active_screenshot(self, view_name: str = "Isometric") -> str | None: try: # Check if we're in a view that supports screenshots result = self.server.execute_code(""" import FreeCAD import FreeCADGui if FreeCAD.Gui.ActiveDocument and FreeCAD.Gui.ActiveDocument.ActiveView: view_type = type(FreeCAD.Gui.ActiveDocument.ActiveView).__name__ # These view types don't support screenshots unsupported_views = ['SpreadsheetGui::SheetView', 'DrawingGui::DrawingView', 'TechDrawGui::MDIViewPage'] if view_type in unsupported_views or not hasattr(FreeCAD.Gui.ActiveDocument.ActiveView, 'saveImage'): print("Current view does not support screenshots") False else: print(f"Current view supports screenshots: {view_type}") True else: print("No active view") False """) # If the view doesn't support screenshots, return None if not result.get("success", False) or "Current view does not support screenshots" in result.get("message", ""): logger.info("Screenshot unavailable in current view (likely Spreadsheet or TechDraw view)") return None # Otherwise, try to get the screenshot return self.server.get_active_screenshot(view_name) except Exception as e: # Log the error but return None instead of raising an exception logger.error(f"Error getting screenshot: {e}") return None