LSP plugin lspServers config not being processed from marketplace.json

Open 💬 20 comments Opened Dec 23, 2025 by giovannirco

Bug Description

The lspServers configuration defined in marketplace.json plugin entries is not being extracted or processed when plugins are loaded. This results in LSP plugins (typescript-lsp, pyright-lsp, gopls-lsp) being installed but non-functional.

Steps to Reproduce

  1. Enable the typescript-lsp plugin:

``bash
claude plugins install typescript-lsp@claude-plugins-official
``

  1. Verify typescript-language-server is installed:

``bash
which typescript-language-server
# Returns: /opt/homebrew/bin/typescript-language-server
``

  1. Restart Claude Code
  2. Attempt to use LSP:

``
LSP documentSymbol on src/server.ts
``

Expected Behavior

LSP operations should work since:

  • The plugin is enabled in settings.json
  • The marketplace.json plugin definition includes proper lspServers config
  • The language server binary is installed

Actual Behavior

No LSP server available for file type: .ts

Debug Log Evidence

2025-12-23T12:09:16.380Z [DEBUG] [LSP MANAGER] initializeLspServerManager() called
2025-12-23T12:09:16.380Z [DEBUG] [LSP MANAGER] Created manager instance, state=pending
2025-12-23T12:09:16.387Z [DEBUG] LSP server manager initialized successfully
2025-12-23T12:09:16.387Z [DEBUG] LSP notification handlers registered successfully for all 0 server(s)
2025-12-23T12:09:16.433Z [DEBUG] Loading plugin typescript-lsp from source: "./plugins/typescript-lsp"
2025-12-23T12:09:16.434Z [DEBUG] Plugin typescript-lsp has no entry.skills defined
2025-12-23T12:09:45.479Z [DEBUG] No LSP server available for file type .ts for operation documentSymbol on file src/server.ts

Key observation: "0 server(s)" - the lspServers config is never loaded.

Root Cause Analysis

The marketplace.json correctly defines lspServers for the plugin:

{
  "name": "typescript-lsp",
  "description": "TypeScript/JavaScript language server for enhanced code intelligence",
  "version": "1.0.0",
  "source": "./plugins/typescript-lsp",
  "lspServers": {
    "typescript": {
      "command": "typescript-language-server",
      "args": ["--stdio"],
      "extensionToLanguage": {
        ".ts": "typescript",
        ".tsx": "typescriptreact",
        ".js": "javascript",
        ".jsx": "javascriptreact",
        ".mts": "typescript",
        ".cts": "typescript",
        ".mjs": "javascript",
        ".cjs": "javascript"
      }
    }
  }
}

However, when the plugin is installed:

  1. Only the plugin source folder contents (just README.md) are copied to cache
  2. The lspServers field from marketplace.json is never extracted or processed
  3. LSP manager initializes with 0 servers before plugins finish loading

Workarounds Attempted (All Failed)

  1. Adding .lsp.json to plugin cache folder - Not read
  2. Adding lspServers to ~/.claude/settings.json - Not a supported setting
  3. Reinstalling the plugin - Same result

Environment

  • Claude Code version: Latest (as of 2025-12-23)
  • OS: macOS Darwin 25.2.0
  • typescript-language-server version: 5.1.3
  • Node.js: 20+

Files Examined

~/.claude/settings.json (has enabledPlugins)
~/.claude/plugins/installed_plugins.json (plugin registered)
~/.claude/plugins/marketplaces/claude-plugins-official/.claude-plugin/marketplace.json (has lspServers)
~/.claude/plugins/cache/claude-plugins-official/typescript-lsp/1.0.0/ (only contains README.md)

Suggested Fix

The plugin loader should:

  1. Extract lspServers from marketplace.json plugin definitions
  2. Register these servers with the LSP manager after plugin loading completes
  3. Or: Store lspServers config in installed_plugins.json for persistence

View original on GitHub ↗

20 Comments

github-actions[bot] · 6 months ago

---

Found 3 possible duplicate issues:

  1. https://github.com/anthropics/claude-code/issues/13952
  2. https://github.com/anthropics/claude-code/issues/14803
  3. https://github.com/anthropics/claude-code/issues/14932

This issue will be automatically closed as a duplicate in 3 days.

  • If your issue is a duplicate, please close it and 👍 the existing issue instead
  • To prevent auto-closure, add a comment or 👎 this comment

🤖 Generated with Claude Code

abhishekc-timedotmoney · 6 months ago

