Gist의 mccm.json을 로컬 settings.json에 적용한다. "/download", "환경 다운로드", "download env" 등의 요청에 사용한다.
GIST_ID=$(gh api gists --jq '.[] | select(.files["mccm.json"] != null) | .id' 2>/dev/null | head -1); [ -n "$GIST_ID" ] && gh gist view "$GIST_ID" --filename mccm.json 2>/dev/null || echo "not found — gist에 mccm.json 파일이 없습니다"cat "$HOME/.claude/settings.json" 2>/dev/null || echo "not found"mccm.json의 문자열 값에서 아래 변수를 치환한다:
${HOME} → 현재 OS의 홈 디렉토리 ($HOME 또는 $USERPROFILE)${USER} → 현재 사용자명Gist의 mccm.json을 기준으로 로컬 환경을 구성한다.
gh api gists로 mccm.json을 포함하는 gist를 검색한다.
gh gist create --desc "mccm env" 으로 mccm.json gist를 먼저 생성하라고.head -1으로 자동 선택하지 않는다.mccm.json의 marketplaces를 settings.json의 extraKnownMarketplaces와 비교한다.
claude plugin marketplace add 실행claude plugin marketplace update 실행mccm.json의 plugins를 settings.json의 enabledPlugins와 비교한다.
claude plugin install 실행claude plugin update 실행mccm.json의 clis를 확인한다.
⚠️ 보안: check와 install 값은 셸 명령으로 실행되므로, 실행 전 반드시 사용자에게 명령 전문을 보여주고 승인을 받는다.
각 CLI 항목에 대해:
check와 install 명령을 사용자에게 표시한다check 명령으로 설치 여부를 판단한다install 명령 실행사용자가 거부한 항목은 스킵하고 완료 보고에 "스킵됨"으로 기록한다.
mccm.json의 settings를 settings.json과 비교한다. 변수 치환 적용 후 비교.
충돌이 없는 경우 (mccm.json에만 있는 키): 바로 추가.
충돌이 있는 경우 (같은 키에 다른 값): 사용자에게 물어본다:
키: mccm.json 값 vs settings.json 값mccm.json의 mcpServers를 settings.json의 mcpServers와 비교한다. 변수 치환 적용.
mccm.json의 hooks를 settings.json의 hooks와 비교한다. 변수 치환 적용.
⚠️ 보안: hooks는 Claude Code 세션에서 자동 실행되므로, 새 hook과 충돌 hook 모두 사용자 확인이 필수이다.
사용자가 거부한 hook은 스킵하고 완료 보고에 "스킵됨"으로 기록한다.
settings.json에는 있지만 mccm.json에는 없는 항목을 감지한다:
enabledPlugins에 있지만 mccm.json plugins에 없는 플러그인mcpServers에 있지만 mccm.json mcpServers에 없는 서버hooks에 있지만 mccm.json hooks에 없는 hook감지된 항목이 있으면 사용자에게 목록을 보여주고 물어본다:
아래 항목은 로컬에만 존재하고 Gist에는 없습니다:
- (항목 목록)
(1) 유지 (로컬에만 남김) / (2) 삭제 (Gist 기준으로 완전 동기화)
사용자가 (2) 삭제를 선택하면:
claude plugin uninstall 실행모든 변경을 적용하여 $HOME/.claude/settings.json에 저장한다.
Read 도구로 파일을 읽고, 변경 사항을 Edit 도구로 적용한다.