Fusion 360 MCP 서버
Cline과 Autodesk Fusion 360 사이의 인터페이스를 제공하는 MCP(Model Context Protocol) 서버입니다. 이 서버는 Fusion 360 도구 모음 수준 명령을 Fusion의 API에 직접 매핑되는 호출 가능한 도구로 노출합니다.
🧠 개요
이 프로젝트를 통해 클라인은 다음을 수행할 수 있습니다.
자연어 프롬프트 구문 분석(예: "모서리가 둥근 상자를 만드세요")
이를 Fusion 도구 작업으로 해결합니다(예: CreateSketch → DrawRectangle → Extrude → Fillet)
이 MCP 서버를 통해 해당 도구를 호출합니다.
Fusion 360에서 실행할 수 있는 Python 스크립트를 반환합니다.
Related MCP server: MCP Atlassian Server
🛠️ 설치
필수 조건
설정
이 저장소를 복제하세요:
지엑스피1
종속성 설치:
pip install -r requirements.txt
🚀 사용법
HTTP 서버 실행
이렇게 하면 http://127.0.0.1:8000 에서 FastAPI 서버가 시작됩니다.
MCP 서버로 실행
cd src
python main.py --mcp
이렇게 하면 서버가 MCP 모드로 시작되어 stdin에서 읽고 stdout에 씁니다.
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 : 활성 스케치에 원을 그립니다.
돌출 : 프로파일을 3D 본체로 돌출합니다.
회전 : 축을 중심으로 프로파일을 회전합니다.
수정하다
필렛 : 선택한 모서리에 필렛을 추가합니다.
모따기 : 선택한 모서리에 모따기를 추가합니다.
Shell : 지정된 벽 두께로 솔리드 바디를 비웁니다.
결합 : 부울 연산을 사용하여 두 개의 본체를 결합합니다.
내보내다
🔌 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": "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 에 매개변수 처리 로직을 추가합니다.
📚 문서 링크
🔄 향후 개선 사항
컨텍스트 인식 작업을 위한 세션 상태 추적
동적 도구 등록
소켓 또는 파일 폴링을 통한 자동화
더 많은 퓨전 명령
📄 라이센스
이 프로젝트는 MIT 라이선스에 따라 라이선스가 부여되었습니다. 자세한 내용은 라이선스 파일을 참조하세요.