본문으로 건너뛰기

© 2026 Molayo

GitHub요약2026. 06. 02. 17:09

salitronic/eda-agent

요약

Altium Designer와 실시간으로 상호작용하여 회로도 및 PCB 설계를 지원하는 MCP 서버인 eda-agent를 소개합니다. AI가 200개 이상의 도구를 통해 디자인을 검토, 수정 및 질문에 답변할 수 있는 실험적인 에이전트 환경을 제공합니다.

핵심 포인트

  • MCP 호환 클라이언트를 통한 Altium Designer 실시간 제어
  • DelphiScript 브릿지를 활용한 200개 이상의 설계 도구 제공
  • 웹 대시보드를 통한 실시간 디자인 검토 및 이슈 큐 확인
  • 단순 배치 작업이 아닌 대화형 설계 및 리팩토링 지원

AI(또는 모든 MCP 호환 클라이언트)가 실시간 Altium Designer 세션과 상호작용할 수 있게 해주는 MCP 서버입니다. 이 서버는 지속적인 DelphiScript 브릿지를 통해 회로도(Schematic), PCB, 라이브러리(Library), 프로젝트(Project) 및 디자인 에이전트(Design-agent) 작업을 아우르는 200개 이상의 도구를 제공합니다. AI는 현재 열려 있는 디자인을 읽고, 이에 대해 질문하며, 사용자가 지켜보는 동안 그 자리에서 직접 수정할 수 있습니다.

모든 도구가 광범위하게 테스트된 것은 아닙니다. 일부 도구는 Altium DelphiScript 엔진을 충돌시킬 수 있습니다. 백업하지 않은 디자인에 사용하기 전에 '알려진 제한 사항(Known limitations)'을 확인하십시오. ⚠️ 실험적 단계입니다.

eda-agent를 통해 buck converter(벅 컨버터)를 검토하는 Claude Code. 이 회로도의 피드백 저항 분배기(Feedback resistor divider)는 의도적으로 잘못 설정되어 있으며, Claude는 다른 권장 사항들과 함께 이를 찾아냅니다.

eda-agent에는 두 가지 대시보드가 포함되어 있습니다:

Altium 내부 상태 창(In-Altium status window)— 실시간 상태, 요청 횟수, 누적 Altium 측 시간, 자동 종료 카운트다운, 그리고 실행 시간을 포함한 명령별 로그를 보여주는 Altium 측의 플로팅(Floating) 창입니다. Hide pings는 30초 간격의 keep-alive 트래픽을 필터링하며, Only >100ms는 느린 호출만 분리하여 보여줍니다. Detach 버튼은 모든 변경된 문서(Dirty docs)를 저장하고 폴링 루프(Polling loop)를 깔끔하게 종료합니다.

웹 대시보드(Web dashboard)— 디자인 검토에 특화된 http://127.0.0.1:8766 주소의 로컬 브라우저 대시보드입니다. Review 탭에서는 데이터시트(Datasheet) / MPN / 제조사 / 풋프린트(Footprint) 커버리지 게이지와 실행 가능한 이슈 큐(데이터시트 누락, MPN 누락, 고립된 네트(Orphan nets) 등)를 확인할 수 있습니다. Project, Components, Nets, LibrariesPlan 탭은 실시간 구조화된 뷰를 제공합니다. 구성 요소(Component)나 네트(Net)를 클릭하면 상세 정보 창(Detail drawer)으로 들어가며, 한 번의 클릭으로 Altium에서 해당 항목을 교차 조사(Cross-probe)할 수 있습니다. 라이트/다크 테마를 지원하며, 서버 전송 이벤트(Server-sent-events)를 통한 라이브 피드를 제공합니다. 이는 MCP 서버에 의해 자동으로 시작됩니다. Altium 내부 상태 창의 Open Dashboard 버튼을 누르면 브라우저가 실행됩니다.

  • Altium Designer는 열려 있는 상태를 유지하며 디자인에 대한 완전한 제어권을 가집니다.
  • DelphiScript 폴링 루프(Polling loop)가 Altium의 스크립팅 엔진 내부에서 실행됩니다.
    eda-agent

(Python, MCP 클라이언트가 실행) 파일 기반 IPC를 통해 명령을 전송합니다 - Altium이 이를 실행하고, 응답을 작성한 뒤 폴링(Polling) 상태로 돌아갑니다.

  • Altium에서 변경 사항이 실시간으로 발생하는 것을 확인할 수 있습니다.

이것은 프로젝트를 열고, 스크립트를 실행한 뒤 종료되는 배치(Batch) 도구가 아닙니다. 여러분이 원하는 만큼 유지되는 실시간 연결입니다 (대화형 설계 검토(Design review), 가이드 기반 리팩토링(Refactoring), 즉석 BOM 쿼리, "이 저항이 어떤 네트(Net)에 연결되어 있나요?" 등). 이 모든 과정은 현재 열려 있는 프로젝트 상에서 이루어집니다.

