배포 가이드 2026-04-07 · 14 분

2026년 원격 물리 Mac에서 OpenClaw로 MCP 연결: stdio와 Streamable HTTP 이중 경로 재현 튜토리얼—spawn ENOENT·프로토콜 버전 불일치·tool 타임아웃 트러블슈팅 Runbook + CLI 설정 조각 + FAQ

무인 물리 Mac 게이트웨이에서 OpenClaw를 돌리는 팀은 MCP에서 세 가지가 반복됩니다: 로그인 셸과 달라 생기는 stdio spawn ENOENT, Streamable HTTP의 프로토콜·콘텐츠 타입 스큐, 클라이언트·서버·tool이 서로 다른 데드라인. 본문은 7단계 롤아웃, stdio vs HTTP 의사결정 표, 복붙 MCP 서버 JSON, 증상 런북, SLO에 붙일 수 있는 수치, FAQ로 내부 문서에 그대로 옮길 수 있게 정리합니다.

2026 원격 물리 Mac OpenClaw MCP stdio와 Streamable HTTP

1. 원격 Mac 게이트웨이에서 MCP가 깨지는 이유

MCP(Model Context Protocol)는 전송 위에 얹힌 구조화 메시지일 뿐입니다. 노트북에서는 터미널에서 바로 보이지만, 임대·코로케이션 Mac에서는 게이트웨이가 로그인 셸 없이 launchd 아래에서 돌고 cwd도 다르며 Homebrew·Volta shim이 빠진 PATH를 씁니다—stdio 서버는 로그 한 줄도 못 찍고 실패합니다.

  1. 환경 드리프트 — 대화형 SSH는 ~/.zprofile을 읽지만 데몬은 그렇지 않습니다. SSH에선 되는 명령이 게이트웨이 아래서 spawn ENOENT로 터집니다.
  2. 전송 불일치 — Streamable HTTP·SSE 엔드포인트는 프로토콜 개정, Accept 헤더, TLS 종료 방식이 맞아야 합니다. 역프록시가 버퍼링하거나 헤더를 제거하면 “버전 불일치”나 406으로 보이며 단순 네트워크 다운이 아닙니다.
  3. 타임아웃 층누적 — 모델 클라이언트, OpenClaw 게이트웨이, MCP 서버, 실제 tool이 서로 다른 데드라인을 둡니다. 한 층만 늘리면 버그를 가리고 공유 물리 노드에 걸린 잡만 늘어납니다.

Streamable HTTP를 웹훅과 같은 엣지로 노출한다면 Bearer·경로 접두 규율을 OpenClaw 웹훅·역프록시 CI 런북과 맞춰 401/404가 MCP 오류로 위장하지 않게 하세요. 로컬에서 OpenClaw를 먼저 안정화하려면 Mac에서 OpenClaw 프로젝트 효율적 실행 가이드도 함께 보세요.

2. stdio vs Streamable HTTP: 언제 무엇을 쓸까

같은 호스트에서는 이동 부품을 최소화하는 전송을 고르고, 서버 공유나 프록시 인증이 필요할 때 HTTP로 승격합니다.

기준 stdio MCP 서버 Streamable HTTP MCP 서버
실패 시 파급 자식 프로세스 단위 격리, 게이트웨이가 서버 하나만 재시작. 공유 포트·인증서, URL을 치는 모든 클라이언트에 영향.
PATH·cwd 민감도 높음 — ENOENT가 기본 실패 모드. 바이너리 해석은 launchd 관리 시 낮음, 업스트림 URL은 여전히 민감.
멀티테넌트·원격 클라이언트 머신당 게이트웨이 하나면 수동 멀티플렉싱 외엔 제한. 자연스러움 — HTTP 서버 하나, 인증 뒤 다수 호출자.
관측 게이트웨이 구조화 로그 + 자식 stderr. 프록시 액세스 로그, 업스트림 타이밍, ALPN·TLS 트레이스 추가.

3. 7단계 재현 롤아웃

  1. 신원·기준선 — OpenClaw 소유 사용자, LaunchAgent 라벨, launchctl print·유닛에서의 cwd를 기록합니다.
  2. 게이트웨이 없이 stdio 재생 — 동일 사용자로 /bin/bash -lc 'which node; node -v'와 env 파일까지 맞춘 MCP 명령을 실행합니다.
  3. stdio 설정 경화command 절대 경로, 명시적 args, 선택 cwd, 명시 env(아래 JSON 참고).
  4. HTTP 경로(선택) — MCP HTTP를 127.0.0.1에 바인딩하고 nginx/Caddy에서 TLS 종료 후 curl -vAccept 협상을 확인합니다.
  5. 버전 고정 — MCP SDK·서버 패키지를 OpenClaw 내부 클라이언트 라이브러리와 동일 major.minor로 핀하고 변경 로그에 둘 다 적습니다.
  6. 타임아웃 예산 — 현실 입력으로 tools/call P95를 재고, 클라이언트 대기는 P95×1.5 이상으로 두되 상한을 둡니다.
  7. 로그 계약initialize, tools/list, tools/call마다 공통 상관 ID로 JSON 한 줄씩 남깁니다.

재시작에도 살아남는 에이전트 흐름은 ZoneMac 물리 노드 OpenClaw 24/7 자동화 패턴과 이 런북을 맞추면 운영 표준이 한 줄로 이어집니다. 장시간 데몬 안정성은 OpenClaw 장시간 운용 Mac mini 안정성 가이드와 교차 검증하세요.

4. CLI·설정 JSON 조각(예시)

키 이름은 호스트·OpenClaw 스키마에 맞게 바꿉니다. 핵심은 절대 경로와 명시적 env 블록입니다.

