fusion360-mcp-server
Fusion 360 MCP Server is an interface between Cline and Autodesk Fusion 360, allowing for natural language commands to be translated into executable scripts in Fusion 360. It facilitates automation through an MCP server, offering access to a variety of Fusion 360 tools and features.
Fusion 360 MCP Server
A Model Context Protocol (MCP) server that interfaces between Cline and Autodesk Fusion 360. This server exposes Fusion 360 toolbar-level commands as callable tools that map directly to Fusion's API.
๐ง Overview
This project allows Cline to:
- Parse natural language prompts (e.g., "Make a box with rounded corners")
- Resolve them into Fusion tool actions (e.g., CreateSketch โ DrawRectangle โ Extrude โ Fillet)
- Call those tools through this MCP server
- Return Python scripts that can be executed in Fusion 360
๐ ๏ธ Installation
Prerequisites
- Python 3.9 or higher
- Autodesk Fusion 360
Setup
-
Clone this repository:
git clone https://github.com/yourusername/fusion360-mcp-server.git cd fusion360-mcp-server
-
Install dependencies:
pip install -r requirements.txt
๐ Usage
Running the HTTP Server
cd src
python main.py
This will start the FastAPI server at http://127.0.0.1:8000
.
Running as an MCP Server
cd src
python main.py --mcp
This will start the server in MCP mode, reading from stdin and writing to stdout.
API Endpoints
GET /
: Check if the server is runningGET /tools
: List all available toolsPOST /call_tool
: Call a single tool and generate a scriptPOST /call_tools
: Call multiple tools in sequence and generate a script
Example API Calls
List Tools
curl -X GET http://127.0.0.1:8000/tools
Call a Single Tool
curl -X POST http://127.0.0.1:8000/call_tool \
-H "Content-Type: application/json" \
-d '{
"tool_name": "CreateSketch",
"parameters": {
"plane": "xy"
}
}'
Call Multiple Tools
curl -X POST http://127.0.0.1:8000/call_tools \
-H "Content-Type: application/json" \
-d '{
"tool_calls": [
{
"tool_name": "CreateSketch",
"parameters": {
"plane": "xy"
}
},
{
"tool_name": "DrawRectangle",
"parameters": {
"width": 10,
"depth": 10
}
},
{
"tool_name": "Extrude",
"parameters": {
"height": 5
}
}
]
}'
๐ฆ Available Tools
The server currently supports the following Fusion 360 tools:
Create
- CreateSketch: Creates a new sketch on a specified plane
- DrawRectangle: Draws a rectangle in the active sketch
- DrawCircle: Draws a circle in the active sketch
- Extrude: Extrudes a profile into a 3D body
- Revolve: Revolves a profile around an axis
Modify
- Fillet: Adds a fillet to selected edges
- Chamfer: Adds a chamfer to selected edges
- Shell: Hollows out a solid body with a specified wall thickness
- Combine: Combines two bodies using boolean operations
Export
- ExportBody: Exports a body to a file
๐ MCP Integration
To use this server with Cline, add it to your MCP settings configuration file:
{
"mcpServers": {
"fusion360": {
"command": "python",
"args": ["/path/to/fusion360-mcp-server/src/main.py", "--mcp"],
"env": {},
"disabled": false,
"autoApprove": []
}
}
}
๐งฉ Tool Registry
Tools are defined in src/tool_registry.json
. Each tool has:
- name: The name of the tool
- description: What the tool does
- parameters: The parameters the tool accepts
- docs: Link to relevant Fusion API documentation
Example tool definition:
{
"name": "Extrude",
"description": "Extrudes a profile into a 3D body.",
"parameters": {
"profile_index": {
"type": "integer",
"description": "Index of the profile to extrude.",
"default": 0
},
"height": {
"type": "number",
"description": "Height of the extrusion in mm."
},
"operation": {
"type": "string",
"description": "The operation type (e.g., 'new', 'join', 'cut', 'intersect').",
"default": "new"
}
},
"docs": "https://help.autodesk.com/view/fusion360/ENU/?guid=GUID-6D381FCD-22AB-4F08-B4BB-5D3A130189AC"
}
๐ Script Generation
The server generates Fusion 360 Python scripts based on the tool calls. These scripts can be executed in Fusion 360's Script Editor.
Example generated script:
import adsk.core, adsk.fusion, traceback
def run(context):
ui = None
try:
app = adsk.core.Application.get()
ui = app.userInterface
design = app.activeProduct
# Get the active component in the design
component = design.rootComponent
# Create a new sketch on the xy plane
sketches = component.sketches
xyPlane = component.xYConstructionPlane
sketch = sketches.add(xyPlane)
# Draw a rectangle
rectangle = sketch.sketchCurves.sketchLines.addTwoPointRectangle(
adsk.core.Point3D.create(0, 0, 0),
adsk.core.Point3D.create(10, 10, 0)
)
# Extrude the profile
prof = sketch.profiles.item(0)
extrudes = component.features.extrudeFeatures
extInput = extrudes.createInput(prof, adsk.fusion.FeatureOperations.NewBodyFeatureOperation)
distance = adsk.core.ValueInput.createByReal(5)
extInput.setDistanceExtent(False, distance)
extrude = extrudes.add(extInput)
ui.messageBox('Operation completed successfully')
except:
if ui:
ui.messageBox('Failed:\n{}'.format(traceback.format_exc()))
๐งช Extending the Server
Adding New Tools
- Add a new tool definition to
src/tool_registry.json
- Add a script template to
SCRIPT_TEMPLATES
insrc/script_generator.py
- Add parameter processing logic to
_process_parameters
insrc/script_generator.py
๐ Documentation Links
๐ Future Enhancements
- Session state tracking for context-aware operations
- Dynamic tool registration
- Automation via socket or file polling
- More Fusion commands
๐ License
This project is licensed under the MIT License - see the LICENSE file for details.