[BUG] LSP plugin recommendation offers the official plugin for files an enabled plugin's server already handles

Status Open
Reported on v2.1.296
Maintainer reply None cached
Activity 0 comments · opened Oct 10, 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?

The LSP plugin recommendation dialog offers the official plugin for a file extension that an enabled plugin's language server already handles, when that plugin comes from another marketplace. Accepting it starts a second language server for the same files.

I enable a typescript-lsp plugin from a local directory marketplace in every profile. Its server is declared in the plugin's own .lsp.json and runs typescript-language-server through Bun, so typescript-language-server is on PATH. Profiles where the dialog is still on keep being offered typescript-lsp@claude-plugins-official:

  • two profiles reached "lspRecommendationIgnoredCount": 3 and 1 in .claude.json;
  • in a third, typescript-lsp@claude-plugins-official was installed at user scope at 09:32:51 UTC, five minutes after the local typescript-lsp (09:27:50), and both were enabled from then on.

Reading the 2.1.296 code, the recommendation only collects marketplace entries that declare lspServers inline, as the official marketplace does. It then skips a candidate only when that same plugin id is installed. A plugin whose servers come from its own .lsp.json is never seen as handling the extension.

What Should Happen?

No recommendation for an extension that an enabled plugin's language server already handles, whichever marketplace the plugin comes from and wherever it declares lspServers.

Error Messages/Logs

No error; the dialog appears after the first .ts edit of a session.

Steps to Reproduce

  1. Put typescript-language-server on PATH (npm install -g typescript-language-server typescript).
  2. Add a local directory marketplace with a plugin whose .lsp.json starts typescript-language-server --stdio for .ts, and enable it. Do not declare lspServers in the marketplace entry.
  3. Leave typescript-lsp@claude-plugins-official uninstalled and the recommendation on.
  4. In an interactive session, ask Claude to edit a .ts file. The enabled plugin reports diagnostics, and the LSP plugin recommendation dialog offers typescript-lsp from the official marketplace.

Claude Model

Opus

Is this a regression?

I don't know

Last Working Version

_No response_

Claude Code Version

2.1.296 (Claude Code)

Platform

Anthropic API

Operating System

Windows

Terminal/Shell

Other

Additional Information

#21184 asked for the same thing with a Python plugin from another marketplace and was closed as stale with no reply; it still happens. lspRecommendationDisabled: true in .claude.json stops it, and Claude Code reads it from no other file. Setting the official plugin to false in enabledPlugins does not: a candidate counts as installed only when it also has an install record. Windows 11 Pro 26200.

View original on GitHub ↗