Same problem for me as well, tried the plugin, with whatever mentioned in the doc :- https://code.claude.com/docs/en/plugins-reference#lsp-servers
but it's not working.

ChrisWiles · 6 months ago

Same issue with me, here is CC thinks

⏺ Here's what I found:

Summary

What typescript-lsp does:

Based on https://github.com/boostvolt/claude-code-lsps and https://code.claude.com/docs/en/plugins:

The typescript-lsp plugin provides:

  1. LSP Tool - Five operations: goToDefinition, findReferences, hover, documentSymbol, workspaceSymbol
  2. Automatic Diagnostics - Real-time TypeScript error/warning detection when reading files

Current Status

You have the plugin installed and enabled:

  • typescript-lsp@claude-plugins-official ✓
  • Underlying LSP server: typescript-language-server@5.1.3 is installed globally ✓

However, it's likely not fully active because:

  1. No LSP server process running - The typescript-language-server isn't currently running
jimmyn · 6 months ago

I'm facing the same issue

LSP(operation: "documentSymbol", file: "src/routes/Account/Account.tsx")
  ⎿  No LSP server available for file type: .tsx
connorblack · 6 months ago

I'm in an even weirder position -- claude cannot even register the plugin now:

╭───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
───╮
│  Discover   Installed   Marketplaces   Errors  (tab to cycle)                                                         
   │
│                                                                                                                       
   │
│ Installed Plugins (1/14)                                                                                              
   │
│                                                                                                                       
   │
│ claude-plugins-official                                                                                               
   │
│ ❯ ◉ ralph-wiggum user                                                                                                 
   │
│   ◉ typescript-lsp user, v1.0.0                                                                                       
   │
│   ◉ feature-dev user                                                                                                  
   │
│   ◯ agent-sdk-dev user                                                                                                
   │
│   ◯ code-review user                                                                                                  
   │
│  ↓ more below                                                                                                         
   │
╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
───╯
   Space: toggle · Enter: details · Delete: uninstall · Esc: back

you have a plugin installed that you cannot see. why? 

∴ Thinking…

  The user is showing me that they have plugins installed, including a "typescript-lsp" plugin. They're pointing out that I 
  have a plugin installed that I cannot see - meaning I don't have visibility into the plugin's functionality or how it 
  works from my perspective.

  The user is asking why I can't see/access my own LSP plugin. This is a good question - I should explain what I understand 
  about this situation.

  From what I can see:
  1. There's a typescript-lsp plugin installed (v1.0.0)
  2. It's enabled (◉ means enabled)
  3. I apparently don't have direct visibility into what this plugin does or how it works

  The reason I can't "see" it is likely because:
  1. Plugins in Claude Code work by providing tools, hooks, or modifying behavior - but they don't necessarily expose 
  themselves to me directly
  2. The LSP plugin likely works by providing diagnostic information, navigation capabilities, etc. that get injected into 
  my context or tool responses without me explicitly invoking it
  3. I don't have a tool or documentation that tells me about my own installed plugins

  Let me explain this to the user.

⏺ You're right - I can see from your plugin list that typescript-lsp is installed and enabled, but I have no direct visibility into:

  1. What tools it provides - It's not listed in my available tools
  2. What it does behind the scenes - It may inject information into file reads or provide diagnostics automatically
  3. How to invoke it - No documented commands or tool interfaces exposed to me

  Why this happens:

  Plugins can operate in different ways:
  - Tool-based: Expose explicit tools I can call (like the MCP tools I can see)
  - Hook-based: Modify behavior transparently (e.g., auto-inject diagnostics when I read files)
  - Context injection: Add information to my context without explicit tool calls

Some other debug logs:

I understand your frustration. You have the typescript-lsp@claude-plugins-official plugin enabled in your settings, but its tools aren't appearing in my available MCP tools.

  Looking at my full MCP tool list from the system, I only see:
  - mcp__serena__* (semantic code tools)
  - mcp__context7__* (documentation lookup)
  - mcp__sequential-thinking__* (reasoning)
  - mcp__ide__* (VS Code/Cursor integration)

  The typescript-lsp plugin tools are NOT loading.

  This could be:
  1. Plugin not properly connected - enabled but not running
  2. Plugin provides implicit capabilities rather than explicit tools
  3. A bug in how the plugin integrates

  Would you like me to check the Claude Code documentation to see how this plugin is supposed to work, or can you check if there are any error messages in your Cursor/Claude Code logs?

