fnm環境でClaude DesktopにリモートMCPサーバーを追加する際の注意点
fnmでNode.jsのバージョン管理を行っている環境で、Claude Desktopにリモート MCP サーバーを追加しようとすると、node: No such file or directoryやspawn sh E […]
目次
fnmでNode.jsのバージョン管理を行っている環境で、Claude Desktopにリモート MCP サーバーを追加しようとすると、node: No such file or directoryやspawn sh ENOENTといったエラーが発生することがあります。この記事では、なぜこのエラーが起きるのか、そしてどのように設定すれば成功するのかを簡単にまとめました。
fnmの環境変数がClaude Desktopに継承されない
ターミナルでnodeやnpxが正常に動作していても、Claude Desktopから起動したプロセスでは見つからない現象が起きます。これはfnmの仕組みに起因する問題です。
fnmはシェル起動時に環境変数を初期化します。シェルの設定ファイル(.zshrcや.bashrcなど)にeval "$(fnm env --use-on-cd)"という記述を追加することで、ターミナルを開くたびにNode.jsへのパスが設定される仕組みです。しかし、macOSやWindowsでGUIアプリケーションとして起動したClaude Desktopは、シェルの設定ファイルを読み込まないため、fnmが設定した環境変数を継承できません。
Claude DesktopがMCPサーバーを起動する際、claude_desktop_config.jsonに記載されたcommandを実行しますが、この時点でNode.jsへのパスが存在しないため、npxの実行に失敗します。さらに、npxが内部的に使用するshコマンドも見つからないことがあり、これがspawn sh ENOENTエラーの原因になります。
正しい設定ファイルの書き方
この問題を解決するには、設定ファイルで環境変数とパスを明示的に指定する必要があります。設定ファイルは以下の場所にあります。
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
設定時には3つの項目を正しく設定します。
まず、commandパラメータでは、fnmが管理するnpxの完全なパスを指定します。which npxコマンドで確認できるパスをそのまま記載することで、Claude Desktopがfnm管理下のnpxを確実に見つけられるようにします。
次に、env.PATHで環境変数PATHを設定します。ここでは/bin、/usr/bin、/usr/local/binといった基本的なシステムディレクトリを先頭に配置します。これらのディレクトリにはshやbashといった基本的なシェルコマンドが格納されており、npxが内部的にこれらを実行する際に必要になります。fnmが管理するNode.jsのディレクトリもPATHに含めることで、nodeコマンドも正常に動作します。
最後に、cwdパラメータで作業ディレクトリを指定します。これを省略すると作業ディレクトリがルート(/)になり、npmが正常に動作しない原因になります。ホームディレクトリなど、書き込み権限のあるディレクトリを指定します。
fnm環境用の設定例
実際に動作する設定ファイルの例を示します。mcp-remoteを使用してリモートMCPサーバーに接続する場合の設定です。
{
"mcpServers": {
"circleci-docs": {
"command": "/Users/hidetaka/.local/state/fnm_multishells/42466_1768462520807/bin/npx",
"args": ["mcp-remote", "https://mcp.example.com"],
"cwd": "/Users/hidetaka",
"env": {
"PATH": "/bin:/usr/bin:/usr/local/bin:/opt/homebrew/bin:/Users/hidetaka/.local/state/fnm_multishells/42466_1768462520807/bin",
"SHELL": "/bin/zsh",
"HOME": "/Users/hidetaka"
}
}
}
}
この設定では、commandにfnmが管理するnpxの完全パスを指定しています。このパスは環境によって異なるため、ターミナルでwhich npxを実行して確認してください。
args配列には、実行するコマンドの引数を指定します。この例ではmcp-remoteパッケージを使用し、CircleCIのドキュメント検索用リモートMCPサーバーに接続しています。
cwdはホームディレクトリに設定しています。これによりnpmが一時ファイルを作成する際の権限エラーを防ぎます。
envオブジェクトでは、PATHに必要なディレクトリをすべて列挙しています。/binと/usr/binを先頭に配置することで、shコマンドが確実に見つかります。SHELLとHOMEも明示的に設定することで、シェルスクリプトが正常に動作する環境を整えます。
ログでエラー内容を確認する
設定後にClaude Desktopを再起動してもMCPサーバーが起動しない場合、ログファイルを確認します。ログファイルは以下の場所にあります。
- macOS:
~/Library/Logs/Claude/mcp-server-{server-name}.log - Windows:
%APPDATA%\Claude\logs\mcp-server-{server-name}.log
macOSの場合、以下のコマンドでログをリアルタイムで監視できます。
tail -f ~/Library/Logs/Claude/mcp-server-remote-docs.log
典型的なエラーは2つあります。1つ目はenv: node: No such file or directoryというエラーで、これはnodeコマンドがPATHに含まれていないことを示します。この場合、env.PATHにfnmが管理するNode.jsのディレクトリが含まれているか確認してください。
2つ目はnpm error syscall spawn shとspawn sh ENOENTというエラーで、これはshコマンドが見つからないことを示します。env.PATHの先頭に/binと/usr/binが含まれているか確認してください。また、cwdがルート(/)になっていないかも確認が必要です。
公式のトラブルシューティングガイドにも詳しい情報が記載されていますので、参考にしてください。
fnm環境でのMCP設定のポイント
fnm環境でClaude DesktopにリモートMCPサーバーを追加する際は、環境変数を明示的に設定することが重要です。ターミナルで動作しているからといって、GUIアプリケーションから起動したプロセスでも同じ環境が使えるとは限りません。
設定ファイルでcommand、env.PATH、cwdの3つを正しく指定すれば、fnm環境でも一発でMCPサーバーを起動できます。エラーが起きた場合も、ログファイルを確認することで原因を特定し、適切に対処できます。
この記事で説明した設定方法は、nvmやnodenvなど他のNode.jsバージョン管理ツールを使用している場合にも応用できます。いずれの場合も、シェル起動時に初期化される環境変数を、GUIアプリケーションの設定ファイルで明示的に指定することがポイントになります。