AutoCAD 없이 무료 FreeCAD 1.1.3을 AI 에이전트로 자동 조종하는 환경 구축 가이드다. ODA 변환기 연동, MCP 설치 4단계, DWG 워크플로우, CNC·3D 프린팅 확장, 실전 검증 10항목 결과와 트러블슈팅까지 정리했다.
대상: AutoCAD 없이 무료 CAD로 3D 설계를 하고, AI(ZCode 등 MCP 클라이언트)에게 명령해 FreeCAD를 자동 조종하고 싶은 사용자
검증 환경: Windows 11 (build 26200) / FreeCAD 1.1.3 / 설치·테스트 완료일 2026-09-07 (2차 갱신: 탐색기 연결·텍스트 설정·샘플 데모 포함)
이 워크스페이스에는 전부 설치·테스트가 끝나 있습니다. 이 문서는 재구축·확장·문제해결용 기록입니다.
| 요구사항 | FreeCAD의 답 |
|---|---|
| AutoCAD 같은 무료 CAD | 완전 무료·오픈소스 (LGPL), Windows/macOS/Linux |
| 3D 제품 설계 (케이스·브라켓·프레임) | 파라메트릭 3D 모델링 (PartDesign / Part) — 성격은 AutoCAD보다 SolidWorks 유사 |
| DWG 호환 | 네이티브는 아니지만 무료 ODA File Converter를 붙이면 열기·저장 모두 가능 |
| 제조용 출력 | STEP, STL, DXF, IGES, 3MF 등 모든 주요 포맷 |
| AI(MCP) 제어 | 오픈소스 CAD 중 MCP 생태계가 가장 활발 (neka-nat/freecad-mcp 약 2.1k stars) |
1. FreeCAD 1.1.3 — 3D CAD 본체 (무료)
2. ODA File Converter — DWG↔DXF 변환기 (Open Design Alliance 제공 무료 유틸리티)
3. FreeCADMCP 애드온 — FreeCAD 안에서 RPC 서버(포트 9875)를 띄우는 플러그인
4. freecad-mcp (PyPI) — MCP 클라이언트(ZCode 등)와 RPC 서버를 연결하는 MCP 서버 프로그램
5. ZCode MCP 등록 — 워크스페이스 설정으로 자동 연결
flowchart LR
subgraph ZCode["ZCode (AI 에이전트)"]
AI[GLM 모델 에이전트]
end
subgraph MCP["MCP 서버 (stdio 프로세스)"]
S["uvx freecad-mcp (PyPI 패키지 0.1.22)"]
end
subgraph FC["FreeCAD 1.1.3 (GUI 실행 중)"]
ADDON["FreeCADMCP 애드온 RPC 서버 :9875"]
DOC["문서 / 3D 모델"]
end
subgraph OUT["산출물"]
STEP["STEP"]
STL["STL"]
DXF["DXF"]
DWG["DWG"]
end
AI -- "MCP 도구 호출 (JSON-RPC over stdio)" --> S
S -- "XML-RPC (localhost:9875)" --> ADDON
ADDON -- "Python API (FreeCAD/App)" --> DOC
DOC -- "execute_code로 내보내기" --> OUT
ODA["ODA File Converter 27.1 (DWG↔DXF 자동 변환)"]
ADDON -- "DWG 열기/저장 시 자동 호출" --> ODA
ODA --> DXF
ODA --> DWG
핵심은 MCP 서버는 "통역사"일 뿐이라는 점입니다. AI가 도구를 호출하면 → MCP 서버가 FreeCAD의 RPC 서버(9875)로 전달 → FreeCAD 내부에서 Python이 실행되는 구조입니다. 따라서 FreeCAD가 켜져 있지 않으면 MCP는 동작하지 않습니다. 반대로 켜져 있기만 하면 되고, 마우스·키보드는 전혀 점유하지 않습니다.
sequenceDiagram
participant U as 사용자
participant AI as ZCode AI
participant M as freecad-mcp (stdio)
participant F as FreeCAD (RPC :9875)
U->>AI: "100×60×3mm 판에 M3 홀 4개 만들어줘"
AI->>M: create_document(name="Case")
M->>F: XML-RPC create_document
F-->>M: 성공
AI->>M: create_object(type="Part::Box", ...)
M->>F: XML-RPC create_object
F-->>M: Box 생성 (GUI에 표시)
AI->>M: execute_code("M3 홀 4개 컷 + STEP 저장")
M->>F: XML-RPC execute_code (Python 실행)
F-->>M: 실행 결과 + 산출물 경로
AI-->>U: 완료 보고 (파일 경로)
flowchart TD
A[1. FreeCAD 1.1.3 설치 GitHub Releases 인스톨러] --> B[2. ODA File Converter 설치 opendesign.com MSI]
B --> C[3. freecad-mcp 클론 후 애드온을 Mod 폴더에 복사]
C --> D[4. 자동시작 + 가져오기 설정 JSON / 환경설정]
D --> E[5. ZCode 워크스페이스 MCP 등록]
E --> F[6. FreeCAD 실행 → 포트 9875 확인]
F --> G[7. AI 제어 테스트]
① FreeCAD 1.1.3 설치
FreeCAD_1.1.3-Windows-x86_64-py311-installer.exe 다운로드 (약 519MB, SHA256 서명 파일로 검증 권장)FreeCAD_1.1.3-installer.exe /S — 단, /D=가 무시되어 항상 C:\Program Files\FreeCAD 1.1에 설치됨.7z 버전을 압축 해제해서 사용② ODA File Converter 설치 (DWG 지원용)
msiexec /i ODAFileConverter_QT6_vc16_amd64dll_27.1.msi /qnC:\Program Files\ODA\ODAFileConverter \ODAFileConverter.exe에 설치되면 FreeCAD가 자동으로 발견함 (별도 설정 불필요)③ FreeCADMCP 애드온 설치 — ⚠️ 폴더 위치 주의
git clone https://github.com/neka-nat/freecad-mcp.git
%APPDATA%\FreeCAD\v1-1\Mod\ 다.%APPDATA%\FreeCAD\Mod\가 아니라 버전 폴더(v1-1) 아래다 — 이것이 이번 설치에서 가장 큰 함정이었다)addon/FreeCADMCP 폴더 전체를 위 경로에 복사:xcopy /E /I addon\FreeCADMCP "%APPDATA%\FreeCAD\v1-1\Mod\FreeCADMCP"
④ RPC 서버 자동시작 설정
%APPDATA%\FreeCAD\v1-1\freecad_mcp_settings.json 파일을 만든다:
{
"remote_enabled": false,
"allowed_ips": "127.0.0.1",
"auto_start_rpc": true
}
auto_start_rpc: true → FreeCAD를 켤 때마다 RPC 서버(포트 9875)가 자동 구동⑤ AI 모듈 설치
uvx freecad-mcp
uv 설치 (pip install uv 또는 공식 인스톨러)⑥ ZCode MCP 등록 (이 워크스페이스에는 이미 완료)
D:\AICAD\FREECAD\.zcode\config.json:
{
"mcp": {
"servers": {
"freecad": {
"command": "uvx",
"args": ["freecad-mcp"]
}
}
}
}
mcp__freecad__* 형태로 나타난다claude_desktop_config.json에 같은 command/args를, OpenCode는 opencode.json의 mcp 항목에 {"type":"local","command":["uvx","freecad-mcp"]}로 등록하면 된다⑦ AI 자동화·한글 환경을 위한 환경설정 (이미 완료)
FreeCAD 기본값은 자동화에 방해되는 지점이 3개 있다. 아래를 실행해 한 번에 정리했다 (이 워크스페이스의 FreeCAD에는 적용 완료):
pg = App.ParamGet("User parameter:BaseApp/Preferences/Mod/Draft")
pg.SetBool("dxfShowDialog", False) # DXF/DWG 가져오기 대화상자 끔 (자동화 필수)
pg.SetBool("dxfCreatePart", True) # Part 형상으로 가져오기
pg.SetBool("dxfUseLegacyImporter", True) # ★ 한글 경로 버그 회피 (아래 참고)
pg.SetBool("dxftext", True) # 텍스트·치수 가져오기 (기본 False라 수치가 안 보임)
App.saveParameter()
dxfAllowDownload=True 저장됨).⑧ 탐색기에서 DWG 더블클릭으로 열기 (파일 연결)
레지스트리에 FreeCAD를 DWG 처리 프로그램으로 등록 (사용자 계정 범위, 관리자 불필요):
reg add "HKCU\Software\Classes\FreeCAD.DWG" /ve /d "FreeCAD DWG Drawing" /f
reg add "HKCU\Software\Classes\FreeCAD.DWG\DefaultIcon" /ve /d "C:\Program Files\FreeCAD 1.1\bin\FreeCAD.exe,0" /f
reg add "HKCU\Software\Classes\FreeCAD.DWG\shell\open\command" /ve /d "\"C:\Program Files\FreeCAD 1.1\bin\FreeCAD.exe\" \"%%1\"" /f
reg add "HKCU\Software\Classes\.dwg\OpenWithProgids" /v "FreeCAD.DWG" /d "" /f
(마지막 명령 파일이 아니라 배치에서 직접 칠 때는 %%1 → %1)
reg delete "HKCU\Software\Classes\FreeCAD.DWG" /fC:\Program Files\FreeCAD 1.1\bin\FreeCAD.exe) — RPC 서버가 자동으로 함께 뜬다D:\AICAD\FREECAD)로 세션 시작 — MCP 서버가 자동 연결됨RPC 서버가 살아있는지 확인: netstat -an | findstr 9875
| 도구 | 용도 |
|---|---|
create_document / list_documents / reload_document |
문서(파일) 생성·목록·다시열기 |
create_object / edit_object / delete_object |
객체 생성·수정·삭제 (Part::Box, Part::Cylinder, PartDesign::Body 등) |
get_objects / get_object |
문서/객체 상태 조회 |
execute_code / execute_code_async |
FreeCAD 내부에서 Python 실행 (만능 도구) |
get_view |
현재 뷰 스크린샷 (AI가 눈으로 확인) |
insert_part_from_library / get_parts_list |
부품 라이브러리 사용 |
get_rpc_status |
연결 상태 확인 |
run_fem_analysis |
CalculiX 유한요소 해석 |
팁: 화면 변화가 없는 단순 계산·내보내기에는 include_screenshot: false를 쓰면 토큰이 절약된다.
"100×60×3mm 알루미늄 판을 만들고 모서리에서 10mm 떨어진 곳에 M3 홀 4개를 뚫어줘"
→ create_document + create_object(Part::Box) + execute_code(구멍 컷)
"가운데 40×20mm 사각 구멍을 뚫고 모서리에 R3 필렛을 넣어줘"
→ execute_code (Part.makeBox + cut + makeFillet)
"이 모델을 STEP과 STL로 내보내줘"
→ execute_code (Part.export / MeshPart 테셀레이션 후 STL)
"이 도면을 DWG로 저장해줘"
→ execute_code (importDWG.convertToDwg) — ODA 변환기가 자동 호출됨
import Part, importDXF
obj = App.getDocument("MCP_Test").getObject("TestPlate")
Part.export([obj], r"D:\AICAD\FREECAD\out\model.step") # STEP
importDXF.export([obj], r"D:\AICAD\FREECAD\out\model.dxf") # DXF — 주의!
# STL은 바이너리 권장 (exportStl은 ASCII로 나와 용량이 5배 크다)
import MeshPart
m = MeshPart.meshFromShape(Shape=obj.Shape, LinearDeflection=0.1, AngularDeflection=0.3)
m.write(r"D:\AICAD\FREECAD\out\model.stl")
⚠️ DXF만 예외:
Import.export([obj], "xxx.dxf")는 에러도 없이 아무 파일도 만들지 않는다. 반드시importDXF.export를 사용할 것. (테스트에서 실제로 확인한 함정)
flowchart LR
subgraph 받기["DWG 받아서 열기"]
A["업체 DWG 파일"] --> B["FreeCAD 파일→열기 (또는 탐색기 더블클릭)"]
B --> C{"ODA 자동 변환 DWG→DXF"}
C --> D["FreeCAD로 가져오기 (대화상자 없이 자동)"]
end
subgraph 보내기["DWG로 내보내기"]
E["FreeCAD 모델"] --> F["importDXF.export로 DXF"]
F --> G["ODA CLI: DXF→DWG"]
G --> H["업체 전달"]
end
① ODA CLI로 DWG→DXF 변환: ODAFileConverter.exe ACAD2018 DXF 0 1
② FreeCAD에서 importDXF.open(변환된 .dxf)
.dwg를 직접 열 수도 있다 (스크립트용 함수는 importDWG.open, 단 Import.open은 DWG를 모른다 — no supported file format 오류)importDWG.convertToDwg(dxf경로, dwg경로) 사용ODAFileConverter.exe ACAD2018 DWG 0 1
⚠️ 입력 폴더와 출력 폴더를 반드시 다르게 지정할 것. 같으면 "Output folder must be different than input folder" 에러 다이얼로그가 뜨고 프로세스가 멈춘다. (테스트에서 실제 확인)
⚠️ GUI 앱이라 셸에서 동기 실행하면 블록된다. 백그라운드 실행 + 출력 파일 폴링 권장.
dxftext=True 설정(⑦)으로 텍스트·치수·지시선이 함께 들어온다{\f폰트명|...;\W1;338} 같은 MTEXT 서식 코드가 그대로 보이면: 텍스트 객체의 Text 속성에서 \로 시작해 ;로 끝나는 세그먼트를 제거하면 순수 수치만 남는다 (정리 루틴은 AGENTS.md #26 참고 — AI에게 "텍스트 정리해줘"라고 하면 된다)CNC 밀링/드릴 (Path 워크벤치, FreeCAD 기본 내장)
execute_code로 Job 생성 → 공구 지정 → 공정 배치 → 후처리(.nc)까지 자동화 가능"이 하우징 외곽 컷팅하고 바닥 포켓 가공하는 G-code 만들어줘, 기계는 GRBL이야"
→ Path Job 생성 → Profile/Pocket 배치 → grbl_post 후처리 → .nc 파일
3D 프린팅 (FreeCAD = 모델링, 슬라이서 = G-code)
"이 하우징을 PLA로 프린팅용 G-code 만들어줘, 0.4 노즐에 20% 인필"
→ STL 확인 → 슬라이서 CLI 실행 → .gcode 파일
flowchart LR
M["FreeCAD 모델"] -->|"CNC"| P["Path Job (공구·공정 배치)"] --> G1["후처리기 GRBL 등"] --> NC[".nc G-code"]
M -->|"3D 프린팅"| STL2["STL (바이너리)"] --> S["슬라이서 CLI Cura / OrcaSlicer"] --> G2[".gcode"]
⚠️ CNC 실가공 전 주의: 공구 직경·회전수·이송속도·원점·소재 고정은 기계 쪽 사용자 지식이 필요하다. AI는 파라미터를 넣으면 정확한 툴패스를 만들지만, 첫 가공은 반드시 시뮬레이션 → 에어컷 → 실컷 순서로 검증할 것. 3D 표면 가공은 2.5D 대비 정밀도 한계가 있다.
| 증상 | 원인 | 해결 |
|---|---|---|
| ZCode에 freecad 도구가 안 보임 | FreeCAD 미실행, 또는 MCP 서버 미연결 | FreeCAD 실행 후 ZCode 세션 재시작. netstat -an | findstr 9875로 RPC 확인 |
| 도구는 있는데 호출이 전부 실패 | RPC 서버 중지 | FreeCAD에서 워크벤치 MCP Addon → Start RPC Server |
| GUI dispatch timed out 90초 | FreeCAD에 모달 대화상자가 떠 있거나, 대용량 가져오기가 진행 중 | 화면의 대화상자를 닫으면 서버 자동 회복. 큰 DXF 가져오기는 호출이 타임아웃돼도 FreeCAD에서 계속 처리되므로 이후 list_documents로 확인. 장시간 작업은 execute_code_async 사용 |
| "DXF import/export libraries not found" 대화상자 | 레거시 DXF 라이브러리 미설치 | "예"로 다운로드 허용 (한 번만 하면 됨 — 본 환경은 이미 완료) |
| DWG를 열면 빈 문서로 열린다 | FreeCAD 1.1.3 버그: 모던 DXF importer가 한글(비ASCII) 경로에서 조용히 실패 | 이미 해결됨: dxfUseLegacyImporter=True 적용 중 (§2.2⑦). 재발 시 환경설정 → Import/Export → DXF → "레거시 가져오기 사용" 체크 |
| 도면의 텍스트·치수 숫자가 안 보인다 | dxftext 기본값 False |
§2.2⑦ 설정 (적용 완료). 가져온 텍스트에 서식 코드가 보이면 §3.6 정리 |
| execute_code로 DXF를 만들었는데 파일이 없다 | Import.export 사용함 |
importDXF.export로 변경 (§3.4) |
| ODA 변환이 멈춘다 | 입력=출력 폴더 | 출력 폴더를 분리 (§3.5) |
| 애드온을 설치했는데 워크벤치에 "MCP Addon"이 없다 | 구버전 경로(%APPDATA%\FreeCAD\Mod)에 설치함 |
%APPDATA%\FreeCAD\v1-1\Mod\로 이동 (§2.2③) |
| FreeCAD 재설치 후 포트가 안 열린다 | settings JSON이 사라짐 | §2.2④ 파일 재작성 |
| 강제종료 후 시작할 때 "문서 복구" 대화상자 | 이전 세션 비정상 종료 | 취소로 넘기면 됨. 자동화 중에는 GUI 디스패치를 막으니 미리 처리 |
| 테스트 | 결과 |
|---|---|
| MCP 연결 (initialize → 15개 도구 목록) | ✅ |
| RPC 서버 / GUI 디스패치 상태 | ✅ |
문서 생성 (create_document) |
✅ |
부품 생성 (create_object, Part::Box 100×60×3mm — 부피 18,000mm³ 검증) |
✅ |
| STEP 내보내기 (ISO-10303-21 헤더 확인) | ✅ |
| STL 내보내기 (바이너리 1,416면, 346×186×34mm 설계치 일치) | ✅ |
DXF 내보내기 (importDXF.export) |
✅ |
| DXF→DWG 변환 (ODA CLI, ACAD2018) | ✅ |
| 실무 DWG #1 (2005년식, 2.2MB): ODA 변환 후 1,917개 객체, 3,072×1,604mm 실스케일 복원 | ✅ |
| 실무 DWG #2 (한글 경로): 레거시 importer로 65객체 + 치수 텍스트 6개(36/38/178/338mm) | ✅ |
| 샘플 데모: 컨트롤러 하우징 — 명령 3번으로 모델링 → 4종 내보내기 → FCStd 저장 | ✅ |
상세 보고서: sample\TEST_REPORT.md / 데모 진행 기록: sample\DEMO_LOG.md
sample\ 폴더와 blog\ 폴더에 사용기 제작물이 들어 있다:
sample\
├── 컨트롤러_하우징.FCStd ← 데모 원본 (330×170×30 외함 + 베젤 + 보스 + 케이블 슬롯)
├── controller_housing.step/.stl/.dxf ← 내보낸 제조파일
├── screenshots\01~03_*.png ← 단계별 화면 캡처
├── DEMO_LOG.md ← 명령별 진행 기록 (블로그 재료)
└── TEST_REPORT.md ← 통합 테스트 보고서
blog\
├── AI_FreeCAD_3D설계자동화_사용기.md ← 매거진형 사용기 본문 (info/146 스타일)
└── AI_FreeCAD_사용기_배포.zip ← 본문+이미지+첨부파일 배포 패키지
D:\AICAD\KICAD의 KiCad 환경과 연계하면:
AI 작업 규칙과 발견 사항은 AGENTS.md에 기록되어 있다 — AI 에이전트는 작업 전 반드시 참고할 것.
.zcode/config.json → mcp.servers