# Plugolis: full MCP fix guides > Every fix guide from https://plugolis.com/fixes/ in markdown. Generated 2026-10-19T02:46:21.055Z. Server data: https://plugolis.com/api/servers.json ## MCP server not showing in Cursor (or showing a red dot) URL: https://plugolis.com/fixes/mcp-server-not-showing-in-cursor/ Clients: Cursor ### The error ``` No tools available • Client closed • red status dot next to the server in Cursor's MCP settings ``` ### Why it happens Cursor only reads `~/.cursor/mcp.json` (global) or `.cursor/mcp.json` in the project root. A wrong file location, a typo in the `mcpServers` key, invalid JSON, or a command that crashes on start all leave the server missing or red. ### How to fix it 1. **Put the config in the right place** Global: `~/.cursor/mcp.json`. Per project: `/.cursor/mcp.json`. The top-level key must be `mcpServers`. ``` { "mcpServers": { "playwright": { "command": "npx", "args": ["-y", "@playwright/mcp@latest"] } } } ``` 2. **Run the command yourself** Copy the exact command and args into a terminal (e.g. `npx -y @playwright/mcp@latest`). If it errors there, it will error in Cursor too. 3. **Check the MCP log** Open the Output panel (Cmd/Ctrl+Shift+U) and choose MCP Logs from the dropdown to see the real error. 4. **Toggle and reload** Open Customize in the sidebar, find the server under MCP, and toggle it off and on. You can also run "Developer: Reload Window". ### Related servers - Playwright (Microsoft): https://plugolis.com/servers/playwright/ - GitHub: https://plugolis.com/servers/github/ - Context7: https://plugolis.com/servers/context7/ ### Sources - https://cursor.com/docs/context/mcp - https://modelcontextprotocol.io/docs/tools/debugging --- ## MCP server not showing in Claude Desktop URL: https://plugolis.com/fixes/mcp-server-not-showing-in-claude-desktop/ Clients: Claude Desktop ### The error ``` No hammer/tools icon appears, or "Could not attach to MCP server" / "MCP server failed" in Claude Desktop ``` ### Why it happens Claude Desktop reads `claude_desktop_config.json` only at startup. Editing the wrong file, invalid JSON, or not fully quitting the app (it keeps running in the tray/menu bar) are the usual causes. ### How to fix it 1. **Edit the right file** macOS: `~/Library/Application Support/Claude/claude_desktop_config.json`. Windows: `%APPDATA%\Claude\claude_desktop_config.json`. Easiest path: Settings → Developer → Edit Config. ``` { "mcpServers": { "filesystem": { "command": "npx", "args": ["-y", "@modelcontextprotocol/server-filesystem", "/Users/you/Desktop"] } } } ``` 2. **Fully quit and restart** Quit from the menu bar/tray (Cmd+Q on macOS), not just close the window, then reopen. 3. **Read the logs** macOS: `~/Library/Logs/Claude/mcp*.log`. Windows: `%APPDATA%\Claude\logs\`. ``` tail -n 50 -f ~/Library/Logs/Claude/mcp*.log ``` 4. **Use absolute paths** Paths in args (folders, scripts) must be absolute; `~` and relative paths are not expanded. ### Related servers - Filesystem: https://plugolis.com/servers/filesystem/ - Memory (Knowledge Graph): https://plugolis.com/servers/memory/ - Fetch: https://plugolis.com/servers/fetch/ ### Sources - https://modelcontextprotocol.io/docs/develop/connect-local-servers - https://modelcontextprotocol.io/docs/tools/debugging --- ## Fix "spawn npx ENOENT" when starting an MCP server URL: https://plugolis.com/fixes/spawn-npx-enoent/ Clients: Claude Desktop, Cursor, Windsurf ### The error ``` Error: spawn npx ENOENT ``` ### Why it happens The app launched the server without your shell's PATH, so it cannot find `npx`. This is common with nvm, fnm, Volta, or Homebrew installs, because GUI apps do not load `~/.zshrc` / `~/.bashrc`. ### How to fix it 1. **Confirm Node is installed** Run `node -v` and `which npx` (macOS/Linux) or `where npx` (Windows). ``` which npx # e.g. /Users/you/.nvm/versions/node/v22.11.0/bin/npx ``` 2. **Use the absolute path to npx** Replace `"npx"` with the full path from the previous step. ``` { "mcpServers": { "memory": { "command": "/Users/you/.nvm/versions/node/v22.11.0/bin/npx", "args": ["-y", "@modelcontextprotocol/server-memory"] } } } ``` 3. **Or pass PATH explicitly** Add an `env.PATH` that includes the Node bin folder, so npx can also find `node`. ``` "env": { "PATH": "/Users/you/.nvm/versions/node/v22.11.0/bin:/usr/local/bin:/usr/bin:/bin" } ``` 4. **Restart the client** Fully quit and reopen the app so it re-spawns the server. ### Related servers - Memory (Knowledge Graph): https://plugolis.com/servers/memory/ - Filesystem: https://plugolis.com/servers/filesystem/ - Sequential Thinking: https://plugolis.com/servers/sequential-thinking/ ### Sources - https://modelcontextprotocol.io/docs/develop/connect-local-servers - https://modelcontextprotocol.io/docs/tools/debugging --- ## MCP servers fail on Windows with npx (use cmd /c) URL: https://plugolis.com/fixes/windows-npx-mcp-cmd-c/ Clients: Claude Desktop, Cursor, VS Code ### The error ``` spawn npx ENOENT • 'npx' is not recognized • Connection closed (Windows only) ``` ### Why it happens On Windows, `npx` is a `npx.cmd` batch script, which cannot be spawned directly without a shell. Clients that spawn the command directly fail. ### How to fix it 1. **Wrap npx with cmd /c** Make `cmd` the command and pass `/c npx …` as args. ``` { "mcpServers": { "github": { "command": "cmd", "args": ["/c", "npx", "-y", "@modelcontextprotocol/server-filesystem", "C:\\Users\\you\\Desktop"] } } } ``` 2. **Escape backslashes** In JSON every Windows path backslash must be doubled: `C:\\Users\\you`. 3. **Add APPDATA if npm cannot find its cache** Some setups need `APPDATA` passed through. ``` "env": { "APPDATA": "C:\\Users\\you\\AppData\\Roaming\\" } ``` ### Related servers - Filesystem: https://plugolis.com/servers/filesystem/ - Desktop Commander: https://plugolis.com/servers/desktop-commander/ - Playwright (Microsoft): https://plugolis.com/servers/playwright/ ### Sources - https://modelcontextprotocol.io/docs/develop/connect-local-servers - https://nodejs.org/api/child_process.html#spawning-bat-and-cmd-files-on-windows --- ## MCP server can't see my API key (env vars not passed) URL: https://plugolis.com/fixes/mcp-env-vars-not-passed/ Clients: Claude Desktop, Cursor, Claude Code, VS Code ### The error ``` 401 Unauthorized • "API key is required" • "Missing environment variable" ``` ### Why it happens MCP clients start servers with a minimal environment. Variables exported in your shell profile are usually not inherited, so the key has to be put in the server's `env` block (or passed with the client's CLI flag). ### How to fix it 1. **Add an env block next to command/args** Keys go inside the server entry, not at the top level. ``` { "mcpServers": { "brave-search": { "command": "npx", "args": ["-y", "@brave/brave-search-mcp-server"], "env": { "BRAVE_API_KEY": "your-key" } } } } ``` 2. **Claude Code: use -e** Pass variables with `--env`/`-e` when adding the server. ``` claude mcp add brave -e BRAVE_API_KEY=your-key -- npx -y @brave/brave-search-mcp-server ``` 3. **VS Code: use inputs for secrets** VS Code's `mcp.json` supports `${input:…}` prompts so you don't hardcode keys. ``` { "inputs": [{ "type": "promptString", "id": "brave-key", "description": "Brave API key", "password": true }], "servers": { "brave": { "command": "npx", "args": ["-y", "@brave/brave-search-mcp-server"], "env": { "BRAVE_API_KEY": "${input:brave-key}" } } } } ``` 4. **Restart and avoid committing keys** Restart the client. Add project-level config files that contain keys to `.gitignore`. ### Related servers - Brave Search: https://plugolis.com/servers/brave-search/ - Firecrawl: https://plugolis.com/servers/firecrawl/ - GitHub: https://plugolis.com/servers/github/ ### Sources - https://docs.claude.com/en/docs/claude-code/mcp - https://code.visualstudio.com/docs/copilot/customization/mcp-servers - https://modelcontextprotocol.io/docs/develop/connect-local-servers --- ## MCP config JSON syntax errors (trailing commas, comments, quotes) URL: https://plugolis.com/fixes/mcp-json-config-syntax-error/ Clients: Claude Desktop, Cursor, Windsurf ### The error ``` Unexpected token } in JSON at position … • "Failed to parse MCP config" • servers silently missing ``` ### Why it happens MCP config files are strict JSON: no trailing commas, no comments, double quotes only, and backslashes must be escaped. One error disables every server in the file. ### How to fix it 1. **Validate the file** Run it through a JSON parser. ``` python3 -m json.tool ~/.cursor/mcp.json # or node -e "JSON.parse(require('fs').readFileSync(process.argv[1]))" ~/.cursor/mcp.json ``` 2. **Remove trailing commas and comments** The last item in an object or array must not end with a comma; delete any `//` comments. 3. **Merge into a single mcpServers object** When adding a second server, put it inside the same `mcpServers` object. Don't paste a second top-level block. ``` { "mcpServers": { "memory": { "command": "npx", "args": ["-y", "@modelcontextprotocol/server-memory"] }, "fetch": { "command": "uvx", "args": ["mcp-server-fetch"] } } } ``` ### Related servers - Memory (Knowledge Graph): https://plugolis.com/servers/memory/ - Fetch: https://plugolis.com/servers/fetch/ - Time: https://plugolis.com/servers/time/ ### Sources - https://modelcontextprotocol.io/docs/develop/connect-local-servers - https://cursor.com/docs/context/mcp --- ## Too many MCP tools: tool limits in Windsurf, Cursor and VS Code URL: https://plugolis.com/fixes/cursor-too-many-mcp-tools/ Clients: Windsurf, Cursor, VS Code ### The error ``` Tool limit warnings, or the agent ignoring tools from a server you enabled ``` ### Why it happens Agents work best with a limited set of tools, and some clients enforce a hard cap. Windsurf's docs say Cascade has a limit of 100 total tools at any given time. Cursor's and VS Code's current MCP docs don't publish a fixed number, but both let you switch tools off. Big servers like GitHub or AWS can expose dozens of tools each, so a few servers add up quickly. ### How to fix it 1. **Disable servers you are not using** Cursor: Customize → MCP, toggle the server off. Windsurf: the MCPs section of the Cascade panel's ... menu shows tool counts per server, with a toggle for each. 2. **Turn off individual tools** VS Code: click Configure Tools in the chat input and untick tools. Windsurf: list tool names in the server's `disabledTools` array. ``` { "mcpServers": { "github": { "command": "npx", "args": ["-y", "@modelcontextprotocol/server-github"], "disabledTools": ["create_repository"] } } } ``` 3. **Use server-side toolsets** Some servers let you load only a subset. GitHub's server supports `GITHUB_TOOLSETS`. ``` "env": { "GITHUB_PERSONAL_ACCESS_TOKEN": "…", "GITHUB_TOOLSETS": "repos,issues,pull_requests" } ``` ### Related servers - GitHub: https://plugolis.com/servers/github/ - AWS MCP Servers: https://plugolis.com/servers/aws/ - Playwright (Microsoft): https://plugolis.com/servers/playwright/ ### Sources - https://docs.windsurf.com/windsurf/cascade/mcp - https://cursor.com/docs/context/mcp - https://code.visualstudio.com/docs/copilot/customization/mcp-servers - https://github.com/github/github-mcp-server --- ## Fix "spawn uvx ENOENT" for Python MCP servers URL: https://plugolis.com/fixes/spawn-uvx-enoent/ Clients: Claude Desktop, Cursor ### The error ``` Error: spawn uvx ENOENT ``` ### Why it happens Python servers such as fetch, git, time, and many awslabs servers launch with `uvx`, which comes from `uv`. Either uv isn't installed, or it lives in `~/.local/bin`, which GUI apps don't have on their PATH. ### How to fix it 1. **Install uv** Use the official installer. ``` curl -LsSf https://astral.sh/uv/install.sh | sh # Windows (PowerShell): powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex" ``` 2. **Use the absolute path** Find it with `which uvx` and put it in the config. ``` { "mcpServers": { "fetch": { "command": "/Users/you/.local/bin/uvx", "args": ["mcp-server-fetch"] } } } ``` 3. **Restart the client** ### Related servers - Fetch: https://plugolis.com/servers/fetch/ - Git: https://plugolis.com/servers/git/ - Time: https://plugolis.com/servers/time/ - AWS MCP Servers: https://plugolis.com/servers/aws/ ### Sources - https://docs.astral.sh/uv/getting-started/installation/ - https://modelcontextprotocol.io/docs/develop/connect-local-servers --- ## "MCP error -32000: Connection closed": what it means and how to fix it URL: https://plugolis.com/fixes/mcp-error-32000-connection-closed/ Clients: Claude Desktop, Claude Code, Cursor ### The error ``` McpError: MCP error -32000: Connection closed ``` ### Why it happens The server process exited before it finished the handshake. Common reasons: a missing dependency, wrong Node version, missing API key, bad args, or Windows npx without `cmd /c`. The real error is in the server's stderr. ### How to fix it 1. **Run the exact command in a terminal** The crash message shows up immediately. ``` npx -y @modelcontextprotocol/server-filesystem /path/that/exists ``` 2. **Test with the MCP Inspector** The Inspector starts the server and shows its stderr and protocol messages. ``` npx @modelcontextprotocol/inspector npx -y @modelcontextprotocol/server-memory ``` 3. **Check common culprits** Windows → use cmd /c (/fixes/windows-npx-mcp-cmd-c/). Keys → env block (/fixes/mcp-env-vars-not-passed/). Node → node version (/fixes/mcp-server-wrong-node-version/). ### Related servers - Everything (test server): https://plugolis.com/servers/everything/ - Filesystem: https://plugolis.com/servers/filesystem/ - Memory (Knowledge Graph): https://plugolis.com/servers/memory/ ### Sources - https://modelcontextprotocol.io/docs/tools/debugging - https://modelcontextprotocol.io/docs/develop/connect-local-servers --- ## "MCP error -32001: Request timed out" URL: https://plugolis.com/fixes/mcp-error-32001-request-timed-out/ Clients: Claude Desktop, Claude Code, Cursor ### The error ``` McpError: MCP error -32001: Request timed out ``` ### Why it happens The client gave up waiting. On first run, `npx`/`uvx` may still be downloading the package. Slow tools (browser automation, big crawls) can also go over the default timeout. ### How to fix it 1. **Pre-install the package** Run the command once in a terminal so the download is cached. ``` npx -y @playwright/mcp@latest --help ``` 2. **Raise the timeout (Claude Code)** Claude Code reads `MCP_TIMEOUT` (startup) and `MAX_MCP_OUTPUT_TOKENS`. ``` MCP_TIMEOUT=30000 claude ``` 3. **Pin a version** Using `@latest` makes npx check the registry every launch. Pinning a version avoids that. ### Related servers - Playwright (Microsoft): https://plugolis.com/servers/playwright/ - Firecrawl: https://plugolis.com/servers/firecrawl/ - Chrome DevTools: https://plugolis.com/servers/chrome-devtools/ ### Sources - https://docs.claude.com/en/docs/claude-code/mcp - https://modelcontextprotocol.io/docs/tools/debugging --- ## "Unexpected token … is not valid JSON" from a custom MCP server URL: https://plugolis.com/fixes/mcp-stdout-not-valid-json/ Clients: Claude Desktop, Cursor, Claude Code ### The error ``` SyntaxError: Unexpected token 'S', "Server sta"... is not valid JSON ``` ### Why it happens With the stdio transport, stdout is reserved for JSON-RPC messages. Any `console.log` / `print()` to stdout corrupts the stream. ### How to fix it 1. **Log to stderr instead** Node: use `console.error`. Python: `print(..., file=sys.stderr)` or the `logging` module. ``` // Node console.error("Server started"); # Python import sys print("Server started", file=sys.stderr) ``` 2. **Silence noisy dependencies** Libraries that print banners or progress bars to stdout must be silenced or redirected. ### Related servers - Everything (test server): https://plugolis.com/servers/everything/ - Sequential Thinking: https://plugolis.com/servers/sequential-thinking/ ### Sources - https://modelcontextprotocol.io/specification/2025-06-18/basic/transports - https://modelcontextprotocol.io/docs/tools/debugging --- ## MCP server crashes because the client uses an old Node version URL: https://plugolis.com/fixes/mcp-server-wrong-node-version/ Clients: Claude Desktop, Cursor ### The error ``` SyntaxError: Unexpected token '?' • ReferenceError: fetch is not defined • ERR_REQUIRE_ESM ``` ### Why it happens With nvm installed, a GUI app may pick up an old system Node (e.g. v16) instead of your nvm default. Modern MCP servers need Node 18+ and often 20+. ### How to fix it 1. **Check which Node the client sees** Temporarily set command to `node` with args `["-v"]` and read the log, or compare `/usr/local/bin/node -v` with `node -v`. 2. **Point at a modern Node directly** Use the absolute npx path from your nvm version and put its bin folder first in PATH. ``` { "command": "/Users/you/.nvm/versions/node/v22.11.0/bin/npx", "args": ["-y", "@upstash/context7-mcp"], "env": { "PATH": "/Users/you/.nvm/versions/node/v22.11.0/bin:/usr/bin:/bin" } } ``` 3. **Or upgrade the system Node** Install a current LTS from nodejs.org so every app gets it. ### Related servers - Context7: https://plugolis.com/servers/context7/ - Playwright (Microsoft): https://plugolis.com/servers/playwright/ - Chrome DevTools: https://plugolis.com/servers/chrome-devtools/ ### Sources - https://github.com/nvm-sh/nvm - https://modelcontextprotocol.io/docs/develop/connect-local-servers --- ## Claude Code: MCP server added but not available ("No MCP servers configured") URL: https://plugolis.com/fixes/claude-code-mcp-server-not-found/ Clients: Claude Code ### The error ``` No MCP servers configured • server missing from /mcp in another folder ``` ### Why it happens `claude mcp add` defaults to local scope, which only applies to the current project directory. Open a different folder and the server is gone. ### How to fix it 1. **Pick the right scope** `-s user` for every project, `-s project` to share through `.mcp.json` in the repo. ``` claude mcp add -s user context7 -- npx -y @upstash/context7-mcp claude mcp list ``` 2. **Put -- before the server command** Everything after `--` is the server command; flags placed after it go to the server, not to Claude. ``` claude mcp add -s user -e GITHUB_PERSONAL_ACCESS_TOKEN=ghp_xxx github -- docker run -i --rm -e GITHUB_PERSONAL_ACCESS_TOKEN ghcr.io/github/github-mcp-server ``` 3. **Check status inside Claude** Run `/mcp` to see connection state and authenticate remote servers. ### Related servers - Context7: https://plugolis.com/servers/context7/ - GitHub: https://plugolis.com/servers/github/ - Serena: https://plugolis.com/servers/serena/ ### Sources - https://docs.claude.com/en/docs/claude-code/mcp --- ## VS Code ignores my MCP config ("servers" vs "mcpServers") URL: https://plugolis.com/fixes/vscode-mcp-servers-key/ Clients: VS Code ### The error ``` Server does not appear in the MCP: List Servers view; config copied from Cursor/Claude does nothing ``` ### Why it happens VS Code's `.vscode/mcp.json` uses a top-level `servers` key, not `mcpServers` like Cursor and Claude Desktop. ### How to fix it 1. **Rename the key** Use `servers` in `.vscode/mcp.json`. ``` { "servers": { "playwright": { "command": "npx", "args": ["-y", "@playwright/mcp@latest"] } } } ``` 2. **Start the server** Run MCP: List Servers from the Command Palette, select the server, and choose an action (start/restart). 3. **Enable its tools in chat** Click Configure Tools in the chat input and make sure the server's tools are switched on. ### Related servers - Playwright (Microsoft): https://plugolis.com/servers/playwright/ - GitHub: https://plugolis.com/servers/github/ - Chrome DevTools: https://plugolis.com/servers/chrome-devtools/ ### Sources - https://code.visualstudio.com/docs/copilot/customization/mcp-servers --- ## GitHub MCP server: "Bad credentials" / 401 errors URL: https://plugolis.com/fixes/github-mcp-bad-credentials/ Clients: Claude Desktop, Cursor, VS Code, Claude Code ### The error ``` 401 Bad credentials • "GITHUB_PERSONAL_ACCESS_TOKEN not set" ``` ### Why it happens The token is missing, expired, or lacks scopes. With Docker, the variable also has to be forwarded into the container (`-e GITHUB_PERSONAL_ACCESS_TOKEN`) and set in the env block. ### How to fix it 1. **Create a token with the right access** Fine-grained or classic PAT with repo access for the repos you need. 2. **Forward the variable into Docker** Both parts are required. ``` { "mcpServers": { "github": { "command": "docker", "args": ["run", "-i", "--rm", "-e", "GITHUB_PERSONAL_ACCESS_TOKEN", "ghcr.io/github/github-mcp-server"], "env": { "GITHUB_PERSONAL_ACCESS_TOKEN": "ghp_your_token" } } } } ``` 3. **Make sure Docker is running** If Docker Desktop is stopped, the server exits with "Connection closed". ### Related servers - GitHub: https://plugolis.com/servers/github/ ### Sources - https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens - https://github.com/github/github-mcp-server --- ## Windsurf: MCP server not loading in Cascade (mcp_config.json location) URL: https://plugolis.com/fixes/windsurf-mcp-config-not-loading/ Clients: Windsurf ### The error ``` Server missing from Cascade's MCP list or shown as errored after editing mcp_config.json ``` ### Why it happens Windsurf's current docs put `mcp_config.json` at `~/.config/devin/mcp_config.json` (macOS/Linux) or `%APPDATA%\devin\mcp_config.json` (Windows). Older guides point at `~/.codeium/windsurf/`. The file applies only to the legacy Cascade agent; the default Devin Local agent reads the Devin CLI config instead. The usual JSON, PATH, and Windows npx problems also apply. ### How to fix it 1. **Open the file from Windsurf** In the Cascade panel, click the ... (Actions) menu, then Open MCP config file in the MCPs section. Use a top-level `mcpServers` key. ``` { "mcpServers": { "context7": { "command": "npx", "args": ["-y", "@upstash/context7-mcp"] } } } ``` 2. **Check which agent you are using** If the tab runs the Devin Local agent, configure MCP in the Devin CLI config files, not mcp_config.json. 3. **Apply the PATH/Windows fixes** See spawn npx ENOENT (/fixes/spawn-npx-enoent/) and Windows cmd /c (/fixes/windows-npx-mcp-cmd-c/). ### Related servers - Context7: https://plugolis.com/servers/context7/ - 21st.dev Magic: https://plugolis.com/servers/magic/ - Firecrawl: https://plugolis.com/servers/firecrawl/ ### Sources - https://docs.windsurf.com/windsurf/cascade/mcp