Fusion360-MCP生成器
# 翻译 一个模型上下文协议服务器,使Cline能够通过将命令映射到Fusion的API并生成可执行的Python脚本,从而将自然语言提示转换为Fusion 360 CAD操作。
服务介绍
Fusion 360 MCP 服务器
一个 Model Context Protocol (MCP) 服务器,用于 Cline 和 Autodesk Fusion 360 之间的接口。该服务器将 Fusion 360 工具栏级别的命令暴露为可调用的工具,这些工具直接映射到 Fusion 的 API。
🧠 概述
该项目允许 Cline:
- 解析自然语言提示(例如,“制作一个圆角的盒子”)
- 将其解析为 Fusion 工具操作(例如,CreateSketch → DrawRectangle → Extrude → Fillet)
- 通过此 MCP 服务器调用这些工具
- 返回可在 Fusion 360 中执行的 Python 脚本
🛠️ 安装
前提条件
- Python 3.9 或更高版本
- Autodesk Fusion 360
设置
-
克隆此仓库:
git clone https://github.com/yourusername/fusion360-mcp-server.git cd fusion360-mcp-server -
安装依赖项:
pip install -r requirements.txt
🚀 使用
运行 HTTP 服务器
cd src
python main.py
这将在 http://127.0.0.1:8000 启动 FastAPI 服务器。
作为 MCP 服务器运行
cd src
python main.py --mcp
这将以 MCP 模式启动服务器,从标准输入读取并写入到标准输出。
API 端点
GET /: 检查服务器是否正在运行GET /tools: 列出所有可用工具POST /call_tool: 调用单个工具并生成脚本POST /call_tools: 依次调用多个工具并生成脚本
示例 API 调用
列出工具
curl -X GET http://127.0.0.1:8000/tools
调用单个工具
curl -X POST http://127.0.0.1:8000/call_tool \
-H "Content-Type: application/json" \
-d '{
"tool_name": "CreateSketch",
"parameters": {
"plane": "xy"
}
}'
调用多个工具
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
}
}
]
}'
📦 可用工具
该服务器当前支持以下 Fusion 360 工具:
创建
- CreateSketch: 在指定平面上创建一个新的草图
- DrawRectangle: 在活动草图中绘制一个矩形
- DrawCircle: 在活动草图中绘制一个圆
- Extrude: 将轮廓拉伸成三维实体
- Revolve: 绕轴旋转轮廓
修改
- Fillet: 为选定的边缘添加倒圆角
- Chamfer: 为选定的边缘添加倒角
- Shell: 以指定的壁厚挖空实体
- Combine: 使用布尔运算组合两个实体
导出
- ExportBody: 将实体导出到文件
🔌 MCP 集成
要使用 Cline 与此服务器集成,请将其添加到您的 MCP 设置配置文件中:
{
"mcpServers": {
"fusion360": {
"command": "python",
"args": ["/path/to/fusion360-mcp-server/src/main.py", "--mcp"],
"env": {},
"disabled": false,
"autoApprove": []
}
}
}
🧩 工具注册表
工具在 src/tool_registry.json 中定义。每个工具包含:
- name: 工具名称
- description: 工具的功能
- parameters: 工具接受的参数
- docs: 相关 Fusion API 文档链接
示例工具定义:
{
"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"
}
📝 脚本生成
服务器基于工具调用生成 Fusion 360 Python 脚本。这些脚本可以在 Fusion 360 的脚本编辑器中执行。
示例生成的脚本:
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()))
🧪 扩展服务器
添加新工具
- 向
src/tool_registry.json添加一个新的工具定义 - 向
src/script_generator.py中的SCRIPT_TEMPLATES添加一个脚本模板 - 向
src/script_generator.py中的_process_parameters添加参数处理逻辑
📚 文档链接
🔄 未来增强功能
- 会话状态跟踪以支持上下文感知操作
- 动态工具注册
- 通过套接字或文件轮询实现自动化
- 更多 Fusion 命令
📄 许可证
本项目采用 MIT 许可证 - 详情请参阅 LICENSE 文件。