
This fix is part of MCP troubleshooting, within The MCP Guide. Still stuck? Request a free MCP readiness review.
On macOS, an MCP server that works in Terminal but fails in Claude Desktop or Cursor is usually a PATH problem. Apps opened from the Dock or Finder do not load your .zshrc, so tools installed by Homebrew, nvm or uv may be invisible to them. The fastest fix is to run which npx (or which uvx, which node) in Terminal and paste that full path into the command field of your MCP config, then quit and reopen the app.
Checked against: the MCP debugging guide, the MCP local server guide, Cursor's MCP docs, Homebrew's installation docs and the nvm README on 2 November 2026. eSEOspace did not run these steps on a Mac.
Key Takeaways
- The MCP debugging guide tells you to "try using an absolute path for
command" when a server will not start. - Stdio servers inherit only a limited set of environment variables, so your shell's
PATHchanges may not reach them. - Homebrew installs to
/opt/homebrewon Apple silicon Macs, which is not on every app's default search path. - nvm keeps Node under
~/.nvm/versions/node/<version>/, and only shells that load nvm can find it. - The working directory of a server started by Claude Desktop "may be undefined (like
/on macOS)," so every file path inargsmust be absolute too.
What this error means
When you type npx in Terminal, zsh searches the folders in your PATH. Your .zshrc or .zprofile adds Homebrew, nvm or uv folders to that list. A desktop app does not run those files, so its PATH is shorter.
The client then tries to start npx and cannot find it. Depending on the client, you see spawn npx ENOENT, "command not found," or simply a server marked as failed. The MCP debugging guide lists "incorrect server executable path" first among common startup problems.
A second version of the same problem is a relative file path. The guide says the working directory for a client-launched server may be / on macOS. So ./data points at the root of your disk, not your project.
Quick fix
- Open Terminal and run
which npx,which node,which uvxorwhich python3, whichever your server uses. - Copy the full path it prints.
- Put that path in the
commandfield instead of the bare name. - Replace every relative path in
argswith an absolute one, such as/Users/you/project/data. - If the launcher itself calls
node(asnpxdoes), also setPATHin the server'senvblock so child processes can find it. - Quit the app with Cmd+Q and open it again.
Example for a Node server when Node comes from nvm:
{
"mcpServers": {
"filesystem": {
"command": "/Users/you/.nvm/versions/node/v22.11.0/bin/npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/Users/you/Desktop"],
"env": {
"PATH": "/Users/you/.nvm/versions/node/v22.11.0/bin:/usr/bin:/bin"
}
}
}
}
Your version folder will differ. nvm which current prints the path of the active node, according to the nvm README. The README also warns that nvm needs its shell setup to run, and that non-interactive shells do not source the usual profile files.
Fix by client / OS
Claude Desktop
The config file is ~/Library/Application Support/Claude/claude_desktop_config.json. Open it from Settings > Developer > Edit Config, as the local server guide shows. Its troubleshooting list also asks you to make sure paths in the file "are valid and that they are absolute and not relative." Our Claude Desktop Mac setup guide walks through the full file.
Cursor
Cursor's MCP docs say command "must be available on your system path or contain its full path." Cursor also expands ${userHome} and ${workspaceFolder} in command and args, which helps when a team shares .cursor/mcp.json. Cursor's help page adds that variables from your shell profile must be available to Cursor, and to restart Cursor after you change the profile.
Claude Code
Claude Code runs in your terminal, so it inherits that shell's PATH. PATH problems are rarer there, but they can appear when the server needs a different Node version than your shell's default. Pass the absolute command after --:
claude mcp add filesystem -- /opt/homebrew/bin/npx -y @modelcontextprotocol/server-filesystem /Users/you/Desktop
Claude Code's docs also set CLAUDE_PROJECT_DIR in the server's environment, so a server can resolve project paths without relying on the working directory.
VS Code
The VS Code troubleshooting table says to check "the command, arguments, runtime installation, and PATH in the execution environment." If you opened VS Code from the Dock, the same rule applies: use full paths.
Homebrew, nvm and uv locations
- Homebrew on Apple silicon:
/opt/homebrew/bin, per Homebrew's docs. - nvm:
~/.nvm/versions/node/<version>/bin. The path changes when you switch versions, so update the config afternvm install. - uv and uvx: installed in your user executable directory by default, per uv's installer docs. Run
which uvxto see the exact folder. See also uvx not found.
Where to find the logs
Claude Desktop writes mcp.log and mcp-server-SERVERNAME.log to ~/Library/Logs/Claude. Follow them live with:
tail -n 20 -F ~/Library/Logs/Claude/mcp*.log
In Cursor, open the Output panel with Cmd+Shift+U and select MCP Logs. In VS Code, run MCP: List Servers, pick the server and choose Show Output. In Claude Code, run /mcp.
If it still fails
spawn npx ENOENTstays. Read our full spawn npx ENOENT fix.- Wrong Node version. A full path to an old Node can start, then crash on new syntax. See MCP Node version errors.
- Permission denied. Check that the file is executable and that macOS privacy settings allow access to folders such as Desktop or Documents.
- The server prints to stdout. Any banner on stdout breaks the JSON stream, even with the right path.
Decode JSON-RPC codes from the log with the MCP error code lookup, or rebuild your block with the MCP config generator.
Next step
Absolute paths also make your setup easier to review, because you can see exactly what runs. If you roll MCP out to a team of Mac users, eSEOspace's MCP development team can help package servers so nobody edits JSON by hand.
More in the MCP Guide
Free tools: MCP Error Code Lookup · MCP Config Generator
Latest research: State of MCP: October 2026
Frequently asked questions
Why does npx work in Terminal but not in Claude Desktop?
Terminal loads your shell profile, which adds Homebrew or nvm folders to PATH. Claude Desktop, opened from the Dock, does not. Point command at the full path from which npx.
Will opening the app from Terminal fix it?
Often, because the app then inherits the shell's environment. It is a useful test, but you would need to do it every time. Absolute paths in the config are the lasting fix.
Do I need absolute paths in args too?
Yes, for any file or folder. The MCP debugging guide says the working directory may be / on macOS, so relative paths resolve from the wrong place.
My path breaks after updating Node. Why?
nvm stores each version in its own folder. When you install a new version, the old path may vanish. Run which npx again and update the config, or point to a stable install such as Homebrew's.