> "typescript-lsp@claude-plugins-official": [
      {
        "scope": "project",
        "installPath": "/Users/connorblack/.claude/plugins/cache/claude-plugins-official/typescript-lsp/1.0.0",
        "version": "1.0.0",
        "installedAt": "2026-01-02T18:33:07.390Z",
        "lastUpdated": "2026-01-02T18:33:45.773Z",
        "isLocal": true,
        "projectPath": "/Users/connorblack/github/sellie-chat"
      },
      {
        "scope": "project",
        "projectPath": "/Users/connorblack/github/sellie-chat",
        "installPath": "/Users/connorblack/.claude/plugins/cache/claude-plugins-official/typescript-lsp/1.0.0",
        "version": "1.0.0",
        "installedAt": "2026-01-02T18:33:27.763Z",
        "lastUpdated": "2026-01-02T18:33:27.763Z",
        "isLocal": true
      }
    ] 

∴ Thinking…

  The user is showing me that the plugin is indeed installed - it's in the cache at 
  /Users/connorblack/.claude/plugins/cache/claude-plugins-official/typescript-lsp/1.0.0. 

  So the plugin IS installed and configured, but its tools aren't showing up in my available MCP tools. Let me look at 
  what's in that plugin directory to understand what tools it should be providing.

⏺ The plugin is definitely installed. Let me look at what it actually provides:

⏺ Bash(ls -la /Users/connorblack/.claude/plugins/cache/claude-plugins-official/typescript-lsp/1.0.0/)
  ⎿  drwx------   - connorblack  2 Jan 13:33 .        
     drwxr-xr-x   - connorblack  2 Jan 13:33 ..
     .rw-r--r-- 692 connorblack  2 Jan 13:33 README.md

⏺ Search(pattern: "**/*.json", path:
        "/Users/connorblack/.claude/plugins/cache/claude-plugins-official/typescript-lsp/1.0.0")
  ⎿  Found 0 files

∴ Thinking…

  Interesting - the plugin directory only contains a README.md file! No JSON manifest, no code. Let me read that README to 
  understand what this plugin is supposed to do.

⏺ Interesting - the plugin only has a README. Let me read it:

⏺ Read(~/.claude/plugins/cache/claude-plugins-official/typescript-lsp/1.0.0/README.md)
  ⎿  Read 25 lines

∴ Thinking…

  Ahh, now I understand! The typescript-lsp plugin requires an external dependency to be installed - the 
  typescript-language-server npm package. It's not bundling the server itself, it's just a plugin that integrates with the 
  external language server.

  The user needs to install:
  npm install -g typescript-language-server typescript

  Let me check if they have it installed.

⏺ Found the issue! The plugin requires an external dependency:

⏺ Bash(which typescript-language-server && typescript-language-server --version || echo "NOT INSTALLED")
  ⎿  /Users/connorblack/.bun/bin/typescript-language-server
     5.1.3

∴ Thinking…

  OK so the language server IS installed (version 5.1.3). So the external dependency is there.

  So we have:
  1. Plugin enabled in .claude/settings.json ✓
  2. Plugin installed in cache ✓
  3. typescript-language-server globally installed ✓

  But the tools still aren't showing up in my MCPSearch results. This suggests either:
  1. The plugin isn't properly connecting to Claude Code
  2. The plugin provides capabilities through a different mechanism (not as MCP tools)
  3. There's something else going on

  Let me check if there's a manifest or configuration file for this plugin that might tell us how it exposes its 
  capabilities. Maybe I should look at the parent directories or check if there's additional configuration needed.

⏺ So typescript-language-server IS installed (v5.1.3). Yet the tools still aren't appearing.

  Let me check if there's more plugin config or a manifest:

⏺ Bash(ls -laR /Users/connorblack/.claude/plugins/cache/claude-plugins-official/typescript-lsp/)
  ⎿  drwxr-xr-x - connorblack  2 Jan 13:33 .                                               
     drwxr-xr-x - connorblack 27 Dec  2025 ..
     drwx------ - connorblack  2 Jan 13:33 1.0.0

     /Users/connorblack/.claude/plugins/cache/claude-plugins-official/typescript-lsp/1.0.0:
     drwx------   - connorblack  2 Jan 13:33 .
     drwxr-xr-x   - connorblack  2 Jan 13:33 ..
     .rw-r--r-- 692 connorblack  2 Jan 13:33 README.md

⏺ Bash(cat /Users/connorblack/.claude/plugins/installed.json 2>/dev/null | head -100 || echo "No installed.json")
  ⎿  (No content)