200개 이상의 도구가 애플리케이션(Application), 프로젝트(Project), 라이브러리(Library), 회로도/일반(Schematic/General), PCB, 그리고 설계 에이전트(Design-agent) 카테고리에 걸쳐 제공됩니다.

범용 프리미티브 (Generic primitives) (query_objects, modify_objects, create_object, delete_objects, run_process): 레이트 바인딩(Late-binding)을 통해 거의 모든 회로도 또는 PCB 객체 유형에서 작동하며, 유형별 핸들러(Handler)가 무분별하게 늘어나는 것을 방지합니다.

벌크 배치 프리미티브 (Bulk batch primitives): batch_modify, batch_create, batch_delete, pcb_place_tracks, pcb_move_components, place_wires, place_net_labels, place_power_ports, place_sch_components_from_library, set_sch_components_parameters, get_sch_doc_pins, lib_add_pins, get_connectivity_many, sch_attach_spice_primitives. N번의 LLM 턴(Turn)과 N번의 IPC 왕복(Round-trip)을 단 한 번의 호출로 압축합니다. 다중 항목 편집 시 전형적인 실제 소요 시간(Wall-time) 절감 효과는 10배에서 100배에 달합니다.

설계 검토 스냅샷 (Design review snapshot): design_review_snapshot은 8~12개의 검토 읽기 항목(프로젝트 정보, 부품, 네트, 규칙, 차이점, 메시지, 통계, 미배선(Unrouted), BOM)을 단일 호출로 묶어 제공합니다. 수십 번의 호출 대신 단 한 번의 LLM 턴으로 해결합니다.

설계 린트 스윕 (Design-lint sweep): design_lint_report

단 한 번의 IPC 패스(pass)로 31개의 감사 체크(audit checks)를 실행하고 구조화된 위반 목록을 반환합니다 — 회로도 측면(클래스별 컴포넌트-파라미터 가시성, 전원 포트 방향, 플로팅 포트(floating ports), 다중 출력 / 드라이버 없음 네트(nets), 중복 지정자, 그리드 이탈 컴포넌트) 및 PCB 측면(DNP 변형 컴포넌트, tented-via 비율, 트랙 엔드포인트 근접 오류, 인근 리턴 비아(return via)가 없는 신호 비아, 비아 안테나, 제거된 패드 형상, 아웃라인 외부 컴포넌트, 보드 가장자리에 너무 가까운 패드, 유효하지 않은 폴리곤 영역, 선택적 DRC). 각 체크는 독립적인 audit_* MCP 도구로도 노출됩니다. 대시보드의 Status → Health 하위 탭에는 /api/lint를 호출하는 원클릭 Lint 패널이 있으며, 결과를 Schematic / PCB별로 그룹화합니다.

데이터시트 우선 원칙 (Datasheet-first discipline): 컴포넌트가 나타나는 모든 응답(pcb_get_components, get_bom, get_component_info, find_component, lib_search, design_review_snapshot, sch_get_simulation_readiness)에는 부품별 벤더 검색 쿼리가 포함된 _datasheet_guidance 블록이 포함됩니다. attach_to_altium / ping_altium_system_reminder를 전달하여, 연결되는 모든 MCP 클라이언트가 세션 시작 시 해당 규칙을 볼 수 있도록 합니다. LLM이 임의로 생성한 데이터시트 값은 금지되며, WebFetch/WebSearch는 명시적으로 호출됩니다.

회로도(Sch) <-> PCB 네트리스트 교차 참조 (Sch <-> PCB netlist crossref): crossref_net(net_name)은 동일한 네트에 대해 회로도 핀 목록과 PCB 패드 목록을 비교합니다. ECO 드리프트(drift), 제작 후 오래된 라우팅(stale post-fabrication routing), 포트/시트 엔트리 이름 변경 충돌로 인한 유령 네트(phantom nets)를 잡아냅니다. in_sync 플래그 + sch_only / pcb_only 차이(diff)를 제공합니다.

SPICE 시뮬레이션 워크플로우 (SPICE simulation workflow): sch_get_simulation_readiness는 모든 컴포넌트를 감사하고 준비됨(ready) / 프리미티브 필요(needs-primitive) / 파일 필요(needs-file)로 분류합니다. sch_attach_spice_primitive(s)는 수동 소자(passives)에 SpicePrefix + Value를 설정합니다. sch_attach_spice_model은 벤더의 .mdl / .ckt 파일을 연결합니다. sim_run은 시뮬레이터를 실행합니다. 내장된 가드레일(guardrail): SPICE 모델 파일을 절대 임의로 생성하지 말고, 벤더의 파일을 가져오십시오.

