[BUG] No way to register custom LSP servers — only hardcoded marketplace languages supported
Preflight Checklist
- [x] I have searched existing issues and this hasn't been reported yet
- [x] This is a single bug report (please file separate reports for different bugs)
- [x] I am using the latest version of Claude Code
What's Wrong?
Problem
Claude Code's LSP integration (via ENABLE_LSP_TOOL=1) only supports languages with configs hardcoded in the binary. There's no mechanism to register a custom language server for unsupported languages like F#.
What I tried
Created a local plugin at ~/.claude/plugins/ionide-fsharp/ with a .lsp.json:
{
"fsharp": {
"command": "fsautocomplete",
"args": ["--stdio"],
"env": { "DOTNET_ROOT": "/usr/lib/dotnet" },
"extensionToLanguage": { ".fs": "fsharp", ".fsi": "fsharp", ".fsx": "fsharp" }
}
}
Added a .claude-plugin/plugin.json alongside it.
Set ENABLE_LSP_TOOL=1 in the environment.
The language server works fine standalone: fsautocomplete --version → 0.83.0
Result: Plugin is ignored. Not registered in installed_plugins.json. No LSP diagnostics on .fs files.
Observations
Marketplace LSP plugins (pyright-lsp, csharp-lsp, etc.) contain only a README + LICENSE — no .lsp.json. The actual LSP configs are hardcoded in the Claude Code binary.
installed_plugins.json only tracks marketplace-installed plugins. Local plugin directories under ~/.claude/plugins/ are not discovered.
There's no settings.json key or other mechanism to define custom LSP server configs.
Feature request
Support one of:
Discover local plugins — scan ~/.claude/plugins/*/ for .lsp.json files, same as marketplace plugins
User-defined LSP configs — allow ~/.claude/settings.json to define custom language servers:
{
"lsp": {
"fsharp": {
"command": "fsautocomplete",
"args": ["--stdio"],
"extensionToLanguage": { ".fs": "fsharp", ".fsi": "fsharp" }
}
}
}
Environment
Claude Code: 2.1.74 (Rust binary, not Node)
OS: Ubuntu 24.04, Linux 6.17.0
LSP server: fsautocomplete 0.83.0 (.NET 10)
What Should Happen?
Claude Code discovers the local plugin and starts fsautocomplete via stdio
Reading/editing .fs files shows F# compiler diagnostics (type errors, warnings, unused opens)
The LSP tool (diagnostics, go-to-definition, find-references) works for F#, same as it does for Python/TypeScript/etc.
Error Messages/Logs
None — that's part of the problem. The local plugin is silently ignored:
No startup message about discovering or failing to load the plugin
No error in any log about the .lsp.json file
installed_plugins.json doesn't include the local plugin
The LSP tool simply doesn't appear for .fs files
Running /plugin in Claude Code doesn't show the local plugin
Steps to Reproduce
Install an LSP server not in the built-in list (e.g. dotnet tool install -g fsautocomplete)
Create ~/.claude/plugins/ionide-fsharp/.claude-plugin/plugin.json:
{ "name": "ionide-fsharp", "version": "1.0.0", "description": "F# LSP via fsautocomplete" }
Create ~/.claude/plugins/ionide-fsharp/.lsp.json:
{
"fsharp": {
"command": "fsautocomplete",
"args": ["--stdio"],
"extensionToLanguage": { ".fs": "fsharp", ".fsi": "fsharp", ".fsx": "fsharp" }
}
}
Set ENABLE_LSP_TOOL=1 in environment
Start Claude Code and read a .fs file
Claude Model
Opus
Is this a regression?
No, this never worked
Last Working Version
_No response_
Claude Code Version
2.1.74
Platform
Anthropic API
Operating System
Ubuntu/Debian Linux
Terminal/Shell
VS Code integrated terminal
Additional Information
_No response_
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