[BUG] No way to register custom LSP servers — only hardcoded marketplace languages supported

Resolved 💬 3 comments Opened Mar 13, 2026 by mattiasw2 Closed Mar 16, 2026

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_

View original on GitHub ↗

This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