Three Windows-only failures account for most of it. Here they are with the fix next to each.
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.
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.
%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.
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.
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.
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.
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.
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.
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.
All MCP servers and prices · All guides · Buy the bundle $39