Nodenv環境下でCursorのMCP起動エラーの調査
今回は、話題のChromeの開発ツール(DevTools)のMCPを利用しようとして、エラー解決するまでのお話を書きます。
普通にNodeをインストールしていると今回のようなマニアックな展開にはならないと思います。
しかし、Nodenvで複数のNodeバージョンを管理されている場合、全体ではこのバージョンを、特定ディレクトリだけはこのバージョンを使いたいんだ!ってことがあるかもしれません。(私の場合、もっと特殊でしたwww)

ですが、私は今の環境を変えたくなかったので、Cursorくんに変わってもらおうか!ということで色々調査して検証した結果となります。
ということで、当面は毎週1本を目指してブログを執筆していきます。
本日も担当は、もりりんです。
今回はマニアックな内容かもしれない…ので、興味ある方は覗いてくれると幸いです。
現状
最初に少し記載しましたが、私の環境はNodenvを採用しており、PCにNode.jsを直接インストールはしていません。
Nodenvは、Node.jsのバージョンをプロジェクトごとに自動切り替えできるツールです。
PC全体への一律設定はもちろん、このディレクトリだけバージョン変えたいといった柔軟対応が可能になります。
複数プロジェクトを並行開発する時の「バージョン違いで動かない!」問題を一発解決できます。
ただ私の場合は、PCに一律設定しておらず、特定ディレクトリのみで利用するようにしています。
そのせいで沼に嵌まったと言わざるを得ないです。
でも、一律設定したくなかったんです。
そのせいで嵌まる羽目になってしまったのも事実ですが、環境を変えたくないと自己満足で動いています。
今回出てくるツールたちを簡単に紹介します。
ツール紹介
タイトルにCursor、MCPと書いていますが、簡単に紹介しておきます。
詳しいことはいろんな方がブログを大量に作られていますので、そちらをご確認ください。
anysphere社が開発している生成AIや関連ツールを組み込んだハイブリッド開発エディタです。
ベースはVScodeとなっており、馴染みのあるツールにAI機能が盛り込まれた便利ツールです。
無料でも利用できますが、生成AIの利用回数に制限があるため、弊社ではチーム契約にて利用しています。
いや、もうないと仕事にならないですね。はい。

Cursor以外の企業が提供しているサービスやインストールしているアプリ、ローカル環境を操作するツールの総称です。(ざっくり)
それらのツールをCursorから呼び出せるようにすることで、Cursorが実行するAIエージェントに新しい能力を付与できます。
GitHubの管理ソースにアクセスしたり、Slackチャネルにメッセージを送るといったCursor単独では利用できない機能を手足のように使えるようになります。

可愛いから採用です
今回は、Googleが提供しているChromeの開発者ツールをAIエージェントから参照・操作できるようにできるツールです。
これは便利ですよね。
今まではブラウザで起こったUIの問題、エラーを開発者ツールでコピペするなりして、AIエージェントに伝える必要がありました。
しかし、このMCPがあれば、UIが気になる、エラーが起こったから調査して欲しいとAIエージェントに指示するだけで、MCP経由で開発者ツールにアクセス&データ収集できるわけです。
嘆きの壁のように分断されていた状況からウルトラ効率的になりますね。
E2Eテスト用途だとPlaywrightを使っている方が多いと思いますが、これで完結するんじゃ?と期待ありありです。
ただし、ブログ執筆段階ではそもそも検証できていないため、今後検証します。
MCPが起動しない
早速、Chromeの公式ページに移動し、必要な情報をもらってきます。
***/.cursor/mcp.json
に追加する内容は以下です。
{
"mcpServers": {
"Chrome-devtools": {
"command": "npx",
"args": ["chrome-devtools-mcp@latest"]
}
}
}
で、保存すると起動するはずです!
はい、おしま….

ってあれ
・・・
・・・
・・・
・・・

