On Windows (without WSL), Claude Code's built-in LSP plugins fail to start because they invoke commands like intelephense or typescript-language-server directly -- but on Windows, globally installed npm packages require the .cmd extension (e.g., intelephense.cmd).
Claude Code stores plugin definitions in:
%USERPROFILE%\.claude\plugins\marketplaces\claude-plugins-official\.claude-plugin\marketplace.json
You could manually fix the command fields, but Claude Code re-downloads and overwrites this file on every launch, so the fix doesn't stick.
A PHP script (claude-lsp-fix.php) patches marketplace.json right before Claude Code starts. It appends .cmd to every command value that doesn't already have it.
A batch launcher (claude.bat) runs the fix and then starts Claude Code. Place both files in the same directory and use claude.bat instead of launching claude.exe directly.
- This is a hack -- Claude Code re-syncs plugins frequently, so the patch must run every time before launch.
- Adjust the
$pathvariable inclaude-lsp-fix.phpif your Windows username differs. - Tested with globally installed
intelephenseandtypescript-language-servervia npm. - If Anthropic adds native
.cmdresolution for Windows, this workaround becomes unnecessary.