TypeScript LSP plugin fails silently on Windows — uv_spawn cannot find npm-installed executables
Summary
The typescript-lsp plugin fails silently on Windows when typescript-language-server is installed via npm.
Environment
- Platform: Windows 10
- Claude Code: latest
- Plugin:
typescript-lsp@claude-plugins-official(enabled in settings)
Steps to Reproduce
- Enable
typescript-lsp@claude-plugins-officialin Claude Code settings - Install the language server:
npm install -g typescript-language-server typescript - Attempt any LSP operation on a
.tsfile
Error
Error performing hover: ENOENT: no such file or directory, uv_spawn 'typescript-language-server'
Root Cause
uv_spawn (libuv, used by Node.js) on Windows only resolves executables with .exe extensions when searching PATH. npm install -g on Windows creates:
typescript-language-server(bash shell script)typescript-language-server.cmd(Windows CMD script)typescript-language-server.ps1(PowerShell script)
...but no .exe. So uv_spawn fails with ENOENT even though the tool is correctly installed and on PATH.
Workaround
Install via Scoop instead, which creates proper .exe shim binaries:
scoop install typescript-language-server
Scoop's shim system wraps the CMD script in a real PE32 executable, which uv_spawn can find.
Expected Behaviour
The plugin should either:
- Document that npm-installed tools don't work on Windows and recommend Scoop, or
- Spawn language servers via
cmd.exe /c(i.e.shell: true) so.cmdfiles are resolved correctly, or - Detect the
.cmdvariant and use it explicitly on Windows
Notes
This was diagnosed using Claude Code's own LSP tool — so this bug report was generated by Claude Code investigating why its own LSP plugin wasn't working. If Anthropic objects to AI-generated GitHub issues, that would be, as the user who filed this put it, "deliciously ironic."
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