포커스 독립적 PCB 액세스 (Focus-independent PCB access): 모든 PCB 핸들러는 GetCurrentPCBBoard가 실패할 경우 GetPCBBoardByPath로 대체(fallback)됩니다.

nil을 반환합니다 (사용자가 sch 탭에 포커스를 둔 경우). PCB가 바로 앞에 있음에도 "No PCB document is active"라는 오해의 소지가 있는 메시지가 더 이상 나타나지 않습니다.

빠르고 컴파일 캐시가 적용됨: 지속적인 폴링 루프 (persistent polling loop); 활성 모드에서 호출당 약 10ms 소요. SmartCompile은 2초의 TTL (Time To Live)과 함께 DM_Compile을 캐싱하므로, 여러 번 읽어 검토하더라도 수십 번의 컴파일 대신 단 한 번의 컴파일 비용만 발생합니다. 보장된 최신 넷리스트 (netlist)가 필요한 경우(예: 사용자 편집 후)를 위해 명시적인 force_recompileget_compile_freshness 조사가 가능합니다.

지속적인 폴링 루프 (Persistent polling loop): 스크립트를 한 번 시작하면 활성 모드에서 도구 호출당 약 10ms가 소요됩니다.

주석 실행이 조용히 수행됨: annotate는 주석 대화 상자를 띄우지 않고 컴포넌트를 지정합니다.

속도를 위한 지연 저장 (Deferred save): 변경 사항은 메모리 내에서 문서를 수정된 상태로 표시하며, 디스크 쓰기는 명시적인 save_all (또는 detach_from_altium 시 자동 실행) 호출 시 발생합니다. 이전에는 모든 편집이 전체 프로젝트 저장을 트리거하여 지연 시간(latency)의 대부분을 차지했습니다.

두 개의 대시보드: Altium 내부에 떠 있는 상태 창(상태, 요청 횟수, 명령별 성능, 명령 로그, Detach 버튼 포함)과 설계 검토를 위한 브라우저 기반의 웹 대시보드(127.0.0.1:8766)가 제공됩니다. 웹 대시보드는 데이터시트 / MPN / 풋프린트 (footprint) 커버리지 게이지, 실행 가능한 이슈 큐, 컴포넌트 / 넷 (net) 상세 조사, Altium으로의 원클릭 교차 조사 (cross-probe), 라이트/다크 테마를 지원합니다. 전체 프로젝트 뷰는 하나의 번들된 IPC 왕복 (project.dashboard_snapshot)으로 로드되며, 웹 대시보드는 MCP 서버와 함께 자동 시작됩니다.

DelphiScript 트랩 린터 (trap linter): scripts/altium/lint.py (build.py에 연결됨)는 Pascal 소스 코드를 스캔하여 알려진 파서 위험 요소인 Cardinal() 캐스트, 잘못된 형식의 16진수 리터럴, 빈 .Add('') 인자, 주석 내부의 중괄호, 함수 로컬 변수로서의 고정 크기 배열, 예약어 식별자 등을 찾아내며, 잘못된 배포가 이루어지기 전에 빌드를 실패 처리합니다.

활동 로그 (Activity logs): 모든 명령은 workspace/activity.log (타임스탬프, 소요 시간, 명령 이름, 응답 크기가 포함된 CSV)에 추가됩니다. 브릿지는 또한 bridge_trace.log를 작성합니다.

IPC 레벨 진단을 위한 일괄 도구 권장 (Bulk-tool nudge): 단일 도구가 10초 내에 2~3회 호출되면, 응답에 배치 변형(batch variant)을 가리키는 _hint_bulk 필드가 포함됩니다. 독스트링(docstring)에서 일괄 도구를 놓친 클라이언트들은 런타임(runtime) 시점에 이를 알게 됩니다.

에이전트 설계 인터페이스 (Design agent surface): 6개의 MCP 도구(design_get_discipline, design_snapshot_inventory, design_validate_plan, design_execute_plan, design_audit_schematic, design_validate)를 통해 MCP 클라이언트 LLM이 구조화된 DesignPlan JSON을 생성하고, 이를 새로운 시트(부품 + 와이어 + 라벨 + 레일 글리프)에 인스턴스화하며, 레이아웃 문제를 감사(audit)하고 ERC(전기적 규칙 검사) 및 연결성을 검증할 수 있게 합니다. 데이터시트 우선 방식이며, 설계 구조상 NDA(비밀유지협약)로부터 격리됩니다.

