|
| 1 | +# BingguPack MCP Sandbox Home — Diagnosis & Fix |
| 2 | + |
| 3 | +> 2026-06-24. openbinggu-local MCP의 temp-home 격리 문제 원인 규명. |
| 4 | +> **결론: 코드 결함 아님. `BINGGU_HOME` env override가 이미 완전 구현되어 있다.** |
| 5 | +
|
| 6 | +## 1. MCP 서버/설정 위치 |
| 7 | +- 서버: `C:\Users\PC\binggupack\scripts\openbinggu_mcp_server.py` (사장님 실제 BingguPack 시스템, OpenCrab repo 밖). |
| 8 | +- config: `~/.claude.json` + `~/.claude/.mcp.json` |
| 9 | + ```json |
| 10 | + "openbinggu-local": { |
| 11 | + "command": "python", |
| 12 | + "args": ["C:\\Users\\PC\\binggupack\\scripts\\openbinggu_mcp_server.py", "--serve", "C:\\Users\\PC\\binggupack"] |
| 13 | + } |
| 14 | + ``` |
| 15 | +- 실제 도구 동작: `openbinggu_mcp_server_handlers.handle_tool` → capture/ledger 엔진. |
| 16 | + |
| 17 | +## 2. home 경로 결정 지점 (이미 BINGGU_HOME 지원) |
| 18 | +- 중앙 helper: `scripts/binggu_platform.py` |
| 19 | + - `binggu_home(env)`: **`BINGGU_HOME` 우선(opt-in)**, 없으면 OS별 홈/`.binggupack`. |
| 20 | + - `default_ledger(env)`: `<binggu_home>/ledger.sqlite` (BINGGU_HOME 우선). |
| 21 | +- `scripts/binggu_capture_persist.py` `binggu_home()`도 `os.environ["BINGGU_HOME"]` 우선. |
| 22 | +- **25개 모듈이 binggu_platform import.** → BINGGU_HOME 1개로 전 경로 통제 가능. |
| 23 | + |
| 24 | +## 3. 실제 원인 (코드 아님 — 테스트 실수) |
| 25 | +이전 MCP operational E2E에서 실제 `~/.binggupack`이 건드려진 원인: |
| 26 | +1. **env 이름 오류** — `BINGGUPACK_HOME`을 썼다. 올바른 이름은 **`BINGGU_HOME`**. |
| 27 | +2. **프로세스 전달 실패** — 세션 Bash `export`는 별도 프로세스인 MCP 서버에 전달되지 않는다. |
| 28 | + MCP 서버의 env는 **MCP config의 `env` 블록**으로만 주입된다. |
| 29 | + |
| 30 | +## 4. 실증 (경로 계산, write 0) |
| 31 | +``` |
| 32 | +BINGGU_HOME=/tmp/tmp.RvQW3nYdlS 주입 시: |
| 33 | + binggu_home = .../Temp/tmp.RvQW3nYdlS |
| 34 | + default_ledger = .../Temp/tmp.RvQW3nYdlS/ledger.sqlite |
| 35 | + capture home = .../Temp/tmp.RvQW3nYdlS |
| 36 | +미주입(기본): |
| 37 | + binggu_home = C:/Users/PC/.binggupack |
| 38 | +``` |
| 39 | +→ **`BINGGU_HOME`으로 capture/ledger/preview 전부 temp로 격리됨.** 코드 패치 불필요. |
| 40 | + |
| 41 | +## 5. 올바른 해결 — MCP config env 주입 (예시만, 실제 config 미수정) |
| 42 | +sandbox/CI 테스트용 MCP 등록 예시 (owner 운영 행위 — 등록은 owner가): |
| 43 | +```json |
| 44 | +{ |
| 45 | + "mcpServers": { |
| 46 | + "openbinggu-local-sandbox": { |
| 47 | + "command": "python", |
| 48 | + "args": ["C:\\Users\\PC\\binggupack\\scripts\\openbinggu_mcp_server.py", "--serve", "C:\\Users\\PC\\binggupack"], |
| 49 | + "env": { |
| 50 | + "BINGGU_HOME": "C:\\Users\\PC\\AppData\\Local\\Temp\\binggu-mcp-sandbox" |
| 51 | + } |
| 52 | + } |
| 53 | + } |
| 54 | +} |
| 55 | +``` |
| 56 | +- `env.BINGGU_HOME` 설정 → MCP 프로세스가 그 env로 기동 → capture/ledger/preview 전부 그 아래. |
| 57 | +- 적용 후 MCP 재시작(또는 Claude 재시작) 필요 — 별도 프로세스이므로. |
| 58 | +- **실제 운영 `openbinggu-local`은 그대로 두고, 별도 sandbox 엔트리로 등록**하는 것을 권장. |
| 59 | + |
| 60 | +## 6. 판정 |
| 61 | +- **코드: `MCP_SANDBOX_HOME_SUPPORTED`** — `BINGGU_HOME` opt-in 이미 구현·실증 완료. |
| 62 | +- **런타임: 조건부 `MCP_OPERATIONAL_READY_SANDBOX`** — MCP config `env.BINGGU_HOME` 주입 + 재시작 시 달성. |
| 63 | + (이번 턴은 config 미수정·문서화까지 → 현 세션 MCP는 여전히 실제 홈 사용.) |
| 64 | + |
| 65 | +## 7. 무결성 |
| 66 | +- **사장님 BingguPack 코드 수정 0** (패치 불필요 — 이미 지원). |
| 67 | +- 실증은 `binggu_home()` 경로 계산만(파일 생성 0). `ledger.sqlite` 본체·`-wal` 미변경 = 데이터 write 0. |
| 68 | +- `actual API call=0` · `source fetch/network=0` · `insane-search 외부=0` · `OpenCrab ingest=0` · `production write=0` · `upload script=0` · `release/tag 수정=0`. |
| 69 | +- 정직 표기: import 부작용으로 `ledger.sqlite-shm` touch 가능(데이터 0). config 수정·MCP 재시작은 owner 운영 행위로 미수행. |
0 commit comments