devch

만든 것 / Excalidash MCP

Excalidash MCP

셀프호스팅 화이트보드를 AI 에이전트가 직접 그리게 하는 MCP 서버

제 서버에 띄운 ExcaliDash 드로잉을 AI 에이전트가 찾고, 고르고, 그리도록 ExcaliDash의 Agent API를 얇게 감쌌습니다. 에이전트 도구에서 바로 붙는 stdio 방식과 원격에서 붙는 HTTP 방식을 모두 지원합니다.

2026.08개인 도구MIT TypeScriptMCPDocker Compose
에이전트가 쓰는 흐름
// 1. 드로잉 목록을 보고 작업할 것을 고른다
list_drawings()
select_drawing({ drawingId })
// 2. 이름과 요소 관계를 요약으로 읽는다
get_drawing_summary()
// 3. 편집 연산을 묶어 한 번에 적용한다 (최대 50개, 전부 되거나 전부 안 되거나)
apply_drawing_ops({ ops: [ add_shape, connect, layout, ... ] })

README의 도구 이름으로 줄인 호출 순서입니다. 실제 인자는 README를 따릅니다.

요구 권한2

드로잉 읽기와 쓰기만

연결 방식2

stdio와 Streamable HTTP

필요한 ExcaliDashv0.6

안정판 v0.5.1에는 Agent API가 없음

편집 연산13

도형 추가부터 스냅샷 복원까지, 한 번에 최대 50개

왜 만들었나

셀프호스팅한 ExcaliDash의 드로잉을 AI 에이전트가 직접 열고 고칠 방법이 필요했습니다. 에이전트 도구가 공통으로 부르는 MCP가 맞는지 먼저 따져 본 다음 기능을 더하지 않고 API를 얇게 감싸는 가장 가벼운 서버를 목표로 잡았습니다.

에이전트가 목록에서 고르는 드로잉

처음 설계는 환경 변수에 드로잉 ID를 넣는 방식이었습니다. 새 드로잉을 만들면 ID가 바뀌어서 에이전트가 작업 대상을 미리 알고 있어야 했습니다. 그래서 목록 조회와 이름 검색으로 찾고 선택 도구로 이번 세션의 기본 드로잉을 정하게 바꿨습니다. 호출마다 ID를 넘기는 길도 남겼고 선택 상태는 HTTP 세션마다 따로 둡니다. 목록 조회부터 새 드로잉 생성과 그리기까지 확인했습니다.

그리는 일은 편집 연산 13개로 나눴습니다. 에이전트가 그린 그림을 다시 고칠 수 있게 편집 도구를 따로 두니 한 번에 완성하라고 시키는 것보다 결과가 나았습니다.

줄인 권한과 고정한 버전

시험 중에는 API 키에 드로잉 읽기, 드로잉 쓰기, 컬렉션 읽기, 컬렉션 쓰기 권한을 모두 넣었습니다. 배포 전에 컬렉션을 만들고 지우는 도구를 범위에서 빼고 요구 권한을 드로잉 읽기와 쓰기 두 개로 줄였습니다. 그래서 에이전트는 컬렉션 정리를 할 수 없습니다. README에는 필요한 권한만 발급하고 키를 로그와 캡처에 남기지 말라고 적었습니다.

다른 MCP 도구처럼 Docker로 띄우고 싶었는데 필요한 Agent API는 v0.6 개발판에만 있고 흔히 받는 latest 이미지는 v0.5 계열이었습니다. 계속 바뀌는 dev 태그 대신 Compose 예시에 특정 빌드 태그를 적었습니다. MCP 엔드포인트에 인증이 없어서 포트는 내 컴퓨터에서만 열리게 묶고 컨테이너는 일반 사용자와 읽기 전용 파일 시스템으로 돌게 했습니다. 개발판 업그레이드와 데이터 마이그레이션 위험은 남아 있어 올리기 전에 볼륨을 백업하라고 문서에 적었습니다. 지금 제 서버에서 Docker Compose로 띄워 에이전트에 연결해 쓰고 있습니다.