設定 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,nodenpx 的路徑(如 ~/.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

留言

這個網誌中的熱門文章

【海外婚紗】道具行李篇

[Android] 內部儲存體(Internal Storage)的檔案系統讀寫(File I/O)