Home · Guides

MCP servers on Windows

Three Windows-only failures account for most of it. Here they are with the fix next to each.

1. spawn npx ENOENT

On Windows, npx is not an executable. It is npx.cmd, a batch shim, and Node's process spawner will not run a batch file unless it goes through the shell. The client tries to execute a file called exactly npx, finds none, and reports ENOENT.

{
  "mcpServers": {
    "zip": {
      "command": "cmd",
      "args": ["/c", "npx", "-y", "@scope/some-mcp-server"]
    }
  }
}

cmd /c is the wrapper. The same shape works for npm, yarn and pnpm, all of which are .cmd shims on Windows.

2. Backslashes in JSON

A Windows path pasted into JSON has to have every backslash doubled, because a single backslash starts an escape sequence. C:\Users\you in JSON is written C:\\Users\\you. Forward slashes also work and are less error-prone: C:/Users/you/mcp-servers/servers/zip/dist/index.js is valid on Windows and needs no escaping at all.

3. The config file is not where you think

%APPDATA%\Claude\claude_desktop_config.json. Paste that into the Explorer address bar rather than expanding it by hand. Logs sit next door in %APPDATA%\Claude\logs\, one file per server, and that is where a startup crash prints its reason.

The path that avoids all three

A .mcpb bundle is a zip of the server plus a manifest, and Claude Desktop opens one with an install dialog and runs it on its own bundled Node. There is no cmd wrapper, no PATH question and no JSON to escape. Download from the latest release; v0.20.0 carries 31 bundles, one per server, which is what gh api repos/theluckystrike/mcp-servers/releases/latest returned on 2026-09-07.

Building from source on Windows works the same way it does elsewhere:

git clone https://github.com/theluckystrike/mcp-servers.git
cd mcp-servers
npm install
npm run build -w packages/mcp-license -w servers/invoice

Then point command at your node executable and args at servers/invoice/dist/index.js, both absolute, both with forward slashes.

File paths inside a conversation

These servers read and write real files, so the paths you say out loud matter too. A drive letter path is fine. What does not work is a bare http:// argument where a file is expected: it resolves as a relative filesystem path rather than being downloaded. That behaviour was found and recorded during a scored run and is written up in docs/USER_VALUE_R27.md as defect D-R83. Download the file first, then hand over the local path.

Questions

Is WSL an option?

It works, with one catch: a server running inside WSL sees the Linux filesystem, so /mnt/c/Users/you/... is how it reaches your Windows files, and any path you say in the conversation has to be in that form. If most of your files live on the Windows side, running the server natively is less friction.

Why does the same config work on my Mac and not on Windows?

Almost always the cmd shim. macOS npx is a real executable that the spawner can exec directly; Windows npx is npx.cmd and needs cmd /c. Backslash escaping is the second most common cause, and it produces a JSON parse error that takes out every server in the file at once, not just the one you edited.

Do these servers work on Windows at all?

Yes. They are TypeScript compiled to plain JavaScript with no native modules, so the same dist/index.js runs on all three platforms. Storage goes to the platform data directory rather than a hardcoded Unix path. The full suite of 1,518 tests, of which 1,507 pass, 0 fail and 11 are skipped, is recorded in data/tests.json at release v0.20.0.

What about Claude Desktop on Linux?

There is no published Linux path for claude_desktop_config.json because the documentation lists macOS and Windows only. On Linux, use Claude Code, Cursor, VS Code or Cline, all of which are documented cross-platform, or connect to a hosted URL.

Related

All MCP servers and prices · All guides · Buy the bundle $39