아키텍처
이 문서는 Figma Agent Kit의 구조(패키지, 런타임 역할, 데이터 경로, 설계 원칙)를 설명합니다.
목표
- AI 에이전트(Cursor, Claude Code, Codex, …)가 Figma Desktop에서 현재 열린 Figma 파일을 읽고 쓸 수 있게 합니다
- 캔버스 트래픽을 localhost에 유지합니다 — 브리지 도구는 Figma REST로 문서를 업로드하지 않습니다
- 단일 브리지 포트에서 Leader / Follower 선출을 통해 여러 MCP 클라이언트를 동시에 지원합니다
- MCP 자격 증명과 독립적인 선택 사항의 플러그인 내 AI 경로(이름 변경 / 그룹화)를 제공합니다
모노레포 구조
버전은 함께 관리됩니다(0.1.x). 한쪽만 릴리스하는 대신 pnpm release:kit:* 사용을 권장합니다.
시스템 개요
종단 간 흐름:
- 에이전트가 stdio를 통해
figma-agent-mcp프로세스와 MCP로 통신합니다. - 이 프로세스는 Leader(
localhost:PORT바인딩) 또는 Follower(Leader로 전달)입니다. - 플러그인 UI iframe은 Leader에 WebSocket을 열고 MessagePack으로 통신합니다.
- UI는 RPC를 플러그인 main 스레드로 전달하고, 이 스레드는 Figma Plugin API(
documentAccess: dynamic-page)를 호출합니다.
기술 스택
모듈 맵(MCP)
모듈 맵(플러그인)
Leader / Follower 선출
여러 에이전트 창은 종종 여러 MCP 프로세스를 실행합니다. 브리지 포트는 하나의 프로세스만 바인딩할 수 있습니다.
- Leader: 포트를 바인딩하고 플러그인 소켓을 수락하며 탐색 + RPC를 처리합니다.
- Follower: 모든 도구 호출을 Leader의
POST /rpc(MsgPack)로 전달하고,list_files는GET /files로 처리합니다. - 상태 폴링(~3–5초): Leader가 종료되면 Follower가 선출을 재시도하여 인계할 수 있습니다.
RPC 경로(도구 호출)
주요 세부 사항:
- 와이어 도구 이름은
type또는tool로 표시될 수 있습니다. - 스크린샷
data는 브리지에서 base64가 아닌 원본 PNG 바이트(MsgPackbin)입니다. - 로그는 stderr로만 출력합니다. stdout은 MCP stdio용으로 예약됩니다.
스크린샷 및 슬라이스 내보내기 경로
두 가지 AI 경로
MCP 브리지 도구에는 LLM API 키가 필요하지 않습니다. 선택 사항인 이름 변경/그룹화 AI는 플러그인 UI 내부에서만 실행됩니다.
포트 구성
- 루트
bridge.config.json의defaultPort를 편집합니다. pnpm sync:bridge를 실행합니다(predev/prebuild에서도 실행됨).- 플러그인을 다시 빌드하고 MCP를 다시 시작합니다.
MCP 전용 런타임 재정의인 FIGMA_AGENT_MCP_PORT는 플러그인 manifest / UI에 포함된 포트와 일치해야 합니다.
원칙
- Local-first — 브리지 트래픽은
localhost에 머무르며, MCP 도구용 디자인 데이터는 업로드되지 않습니다. - 핫 패스의 MsgPack — WS + follower RPC에는 MsgPack을 사용하며, 작은 탐색 엔드포인트는 JSON을 유지합니다.
- Stdout 순수성 — MCP 프로세스에서 stdout에 진단 정보를 출력하지 않습니다.
- 비동기 노드 조회 —
dynamic-page플러그인은figma.getNodeByIdAsync를 사용합니다. - 버전 동시 릴리스 — 프로토콜 변경 후 플러그인과 MCP를 함께 업그레이드합니다.
- 기능 정직성 — Motion 도구에는 motion API를 노출하는 Figma 빌드가 필요하며, 그렇지 않으면 명확한 오류를 반환합니다.
