2026-05-19 헤드리스 임대 Apple Silicon 클라우드 Mac에서의 OpenClaw MCP 서버와 도구 권한(홍콩 / 도쿄 / 서울 / 싱가포르 / 미국)
홍콩·도쿄·서울·싱가포르·미국에서 Mac mini M4를 임대하고 헤드리스 SSH로 OpenClaw를 돌리는 팀은 저장소 검색·내부 API를 에이전트에 안전히 넘기기 위해 Model Context Protocol(MCP)를 구성한다. 결론은 분명하다: 짧은 수명·저장소 범위 도구는 stdio MCP를, 여러 게이트웨이가 같은 구현을 공유해야 할 때만 HTTP/SSE MCP로 승격한다. 어떤 전송이든 30초 이상의 읽기 타임아웃과 OpenClaw+병렬 MCP를 위한 최소 4GB의 여유 통합 메모리를 확보한다. 비교 표·도구 매트릭스·7단계·3열 분류 표를 제공하며 Node 24 + launchd + doctor 및 AGENTS.md 워크스페이스 브리프와 연결된다.
헤드리스 Mac에서 MCP가 필요한 경우
OpenClaw는 파일 스킬과 채널을 갖추지만 프로덕션에서는 Git·이슈 트래커·HTTP API를 구조화된 도구로 노출하고 싶다. MCP는 런타임 업그레이드 때 통합을 갈아엎지 않게 한다. 임대 환경에서는 다른 테넌트의 npx 캐시가 PATH를 오염시키지 않는지, 각 MCP가 허용된 워크스페이스 루트만 읽는지 반드시 검토한다.
- 플랫폼 팀은 골든 이미지마다 감사된 MCP 묶음을 하나로 유지하고 싶다.
- 모바일 릴리스 담당은
xcodebuild·simctl을 SSH와 launchd에서 동일 argv로 맞추고 싶다. - 보안은 각 MCP가 건드릴 수 있는 경로 접두어를 나열하고 싶어 하며 stdio 경계가 설명하기 쉽다.
설계 출발점으로 MacXCode 홈을 참고하고 어떤 MCP를 임대 호스트 체크아웃에 둘지 결정한다.
macOS 게이트웨이에서 stdio와 HTTP/SSE
stdio는 자식 프로세스의 표준 입출력으로 JSON-RPC를 운반하며 신뢰 바이너리를 저장소 옆에 둘 때 적합하다. HTTP/SSE는 TLS 종단이나 다중 게이트웨이 공유가 필요할 때 선택한다. stdio는 게이트웨이 재시작과 함께 깔끔히 내려가지만 HTTP MCP는 launchd 스로틀과 맞지 않으면 연결이 매달릴 수 있다.
| 차원 | stdio MCP | HTTP/SSE MCP | 임대 운영 메모 |
|---|---|---|---|
| 수명 | 세션에 바인딩 | 상주+헬스 체크 | 단일 팀이면 stdio가 단순 |
| 인증 | 게이트웨이 환경 상속 | mTLS 또는 서명 토큰 | bearer를 world-readable /tmp에 두지 않는다 |
| 지연 | 로컬 파이프로 극소 | 루프백은 빠르지만 광역은 RTT 증가 | HTTP MCP는 HK/JP/KR/SG/US와 같은 권역에 |
| 관측성 | stderr를 게이트웨이로 | 중앙 접근 로그 | StandardErrorPath 일별 롤링 |
git이나 xcodebuild를 호출하는 MCP에는 클라이언트 읽기 타임아웃 30초. 콜드 캐시에서는 10초를 넘는 첫 스캔도 흔하다.
도구 표면 매트릭스: 사람 승인 없이 무엇이 허용되는가
네트워크 출구를 주기 전에 각 행을 허용/거부로 내리고 분할 읽기로 이웃 디렉터리 비밀을 재구성하지 못하게 한다.
| 도구군 | 기본 자세 | 하드 요구 |
|---|---|---|
| 저장소 읽기/검색 | 허용 목록 안만 | 심볼릭 링크 이스케이프 금지 |
| 셸 실행 | 기본 거부 | argv 화이트리스트와 cwd 고정 |
| HTTP 가져오기 | 태그된 호스트만 | 메타데이터 IP 차단 및 URL 로그 |
| 브라우저 자동화 | SSH 전용에서는 끔 | 필요 시 VNC 절차 사용 |
헤드리스 launchd: PATH, Node 24+, 로그
launchd 작업은 zshrc를 읽지 않는다. npx에 의존하는 MCP는 SSH에서는 성공하지만 야간 작업에서 exit 127이 난다. onboard + doctor와 같이 Node 24+를 고정하고 plist EnvironmentVariables에 절대 경로를 쓴다. OpenClaw와 stdio MCP 두 개를 전제로 언어 서버형 MCP를 추가할 때마다 약 2GB 메모리를 더한다.
7단계: Apple Silicon 임대에서 MCP 활성화
node -v가 v24+인지 확인하고 SSH와 테스트 plist 모두에서which openclaw를 맞춘다.- MCP 설정을 Git으로 관리하고 환경별 블록으로 나눈다.
- stdio MCP의 argv[0]를 절대 경로로 하고 작업 디렉터리를 CI와 동일 체크아웃에 맞춘다.
- 파일 도구에 허용 목록을 적용하고 AGENTS.md 루트 정의와 대조한다.
- 최소 읽기 전용 도구 호출로 드라이런하고 로그를
/var/log/openclaw/등에 남긴다. openclaw doctor를 실행하고 중복 LaunchAgent를 정리한 뒤 반영한다.- 킬 스위치: MCP 블록을 주석 처리하고
launchctl kickstart -k로 게이트웨이를 재시작하는 절차를 문서화한다.
배포 후 프로브 예:
OPENCLAW_LOG_LEVEL=debug openclaw doctor >> ~/Logs/openclaw-mcp-probe.log 2>&1
분류: 프로덕션에서 MCP가 실패할 때
| 증상 | 유력 원인 | 다음 조치 |
|---|---|---|
| 자식 exit 127 | PATH 부족 | plist EnvironmentVariables를 출력해 절대 경로 추가 |
| 30초 이상 정지 | 네트워크 차단 또는 git 자격 증명 | GIT_TERMINAL_PROMPT=0과 stderr 확인 |
| 업그레이드 후 도구 목록 비어 있음 | 스키마 불일치 | 서버 버전 고정 후 doctor 재실행 |
FAQ
stdio와 HTTP 우선순위는? 짧은 수명·저장소 범위면 stdio. 공유 게이트웨이나 TLS 종료가 필요하면 HTTP/SSE. 혼합 시 타임아웃을 분리한다.
SSH와 launchd가 다른 이유는? launchd는 최소 환경이다. plist에 절대 경로를 쓰고 셸 프로필에 의존하지 않는다.
메모리는 얼마나? OpenClaw+stdio MCP×2+ripgrep 부하에 4GB 여유를, 언어 서버형을 추가할 때마다 약 2GB를 더한다.
Mac mini M4 임대가 OpenClaw + MCP를 닫는 이유
Apple Silicon M4의 메모리 대역은 OpenClaw, 여러 MCP, 가끔의 xcodebuild analyze를 동시에 돌려도 인덱스를 스왑으로 밀어내기 어렵다. 네이티브 macOS 스택은 TLS 지터를 줄여 30초 MCP 타임아웃 설계와 잘 맞는다. 도쿄에서 App Store Connect에 가깝게, 싱가포르에서 ASEAN에 맞춰 시험한 뒤 해제할 수 있다. 요금 페이지에서 리전을 비교하고 도움말에서 SSH를 리허설하며 브라우저 MCP가 필요할 때만 VNC를 켠다.