おっと、No Toolsと出ていますね。
なんてことでしょう。認識できていません!!!!
何回か修正や再起動を試しましたが、変わりませんでした。
ならばと、ログが残っていないか探しにいきましょう。
Macにインストールしたアプリだし、/Users/***/Library/Application Support
あたりにあるだろうと探索…
みつけました。
Cursor
のlogs
の目ぼしいローテーションの日付へ移動して…
んー、Window**というディレクトリが結構ありますね。
アプリを起動した分だけ作られてるのかなと思いつつ、とりあえず番号が大きいものから探ります。
片っ端からファイルを見ていくと、exthost
内のanysphere.cursor-mcp
という如何にもなディレクトリがありました。
もちろん、中にはMCPログがありました。
ログの一部抜粋です。
2025-09-30 23:04:31.082 [info] Handling ListOfferings action, server stored: false
2025-09-30 23:04:31.082 [error] No server info found
2025-09-30 23:04:31.095 [info] Handling ListOfferings action, server stored: false
2025-09-30 23:04:31.095 [error] No server info found
2025-09-30 23:04:32.433 [info] Handling CreateClient action
2025-09-30 23:04:32.433 [info] Starting new stdio process with command: npx chrome-devtools-mcp@latest
2025-09-30 23:04:32.515 [info] Handling CreateClient action
2025-09-30 23:04:32.515 [info] Starting new stdio process with command: npx chrome-devtools-mcp@latest
2025-09-30 23:04:32.702 [error] nodenv: npx: command not found
2025-09-30 23:04:32.783 [error] nodenv: npx: command not found
2025-09-30 23:04:32.932 [error]
The `npx' command exists in these Node versions:
2025-09-30 23:04:32.936 [error] 12.14.0
20.11.1
20.18.1
20.18.3
22.12.0
22.14.0
oh…majiかよ….
Nodenvをグローバル設定してないことが原因…まさか自分設定がここで影響してくるのか…
と、Cursorの実行環境にNode.jsがないことが問題でした。
ただ先にも記載した通り、全体設定はしたくありません。
となると、MCPがどのディレクトリで実行されるのか特定し、対象ディレクトリにNode.jsを割り当てるしかありません。
いざ、調査にゆかん。
調査難航
GPT-5にCursorやMCPの実行ディレクトリがどこにあるか調査してもらいました。
Agentモードなので、コマンド許可だけしていれば、アプリケーションフォルダや起動プロセスのチェックまでしてくれました。
最初の調査結果は以下です。
今のところ、Cursor配下の関連プロセスのcwdを洗いました。
anysphere.cursor-mcpのログを書いている系統は cwd が /(ルート)で動いており、ワークスペース直下ではありません。
そのため nodenv のローカル設定(.node-version)は参照されず、GUIプロセス由来の最小PATH(/usr/bin:/bin:/usr/sbin:/sbin)で npx が見つからずに失敗しています。
確認結果(抜粋)
・ 親/ファイルウォッチャ等: cwd が /
・ 一部プラグイン(ESLint以外の言語サーバ等)は cwd がワークスペース
・ MCPの npx chrome-devtools-mcp@latest を投げている側は前者と同系統=cwd / で動いている可能性が高い
つまり「MCPを実行しているディレクトリ」は実質的に / です(プロジェクトフォルダではありません)。
対処案(どれか一つでOK)
・推奨(簡単): ターミナルから nodenv を初期化した上で Cursor を起動
```
eval "$(nodenv init -)"
/Applications/Cursor.app/Contents/MacOS/Cursor &
```
これで Cursor 配下のプロセスにも nodenv の PATH が伝播し、npx が使えるようになります。
・恒久化: GUIアプリにも nodenv の PATH を渡す
```
launchctl setenv PATH "$HOME/.nodenv/shims:$HOME/.nodenv/bin:/usr/bin:/bin:/usr/sbin:/sbin"
launchctl setenv NODENV_ROOT "$HOME/.nodenv"
```
実行後に Cursor を再起動してください。
macOS再ログイン後も維持したい場合は、上記をログイン時に走らせる仕組み(例: ログインシェルの自動実行や LaunchAgents)に入れると安定します。
んー、ルートで実行されているのか、そうなると全体設定するしかないのか…
いや、まだあるはず。
いまのログインセッションだけ反映(最短)
```
launchctl setenv NODENV_ROOT "$HOME/.nodenv"
launchctl setenv PATH "$HOME/.nodenv/shims:$HOME/.nodenv/bin:/usr/bin:/bin:/usr/sbin:/sbin"
# プロジェクトの .node-version を使いたいなら(cwd=/ 対策)
launchctl setenv NODENV_DIR "ワークスペースパス"
# 反映を確認(任意)
launchctl getenv PATH
# Cursor を終了してから再起動(DockからでOK)
```
代替(MCP設定を変更できる場合)
MCPサーバーのコマンドをログインシェル経由に変更して anyenv/nodenv 初期化+NODENV_DIR 指定で実行
```
{
"command": "/bin/zsh",
"args": ["-lc", "eval \"$(nodenv init -)\"; export NODENV_DIR=ワークスペースパス; npx chrome-devtools-mcp@latest"]
}
```
お、お、これは…!!!!
launchctlではなくて代替案の方がmcp.jsonの設定だけで完結できる方法ではありませんか?
しかし、CursorのMCP設定はエディタの共通設定になるため、他のプロジェクトを表示したときに関係のないワークスペースパスで起動して欲しくないですね。
ならば、代替案ベースで模索してもらいましょう。
いけ、GPT-5-high。お前ならできる!
代替(絶対パスの npx を使い続けたい場合)
npx のシバンが探す PATH に Node を入れるだけで動きます。
```
{
"Chrome-devtools": {
"command": "~/.nodenv/versions/22.14.0/bin/npx",
"args": ["chrome-devtools-mcp@latest"],
"env": {
"PATH": "~/.nodenv/versions/22.14.0/bin:/usr/bin:/bin:/usr/sbin:/sbin"
}
}
}
```
おお、NodenvにインストールしているNodeを直接利用する方式に変わりました。
こうなると、どこにも影響しないですね。
冗長な気もするので、もう少し調整してもらいましょう。
頑張った結果はこちらです。
```
{
"Chrome-devtools": {
"command": "/bin/zsh",
"args": [
"-lc",
"eval \"$(nodenv init -)\"; export NODENV_VERSION=22.14.0; exec npx chrome-devtools-mcp@latest"
]
}
}
```
おおおおおー👏
かなりシンプルになりましたね。
これを実行してみると…
・・・
・・・
・・・ででん💡


ようやく認識されました。
これでdevtoolsを使い倒せる環境が整いました。
今回はnpx実行のためのnodeがない問題でしたので、npxで起動する他のMCPでも活用できます。
私はnpmではなくpnpmでプロジェクト構築することが多いため「pnpx」を利用しますが、そちらでも問題ありませんでした。
ということで、(私は疑問をGPT-5に投げかけただけですが)なんとか解決しましたね。
所要時間は、30分ぐらいでした。
このブログを書いている時間の方が長いです。
さいごに
今回は、長らく詰まっていたMCP問題を解決しようと奮闘?しました。
Serena等のPython向けMCPは使えていたのですが、npxで起動するMCPは全て転けており疑問に感じていました。
まさか、私の変なこだわりが原因だったなんて…少しショックです。
みなさんは、Nodenvを利用する場合は素直に全体設定はしておきましょうね。
MCPをフル活用することでできることの幅が広がっていきます。
どんどん試して自分に合うものを探していきましょう。
ではでは、次のブログでお会いしましょう。