∴ Thinking…

  The plugin directory literally only has a README.md file. No actual plugin code, no manifest, nothing. This is very 
  suspicious.

  This plugin seems incomplete or broken. It's just a README with installation instructions for an external tool, but 
  there's no actual plugin code that would integrate typescript-language-server with Claude Code and expose tools.

  This could mean:
  1. The plugin didn't download correctly
  2. The plugin is still in development / incomplete
  3. The plugin works differently than expected (maybe it modifies Claude Code behavior rather than exposing tools)

  Let me check what other official plugins look like to compare.

⏺ The plugin literally only has a README - no actual code! Let me check what other plugins look like for comparison:
yungweng · 6 months ago

Workaround: Working LSP Plugin

For anyone blocked by this issue, I've published a working LSP plugin that bypasses the broken official marketplace extraction:

https://github.com/yungweng/claude-lsp-servers

Quick Install

# Prerequisites
export ENABLE_LSP_TOOL=1  # Add to shell profile
npm install -g typescript-language-server typescript pyright
go install golang.org/x/tools/gopls@latest

# Install plugin
claude plugin marketplace add yungweng/claude-lsp-servers
claude plugin install lsp-servers@claude-lsp-servers

Restart Claude Code and verify with /plugin — no errors.

Supports TypeScript, Python (Pyright), and Go (gopls). All LSP operations working: hover, goToDefinition, findReferences, documentSymbol, goToImplementation, incomingCalls, outgoingCalls.

Hope this helps until the official fix lands!

BobbyTable · 5 months ago

I had all the symptoms of the issue here, and not beeing able to use LSP for C# and Typescript while lange servers running OK and plugins installed and enabled. Symptoms are:

  • Empty plugin cahche folders with only README.md
  • Claude logs registering 0 tools, while seeing language servers running OK

Claude Code 2.1.15, plugin version 1.0.0
WSL Ubuntu 24 on windows

MY FIX:

  • Remove claude code completely, keep language server binaries/installation
  • Reinstall Claude Code, add plugin repo (/plugin marketplace add anthropics/claude-plugins-official)
  • Reinstall the LSP plugins from claude CLI interface (/plugins) - DONT INSTALL TO PROJECT SCOPE, go for the top choice (user?)
  • Ask claude for LSP tools, if present, the tools will be listed
skrabe · 5 months ago

@connorblack Was in the same boat as you. Turns out if you install it in a project scope once somewhere, anywhere else you won't be able to see it, access it, open it. Going to that repo and uninstalling, then installing for user scope fixed it.

kvudata · 5 months ago

I have it installed in the user scope, and what seemed to get it working finally was setting the ENABLE_LSP_TOOL=1 environment variable

michalliu · 4 months ago
I have it installed in the user scope, and what seemed to get it working finally was setting the ENABLE_LSP_TOOL=1 environment variable

working for me. prompt: "@src/source.ts can you show me function table with LSP"

flound1129 · 4 months ago

Claude has burned so many tokens trying to fix this issue for me, it's honestly infuriating how bad Claude is at managing its own files/configs, even after reading the docs multiple times.

jarrodcolburn · 4 months ago

@claude are you serious? this is embarrassing for you.

jmroon · 3 months ago

This is quite frustrating. This is a simple fix, and is breaking an essential feature of claude code.

patrikhuber · 3 months ago

I also installed pyright-lsp from official plugins market a while ago and realised it's not actually working. Windows 11, Windows Terminal / PowerShell 7, latest Claude code version. The plugin shows green and enabled but on a /reload-plugins it says "0 plugin LSP servers". pyright-lsp is installed and available on the shell I'm launching Claude code from (installed via pip install pyright).

I asked Claude to diagnose the issue and it said:

● Interesting — the plugin's plugin.json only has metadata (name, description, version, author) but no LSP server configuration. There's no lspServers field
   defining how to launch Pyright.

  Let me check what the marketplace version looks like vs the cached/installed version:

  Searched for 2 patterns, read 1 file (ctrl+o to expand)

