문서 버전: 1.0 (2026-09-07)
대상 환경: Windows 11 · D:\AICAD\KICAD 워크스페이스 · ZCode(Claude 계열 에이전트) + KiCad 10 + kicad-mcp-pro
이 문서는 실제 설치와 테스트를 모두 수행하고 검증한 결과를 기록한 것입니다.
이 시스템은 사용자가 자연어로 요청하면 AI가 회로도 작성 → ERC 검사 → PCB 부품 배치 → 자동배선 → DRC 검증 → 제조 파일 생성까지 전 과정을 수행하고, 진행 상황은 웹 모니터 페이지로 실시간 시청할 수 있게 구성됩니다.
핵심 설계 원칙은 "무간섭(Non-intrusive)" 입니다:
| 구성 요소 | 역할 | 버전/위치 |
|---|---|---|
| KiCad 본체 | EDA(회로도·PCB 편집기), kicad-cli, pcbnew 파이썬 모듈 | 10.0.6 |
| kicad-mcp-pro | AI↔KiCad 연결 MCP 서버 (289개 도구) | 3.34.0 |
| uv / uvx | MCP 서버 실행 런처 (Python) | uv 0.12.10 |
| FreeRouting | 자동배선 엔진 (Java) | 1.9.0 (Java 17 호환) |
| 모니터 웹서버 | 설계 진행 실시간 시청 페이지 (자체 제작) | Python 표준 라이브러리 |
| ZCode | 에이전트 실행 환경 (MCP 자동 연결) | — |
flowchart LR
subgraph 사용자["👤 사용자"]
REQ["자연어 요청
'ESP32 보드 만들어줘'"]
WATCH["🌐 브라우저
웹 모니터 시청"]
end
subgraph AGENT["🤖 ZCode 에이전트 (백그라운드, 무간섭)"]
AI["AI 설계 판단"]
MCP["kicad-mcp-pro
(289개 도구)"]
CLI["kicad-cli
(ERC/DRC/렌더/제조파일)"]
PY["KiCad 내장 Python
pcbnew 모듈
(배치·DSN/SES)"]
end
subgraph FILES["📁 설계 파일 (D:\AICAD\KICAD)"]
SCH[".kicad_sch 회로도"]
PCB[".kicad_pcb 보드"]
OUT["output/
넷리스트·Gerber·BOM"]
FRAMES["monitor/frames/
SVG·PNG 렌더"]
end
subgraph KICADGUI["🖥 KiCad GUI (선택, 열어만 두는 용도)"]
EE["회로도 편집기"]
PCBV["PCB 편집기"]
IPC["IPC API 서버
(상태 읽기용)"]
end
REQ --> AI
AI --> MCP
AI --> CLI
AI --> PY
MCP -->|"파일 읽기/쓰기"| SCH
MCP -->|"파일 읽기/쓰기"| PCB
MCP -->|"IPC (열린 문서 상태 읽기)"| IPC
PY --> PCB
CLI --> OUT
SCH --> FRAMES
PCB --> FRAMES
OUT --> FRAMES
FRAMES -->|"2초 폴링"| WATCH
OUT -.->|"▶ 열기 버튼"| KICADGUI
동작 방식 요약:
.kicad_sch / .kicad_pcb 파일을 직접 수정합니다. 열려 있는 KiCad 창에 즉시 반영되지는 않고, 파일 → 되돌리기(Revert) 로 새로 불러와야 보입니다.monitor/frames/에 갱신되고, 웹 모니터가 2초마다 자동으로 가져갑니다.실제 수행한 설치 순서입니다. 새 PC에 재구축할 때 이 순서대로 하면 됩니다.
winget install --id KiCad.KiCad --exact --silent `
--accept-package-agreements --accept-source-agreements
C:\Users\js\AppData\Local\Programs\KiCad\10.0 (사용자 단위 설치)kicad-cli version → 10.0.6python -m pip install --user uv
# 실행 파일 위치: C:\Users\js\AppData\Roaming\Python\Python311\Scripts\uvx.exe
별도 설치 명령이 필요 없습니다. uvx kicad-mcp-pro 최초 실행 시 캐시에 설치됩니다(94개 패키지).
수동 테스트:
uvx kicad-mcp-pro --version # 3.34.0
uvx kicad-mcp-pro health # kicad-cli 탐지 확인
%APPDATA%\kicad\10.0\kicad_common.json에서:
"api": { "enable_server": true, ... }
→ 열려 있는 KiCad 문서의 상태를 AI가 읽을 수 있게 됩니다(61개 IPC 도구).
KiCad를 GUI로 한 번도 실행하지 않으면 전역 심볼/풋프린트 테이블이 비어 있어
"심볼 라이브러리 'Device'가 포함되어 있지 않음" 경고가 납니다. 템플릿을 복사해서 해결:
copy "C:\Users\js\AppData\Local\Programs\KiCad\10.0\share\kicad\template\sym-lib-table" "%APPDATA%\kicad\10.0\"
copy "C:\Users\js\AppData\Local\Programs\KiCad\10.0\share\kicad\template\fp-lib-table" "%APPDATA%\kicad\10.0\"
# Java 17 호환 버전 (v2.4.1은 Java 25 필요하므로 사용 금지)
curl -L -o D:\AICAD\KICAD\tools\freerouting-1.9.0.jar `
https://github.com/freerouting/freerouting/releases/download/v1.9.0/freerouting-1.9.0.jar
⚠️ 주의: java -jar freerouting-1.9.0.jar -h처럼 옵션 없이 실행하면 GUI가 뜹니다.
반드시 -de 입력.dsn -do 출력.ses -quit 형태로 실행하세요(→ 7장).
D:\AICAD\KICAD\.zcode\config.json (워크스페이스 스코프 — 세션 시작 시 자동 연결):
{
"mcp": {
"servers": {
"kicad": {
"command": "C:\\Users\\js\\AppData\\Roaming\\Python\\Python311\\Scripts\\uvx.exe",
"args": [
"kicad-mcp-pro", "--transport", "stdio",
"--profile", "full", "--mode", "write",
"--project-dir", "D:\\AICAD\\KICAD",
"--log-file", "D:\\AICAD\\KICAD\\.zcode\\kicad-mcp.log"
],
"env": {
"KICAD_MCP_KICAD_CLI": "C:\\Users\\js\\AppData\\Local\\Programs\\KiCad\\10.0\\bin\\kicad-cli.exe",
"KICAD_CLI_PATH": "C:\\Users\\js\\AppData\\Local\\Programs\\KiCad\\10.0\\bin\\kicad-cli.exe",
"KICAD_MCP_WORKSPACE_ROOT": "D:\\AICAD\\KICAD"
}
}
}
}
}
프로필/모드 조합:
| 옵션 | 의미 | 도구 수 |
|---|---|---|
--profile full |
전체 도구 세트 | MCP에서 289개 노출 |
--mode write |
파일 쓰기 허용 (회로도/PCB 편집) | — |
--mode experimental |
+ 자동배선(FreeRouting)·라우팅 도구 | 336개 |
| 기본값(profile 미지정) | 읽기 전용 검토 24개 | 자동화엔 부적합 |
flowchart TD
A["D:\AICAD\KICAD\ (워크스페이스)"] --> B[".zcode\config.json
ZCode MCP 등록 (세션 시작 시 자동 연결)"]
A --> C["AGENTS.md
AI 행동 규칙 (매 세션 자동 참조)"]
A --> D["monitor\
웹 모니터 (server.py, index.html, state.json, frames/)"]
A --> E["sample_board\
완성 샘플 (배선+제조파일)"]
A --> F["demo_led\
회로도 전용 데모 (PCB 빈 상태)"]
A --> G["tools\
freerouting-1.9.0.jar"]
A --> H[".zcode\*.py
검증/배치/렌더 스크립트"]
| 파일/폴더 | 설명 |
|---|---|
C:\Users\js\AppData\Local\Programs\KiCad\10.0\ |
KiCad 본체, kicad-cli, 내장 Python(파이썬 pcbnew용) |
C:\Users\js\AppData\Roaming\kicad\10.0\ |
KiCad 사용자 설정(IPC 서버 스위치, 라이브러리 테이블) |
C:\Users\js\.zcode\cli\config.json |
ZCode 사용자 전역 설정 (MCP는 워크스페이스 스코프 사용) |
D:\AICAD\KICAD\.zcode\config.json |
ZCode 워크스페이스 MCP 등록 ★ |
D:\AICAD\KICAD\AGENTS.md |
AI가 매 세션 읽는 프로젝트 규칙 ★ |
D:\AICAD\KICAD\monitor\ |
웹 모니터 서버·페이지·프레임 ★ |
D:\AICAD\KICAD 워크스페이스로 세션을 엽니다 → MCP kicad 자동 연결| 요청 예시 | AI가 수행하는 것 |
|---|---|
| "12~24V 입력 + RS485 컨트롤러 보드 만들어줘" | 요구사항 정리 → 블록도 제시 → 회로도 작성 → ERC → 배치 → 배선 → DRC → 제조파일 |
| "sample_board 자동배선 해줘" | DSN 내보내기 → FreeRouting → SES 적용 → DRC → 렌더 갱신 |
| "이 데이터시트로 부품 만들어줘" | 치수/핀맵 추출 → 확인 요청 → 풋프린트/심볼 생성 |
| "Gerber 만들어줘" | Gerber 7종 + 드릴 + 발주용 zip 생성, 모니터 파일 목록 자동 추가 |
flowchart TD
A["1. 요구사항 정리"] --> B["2. 블록도 제시 → 사용자 승인"]
B --> C["3. 부품 선정 (데이터시트/라이브러리)"]
C --> D["4. 회로도 작성 (심볼+라벨+전원심볼)"]
D --> E{"5. ERC 통과?"}
E -->|실패| D
E -->|PASS| F["6. 넷리스트 추출"]
F --> G["7. 풋프린트 배치 + 보드 외곽선
(pcbnew 스크립트)"]
G --> H["8. 자동배선 (FreeRouting)"]
H --> I{"9. DRC 통과?"}
I -->|위반| H
I -->|PASS| J["10. Gerber + 드릴 + BOM + 부착목록"]
J --> K["11. 👤 사람 최종 검토 → 발주"]
flowchart LR
subgraph 자동화["AI 자동화 (백그라운드)"]
STEP["설계 단계 수행"] --> RENDER["렌더 생성
sch.svg / pcb.svg / pcb_top.svg
pcb_bottom.svg / board3d*.png"]
RENDER --> STATE["state.json 갱신
(단계·ERC·DRC·로그)"]
end
subgraph 웹서버["monitor/server.py (:8765)"]
SERVE["정적 파일 + JSON API"]
end
subgraph 브라우저["사용자 브라우저"]
PAGE["index.html
2초 폴링"]
end
STATE --> SERVE --> PAGE
PAGE -->|"/files → 파일 목록"| SERVE
PAGE -->|"/open → KiCad로 열기"| SERVE
python D:/AICAD/KICAD/monitor/server.py (백그라운드)monitor/index.html(페이지), monitor/server.py(서버), monitor/state.json(상태), monitor/frames/(렌더)| 카드 | 내용 |
|---|---|
| 📄 회로도 | 회로도 SVG (부품·라벨·전원심볼) |
| 🟩 PCB 2D | 배치+배선 전체 뷰 |
| 🟫 Top / Bottom 구리 패턴 | 앞면/뒷면(좌우반전) 동선 패턴 |
| 🧊 3D 미리보기 | 아이소메트릭 / Top / Bottom 3종 |
| 📂 생성 파일 | 워크스페이스 파일 자동 스캔 + ▶ KiCad로 열기 버튼 + 경로 복사 + 폴더 필터(전체/demo_led/sample_board) |
| 검증 상태·로그 | ERC/DRC 결과, 단계별 로그 |
| 엔드포인트 | 인증 | 기능 |
|---|---|---|
GET / , /state.json , /frames/* |
불필요 | 페이지·상태·렌더 서빙 |
GET /token |
— | 열기 버튼용 토큰 발급 |
GET /files?token=... |
토큰 필요 | KiCad 파일/산출물 자동 스캔 |
GET /open?token=...&path=... |
토큰 필요 | Windows 기본 연결(KiCad)로 파일 실행 |
보안: 127.0.0.1 바인딩(외부 접근 불가) + 토큰 + D:\AICAD\KICAD 내부 경로만 허용. 악성 웹사이트가
브라우저를 통해 몰래 파일을 열어주는 것을 토큰이 차단합니다.
브라우저 보안상 웹페이지가 로컬 프로그램을 직접 실행할 수는 없지만, 로컬에서 돌아가는 모니터
서버의 /open 엔드포인트가 os.startfile()로 Windows 기본 연결 프로그램을 호출합니다.
.kicad_pro → KiCad 프로젝트, .kicad_sch → 회로도 편집기, .kicad_pcb → PCB 편집기, .pdf → PDF 뷰어.
sequenceDiagram
participant AI as AI (ZCode)
participant KP as KiCad 내장 Python (pcbnew)
participant FR as FreeRouting 1.9.0 (Java)
participant DRC as kicad-cli DRC
AI->>KP: ExportSpecctraDSN(board, design.dsn)
KP-->>AI: DSN 생성 (회로 연결 정보)
AI->>FR: java -jar freerouting-1.9.0.jar -de design.dsn -do design.ses -quit -mp 25
Note over FR: 자동배선 + 최적화 (샘플보드: 약 3초)
FR-->>AI: design.ses (배선 결과)
AI->>KP: ImportSpecctraSES(board, design.ses)
KP->>KP: 트랙 84개 / 비아 0개 기록 후 저장
AI->>DRC: pcb drc --format json
DRC-->>AI: 미배선 0, 위반 검증
AI->>AI: Top/Bottom/3D 렌더 재생성 → 모니터 갱신
검증 결과 (sample_board): 트랙 84개, 비아 0개(단면 최적화), 미배선 0.
위반 1건은 0.0018mm 미세 클리어런스(제조 무영향 수준).
Java 버전 주의: v2.4.1은 Java 25(class 69) 필요 → 이 시스템은 Java 17 + v1.9.0 사용.
-h 옵션은 인식되지 않고 GUI가 뜨므로 사용하지 않습니다.
| 제공 자료 | 생성 결과 | 사용 도구 |
|---|---|---|
| 패키지 치수표 (랜드·피치·바디) | IPC-7351 표준 풋프린트 | lib_generate_footprint_ipc7351 |
| 핀맵 표 (번호-이름-기능) | 회로도 심볼 | lib_generate_symbol_from_pintable |
| 보드 치수·구멍·커넥터 좌표 | 외곽선·마운팅홀·배치 반영 | pcbnew 스크립트 |
| 전기 사양 (전류·권장회로) | 디커플링/트레이스 폭 계산 | 설계 규칙 엔진 |
절차(생략 금지): ① 자료에서 치수·핀맵 추출 → ② 추출 결과 표를 사용자에게 확인받음 →
③ 생성·적용 → ④ 3D 재확인. 스캔 이미지 PDF는 비전 판독 오차 가능성을 안내합니다.
준비 방법: 데이터시트 PDF 또는 치수표(텍스트/엑셀)를 D:\AICAD\KICAD\ 아래에 넣고
세션에서 "이 데이터시트로 ○○ 부품 만들어줘"라고 요청.
| 갖고 있는 파일 | 가져오기 | 설명 |
|---|---|---|
| OrCAD/Allegro PCB (.brd) | ✅ 직접 지원 | KiCad 8.0+ 내장 "Cadence Allegro/OrCAD PCB Editor" 임포터 |
| OrCAD Capture 회로도 (.dsn) | ❌ 미지원 | 넷리스트/부품표 기반 AI 재작성 또는 .brd만 가져오기 권장 |
| Eagle, CADSTAR, EasyEDA, IPC-2581 등 | ✅ 지원 | KiCad 내장 임포터 |
가져오기 요청 시 AI가 먼저 파일을 무간섭으로 분석해 "직접 가져오기 가능/재작성 필요"를 판정합니다.
(.brd 임포터는 GUI 메뉴 전용이라 그 작업만은 화면 조작이 필요할 수 있습니다.)
| 증상 | 원인 | 해결 |
|---|---|---|
| ERC: "심볼 라이브러리 'Device' 미포함" 경고 | KiCad 신규 설치 후 전역 라이브러리 테이블 비어 있음 | 템플릿 복사 (→ 3.5절) |
| MCP 쓰기 도구에서 "No schematic file configured" | 프로젝트 미지정 | kicad_set_project 호출 (sch/pcb/output 경로 포함) |
| MCP로 부품을 추가했는데 열린 KiCad 화면에 안 보임 | 정상 동작 (파일 직접 수정 방식) | 파일 → 되돌리기(Revert) 또는 창 재오픈 |
| IPC 관련 도구가 일부만 동작 | 열린 문서가 없음 (프로젝트 관리자만 열림) | 회로도/PCB 편집기에서 해당 문서를 열 것 |
sch_add_no_connect 에러: x_mm/y_mm required |
핀 좌표 필요 | ERC 리포트의 위반 좌표(×100 = mm)를 사용 |
| 심볼 배치가 "OK"인데 실제로 없음 (ATtiny85-20SU) | 존재하지 않는 심볼 이름 | 라이브러리 파일에서 실제 이름 확인 (→ ATtiny85-20S) |
| FreeRouting 최신 버전 실행 안 됨 | v2.4.1은 Java 25 필요 | v1.9.0 사용 (Java 17 호환) |
java -jar freerouting.jar -h → GUI 팝업 |
-h 미지원 |
-de/-do/-quit 조합으로만 실행 |
KiCad 10 파이썬 GetTrackCount() AttributeError |
API 변경 | len(board.GetTracks()) 사용 |
| 모니터 접근 403 | (구버전 버그) 전체 경로에 토큰 검사 | 수정 완료 — 정적 파일은 공개, /files·/open만 토큰 |
| 웹에서 열기 버튼 무반응 | 모니터 서버 중지 | python D:/AICAD/KICAD/monitor/server.py 재실행 |
| GUI 자동화(마우스/키보드)가 사용자 방해 | 포그라운드 독점 구조 | 원칙: 무간섭 백그라운드 방식 사용 (AGENTS.md 규칙) |
D:\AICAD\KICAD\
├─ AGENTS.md ← AI 행동 규칙 (매 세션 자동 참조)
├─ 키캐드AI_설계시스템_종합가이드.md ← 이 문서
├─ .zcode\
│ ├─ config.json ← ZCode MCP 등록 (kicad 서버)
│ ├─ skills\pcb-design\SKILL.md ← PCB 설계 규칙 스킬
│ ├─ test_mcp.py ← MCP 연결/도구 목록 테스트
│ ├─ test_e2e.py ← 미니 파이프라인 테스트
│ ├─ build_sample.py ← sample_board 회로도 생성기
│ ├─ populate_pcb.py ← PCB 풋프린트 배치 스크립트 ★
│ ├─ recenter_board.py ← 보드 시트 중앙 이동
│ ├─ dsn_export.py / ses_import.py ← FreeRouting 연동
│ └─ kicad-mcp.log ← MCP 서버 로그
├─ monitor\ ← 웹 모니터 ★
│ ├─ server.py ← 서버 (포트 8765)
│ ├─ index.html ← 모니터 페이지
│ ├─ state.json ← 현재 상태 (2초 폴링)
│ ├─ token.txt ← 열기 버튼 토큰
│ └─ frames\ ← sch.svg, pcb*.svg, board3d*.png
├─ tools\freerouting-1.9.0.jar ← 자동배선 엔진
├─ sample_board\ ← 완성 샘플 (배선+제조파일)
│ ├─ sample_board.kicad_pro / .kicad_sch / .kicad_pcb
│ └─ output\ (netlist, erc/drc 리포트, bom.csv, pos.csv,
│ gerber\ 7종+드릴, sample_board_gerbers.zip)
└─ demo_led\ ← 회로도 전용 데모 (PCB는 빈 상태)
C:\Users\js\AppData\Local\Programs\KiCad\10.0\ ← KiCad 본체
C:\Users\js\AppData\Roaming\kicad\10.0\ ← KiCad 설정 (IPC 스위치, 라이브러리 테이블)
C:\Users\js\AppData\Roaming\Python\Python311\Scripts\uvx.exe ← MCP 런처
# 모니터 서버 실행
python D:/AICAD/KICAD/monitor/server.py
# ERC / DRC 검사
kicad-cli sch erc --output erc.json "D:\AICAD\KICAD\sample_board\sample_board.kicad_sch"
kicad-cli pcb drc --format json --output drc.json "D:\AICAD\KICAD\sample_board\sample_board.kicad_pcb"
# 렌더링
kicad-cli sch export svg --output <dir> <회로도.kicad_sch>
kicad-cli pcb export svg --mode-single --fit-page-to-board --layers "F.Cu,F.Mask,F.Silkscreen,Edge.Cuts" --out pcb_top.svg <보드.kicad_pcb>
kicad-cli pcb render --rotate '30,0,40' --output board3d.png <보드.kicad_pcb>
# 자동배선 3단계
<KiCad>\bin\python.exe dsn_export.py # 1) DSN
java -jar D:\AICAD\KICAD\tools\freerouting-1.9.0.jar -de in.dsn -do out.ses -quit -mp 25 # 2) 배선
<KiCad>\bin\python.exe ses_import.py # 3) SES 적용
| 항목 | 상태 |
|---|---|
| KiCad 10.0.6 + kicad-cli | ✅ 정상 |
| MCP 서버(289 도구, write 모드) | ✅ 정상 (세션 시작 시 자동 연결) |
| ERC | ✅ 0 오류 |
| 자동배선 | ✅ 84 트랙 / 비아 0 / 미배선 0 |
| DRC | ✅ 위반 1건(0.0018mm 미세, 제조 무영향) |
| 제조 파일 | ✅ Gerber+드릴+BOM+부착목록+zip |
| 웹 모니터 | ✅ :8765 구동 중 |
| IPC 읽기 / 무간섭 원칙 | ✅ AGENTS.md에 규칙 기록 |
"AI가 설계했다"의 정확한 의미를 투명하게 기록한다. sample_board 전 과정을 기준으로 하며,
설계 결정은 AI가 하고, 작도·계산·검증 실행은 도구가 담당하는 구조이다
(사람 엔지니어가 CAD에 설계 결정을 입력하고 소프트웨어가 작도하는 것과 같은 분업).
| 작업 | AI가 판단/결정한 내용 |
|---|---|
| 회로 구상 | 보호 순서(DC입력→퓨즈→쇼트키→AMS1117), MCU(ATtiny85) 선택, LED·스위치·확장헤더 구성 |
| 부품 값 산정 | 퓨즈 500mA, 풀업 10k, LED 저항 330R/1k, 디커플링 100nF, 쇼트키 SS34 |
| 연결 정의 | 39개 핀→넷 연결 전부 (VIN, +12V, +3V3, GND, RESET, PB0~2 등) |
| 회로도 배치 좌표 | 16개 심볼의 전원/MCU/출력 블록별 위치 (직접 계산한 좌표) |
| 풋프린트 선정 | 부품별 R_0603, SOT-223, SOIC-8, D_SMA, SW_PUSH_6mm 등 지정 |
| PCB 배치 좌표 | 보드 위 16개 부품 위치 — 배치 알고리즘이 아니라 AI가 계산해 스크립트에 넣은 좌표 |
| 보드 사양 | 80×60mm 크기, 시트 중앙 배치 |
| 문제 해결 | 심볼 이름 불일치 발견(ATtiny85-20SU→20S), 라이브러리 테이블 복구, PWR_FLAG 추가, Java 버전 회피 등 |
| 웹 모니터 | 서버·페이지·렌더 파이프라인 전부 자체 제작 |
| 작업 | 실제 실행 주체 | AI의 역할 |
|---|---|---|
| 배선 경로 84개 | FreeRouting 배선 알고리즘 | DSN 내보내기 → 실행 → SES 적용 → DRC 검증 |
| ERC/DRC 판정 | KiCad 검사 엔진 | 결과 해석 + 위반 원인 수정 |
| 파일 포맷 작성(S-expression) | MCP 도구, kicad-sch-api | 도구 호출 (명령) |
| 3D 렌더링 | kicad-cli render | 옵션 지정·실행 |
| 이전 | 부품 16개짜리 기판, 명령 몇 마디로 여기까지 — AI로 회로설계·PCB 설계 자동화 사용기 | 2026-09-07 | |
|---|---|---|---|
| 다음 | | lordly | 2026-09-05 |