모티프 컴포저 (Motif composer) + 정형 사전 지식 (canonical priors) + Sugiyama 배치 (Sugiyama placement): 3계층 배치 전략입니다. (1) Sugiyama / 힘 지향(force-directed) 방식이 모든 부품에 기본 위치를 부여합니다. (2) 모티프 컴포저(motif composer)는 VF2 부분 그래프 동형성(subgraph isomorphism)을 통해 넷리스트(netlist) 내의 정형 하위 회로(바이패스 커패시터, 전압 분배기, fb_divider, lc_output 등)를 감지하고, 각 일치 항목을 고정된 정형 레이아웃(동일한 데이터 형태, IC 고정형 또는 독립형)에 배치합니다. (3) 정형 사전 지식(canonical priors)은 역할 쌍별 권장 사항(예: vcc_decoup)

sits 400 mils from its IC). 마지막 겹침 밀어내기(overlap-shove) 패스가 모든 충돌을 복구하며, 시트 가장자리 클램핑(sheet-edge clamping)을 통해 모든 글리프(glyph)와 포트(port)를 페이지 경계 내에 유지합니다. 역할 호환성 필터(Role-compatibility filter)는 잘못된 모티프 매칭(false-positive motif matches)을 제거합니다(예: 구조적으로는 rc-lowpass이지만 실제로는 디커플링 커패시터인 경우 필터 모티프에서 제외됨). 토폴로지 불가지론적(Topology-agnostic) — 벅 컨버터(buck), LDO, MCU, 오디오 앰프 등 깨끗한 네트 그래프(net graph)를 가진 무엇이든 작동합니다.

블록 내 회로도 배선(Within-block schematic wiring): 각 핀 엔드포인트에서 레이블/포트 방향으로 스터브 와이어(stub wires)를 배치하여

기계 판독 가능한 출력(machine-readable output)을 위해
pip 설치 가능 (pip-installable): 관리자 권한 불필요, 설치 프로그램 불필요, Altium의 설정 변경 불필요

  • Windows (Altium Designer는 Windows 전용임)
  • Python 3.11 이상
  • Altium Designer (최신 버전, AD20 이상 권장)
git clone https://github.com/salitronic/eda-agent
cd eda-agent
pip install -e .

MCP 클라이언트(client)에 서버를 등록하세요. 바이너리(binary)는 eda-agent이며

stdio 상에서 실행됩니다. 로컬 stdio 기반 서버를 추가하는 방법은 사용 중인 클라이언트의 문서를 참조하십시오.

claude mcp add altium eda-agent

이 명령은 Claude Code 프로젝트 설정에 eda-agent

altium이라는 이름의 MCP 서버로

추가합니다. 사용자 수준(모든 프로젝트에서 사용 가능)으로 등록하려면 -s user를 사용하십시오:

claude mcp add -s user altium eda-agent

만약 eda-agent

PATH에 등록되어 있지 않다면,

대신 전체 경로를 입력하십시오 (pip 설치 후 경로가 표시되며, Windows의 경우 일반적으로 %USERPROFILE%\AppData\Roaming\Python\Python312\Scripts\eda-agent.exe입니다). 연결을 확인하려면: Claude Code 세션에서 /mcp를 입력했을 때 altium

연결된 상태로 목록에 나타나야 합니다.

서버는 stdio를 통해 표준 MCP를 사용합니다. 로컬 stdio 명령을 수용하는 모든 클라이언트에서 작동합니다. eda-agent (또는 eda-agent serve)를 서브프로세스(subprocess)로 호출하십시오.

Altium 스크립트 프로젝트를 찾기 쉬운 곳에 내려받으세요:

eda-agent install-scripts

기본 목적지: %USERPROFILE%\EDA Agent\scripts%.
다른 곳에 저장하려면 --dest PATH를 사용하십시오.

Altium에서 스크립트를 전역 프로젝트(Global Project)로 등록하십시오 (최초 1회):

DXP → Preferences → Scripting System → Global ProjectsInstall from file - 방금 설치한 Altium_API.PrjScr를 선택하십시오.

그 이후부터는 Altium을 실행할 때마다 스크립트 프로젝트가 컴파일되며, 폴링 루프(polling loop)를 클릭 한 번으로 실행할 수 있습니다:

File → Run Script... - Altium_API를 확장한 후 Dispatcher.pas를 찾아 StartMCPServer를 선택하고 Run을 클릭하십시오.

폴링 루프가 시작되며 MCP 클라이언트가 Altium을 제어할 수 있습니다.

스크립트를 전역으로 등록하고 싶지 않다면, **File > Open...**을 통해 Altium_API.PrjScr를 직접 열고 StartMCPServer를 실행할 수도 있습니다.

Run Script... 대화 상자에서도 동일한 방식으로 실행할 수 있으며, 해당 대화 상자는 현재 로드된 모든 스크립트 프로젝트를 인식합니다.

AI 자동 생성 콘텐츠

본 콘텐츠는 GitHub Claude Ecosystem의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0