2026-10-14 업데이트: 이 환경에서 실무 DWG를 다루며 발견한 패치 4종(치수 서식 코드·자동 피팅·다국어 인코딩·디버그 print)을 FreeCAD + MCP 가이드 업데이트로 정리했습니다.
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| 이전 | FreeCAD 모델을 광고컷으로 — AI 3D 렌더링 자동화 사용기 | 웰컴스 매니저 | 2026-09-08 |
|---|---|---|---|
| 다음 | 컨트롤러 하우징을 AI로 — 명령 몇 마디로 3D 설계·제조파일까지 (FreeCAD) | 웰컴스 매니저 | 2026-09-07 |
주소창 오른쪽의 설치 아이콘으로도 설치할 수 있어요
카카오톡·네이버 앱 안에서는 설치할 수 없어요 — 오른쪽 위 ⋮ → “Chrome에서 열기” 후 진행해 주세요
설치하면 주소창 없이 전체화면 앱처럼 실행됩니다