Node 진입점 stdio 서버(macOS)

{
  "mcpServers": {
    "repo-tools": {
      "command": "/opt/homebrew/bin/node",
      "args": ["/usr/local/lib/mcp-servers/repo-tools/dist/main.js"],
      "cwd": "/Users/shared/mcp/repo-tools",
      "env": {
        "PATH": "/opt/homebrew/bin:/usr/bin:/bin",
        "NODE_ENV": "production"
      }
    }
  }
}

프로필을 소스해야 할 때 로그인 셸 래퍼

{
  "mcpServers": {
    "legacy-npx": {
      "command": "/bin/bash",
      "args": ["-lc", "exec npx --yes @example/[email protected]"],
      "env": { "HOME": "/Users/shared" }
    }
  }
}

Streamable HTTP 엔드포인트(클라이언트 측 참고)

{
  "mcpServers": {
    "http-shared": {
      "url": "https://mcp.internal.example.com/v1/mcp",
      "headers": {
        "Authorization": "Bearer ${MCP_EDGE_TOKEN}"
      }
    }
  }
}

5. 증상 런북

5.1 spawn ENOENT(stdio)

신호 유력 원인 조치 순서
node ENOENT 데몬 PATH에 Homebrew 없음. 절대 command 또는 env에 PATH 접두.
스크립트 경로 ENOENT cwd 불일치 또는 서비스 사용자에 안 보이는 심볼릭 링크. cwd 지정, symlink를 realpath로.
SSH에서만 성공 대화형 셸 export와 launchd 불일치. bash -lc 래퍼 또는 plist EnvironmentVariables로 이관.

5.2 프로토콜 버전·406(Streamable HTTP)

서버·클라이언트 핸드셰이크 로그를 나란히 비교하세요. 서버가 text/event-stream을 기대하는데 프록시가 gzip만 넣고 flush하지 않으면 semver는 맞아도 “버전 불일치”로 보일 수 있습니다.

5.3 tool 타임아웃

세 타이머를 그리세요: (A) 모델·라우터 대기, (B) 게이트웨이 업스트림 데드라인, (C) MCP 서버 내부 잡 타임아웃. 가장 빡빡한 층을 먼저 조정하고, 트레이스로 큐잉이 증명될 때만 인접 층을 넓힙니다.

6. SLO 문서에 붙일 수치

  • 약 4W — Apple Silicon Mac mini가 SSH·경량 게이트웨이를 유지한 유휴 전력의 대략적 스케일. x86 타워 유휴와 TCO 비교할 때 인용 가능.
  • 25초 — 공유 노드에서 “빠른” tools/call P95의 경험칙 상한, 이후엔 tool 분할·부분 결과 스트리밍을 검토.
  • 600초 — 대형 리포 스캔 같은 장기 유지보수 작업은 단일 블로킹 MCP 호출이 아니라 비동기 잡+폴링으로—CI 미러에서 긴 Git·npm과 같은 취급.

7. FAQ

MCP 서버를 root로 돌려도 되나요?

워크스페이스에 맞춘 ACL의 전용 서비스 사용자를 권장합니다. root는 macOS 프라이버시 프롬프트와 TCC 감사를 어렵게 만듭니다.

Rosetta가 MCP 바이너리에 영향을 주나요?

arm64 Node와 x64 전용 네이티브 애드온을 섞으면 크래시 루프가 나와 타임아웃처럼 보입니다. 서버별 아키텍처를 통일하세요.

기업 HTTPS 검사 인증서를 재사용할 수 있나요?

MITM 루트를 서비스 사용자가 신뢰하는 키체인에 넣어야 합니다. 그렇지 않으면 Streamable HTTP TLS가 불투명한 핸드셰이크 오류로 끝납니다.

프로토콜 버전은 어디에 기록하나요?

내부 위키 한 줄 표에 OpenClaw 빌드, MCP SDK 버전, 서버 패키지 해시, 마지막 tools/list 스모크 날짜를 둡니다.

8. 조용하고 효율적인 Mac mini에서 이 스택 돌리기

stdio MCP 서버는 환경 동등성에 매우 민감합니다. 예측 가능한 경로, Gatekeeper, SIP가 있는 장기 macOS 호스트가 드라이버·셸 차이가 잦은 임시 VM보다 잘 맞습니다. Apple Silicon Mac mini는 유휴 전력이 매우 낮고(대략 수 와트대), 팬 소음이 적으며, Unix 네이티브 툴체인으로 Node·프록시·launchd 구동 게이트웨이를 24/7 돌리기 좋습니다.

OpenClaw와 MCP 사이드카까지 원격 게이트웨이로 표준화한다면 Mac mini M4급으로 한 아키텍처에 에이전트·빌드 도구·관측 에이전트를 모으는 편이 이동 부품이 줄고, FileVault·TCC로 Linux 이미지 혼합보다 감사 서사가 단순해집니다.

위 런북을 스테이징에서 검증한 JSON을 그대로 실물 노드에 옮기려면, 마찰 최소 지점은 Mac mini M4입니다. 지금 노드를 잡고 동일 설정을 프로덕션에 올리세요.

기간 한정

OpenClaw + MCP용 안정 물리 Mac이 필요하신가요?

이 런북과 같은 macOS 툴체인이 갖춰진 Mac mini 노드를 빌려 stdio 서버 경로를 예측 가능하게 유지하세요—저유휴 전력, 조용한 24/7 운전.

종량제 즉시 활성화 안전·신뢰
macOS 클라우드 렌탈 초저가 기간 한정
지금 구매