-
Notifications
You must be signed in to change notification settings - Fork 3.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
MCP Servers Don't Work with NVM #64
Comments
I also ran into issues with the recommended npx setup, and I was able to successfully reproduce this workaround - fixes it completely. MCPs now install and attach correctly within Claude Desktop. |
This workaround works fine |
I can confirm this is working for me too. You may have a different node.js version installed so just do the following for puppeteer as an example npm i -g @modelcontextprotocol/server-puppeteer
cd /Users/YOUR_USERNAME/.nvm/versions/node
ls
>>> v14.17.6 v16.19.0 v18.14.0 v18.20.4 Then I ended up with this and it works sweet! {
"mcpServers": {
"puppeteer": {
"command": "/Users/YOUR_USERNAME/.nvm/versions/node/v18.20.4/bin/node",
"args": [
"/Users/YOUR_USERNAME/.nvm/versions/node/v18.20.4/lib/node_modules/@modelcontextprotocol/server-puppeteer/dist/index.js"
]
}
}
} |
The challenge with NVM is that it seems to mostly work by installing a very complicated shell function into your shell profile. It'd be great if we could figure out your preferred Node version via NVM, but I haven't found a good way to do that—open to ideas! |
Cross-linking: see #40 for Windows workaround steps as well |
Unfortunately, the issue is still reproducible on Mac with nvm installed. OS: macOS 15.1.1 The SQlite server is working correctly, but tools for server-filesystem doesn't appear My settings
|
suggestion: the same way that there is the |
I was struggling to get MCP working yesterday, the error messages in the logs were unhelpful, and the most confusing of all is that it just started working today. This might not be the repo for this request, but it would be really useful if it was explicily documented which shell Claude Desktop is using to start the MCP services. To your question @jspahrsummers, wouldn't |
Unfortunately no, the environment for GUI apps is completely different from what you see on the command line. |
Ah right, I had a look and to answer my own question, assuming that Claude Desktop's Electron implementation uses the MCP TS SDK, it's node:child_process |
In the meantime, I have migrated from NVM to mise, and now, if I start the Claude app from my shell ( PS Apple seems to have removed an option to set up the environment for the GUI apps through the launch agents. But I'm not sure. I didn’t dive too deep into it. |
I was going to say check if Feels like the current implementation is in a bit of an uncanny valley between being very open for people to run whatever they want while also very limited by the GUI spawned non-shell process 🤔 I'm wondering if offering the option to either use bundled runtimes for simplicity or running in a full shell for flexibility would be useful? That's what Mac Git GUIs I've used have been doing to solve similar issues. Or WASM 😅 Or actually, maybe having a separate daemon process to make this easier, especially if there are plans to integrate Claude deeper for computer use? Edit: actually, BTW MCPs stopped working with my Claude Desktop again, the errors in logs suggest it might be a command argument concat issue? mcp-server-webresearch.log:
mcp-server-filesystem.log
With the config: {
"globalShortcut": "",
"mcpServers": {
"filesystem": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-filesystem",
"/Users/dain/Desktop"
]
},
"webresearch": {
"command": "npx",
"args": ["-y", "@mzxrai/mcp-webresearch"]
}
}
} |
This workaround works for me. Thanks a lot! 🙏 Environment
Installation Steps
node -v
# Example output: v18.17.0
git clone <repository-url>
cd <repository-name>
npm install
npm run build
npm link Configure
|
FNM (https://github.com/Schniz/fnm) doesn't work either but the workaround worked! |
This is the way. Mise is an infinitely better tool than NVM. |
Interesting. Btw, the NVM issue goes away if you're only managing 1 version of node. I discovered this inadvertently setting up a new machine. Will check out Mise. First I've heard of it. |
Even if it is. Nevertheless, |
Same goes for Volta (volta.sh). |
Same issue with spawn node ENOENT
at Process.ChildProcess._handle.onexit (node:internal/child_process:286:19)
at onErrorNT (node:internal/child_process:484:16)
at processTicksAndRejections (node:internal/process/task_queues:82:21) {
errno: -2,
code: 'ENOENT',
syscall: 'spawn node',
path: 'node',
spawnargs: [Array]
} |
Potentially easier workaround that I don't think has been mentioned yet--place a script somewhere like #!/bin/zsh
source ~/.zshrc
exec npx "$@" Then {
"mcpServers": {
"everything": {
"command": "npx-for-claude",
"args": ["-y", "@modelcontextprotocol/server-everything"]
}
}
} Have only tested that this works with |
the issue still happening. I fix it doing this
|
I followed @rgarcia's workaround and for me on macOS it was enough that the wrapper script just includes the following lines:
Also tested the same wrapper script with pnpm from corepack, worked wonderfully. |
Try this one: https://github.com/ihor-sokoliuk/mcp-searxng I can't for the life of me get it working with nvm. I tried the command proxying of node and npx, sourcing .zshrc, absolute paths, global install, manually building ahead of time. |
@rgarcia worked for me. macbook air M1 with FNM and zsh |
it works without problem in macbook but in windows is another thing |
For anyone who is using Volta for node version management, the workaround in the OP should work when paired with
(Note that if you did not want to have to update this for each new version of node, for step 1 you could instead use a variant of @T1T4N's solution with a shell script which sets the VOLTA_HOME and PATH env variables to the correct paths.) |
For Volta on OS X (15.4) and Claude Desktop (v0.8.0), using the full path to Volta's npx resolved my MCP connection timeout errors In {
"mcpServers": {
"filesystem": {
"command": "/Users/username/.volta/bin/npx",
"args": [
"-y",
"@modelcontextprotocol/server-filesystem",
"/Users/username/dirA/",
"/Users/username/dirB/"
]
},
"brave-search": {
"command": "/Users/username/.volta/bin/npx",
"args": ["-y", "@modelcontextprotocol/server-brave-search"],
"env": {
"BRAVE_API_KEY": "<API_KEY>"
}
}
}
} |
There is no way to make the @rgarcia work using an Intel Mac. But using the workaround of installing packages globally works fine. |
#!/usr/bin/env bash
fnm exec --using=default npx "$@" If you're using fnm the above script worked well for my setup. Just add to "/usr/local/bin" and make sure you |
Confirming that this issue and the reported workaround still exist as of today with Claude Desktop 0.8.0 running on macOS Sequoia 15.3.1. Using the
and the content of
When run from command line, npx works fine:
Presumably working fine because it's running off the nvm default alias 23.9.0. I tried in vain to figure out how to override whatever Claude Desktop was calling with environment variables (like NODE_PATH) with weird intermittent success. But the reported workaround of running the server using node and the server index.js from an absolute path resolved the error:
|
the reason it's not working as expecting is that the App is using
|
That sounds very plausible. For whatever reason, this workaround doesn't seem to work for me. |
Thanks for this! I took couple of hours to debug how to get mcp server work and this was the solution with macosx if you are using nvm. You need to give direct path to command and the node module. |
Anyone who's struggling with this but with
|
Based on @rgarcia and @T1T4N's comments, I used this: Create
Make executable:
Works perfectly with NVM installations! 🚀 |
None of these workarounds worked for me, but I'm able to just use the previous version "@modelcontextprotocol/[email protected]" |
this worked for me #64 (comment) |
This works for me until nvm is resolved here replace node version with whatever you are using and username obviously and it should work out of the box. |
using the version of npx I want
|
For fnm @drewjs 's comment helped a lot. Just for completeness sake, this is what the configuration for Claude Desktop looks like now (using
|
Thanks @jonigl, your snippet was super helpful! 🙌
#!/usr/bin/env bash
NODE_VERSIONS_DIR="$HOME/.nvm/versions/node"
LATEST_NODE_VERSION=$(ls -v "$NODE_VERSIONS_DIR" | grep "^v" | sort -V | tail -n 1)
export PATH="$NODE_VERSIONS_DIR/$LATEST_NODE_VERSION/bin:$PATH"
exec npx "$@" It's been working on my end — will keep testing it out :) |
I've noticed that the PATH env the MCP receives has ALL the .nvm/versions in alphabetical order and then the node version the MCP can use is usually the OLDEST one. The MCP I want to use is in python and launches node internally so I cannot just change the command arg in the config. I solved it by creating a fake node version zero ( |
I ran into this issue trying to use Example:
Blogged here: https://jessehouwing.net/vscode-running-mcp-using-node-version/ |
the npx way worked for me by just deleting the |
Problem
When using NVM (Node Version Manager), the standard installation and usage instructions for MCP servers don't work. The app tries to use an incorrect Node and fails.
Workaround
npx
, install packages globally.Example:
OS: macOS 15.1.1 (24B91)
The text was updated successfully, but these errors were encountered: