Fusion 360 MCP Server
by ArchimedesCrypto
The Fusion 360 MCP Server interfaces between Cline and Autodesk Fusion 360, exposing Fusion 360 toolbar-level commands as callable tools that map directly to Fusion's API. It allows Cline to parse natural language prompts and resolve them into Fusion tool actions.
Last updated: N/A
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.