Skip to main content
Glama
fusion_action.py5.11 kB
""" Fusion Action Schema Defines structured JSON actions that Fusion 360 can execute """ from typing import Any, Dict, List, Optional, Literal, Union from pydantic import BaseModel, Field class ActionParams(BaseModel): """Base class for action parameters""" class Config: extra = "allow" class CreateBoxParams(ActionParams): """Parameters for creating a box""" width: float = Field(gt=0, description="Box width") height: float = Field(gt=0, description="Box height") depth: float = Field(gt=0, description="Box depth") unit: str = Field(default="mm", description="Unit of measurement") position: Optional[Dict[str, float]] = Field(default=None, description="Position coordinates") class CreateCylinderParams(ActionParams): """Parameters for creating a cylinder""" radius: float = Field(gt=0, description="Cylinder radius") height: float = Field(gt=0, description="Cylinder height") unit: str = Field(default="mm", description="Unit of measurement") position: Optional[Dict[str, float]] = Field(default=None, description="Position coordinates") class CreateSphereParams(ActionParams): """Parameters for creating a sphere""" radius: float = Field(gt=0, description="Sphere radius") unit: str = Field(default="mm", description="Unit of measurement") position: Optional[Dict[str, float]] = Field(default=None, description="Position coordinates") class CreateHoleParams(ActionParams): """Parameters for creating a hole""" diameter: float = Field(gt=0, description="Hole diameter") depth: Optional[float] = Field(default=None, description="Hole depth (None for through)") position: Dict[str, float] = Field(description="Hole position coordinates") unit: str = Field(default="mm", description="Unit of measurement") class CreateSketchParams(ActionParams): """Parameters for creating a sketch""" plane: Literal["XY", "XZ", "YZ"] = Field(description="Sketch plane") shapes: List[Dict[str, Any]] = Field(description="List of shapes to draw") class ExtrudeParams(ActionParams): """Parameters for extrusion""" profile: str = Field(description="Profile or sketch name") distance: float = Field(description="Extrude distance") operation: Literal["new", "join", "cut", "intersect"] = Field(default="new") unit: str = Field(default="mm", description="Unit of measurement") class FilletParams(ActionParams): """Parameters for filleting edges""" edges: List[str] = Field(description="Edge identifiers") radius: float = Field(gt=0, description="Fillet radius") unit: str = Field(default="mm", description="Unit of measurement") class ModifyParameterParams(ActionParams): """Parameters for modifying design parameters""" parameter_name: str = Field(description="Parameter name") value: Union[float, str, int] = Field(description="New parameter value") unit: Optional[str] = Field(default=None, description="Unit if applicable") class ApplyMaterialParams(ActionParams): """Parameters for applying material""" material_name: str = Field(description="Material name") body: Optional[str] = Field(default=None, description="Body name (None for all)") class FusionAction(BaseModel): """Main Fusion action structure""" action: str = Field(description="Action type (verb_noun format)") params: Dict[str, Any] = Field(description="Action parameters") explanation: Optional[str] = Field(default=None, description="Human-readable explanation") safety_checks: List[str] = Field(default_factory=list, description="Safety validations performed") dependencies: List[str] = Field(default_factory=list, description="Required prior actions") class Config: json_schema_extra = { "example": { "action": "create_box", "params": { "width": 20, "height": 10, "depth": 5, "unit": "mm" }, "explanation": "Creating a rectangular box 20x10x5mm", "safety_checks": ["dimensions_positive", "units_valid"] } } class ActionSequence(BaseModel): """Sequence of multiple actions""" actions: List[FusionAction] = Field(description="Ordered list of actions") total_steps: int = Field(description="Total number of steps") estimated_time_seconds: Optional[float] = Field(default=None) class Config: json_schema_extra = { "example": { "actions": [ { "action": "create_box", "params": {"width": 20, "height": 20, "depth": 5}, "explanation": "Create base plate" }, { "action": "create_hole", "params": {"diameter": 5, "position": {"x": 10, "y": 10}}, "explanation": "Add mounting hole" } ], "total_steps": 2 } }

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/jaskirat1616/fusion360-mcp'

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