2026 OpenClaw MCP 與 Node 執行階段錯位:為何終端機裡 nvm 正常,而 MCP 子行程卻報 ENOENT——針對租用 ProxyMac Mac mini 的第一線說明
在香港、日本、韓國、新加坡與美國部署自訂 MCP 伺服器的 OpenClaw、並租用 Mac mini M4 的團隊,常在日誌裡看到 /usr/bin/env: node: No such file or directory,而同一台機器在 Terminal.app 裡明明印出 Node v22。根因通常不是「OpenClaw 壞了」,而是多套 Node 並存且只有互動 shell 啟用了其中一套;由 launchd 拉起的閘道繼承不到你在 .zshrc 裡寫的魔法。本文闡述 (1) 上游 MCP 傳輸堆疊對現代 Node 能力的依賴;(2) 一張把 errno 文案對應到動作的症狀對照表;(3) 為何生產環境不應依賴 nvm.sh;(4) 與 PATH 與 Homebrew、環境變數、升級與回滾 交織的九步稽核梯度;以及 (5) Corepack 觸發 pnpm dlx 時的非互動陷阱。文中錨點數值包括:Node 22 特性門檻、120 秒級別的重啟風暴,以及對「隱式依賴 dotfile」在合規環境中零容忍的態度。
執行階段鴻溝:互動 zsh 與 LaunchAgent 行星
互動工作階段可以 source nvm.sh、追加 Apple Silicon Homebrew 前置並啟用 Corepack;而 launchd 啟動 OpenClaw 時往往只有極簡 PATH——常見值為 /usr/bin:/bin:/usr/sbin:/sbin,除非你已在 plist 明確列出擴充。MCP 子行程繼承父閘道的環境,因此 shebang 寫成 #!/usr/bin/env node 時,只要 env 找不到 node,核心就會回傳 ENOENT,即便 which node 在終端機指向 /opt/homebrew/bin/node。
- 可觀測指標:分別在 Terminal 與一次性 LaunchAgent echo 作業裡執行
node -p process.execPath;若路徑分叉超過一層目錄,應立即修訂 plist。 - ABI 報錯:在 Intel 筆電上建置的 fat binary 若錯誤指向 Rosetta,日誌可能表現為難懂的 V8 崩潰而非清晰 ENOENT——本質仍是執行階段錯位。
- 並行安裝:
/opt/homebrew/bin/node、手工 pkg、以及 nvm 管理的副本可以同時存在;CI 複製的 JSON 若只指向其中之一,在其他上下文必然斷裂。
/etc/proxymac-node.channel 記錄 semver 與校驗和——對照工單時可節省約 35% 的定位時間。
症狀對照表:把 MCP stderr 文案翻成動作
| 日誌指紋 | 可能原因 | 首選糾正 |
|---|---|---|
env: node: No such file | PATH 缺少 brew/nvm 前置 | 為 plist 增補絕對 PATH 或在 /usr/local/bin 放置受控符號連結 |
Error: Cannot find module 'node:fs' | Node 過舊,無法理解新版匯入對應 | 升級到 ≥22 LTS 通道並與平台要求對齊 |
MCP worker 內 MODULE_NOT_FOUND | 守護行程缺少 NODE_PATH | 指定工作目錄或打包依賴 |
升級後出現 spawn EBADF | 混合殘留安裝 | 依 回滾手冊 清理 |
為何不要把生產契約建立在 nvm.sh 之上
nvm 把下載延遲藏在 shell 函式之後——對人類友善,對午夜自動化脆弱。更穩妥的做法是由 MCP JSON 直接指向唯一可信的解譯器路徑;若必須用包裝指令稿,請在威脅建模後再引入 /bin/bash -lc,並結合 金鑰與鑰匙圈 規範,避免 set -x 把權杖印進日誌。
九步執行階段稽核梯度
- 凍結發布:診斷完成前暫停 CI 合併,避免無限
launchctl kickstart。 - 匯出有效 PATH:暫時讓 LaunchAgent 將排序後的 env 寫入受控檔案(限時刪除)。
- 比對 Node 建置:執行
node -p "[process.version, process.arch]"雙向對照。 - 規範化 MCP JSON:把所有解譯器提示改為絕對路徑。
- 統一 Corepack:全域啟用一次並鎖定套件管理員版本。
- 複核 OpenClaw 升級:遵循 升級矩陣。
- 尾隨 JSONL:用 日誌指南 對齊 stderr 時間線。
- 校驗 ulimit:巨型 monorepo 可能耗盡 fd——參見 ulimit。
- 輸出 RCA:寫明受影響區域(HK / JP / KR / SG / US)與 semver。
.zshrc 嵌進 plist——審閱無法有效 diff 安全迴歸。
Corepack、pnpm 與會拉起套件管理員的 MCP 入口
若 MCP 定義呼叫 pnpm dlx 或 yarn node,Corepack 必須在非互動環境中已完成初始化——互動終端機常見的首次提示,launchd 永遠不會替你按鍵。把快取目錄放到服務帳戶擁有權限的路徑,並確保 HK 與 US 複本共用同一策略,否則會出現「一地成功一地 ENOENT」的假陽性。
常見問題
Docker 能否一勞永逸?映像仍需你選擇正確的 Node 基礎標籤——semver 紀律不可避免。
Apple Silicon 有關嗎?有關——在 Intel 筆電上編譯的 arm64 誤配會導致詭異崩潰。
SSH 工作階段置於何地?手動 SSH 往往載入登入 shell;閘道行程不會——請把 SSH 測試當作線索而非契約。
為何 ProxyMac Mac mini 適合配合「單一可信 Node」策略
租用分布在 HK / JP / KR / SG / US 的 Mac mini M4,可在免採購的前提下獲得一致的 Apple Silicon 執行階段與足夠低的待機功耗,便於 MCP 閘道長期在線並緊跟上游 Node cadence。方案見 定價頁,維運邊界見 說明中心;若需圖形化點選 Gatekeeper 安裝程式,請結合 VNC 說明。