
This fix is part of MCP troubleshooting, within The MCP Guide. Still stuck? Request a free MCP readiness review.
"uvx not found" or spawn uvx ENOENT means your MCP client tried to run a Python server with uvx, and could not find the uvx program. Either uv is not installed, or it is installed in a folder the client does not search. The fastest fix is to install uv if needed, run which uvx (macOS, Linux) or where uvx (Windows), paste that full path into the command field, and restart the client.
Checked against: uv's installation guide, uv's guide to running tools, the MCP build-a-server tutorial and servers issue #40 on 2 November 2026. eSEOspace did not run these steps on each OS.
Key Takeaways
uvxcomes with uv. uv's docs say it is "provided as an alias for convenience" foruv tool run.- uv's standalone installer puts
uvanduvxin~/.local/binon macOS and Linux, and in$HOME\.local\binon Windows. - GUI apps often do not have
~/.local/binon theirPATH, so a bareuvxfails even when it works in your terminal. - The MCP build tutorial says you "may need to put the full path to the
uvexecutable in thecommandfield." - If the server needs a certain Python version,
uvx --python 3.12 package-namepicks it.
What this error means
Many Python MCP servers are published on PyPI and documented with a config like "command": "uvx". When the client starts the server, it looks for a program named uvx. ENOENT is the error code for "not found."
A user in servers issue #40 posted the exact log text: "Could not start MCP server sqlite: Error: spawn uvx ENOENT." Their fix was to run which uvx and use that absolute path in claude_desktop_config.json.
Why does uvx work in your terminal? Your shell profile adds uv's folder to PATH. The MCP debugging guide says stdio servers "inherit only a limited subset of environment variables," and desktop apps do not read your shell profile.
Quick fix
- Check uv is installed. Run
uv --versionin a terminal. - Install it if missing. From uv's installation guide:
# macOS and Linux
curl -LsSf https://astral.sh/uv/install.sh | sh
# Windows
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
uv's guide also lists brew install uv, winget install --id=astral-sh.uv -e and pipx install uv.
- Find the full path.
which uvxon macOS or Linux,where uvxon Windows. - Use it in the config. Replace
"command": "uvx"with the full path. - Warm the cache. Run the server command once in a terminal so the first launch from the app does not have to download packages.
- Restart the client fully.
Example:
{
"mcpServers": {
"git": {
"command": "/Users/you/.local/bin/uvx",
"args": ["mcp-server-git", "--repository", "/Users/you/code/project"]
}
}
}
On Windows the path looks like C:\\Users\\you\\.local\\bin\\uvx.exe inside JSON.
Fix by client / OS
Claude Desktop
Edit the config through Settings > Developer > Edit Config, then quit from the menu bar (macOS) or tray icon (Windows). If you run your own Python server with uv run, the build tutorial shows this pattern, with an absolute path to your project:
{
"mcpServers": {
"weather": {
"command": "uv",
"args": ["--directory", "/ABSOLUTE/PATH/TO/PARENT/FOLDER/weather", "run", "weather.py"]
}
}
}
Replace "uv" with its full path if Claude Desktop cannot find it.
Cursor
Edit ~/.cursor/mcp.json or .cursor/mcp.json. Cursor's MCP docs support ${userHome}, so "${userHome}/.local/bin/uvx" keeps the config portable across machines with the same layout. Check Output > MCP Logs.
Claude Code
Add the server with the full path after the -- separator, as the Claude Code MCP docs show for any stdio server:
claude mcp add --transport stdio git -- /Users/you/.local/bin/uvx mcp-server-git
Older uv installs
uv's guide says that before version 0.5.0, uv was installed into ~/.cargo/bin. If which uvx points there, that path works too, but you may want to update with uv self update (standalone installs only).
Where to find the logs
- Claude Desktop:
mcp.login~/Library/Logs/Claude(macOS),%APPDATA%\Claude\logs(Windows) or~/.config/Claude/logs(Linux). - Cursor: Output panel, MCP Logs.
- Claude Code:
claude mcp get <name>shows the error on anIssue:line.
If it still fails
- uvx runs but the server crashes. Read the server's stderr log. A Python version mismatch is common. uv's tools guide says "you can specify the Python interpreter to use with the
--pythonoption," for exampleuvx --python 3.12 mcp-server-git. The MCP Python tutorial lists Python 3.10 or higher. - The server needs your project's packages. uv's docs say
uvxruns tools in "temporary, isolated environments." Useuv runinside the project instead. - Pin versions. uv's docs say
uvx <command>@<version>runs an exact version, and@latestthe newest. Pinning avoids surprise upgrades. - Test in the Inspector. The Inspector docs show
npx @modelcontextprotocol/inspector uvx mcp-server-git --repository ~/code/mcp/servers.git. - Same error with npx? See spawn npx ENOENT.
Look up any other code with the MCP error code lookup. If you are building a Python server, the course lesson your first tool in Python walks through setup, and our MCP development team can help with packaging.
More in the MCP Guide
Free tools: MCP Error Code Lookup · MCP Config Generator
Latest research: State of MCP: October 2026
Frequently asked questions
What is uvx?
It is a shortcut for uv tool run, which runs a Python command-line tool in a temporary, isolated environment. Many Python MCP servers tell you to start them with uvx.
Why does uvx work in Terminal but not in Claude Desktop?
Your terminal loads a profile that adds ~/.local/bin to PATH. Desktop apps usually do not, so they cannot find uvx by name. A full path fixes it.
Do I need Python installed separately?
You need a Python interpreter that uv can use. uv's tools guide says it uses the first interpreter it finds by default, and --python lets you choose one.
Should I use pip instead of uvx?
You can install a server with pip and run its command by full path. uvx is popular because it keeps each server isolated. Pick one approach per machine and document it.











