MCP를 붙이지 마세요, 앱을 MCP로 만드세요 — FableCut이 던진 새 아키텍처
핵심 요약 (TL;DR)
솔로 개발자 ronak-create의 zero-dependency 브라우저 비디오 에디터 FableCut이 project.json + fs.watch + Server-Sent Events 조합으로 '앱 자체가 에이전트 인터페이스'인 설계를 제안했습니다. Show HN에서 82포인트, GitHub 215스타를 24시간 안에 확보했고, MCP·REST·UI가 동일한 JSON 파일을 공유하는 방식이 핵심입니다.
지난 몇 달 바이브코딩 커뮤니티의 화두는 'MCP 서버를 어떻게 붙일까'였습니다. Cursor에 MCP 하나, Claude Desktop에 또 하나, 각 앱마다 브릿지 코드를 짜고 인증 토큰을 관리하고… 이 흐름을 정확히 반대로 뒤집은 앱이 2026-07-08 Show HN에 올라왔습니다.
문제 재정의 — 왜 MCP 서버는 항상 무거워지는가
기존 MCP 접근은 '에이전트가 앱을 조종하려면 앱의 API를 감싸는 브릿지가 필요하다'는 전제로 출발합니다. 브릿지는 상태를 유지해야 하고, 인증을 흘려야 하고, 앱과 어긋나면 깨집니다. 앱이 업데이트되면 브릿지도 업데이트해야 하는 거죠. 이 구조에서 에이전트는 항상 '남의 집 창문으로 들여다보는' 위치에 있습니다.
FableCut의 답은 명쾌합니다. "그러면 앱의 상태를 파일 하나에 다 밀어넣고, 그 파일을 누구든 쓸 수 있게 만들자." 프로젝트 전체가 project.json 한 파일에 저장됩니다. UI가 이 파일을 읽고 그립니다. 사용자가 편집하면 이 파일이 수정됩니다. 에이전트가 편집하려면 이 파일을 직접 쓰면 됩니다. fs.watch가 파일 변경을 감지하고, Server-Sent Events가 브라우저 UI에 통보합니다. 개발자 벤치 기준 대략 150ms 안에 UI가 새 상태로 핫리로드되죠.
MCP + REST + UI가 동일한 진실을 본다
이 설계의 진짜 위력은 병렬성에 있습니다. MCP 서버가 project.json을 씁니다. REST API로 외부 스크립트가 씁니다. 사람이 UI에서 슬라이더를 드래그해도 결국 project.json에 반영됩니다. 세 인터페이스가 같은 상태를 보기 때문에 어긋날 수가 없어요. HN 톱 코멘터의 표현이 정확합니다. "JSON 프로젝트 파일을 직접 편집할 수 있다는 게 solid optimization이고, 많은 가능성을 연다."
기능 목록도 흥미롭습니다. 밝기·대비·채도·색온도·필름 그레인 같은 그레이드 컨트롤, 키프레임, 트랜지션, 에이전트가 즉석에서 만드는 SVG 오버레이(하위 3분의 1 타이틀·컨페티·스파클), 그리고 레퍼런스 영상을 넣으면 샷 경계·BPM·라우드니스를 뽑아주는 분석기까지. npm 의존성 0으로 이걸 다 담았습니다. 최종 렌더만 서버 FFmpeg가 담당하고요.
이 패턴은 비디오 편집기 밖에서도 통한다
FableCut의 아키텍처를 추상화하면 이렇습니다. (1) 앱의 전체 상태를 사람이 읽을 수 있는 파일로 표현한다. (2) 파일 변경을 감지하는 얇은 서버가 UI로 스트리밍한다. (3) 어떤 도구든 파일을 쓸 수 있으면 앱의 편집자가 된다. 문서 편집기, 디자인 툴, 회계 소프트웨어, 이력서 빌더 — 상태를 파일로 표현할 수 있는 모든 앱에 적용됩니다.
이 방식이 확산되면 '앱마다 MCP 서버를 붙이는' 지금의 모델이 뒤집힙니다. 앱 자체가 MCP 프로토콜의 한쪽 끝이 되는 거죠. 다음 창에 이 패턴을 따라간 두 번째, 세 번째 앱이 나올 겁니다. 그때 놀라지 마세요.
FAQ
Q. project.json이 커지면 성능이 무너지지 않나요?
FableCut은 revision 카운터로 diff를 관리해 UI가 전체를 다시 그리지 않게 합니다. 다만 대형 프로젝트 벤치는 아직 부족합니다.
Q. 사람과 에이전트가 동시에 편집하면 충돌은 어떻게 처리되나요?
현 버전은 단일 편집자를 가정합니다. 마지막 쓰기가 이깁니다. 실무 프로덕션은 락킹이나 CRDT가 붙어야 합니다.
Q. Remotion 같은 기존 비디오 파이프라인과 통합할 수 있나요?
HN 스레드에서 논의 중입니다. FableCut의 project.json 스키마를 다른 렌더러가 소비하는 방향이 자연스럽습니다.
댓글 0
아직 댓글이 없습니다