● There's no plugin.json or any JSON in the marketplace source either. The installed cache has a plugin.json but it's missing the lspServers configuration
  that would tell Claude Code how to start Pyright.

  This looks like the plugin is essentially a stub — it has metadata and a README but no actual LSP wiring. That's why it reports "installed" and "latest
  version" but shows "0 plugin LSP servers" on reload. The plugin definition doesn't include the configuration needed to launch pyright-langserver --stdio
  (or equivalent).

  This could be:
  1. The plugin isn't fully implemented yet in the official repo
  2. The LSP server config was supposed to be auto-generated but isn't on Windows
  3. A newer version with the actual config hasn't been published

  Unfortunately there's nothing we can configure on our end to fix it — the plugin itself needs to ship with the LSP server definition. You might want to
  file an issue on the https://github.com/anthropics/claude-plugins-official or check if there's a newer version available.

It would be nice if Anthropic had some quality control over their official plugins marketplace to make sure things actually work.

Edit: This https://github.com/anthropics/claude-plugins-official/pull/378 fixed it for me, LSP plugins now working.

rwalle · 3 months ago

Anyone able to get Claude to apply initializationOptions when launching LSP server?

Setting ENABLE_LSP_TOOL=1 allows Claude to use LSP, but I have some trouble getting it to recognize my custom settings. The docs say I need to have a. .lsp.json file in plugin root or inline in plugin.json. I put such a file in both project root and /home/<username>/.claude/plugins/marketplaces/claude-plugins-official/plugins/typescript-lsp (for typescript LSP) which did not make any difference. And I don't know which plugin.json it is referring to.

(possibly related: https://github.com/anthropics/claude-code/issues/33552)

Update: For TypeScript LSP: If the TypeScript LSP is installed from the marketplace, the settings are defined in ~/.claude/plugins/marketplaces/claude-plugins-official/.claude-plugin/marketplace.json and you'll have to patch that file to customize initializationOptions. Putting a .lsp.json file under project folder or typescript-lsp folder won't do anything. Once you do that, Claude Code should respect initializationOptions in a new session.

tarjeir · 2 months ago

Still reproducing on Claude Code 2.1.118 with pyright-lsp@claude-plugins-official 1.0.0 (installed 2026-02-26, gitCommitSha 55b58ec).

The discrepancy is exactly as described in the bug — the marketplace declares lspServers, but the installed plugin manifest doesn't:

~/.claude/plugins/marketplaces/claude-plugins-official/.claude-plugin/marketplace.json — has the block:

{
  "name": "pyright-lsp",
  "lspServers": {
    "pyright": {
      "command": "pyright-langserver",
      "args": ["--stdio"],
      "extensionToLanguage": { ".py": "python", ".pyi": "python" }
    }
  }
}

~/.claude/plugins/cache/claude-plugins-official/pyright-lsp/1.0.0/.claude-plugin/plugin.json — lacks it:

{
  "name": "pyright-lsp",
  "description": "...",
  "version": "1.0.0",
  "author": { ... }
}

claude plugin update pyright-lsp@claude-plugins-official says "already at the latest version (1.0.0)", so a clean reinstall doesn't help — the published 1.0.0 itself ships without the lspServers field.

Workaround (until this lands): manually copy the lspServers block from the marketplace.json into the installed plugin.json. After doing so + restarting Claude Code with ENABLE_LSP_TOOL=1, the LSP tool registers and documentSymbol / findReferences / hover / goToDefinition all work against pyright-langserver as expected. The patch survives until the next claude plugin update overwrites it.

Same defect applies to typescript-lsp@claude-plugins-official 1.0.0.

skrabe · 2 months ago

If you use tweakcc, it manages to fix all LSP shenanigans, at least for me.
Original tweakcc repo isn't maintained much but there is a fork on my page where I try to maintain it as much as possible, in case someone is editing prompts and whatnot :)

phpmac · 1 month ago

I can confirm that using .lsp.json at the plugin root works correctly as a workaround, even though marketplace.json lspServers is not processed.

My setup:

  1. Created a plugin with only .lsp.json (no .claude-plugin/plugin.json needed)
  2. Registered the plugin in marketplace.json with source: "./plugins/solidity-lsp"
  3. The .lsp.json file:
{
  "solidity": {
    "command": "nomicfoundation-solidity-language-server",
    "args": ["--stdio"],
    "extensionToLanguage": {
      ".sol": "solidity"
    }
  }
}
  1. After /reload-plugins, Claude Code shows "14 plugin LSP servers" and documentSymbol works correctly on .sol files.

Environment: macOS, Claude Code latest, local marketplace (/plugin marketplace add ~/path/to/skills)

This issue might be safe to close since .lsp.json at plugin root is the documented approach per https://code.claude.com/docs/en/plugins#add-lsp-servers-to-your-plugin

jhoblitt · 6 days ago

This seems to be fixed.