設定 MCP Server 發生 spawn npx ENOENT spawn npx ENOENT 的解決方法
在前端開發日常中,nvm(Node Version Manager) 是不可或缺的工具之一。它讓我們可以在多個 Node.js 專案之間快速切換版本,保持每個專案的相容性與穩定性。
不過,當我最近嘗試安裝 Figma Context Mcp 的 server 時,卻因為使用了 nvm 而遇到了一個讓人摸不著頭緒的錯誤: spawn npx ENOENT spawn npx ENOENT。
🔍 問題根本原因(Root Cause)
MCP server 在啟動時會使用 Python 或桌面應用透過 child_process.spawn
的方式呼叫 Node.js 子進程。不過,這種呼叫方式不會載入使用者 shell 的 PATH 設定。
若你是透過 nvm
安裝 Node.js,node
與 npx
的路徑(如 ~/.nvm/versions/node/...
)不會自動被納入 PATH,導致 MCP 在啟動時找不到正確的 Node 環境。
簡單來說:nvm 下的 node 不在應用程式能看到的 PATH 中,導致執行 npx
時出現 ENOENT 錯誤。
✅ 可行解決方案
方案一:不用 npx,直接指定完整路徑
將需要啟動的 MCP server 套件安裝為全域模組,然後在設定檔中,改為直接指定 node
執行檔與腳本的完整路徑:
這樣一來就能完全繞過 npx,在無需依賴 PATH 的情況下正確執行 MCP server。
如果想知道 node 安裝路徑,可以善用 where 指令
方案二:讓 Node 被系統找到
如果你仍希望使用 npx
,那就必須讓桌面應用或 subprocess 找得到 Node 的執行檔。方法有兩種:
-
建立 symlink: 將 nvm 安裝的 Node 建立連結到系統路徑中,例如:
這樣可讓任何 subprocess 或應用程式在沒有 shell 的情況下,仍能找到正確的 Node 執行檔。
-
改用 Homebrew 安裝 Node: 有使用者移除 nvm 改用 Homebrew 安裝 Node.js,因其安裝在
/opt/homebrew/bin
這類系統預設路徑,MCP server 即可正常啟動。
📝 小結
這問題的根本原因其實不在於 MCP 本身,而是 nvm 的環境變數在非互動式環境中無法被繼承。若你也遇到 spawn npx ENOENT
的錯誤,建議優先採用完整路徑執行的方式,或確保你的 Node 可被系統全域搜尋到。
📎 延伸閱讀:GitHub Issue #64
留言
張貼留言