Mac mini M4를 OpenClaw 게이트웨이용으로 임대한 팀은 Model Context Protocol(MCP)을 문서보다 빨리 연결합니다—stdio npx 브리지를 넣는 조와 HTTP/SSE 동반 프로세스를 쓰는 조가 갈라져 며칠 만에 카탈로그에 같은 이름의 read_file이 둘 생기고, 세 번째 MCP 번들은 tools.fs가 막아둔 워크스페이스 밖으로 조용히 손을 뻗습니다. 본문 2026-05-13은 전송 비교, 허용 목록 정렬, 충돌 플레이북을 제시해 launchd 헤드리스에서 리로드가 “마지막으로 SSH한 사람”이 아니라 절차로 결정되게 합니다.
설치 기준은 LaunchAgent 설치와 로그 위치, 파일 시스템은 tools.fs 워크스페이스 강제, 새 MCP를 신뢰하기 전 설치 후 스모크를 통과하세요. 전송이 루프백을 벗어나면 루프백과 공개 ingress 분할을 대조해 예제가 0.0.0.0에 바인딩하지 않도록 하십시오.
「MCP JSON 블록 하나 더」가 장애로 바뀌는 이유
MCP는 오케스트레이션을 얇게 두고 서버가 도구를 선언하며 게이트웨이가 카탈로그를 합치고 클라이언트는 이름의 안정을 가정합니다. CI 에이전트·백업과 공유하는 임대 Mac에서는 stdio 서버가 게이트웨이와 동일한 PATH·키체인 상태를 물려 속도와 횡적 위험이 함께 올라갑니다. HTTP 브리지는 TLS 검증·DNS 고정·유휴 연결 변동으로 고장 양상을 옮기지만, 복붙 설정이 넓은 리스너를 열면 새 노출면이 됩니다.
- 카탈로그 비결정성:접두사 없으면 나중에 등록한 MCP가 같은 도구 이름을 덮어 리로드마다 행동이 뒤집힙니다.
- 프로세스 폭풍:stdio마다 별 인터프리터—프롬프트 폭주 시 소형 미니의 열 예산을 넘는 fork가 납니다.
- 경로 이중 국적:MCP 루트와 OpenClaw 워크스페이스가 어긋나면 감사가 불가능에 가깝습니다.
황금 규칙:모든 MCP는 게이트웨이 tools.fs와동일한 유효 워크스페이스 계약을 선언해야 합니다—계약으로 설명되지 않는 경로를 가진 도구는 병합 전에 비활성화하십시오.
매트릭스 A—전송 × 격리 × 적합 × 헤드리스 리스크
| 전송 | 격리 | 적합 | 헤드리스 |
|---|---|---|---|
| 로컬 stdio(절대 경로 고정) | 체크섬 게이트가 있으면 높음. | 도구와 게이트웨이가 같은 Mac mini M4. | 중—소프트 리로드 후 자식이 남을 수 있음. |
| 루프백 HTTP/SSE | mTLS 또는 UDS 앞단이 있으면 중상. | 상주 데몬이나 게이트웨이 UID에 넣기 싫은 폴리글랏. | 127.0.0.1만이면 낮음. |
| 터널 없는 원격 HTTP | 제로 트러스트 없으면 낮음. | 드묾—SSH 터널 운영과 병행. | 높음—WAN이 MCP 지연으로 직결. |
| 컨테이너 사이드카 | FS 경계는 높고 운영은 무겁다. | 같은 Mac에서 CI가 OCI로 표준화된 경우. | 중—재시작 시 소켓 경로 드리프트. |
매트릭스 B—증상 × 착각 × 수정
| 증상 | 착각 | 수정 |
|---|---|---|
| 도구 순서가 매일 밤 바뀜 | 「클라우드는 비결정적」 | 접두사 없는 충돌—이름 변경 또는 비활성화. |
| MCP 세트 후 RSS 급등 | 「메모리 무한」 | stdio 병행 제한, 무거운 것은 HTTP로.드레인 재시작으로 단계 리로드. |
| MCP는 읽히는데 tools.fs는 같은 경로 실패 | 「벤더 버그」 | 이중 정책—허용 목록을 합치거나 도구 거부. |
launchd에서 stdio 수명주기
OpenClaw가 stdio MCP를 기동하면 macOS는 게이트웨이 프로세스 그룹의 자식으로 취급합니다. 시그널 전파는 LaunchAgent 포장 방식에, 환경은 문서화된 우선순위에 따르며 마지막 zsh export에는 의존하지 않습니다. 같은 JSON이 노트북에서는 되고 NodeMac에서는 HOME이나 NODE_OPTIONS 차이로 깨지는 전형입니다. argv를 프로덕션 코드로 고정하고 불안정 WAN에서는 shrinkwrap 없는 npx를 피하십시오.
종료도 대칭으로 설계하십시오. 게이트웨이가 강제 종료되면 고아 MCP가 SQLite 미러나 인덱스에 락을 남겨 “database busy”를 유발합니다. SIGTERM 유예→SIGKILL 예산을 정하고 HTTP 브리지는 연결이 0이 된 뒤 healthy로 돌리십시오.
- argv 동결:릴리스 태그마다 해석된 argv를 커밋.
- cwd 계약:MCP cwd를 워크스페이스 루트로 명시.
- 시그널 리허설:분기마다 합성 부하로 SIGINT, 자식이 20초 안에 종료하는지 확인.
파라미터 시트
| 항목 | 기본 | 상한 | 담당 | 롤백 |
|---|---|---|---|---|
| 핸드셰이크 | 45초 | 120초(승인) | SRE | prev-known-good에서 MCP 블록 제거 |
| stdio MCP 병렬 | M4 24GB 4 | 24h 녹색이면 7 | 자동화 리드 | bundle ID 플래그로 비활성화 |
| 도구 실행 | 읽기 30초 | 배치 180초(티켓) | 보안 | 게이트웨이 정책에서 스로틀 |
| 바이너리 검증 | 배포마다 SHA-256 | mtime만 변하면 주간 알림 | 릴리스 엔지니어링 | 서명 tarball 복원 |
프로덕션 전 다섯 번 훈련
- list-tools 두 번:재시작 전후 JSON diff.
- 파괴적 작업은 스테이징만:스테이징/프로덕션 풀 일회성 워크스페이스.
- 의도적 차단:HTTP 브리지 이그레스를 막고 오류 메시지 확인.
- 세션 중 키 로테이션:GUI 없이 갱신되는지와 환경 우선순위 정합.
- launchctl 스냅샷:자식 PID와 매칭.
숫자 손잡이
- 상시 stdio MCP 자식 ≤ 4, CPU 피크 < 55%일 때만 재평가.
- 15분 무호출이면 stdio 세션 종료.
- 동도시 HTTP MCP RTT p95 < 250ms, 터널이 2주간 p95 > 600ms이면 에스컬레이션.
여덟 단계(JSON-LD와 동일)
- 전송·Unix 소유자 목록화.
- 접두사 통일.
- tools.fs와 허용 목록 합류.
- stdio 병행 제한.
- 핸드셰이크/도구/유휴 타임아웃 공표.
- 리로드 후 스크립트 스모크.
- 롤백 태그.
- 분기 argv·체크섬 감사.
FAQ
MCP가 tools.fs를 대체할 수 있나요
아니요—능력은 늘어도 FS 계약은 느슨해지지 않습니다.
NodeMac Mac mini M4는 여러 MCP stdio를 상주시켜도 Apple Silicon 통합 메모리로 페이징 부담을 줄이고 하이퍼바이저가 대역을 빼앗지 않습니다.네이티브 macOS는 MCP 자식을 OpenClaw와 같은 키체인·launchd 수명주기에 태울 수 있습니다.SSH와 선택적 VNC로 홍콩·일본·한국·싱가포르·미국 실제 기기에서 argv와 GUI를 재현 검증하세요.테넌트 물리 분리와 예측 가능한 열 설계 위에서만 병행을 늘리고, 가격 페이지와 함께 설명하면 재무 설득이 쉬워집니다.